This commit is contained in:
BianLzhaoMin 2025-02-26 17:57:00 +08:00
commit 662388cffa
26 changed files with 234 additions and 41 deletions

View File

@ -23,6 +23,8 @@ public class OutSourceBean {
*/
private String evaluateTitle;
private String auditState;
/**
* 评价年月
*/
@ -79,4 +81,6 @@ public class OutSourceBean {
private String createTime;
private String searchDate;
private String isAuditTask;
private String checkOne;
}

View File

@ -218,6 +218,11 @@ public class OutsourcerEvaluateController extends BaseController<EvaluateSubBean
//过程中 暂不做处理
}
if("1".equals(o.getType())){
outsourcerEvaluateDao.updateEvalStatus("3",o.getEvaluateId());
}else {
outsourcerEvaluateDao.updateEvalStatus("4",o.getEvaluateId());
}
return ar;
@ -295,7 +300,6 @@ public class OutsourcerEvaluateController extends BaseController<EvaluateSubBean
String evaluateType = o.getEvaluateType();
System.err.println("startId:"+startId+" ,evaluateType="+evaluateType);
if(startId == 0 && "1".equals(evaluateType)){
int examineNum = outsourcerEvaluateDao.getExamineNumByEvaluateId(o.getEvaluateId(),"1");
if(examineNum == 0){
//新增二级审核
@ -320,6 +324,11 @@ public class OutsourcerEvaluateController extends BaseController<EvaluateSubBean
//过程中
}
if("1".equals(o.getType())){
outsourcerEvaluateDao.updateEvalStatus("2",o.getEvaluateId());
}else {
outsourcerEvaluateDao.updateEvalStatus("4",o.getEvaluateId());
}
} catch (Exception e) {
ar.setFailMsg("审核失败");
@ -482,7 +491,11 @@ public class OutsourcerEvaluateController extends BaseController<EvaluateSubBean
//过程中 暂不做处理
}
if("1".equals(o.getType())){
outsourcerEvaluateDao.updateEvalStatus("2",o.getEvaluateId());
}else {
outsourcerEvaluateDao.updateEvalStatus("4",o.getEvaluateId());
}
return ar;
}

View File

@ -72,7 +72,7 @@ public interface InitiateEvaluateDao {
int insertInitiateEvaluateLink(@Param("arr") JSONArray jsonArray,@Param("id") String id);
int checkIsExistEvaluate(@Param("orgId") String orgId,@Param("evaluateDate") String evaluateDate);
int checkIsExistEvaluate(InitiateEvaluateBean o);
/**
* 获取外包商发起评价详情
* @param bean

View File

@ -141,4 +141,10 @@ public interface OutsourcerEvaluateDao {
int addMonthRank(@Param("bean") EvaluateDataBean bean,@Param("list") List<EvaluateDataBean> list);
int isCheckTwoIsAudit(EvaluateDataBean o);
/**
* 重新
* @param o
*/
void updateEvalStatus(@Param("status") String status,@Param("id")String id);
}

View File

@ -9,6 +9,7 @@ import com.bonus.gs.sub.evaluate.evaluate.dao.InitiateEvaluateDao;
import com.bonus.gs.sub.evaluate.manager.model.SysUser;
import com.bonus.gs.sub.evaluate.manager.utils.AjaxRes;
import com.bonus.gs.sub.evaluate.manager.utils.GlobalConst;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -30,6 +31,7 @@ import java.util.stream.Stream;
* @description:
*/
@Service("initiateEvaluateService")
@Slf4j
public class InitiateEvaluateServiceImpl implements InitiateEvaluateService {
@Resource
private InitiateEvaluateDao dao;
@ -59,13 +61,13 @@ public class InitiateEvaluateServiceImpl implements InitiateEvaluateService {
try {
String subInfo = o.getSubInfo();
JSONArray jsonArray = JSONArray.parseArray(subInfo);
//判断是否已经发起过评价
dao.deleteInitiateLink(o.getId());
int count = dao.checkIsExistEvaluate(o.getOrgId(), o.getEvaluateDate());
int count = dao.checkIsExistEvaluate(o);
if (count > 0) {
ar.setFailMsg("当前事业部已经发起过评价,请勿重复发起!!!");
ar.setFailMsg("当前事业部在"+o.getEvaluateDate()+"已经发起过评价,请勿重复发起!!!");
return ar;
}
//判断是否已经发起过评价
dao.deleteInitiateLink(o.getId());
String json = dao.getTemplationJson(o.getTemplateId());
JSONArray templationArr = JSONArray.parseArray(json);
//循环templationArr 获取responsibleDepartment对其进行整合
@ -150,6 +152,7 @@ public class InitiateEvaluateServiceImpl implements InitiateEvaluateService {
uniqueDeptIdList.get(i), ("0".equals(uniqueDeptIdList.get(i)) || "-1".equals(uniqueDeptIdList.get(i))) ? "1" : "0"));
ar.setRes(GlobalConst.SUCCEED);
} catch (Exception e) {
log.error(e.toString(),e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
ar.setFailMsg(GlobalConst.DATA_FAIL);
return ar;

View File

@ -514,6 +514,7 @@ public class OutsourcerEvaluateServiceImpl implements OutsourcerEvaluateService
}
}
outsourcerEvaluateDao.deleteEvaluateData(o);
outsourcerEvaluateDao.updateEvalStatus("2",o.getEvaluateId());
outsourcerEvaluateDao.saveEvaluateData(detailsList);
o.setIsApprove("0");
o.setEvaluateType("3");

View File

@ -0,0 +1,26 @@
package com.bonus.gs.sub.evaluate.outsourceEnterprise.beans;
import lombok.Data;
/**
* @author 黑子
*/
@Data
public class ImportUserDataVo {
private String name;
private String code;
private String createDay;
private String userName;
private String idCard;
private String userPhone;
private int row;
}

View File

@ -6,6 +6,7 @@ import com.bonus.gs.sub.evaluate.manager.utils.AesCbcUtils;
import com.bonus.gs.sub.evaluate.manager.utils.AjaxRes;
import com.bonus.gs.sub.evaluate.manager.utils.GlobalConst;
import com.bonus.gs.sub.evaluate.manager.utils.POIOutputHelperNumBer;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ImportUserDataVo;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ViolationBean;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.dao.ViolationDao;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.service.ViolationService;
@ -193,6 +194,7 @@ public class ViolationController extends BaseController<ViolationBean> {
AjaxRes ars = getAjaxRes();
Integer result = 0;
int errorNum = 0;
Map<String,ImportUserDataVo> map=new HashMap<String,ImportUserDataVo>();
try {
String fileName = file.getOriginalFilename();
System.out.println("OriginalFilename" + fileName);
@ -227,15 +229,14 @@ public class ViolationController extends BaseController<ViolationBean> {
Row row = hssfSheet.getRow(rownum);
if (sheetRow != null && !isRowEmpty(sheetRow)) {
// 先去判断
ars = compareSaveData(sheetRow, rownum + 1);
ars = compareSaveData(sheetRow, rownum + 1,map);
if (ars.getRes() == 2) {
ar.setFailMsg(ars.getResMsg());
result = 2;
break;
return ar;
}
}
}
if (result != 2) {
for (int rownums = 2; rownums <= rowNum; rownums++) {
Row sheetRows = hssfSheet.getRow(rownums);
@ -244,7 +245,6 @@ public class ViolationController extends BaseController<ViolationBean> {
if (ar.getRes() == 0) {
return ar;
}
}
}
if (ar.getRes() == 1) {
@ -265,11 +265,10 @@ public class ViolationController extends BaseController<ViolationBean> {
return ar;
}
private AjaxRes compareSaveData(Row sheetRow, int rownum) throws Exception {
private AjaxRes compareSaveData(Row sheetRow, int rownum,Map<String,ImportUserDataVo> map) throws Exception {
AjaxRes ar = getAjaxRes();
try {
String enterpriseName = getValue(sheetRow.getCell(0)).trim();
// String socialCreditCode = getValue(sheetRow.getCell(1)).trim().replace(".0", "");
String socialCreditCode = translateToPlainStr(getValue(sheetRow.getCell(1)).trim()).replace(".0", "");
String setTime = getValue(sheetRow.getCell(2)).trim();
String corporateName = getValue(sheetRow.getCell(3)).trim();
@ -278,7 +277,68 @@ public class ViolationController extends BaseController<ViolationBean> {
if (StringUtils.isBlank(enterpriseName) || StringUtils.isBlank(socialCreditCode) || StringUtils.isBlank(setTime) || StringUtils.isBlank(corporateName) || StringUtils.isBlank(idCard) || StringUtils.isBlank(phone)) {
ar.setFailMsg("" + (rownum-1) + "行数据有误字段不能为空,导入失败");
ar.setRes(2);
return ar;
}
ImportUserDataVo importUserDataVo=new ImportUserDataVo();
importUserDataVo.setName(enterpriseName);
Integer num=service.getImportDataCheck(importUserDataVo);
if (num!=null && num>0) {
ar.setFailMsg("" + (rownum-1) + "行企业名称已存在");
ar.setRes(2);
return ar;
}
importUserDataVo=new ImportUserDataVo();
importUserDataVo.setUserPhone(phone);
num=service.getImportDataCheck(importUserDataVo);
if (num!=null && num>0) {
ar.setFailMsg("" + (rownum-1) + "手机号已存在");
ar.setRes(2);
return ar;
}
importUserDataVo=new ImportUserDataVo();
importUserDataVo.setIdCard(idCard);
num=service.getImportDataCheck(importUserDataVo);
if (num!=null && num>0) {
ar.setFailMsg("" + (rownum-1) + "身份证号码已存在");
ar.setRes(2);
return ar;
}
importUserDataVo=new ImportUserDataVo();
importUserDataVo.setCode(socialCreditCode);
num=service.getImportDataCheck(importUserDataVo);
if (num!=null && num>0) {
ar.setFailMsg("" + (rownum-1) + "统一社会信用代码已存在");
ar.setRes(2);
return ar;
}
importUserDataVo.setRow(rownum-1);
ImportUserDataVo his=map.get(socialCreditCode);
if(his!=null){
ar.setFailMsg("" + (rownum-1) + "行与"+his.getRow()+"行统一社会信用代码重复!");
ar.setRes(2);
return ar;
}else{
map.put(socialCreditCode,importUserDataVo);
}
his=map.get(idCard);
if(his!=null){
ar.setFailMsg("" + (rownum-1) + "行与"+his.getRow()+"行身份证号码重复!");
ar.setRes(2);
return ar;
}else{
map.put(idCard,importUserDataVo);
}
his=map.get(phone);
if(his!=null){
ar.setFailMsg("" + (rownum-1) + "行与"+his.getRow()+"行手机号重复!");
ar.setRes(2);
}else{
map.put(idCard,importUserDataVo);
}
} catch (Exception e) {
logger.error(e.toString(), e);
ar.setFailMsg("" + rownum + "行数据有误,导入失败");

View File

@ -1,5 +1,6 @@
package com.bonus.gs.sub.evaluate.outsourceEnterprise.dao;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ImportUserDataVo;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ViolationBean;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -42,4 +43,6 @@ public interface ViolationDao {
List<ViolationBean> getOutsourceEnterpriseByPage(ViolationBean o);
int formValidation(@Param("enterpriseName") String enterpriseName, @Param("id") String id);
Integer getImportDataCheck(ImportUserDataVo dataVo);
}

View File

@ -2,6 +2,7 @@ package com.bonus.gs.sub.evaluate.outsourceEnterprise.service;
import com.bonus.gs.sub.evaluate.manager.utils.AjaxRes;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ImportUserDataVo;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ViolationBean;
import org.springframework.data.domain.Page;
@ -27,4 +28,13 @@ public interface ViolationService {
List<ViolationBean> exportOutsourceEnterprise(ViolationBean bean);
List<ViolationBean> getOutsourceEnterpriseByPage(ViolationBean o);
/**
* 导入数据校验
* @param socialCreditCode
* @param idCard
* @param phone
* @return
*/
Integer getImportDataCheck(ImportUserDataVo dataVo);
}

View File

@ -2,6 +2,7 @@ package com.bonus.gs.sub.evaluate.outsourceEnterprise.service;
import com.bonus.gs.sub.evaluate.manager.utils.AjaxRes;
import com.bonus.gs.sub.evaluate.manager.utils.RegularCheckUtils;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ImportUserDataVo;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.beans.ViolationBean;
import com.bonus.gs.sub.evaluate.outsourceEnterprise.dao.ViolationDao;
import org.springframework.beans.factory.annotation.Autowired;
@ -168,6 +169,18 @@ public class ViolationServiceImpl implements ViolationService {
return dao.getOutsourceEnterpriseByPage(o);
}
/**
* 导入数据校验
* @param socialCreditCode
* @param idCard
* @param phone
* @return
*/
@Override
public Integer getImportDataCheck(ImportUserDataVo dataVo) {
return dao.getImportDataCheck(dataVo);
}
/**
* @param enterpriseName
* @return

View File

@ -151,6 +151,7 @@
r.proNum as projectNum,
r.subNum as outsourcerNum,
ifnull(GROUP_CONCAT(ped.post_id),'') as deptId,
ped.check_one checkOne,
IF(ped.check_one is null, 0,IF( ped.check_one > 0, '0', '1' )) as isApprove,
ped.isReject as isReject,
IFNULL(c.evaluateNum,0) as evaluateNum,
@ -357,6 +358,7 @@
<select id="getEvaluateAuditList" resultType="com.bonus.gs.sub.evaluate.evaluate.beans.OutSourceBean">
SELECT
per.evaluate_id AS id,
per.status auditState,
ped.details_id AS detailsId,
per.template_id AS templateId,
per.version AS version,
@ -797,6 +799,10 @@
<update id="updateEvaluateRecordByEvaluateId">
update pj_evaluate_record set task_status = #{taskStatus} where evaluate_id = #{evaluateId}
</update>
<update id="updateEvalStatus">
update pj_evaluate_record
set status=#{status} where evaluate_id=#{id}
</update>
</mapper>

View File

@ -121,6 +121,7 @@
and (
su.username like concat('%',#{keyWord},'%') or
su.phone like concat('%',#{keyWord},'%') or
poi.name like concat('%',#{keyWord},'%') or
su.id_card like concat('%',#{keyWord},'%')
)
</if>

View File

@ -230,6 +230,15 @@
INSTR(pte.manager,#{keyWord}) > 0
)
</if>
<if test="evStatus == 4">
AND (pte.ev_status = '1' and (check_status=0 or check_status_two=0 ))
</if>
<if test="evStatus == 6">
AND (pte.ev_status = '1' and (check_status=1 and check_status_two=1 ))
</if>
<if test="evStatus == 7">
AND (pte.ev_status = '1' and (check_status=2 or check_status_two=2 ))
</if>
<if test="evStatus == 1">
AND (pte.ev_status = '0' OR pte.ev_status IS NULL)
</if>

View File

@ -137,6 +137,9 @@
from pj_evaluate_record per
where per.dept_id = #{orgId}
and per.year_and_month = #{evaluateDate} and is_active = '1'
<if test="id!=null and id!=''">
and evaluate_id !=#{id}
</if>
</select>
<select id="getInitiateEvaluateDetails"
resultType="com.bonus.gs.sub.evaluate.evaluate.beans.InitiateEvaluateBean">

View File

@ -323,4 +323,22 @@
and id!=#{id}
</if>
</select>
<select id="getImportDataCheck" resultType="java.lang.Integer">
select count(1)
from project_assignment
where is_active=1
<if test="name!=null and name!=''">
and enterpriseName=#{name}
</if>
<if test="code!=null and code!=''">
and socialCreditCode=#{code}
</if>
<if test="userPhone!=null and userPhone!=''">
and phone=#{userPhone}
</if>
<if test="idCard!=null and idCard!=''">
and idCard=#{idCard}
</if>
</select>
</mapper>

View File

@ -33,7 +33,7 @@ function search(type) {
curr: 1
},
where: {
type:'audit',
type: 'audit',
keyWord: $("#keyWord").val(),
evaluateDeptId: $("#evaluateDeptId").val(),
evStatus: $("#evStatus").val(),
@ -52,7 +52,7 @@ function initTable() {
, method: 'get' //方式默认是get
, toolbar: 'default' //开启工具栏,此处显示默认图标,可以自定义模板,详见文档
, where: {
type:'audit',
type: 'audit',
} //post请求必须加where post请求需要的参数
, cellMinWidth: 80
, cols: [[ //表头
@ -64,15 +64,18 @@ function initTable() {
, {field: 'evaluateMonth', align: 'center', title: '评价年月'}
, {field: 'projectNum', align: 'center', title: '项目数量'}
, {field: 'outsourcerNum', align: 'center', title: '外包商数量'}
, {field: 'isApprove', align: 'center', title: '评价状态', templet: d =>{
if (d.rejectReason){
, {
field: 'isApprove', align: 'center', title: '评价状态', templet: d => {
if (d.rejectReason) {
return '评价驳回'
}else {
} else {
return Number(d.isApprove) === 0 ? '待评价' : (Number(d.isApprove) === 1 ? '已评价' : '')
}
// Number(d.isApprove) === 0 ? '待评价' : (Number(d.isApprove) === 1 ? '已评价' : '')
}}
, {field: 'status', align: 'center', title: '审核状态', templet: d =>
}
}
, {
field: 'status', align: 'center', title: '审核状态', templet: d =>
Number(d.status) === 0 ? '待审核' : (Number(d.status) === 1 ? '已审核' : '审核中')
}
, {field: 'rejectReason', align: 'center', title: '驳回原因'}

View File

@ -43,7 +43,10 @@
let urlParams = new URLSearchParams(window.location.search);
let tokens = urlParams.get('tokens'); // 假设 URL 为 https://example.com/path?query=1
let loginName = urlParams.get('loginName');
if(tokens && tokens!=='undefined'){
tokenVerify(tokens,loginName);
}
// var token = localStorage.getItem("token");
// if (token != null && token.trim().length != 0) {
// $.ajax({

View File

@ -107,7 +107,7 @@
</div>
<div class="layui-form-item" style="margin-top: 1%;">
<div class="layui-form-item">
<label class="layui-form-label"><span class="required_icon">*</span>姓名</label>
<label class="layui-form-label"><span class="required_icon">*</span>班长姓名</label>
<div class="layui-input-inline">
<input class="layui-input" id="userName" name="userName" lay-verify="required" lay-affix="clear"
autocomplete="off" onclick="showPersonPage()" maxlength="30" readonly>

View File

@ -163,8 +163,13 @@
// Number(d.evaluateNum) > 0 && d.rejectReason ? '评价驳回' : (Number(d.evaluateNum) > 0 ? '已评价' : '未评价')
}
, {
field: 'auditStatus', align: 'center', title: '审核状态', templet: d =>
Number(d.isApprove) > 0 && d.rejectReason ? '已驳回' : (Number(d.isApprove) > 0 ? '已通过' : (Number(d.evaluateNum) > 0 && d.isApprove == 0 ? '待审批' : '待评价'))
field: 'auditStatus', align: 'center', title: '审核状态', templet:function(d){
if(d.auditState==='4' || d.auditState===4){
return '已驳回'
}else{
return Number(d.isApprove) > 0 && d.rejectReason ? '已驳回' : (Number(d.isApprove) === 1 ? '已通过' : (Number(d.evaluateNum) > 0 && d.isApprove == 0 ? '待审批' : '待评价'))
}
}
}
, { field: 'rejectReason', align: 'center', title: '驳回原因' }
, {

View File

@ -304,7 +304,7 @@
search(1)*/
if (data.res === 0) {
layer.close(idx);
layer.msg('导入失败' + data.resMsg, { icon: 1, time: 2000 });
layer.msg('导入失败' + data.resMsg, { icon: 2, time: 2000 });
} else {
layer.close(idx);
layer.msg('导入成功', { icon: 1, time: 2000 });

View File

@ -65,7 +65,7 @@
templateId: getUrlParam('templateId'),
evaluateId: getUrlParam('evaluateId'),
deptId: deptId,
evaluateType: '2',
evaluateType: '3',
type: 'auditAll',
},
success: function (res) {
@ -174,8 +174,6 @@
function allAudit(type) {
let title = type === 1 ? '全部通过' : '全部驳回';
layer.confirm('确定' + title + '吗?', function (index) {
if (type === 1) {
$.ajax({
url: ctxPath + '/outsourcer/allAudit',
@ -185,7 +183,7 @@
templateId: getUrlParam('templateId'),
evaluateId: getUrlParam('evaluateId'),
type: type,
evaluateType: '2',
evaluateType: '3',
deptId: getUrlParam('deptId'),
isApprove: type

View File

@ -28,10 +28,9 @@
</div>
<div class="layui-inline">
<select class="layui-select" id="evStatus" name="evStatus">
<option value="">请选择</option>
<option value="">请选择评价状态</option>
<option value="1">待评价</option>
<option value="2">已评价</option>
<option value="3">评价驳回</option>
</select>
</div>
<input type="text" name="operType" id="operType" value="1" hidden>

View File

@ -28,10 +28,10 @@
</div>
<div class="layui-inline">
<select class="layui-select" id="evStatus" name="evStatus">
<option value="">请选择</option>
<option value="1">待评价</option>
<option value="2">已评价</option>
<option value="3">评价驳回</option>
<option value="">请选择审核状态</option>
<option value="4">待审核</option>
<option value="6">已通过</option>
<option value="7">评价驳回</option>
</select>
</div>
<div class="layui-inline">

View File

@ -28,7 +28,7 @@
</div>
<div class="layui-inline">
<select class="layui-select" id="evStatus" name="evStatus">
<option value="">请选择</option>
<option value="">请选择评价状态</option>
<option value="1">待评价</option>
<option value="2">已评价</option>
<option value="3">评价驳回</option>

View File

@ -7,6 +7,15 @@
<link rel="stylesheet" type="text/css" media="screen" href="../../css/dataTables.bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen" href="../../layui/css/layui.css">
</head>
<style>
#dt-table {
width: 100%;
text-align: center; /* 这会让整个表格内的文字居中 */
}
#dt-table th, #myTable td {
text-align: center; /* 这会确保每个单元格内的文字也居中 */
}
</style>
<body>
<div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
@ -124,7 +133,7 @@
},
"dom": "<'dt-toolbar'r>t<'dt-toolbar-footer'<'col-sm-10 col-xs-12 hidden-xs'i><'col-xs-12 col-sm-10' p v>>",
"columns": [
{"data": "username", "defaultContent": ""},
{"data": "username", "defaultContent": "" ,"text-align":"center" },
{"data": "roleName", "defaultContent": ""},
{"data": "phone", "defaultContent": "", "render": function(data, type, row) { return maskSensitiveInfo(data, 'phone'); }},
{"data": "email", "defaultContent": ""},