Sfoglia il codice sorgente

Merge branch 'dev_1.1.1' into dev_1.1.2
merge

wangliang 9 mesi fa
parent
commit
b7a79aed20

+ 8 - 2
sop-api/src/main/java/com/qmth/sop/server/api/SysCustomController.java

@@ -30,7 +30,6 @@ import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.util.Map;
-import java.util.Objects;
 
 /**
  * 客户表 控制器.
@@ -143,7 +142,14 @@ public class SysCustomController {
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = SysCustom.class)})
     public Result list(@ApiParam(value = "是否启用", required = false) @RequestParam(required = false) Boolean enable,
                        @ApiParam(value = "类型", required = false) @RequestParam(required = false) ProductTypeEnum type) {
-//        sysCustomService.list(new QueryWrapper<SysCustom>().lambda().eq(Objects.nonNull(enable), SysCustom::getEnable, enable).eq(Objects.nonNull(type), SysCustom::getType, type))
         return ResultUtil.ok(sysCustomService.listCustomer(enable, type));
     }
+
+    @ApiOperation(value = "根据服务单元查询客户")
+    @RequestMapping(value = "/list/by/serviceUnit", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = SysCustom.class)})
+    public Result listCustomByServiceUnit(@ApiParam(value = "服务单元ID", required = false) @RequestParam(required = false) Long serviceUnitId) {
+        return ResultUtil.ok(sysCustomService.listCustomerByServiceUnit(serviceUnitId));
+    }
+
 }

+ 2 - 1
sop-business/src/main/java/com/qmth/sop/business/activiti/service/impl/ActivitiServiceImpl.java

@@ -1078,7 +1078,8 @@ public class ActivitiServiceImpl implements ActivitiService {
                                 sopRoleTypeCompositeEnum = SopRoleTypeCompositeEnum.REGION_MANAGER;
                                 TFFlowLog tfFlowLog = tfFlowLogService.findByLastFlowLog(flowId,
                                         FlowApproveOperationEnum.APPROVE);
-                                if (tfFlowLog.getApproveSetup().intValue() == 3 && Objects.nonNull(
+                                if (tfFlowLog.getApproveId().longValue() == sysUser.getId().longValue()
+                                        && tfFlowLog.getApproveSetup().intValue() == 3 && Objects.nonNull(
                                         tfFlowLog.getApproveRemark())) {
                                     sopRoleTypeCompositeEnum = SopRoleTypeCompositeEnum.PROJECT_MANAGER;
                                 }

+ 14 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/DingSubmitParam.java

@@ -25,6 +25,12 @@ public class DingSubmitParam {
     @Range(min = 1L, message = "缺少人员档案id")
     private Long userArchivesId;
 
+    @ApiModelProperty(value = "服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "服务单元id")
+    @Range(min = 1L, message = "服务单元id")
+    private Long serviceUnitId;
+
     public String getSopNo() {
         return sopNo;
     }
@@ -40,4 +46,12 @@ public class DingSubmitParam {
     public void setUserArchivesId(Long userArchivesId) {
         this.userArchivesId = userArchivesId;
     }
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
 }

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/SysCustomMapper.java

@@ -43,4 +43,12 @@ public interface SysCustomMapper extends BaseMapper<SysCustom> {
      * @return 客户列表
      */
     List<SysCustom> listCustomer(@Param("enable") Boolean enable, @Param("type") ProductTypeEnum type, @Param("dpr") DataPermissionDto dpr);
+
+    /**
+     *  查询服务单元下所有的客户
+     * @param serviceUnitId 服务单元ID
+     * @param dpr 登录用户所有的角色
+     * @return 客户列表
+     */
+    List<SysCustom> listCustomerByServiceUnit(@Param("serviceUnitId") Long serviceUnitId, @Param("dpr") DataPermissionDto dpr);
 }

+ 2 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysCustomService.java

@@ -34,4 +34,6 @@ public interface SysCustomService extends IService<SysCustom>{
     boolean saveCustom(SysCustomResult sysCustom);
 
     List<SysCustom> listCustomer(Boolean enable, ProductTypeEnum type);
+
+    List<SysCustom> listCustomerByServiceUnit(Long serviceUnitId);
 }

+ 7 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysCustomServiceImpl.java

@@ -118,6 +118,13 @@ public class SysCustomServiceImpl extends ServiceImpl<SysCustomMapper, SysCustom
         return baseMapper.listCustomer(enable, type, dpr);
     }
 
+    @Override
+    public List<SysCustom> listCustomerByServiceUnit(Long serviceUnitId) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
+        return baseMapper.listCustomerByServiceUnit(serviceUnitId, dpr);
+    }
+
     @Override
     @Transactional
     public void delete(Long id) {

+ 1 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingApplyServiceImpl.java

@@ -368,7 +368,7 @@ public class TBDingApplyServiceImpl extends ServiceImpl<TBDingApplyMapper, TBDin
                 } else {
                     // 区协
                     tbDing = new TBDing(null, null, tbDingApply.getServiceId(), userArchivesResult.getUserArchivesId(),
-                            JSON.toJSONString(SopRoleTypeEnum.REGION_COORDINATOR), sysUser.getId(), null);
+                            JSON.toJSONString(Collections.singletonList(SopRoleTypeEnum.REGION_COORDINATOR)), sysUser.getId(), null);
                 }
                 tbDing.setSignDate(
                         DateFormatUtils.format(tbDingApply.getApplyTime(), SystemConstant.DEFAULT_DATE_DAY_PATTERN));

+ 40 - 9
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticByPersonServiceImpl.java

@@ -1,7 +1,5 @@
 package com.qmth.sop.business.service.impl;
 
-import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,12 +8,13 @@ import com.qmth.sop.business.entity.TBDingStatistic;
 import com.qmth.sop.business.entity.TBDingStatisticByPerson;
 import com.qmth.sop.business.mapper.TBDingStatisticByPersonMapper;
 import com.qmth.sop.business.service.TBDingStatisticByPersonService;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -32,12 +31,44 @@ public class TBDingStatisticByPersonServiceImpl extends ServiceImpl<TBDingStatis
     @Override
     public void buildStatisticByPerson(List<TBDingStatistic> datasource) {
         List<TBDingStatisticByPerson> result = new ArrayList<>();
-        for (TBDingStatistic tbDingStatistic : datasource) {
-            TBDingStatisticByPerson tbDingStatisticByPerson = new TBDingStatisticByPerson();
-            BeanUtils.copyProperties(tbDingStatistic, tbDingStatisticByPerson);
-            tbDingStatisticByPerson.setUserInfo(
-                    tbDingStatistic.getUserArchivesName() + "(" + tbDingStatistic.getUserArchivesCode() + ")");
-            result.add(tbDingStatisticByPerson);
+        List<Long> serviceIdList = datasource.stream().map(TBDingStatistic::getServiceId).distinct().collect(Collectors.toList());
+        for (Long serviceId : serviceIdList) {
+            List<TBDingStatistic> serviceStatisticList = datasource.stream().filter(e -> serviceId.equals(e.getServiceId())).collect(Collectors.toList());
+            List<Long> userIdList = serviceStatisticList.stream().map(TBDingStatistic::getUserId).distinct().collect(Collectors.toList());
+
+            for (Long userId : userIdList) {
+                List<TBDingStatistic> tbDingStatisticList = serviceStatisticList.stream().filter(e -> userId.equals(e.getUserId())).collect(Collectors.toList());
+                String serviceName = "";
+                int actualDays = 0;
+                int weekdays = 0;
+                int weekends = 0;
+                int legalHolidays = 0;
+                BigDecimal workHours = new BigDecimal(0);
+                int violationDays = 0;
+
+                for (TBDingStatistic tbDingStatistic : tbDingStatisticList) {
+                    serviceName = tbDingStatistic.getServiceName();
+                    actualDays = actualDays + tbDingStatistic.getActualDays();
+                    weekdays = weekdays + tbDingStatistic.getWeekdays();
+                    weekends = weekends + tbDingStatistic.getWeekends();
+                    legalHolidays = legalHolidays + tbDingStatistic.getLegalHolidays();
+                    workHours = workHours.add(tbDingStatistic.getWorkHours());
+                    violationDays = violationDays + tbDingStatistic.getViolationDays();
+                }
+                TBDingStatisticByPerson tbDingStatisticByPerson = new TBDingStatisticByPerson();
+                tbDingStatisticByPerson.setServiceId(serviceId);
+                tbDingStatisticByPerson.setServiceName(serviceName);
+                tbDingStatisticByPerson.setSupplierName(tbDingStatisticList.get(0).getSupplierName());
+                tbDingStatisticByPerson.setUserInfo(
+                        tbDingStatisticList.get(0).getUserArchivesName() + "(" + tbDingStatisticList.get(0).getUserArchivesCode() + ")");
+                tbDingStatisticByPerson.setActualDays(actualDays);
+                tbDingStatisticByPerson.setWeekdays(weekdays);
+                tbDingStatisticByPerson.setWeekends(weekends);
+                tbDingStatisticByPerson.setLegalHolidays(legalHolidays);
+                tbDingStatisticByPerson.setWorkHours(workHours);
+                tbDingStatisticByPerson.setViolationDays(violationDays);
+                result.add(tbDingStatisticByPerson);
+            }
         }
         this.baseMapper.truncateTable();
         this.saveBatch(result);

+ 0 - 1
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingStatisticBySupplierServiceImpl.java

@@ -1,6 +1,5 @@
 package com.qmth.sop.business.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

+ 30 - 20
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingSubmitServiceImpl.java

@@ -270,10 +270,18 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
     private void dingSubmitOperate(DingSubmitParam dingSubmitParam, DingSubmitOperateEnum dingSubmitOperateType) {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         String sopNo = dingSubmitParam.getSopNo();
+        Long serviceId = dingSubmitParam.getServiceUnitId();
         Long userArchivesId = dingSubmitParam.getUserArchivesId();
-        List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(null, null, null,
+
+        // sopNo 为空,则表示为区协操作
+        boolean coordinatorOperate = !SystemConstant.strNotNull(sopNo);
+        List<DingSubmitResult> dingSubmitResultList = this.baseMapper.findDingSubmitList(serviceId, null, null,
                 userArchivesId, null, null, null, sopNo, null, null, null, null);
 
+        if (coordinatorOperate) {
+            // 如果是区协操作,只过滤出sopNo为空的数据
+            dingSubmitResultList = dingSubmitResultList.stream().filter(e -> !SystemConstant.strNotNull(e.getSopNo())).collect(Collectors.toList());
+        }
         if (dingSubmitResultList.size() != 1) {
             throw ExceptionResultEnum.ERROR.exception(
                     String.format("未找到sop流水号为[%s],用户档案号为[%s]的考勤信息", sopNo, userArchivesId));
@@ -328,25 +336,27 @@ public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBD
             }
 
             // 条件3 - SOP结束后的第二天才能提交考勤
-            TFFlowApprove tfFlowApproves = tbDingService.findFlowApproveBySopNo(sopNo);
-            FlowStatusEnum flowStatus = tfFlowApproves.getStatus();
-            if (!FlowStatusEnum.FINISH.equals(flowStatus)) {
-                throw ExceptionResultEnum.ERROR.exception(
-                        String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的sop状态为[%s],sop结束后次日才能提交考勤", serviceUnitName,
-                                sopNo, userArchivesName, flowStatus.getTitle()));
-            }
-            Long endTime = tfFlowApproves.getUpdateTime();
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTimeInMillis(endTime);
-            calendar.set(Calendar.HOUR_OF_DAY, 0);
-            calendar.set(Calendar.MINUTE, 0);
-            calendar.set(Calendar.SECOND, 0);
-            calendar.add(Calendar.DATE, 1);
-            long nextDayEarliestTime = calendar.getTimeInMillis();
-            if (System.currentTimeMillis() < nextDayEarliestTime) {
-                throw ExceptionResultEnum.ERROR.exception(
-                        String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的考勤还未到提交时间,sop结束后次日才能提交考勤", serviceUnitName,
-                                sopNo, userArchivesName));
+            if (!coordinatorOperate) {
+                TFFlowApprove tfFlowApproves = tbDingService.findFlowApproveBySopNo(sopNo);
+                FlowStatusEnum flowStatus = tfFlowApproves.getStatus();
+                if (!FlowStatusEnum.FINISH.equals(flowStatus)) {
+                    throw ExceptionResultEnum.ERROR.exception(
+                            String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的sop状态为[%s],sop结束后次日才能提交考勤", serviceUnitName,
+                                    sopNo, userArchivesName, flowStatus.getTitle()));
+                }
+                Long endTime = tfFlowApproves.getUpdateTime();
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTimeInMillis(endTime);
+                calendar.set(Calendar.HOUR_OF_DAY, 0);
+                calendar.set(Calendar.MINUTE, 0);
+                calendar.set(Calendar.SECOND, 0);
+                calendar.add(Calendar.DATE, 1);
+                long nextDayEarliestTime = calendar.getTimeInMillis();
+                if (System.currentTimeMillis() < nextDayEarliestTime) {
+                    throw ExceptionResultEnum.ERROR.exception(
+                            String.format("服务单元为[%s],sop流水号为[%s],用户档案为[%s]的考勤还未到提交时间,sop结束后次日才能提交考勤", serviceUnitName,
+                                    sopNo, userArchivesName));
+                }
             }
 
             Long submitId = dingSubmitResult.getSubmitId();

+ 4 - 4
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBSopInfoServiceImpl.java

@@ -1369,28 +1369,28 @@ public class TBSopInfoServiceImpl extends ServiceImpl<TBSopInfoMapper, TBSopInfo
                     tsJobRemindService.updateJobRemind(Long.parseLong(task.getId()));
                 }
                 FlowTaskResult flowTaskResult = this.getFormProperties(tfCustomFlowEntity, 1);
-                if (tfFlowApprove.getSetup().intValue() == 2) {//扫描准备流程
+                if (tfFlowApprove.getSetup().intValue() >= 1 && tfFlowApprove.getSetup().intValue() <= 2) {//扫描准备流程
                     processLimitedTime = this.getProcessLimitedTime(flowTaskResult,
                             ProcessLimitedEnum.SCAN_START_TIME.getKey());
                     execField = ProcessLimitedEnum.SCAN_START_TIME.getKey();
                     createJobRemind(execField, processLimitedTime, taskList, tfCustomFlowEntity, tfCustomFlow,
                             tfFlowLog, sysUser.getId(), "扫描准备");
                 }
-                if (tfFlowApprove.getSetup().intValue() >= 2 && tfFlowApprove.getSetup().intValue() <= 3) {//扫描收尾检查
+                if (tfFlowApprove.getSetup().intValue() >= 1 && tfFlowApprove.getSetup().intValue() <= 3) {//扫描收尾检查
                     processLimitedTime = this.getProcessLimitedTime(flowTaskResult,
                             ProcessLimitedEnum.SCAN_END_TIME.getKey());
                     execField = ProcessLimitedEnum.SCAN_END_TIME.getKey();
                     createJobRemind(execField, processLimitedTime, taskList, tfCustomFlowEntity, tfCustomFlow,
                             tfFlowLog, sysUser.getId(), "扫描收尾");
                 }
-                if (tfFlowApprove.getSetup().intValue() >= 2 && tfFlowApprove.getSetup().intValue() <= 4) {//阅卷参数检查
+                if (tfFlowApprove.getSetup().intValue() >= 1 && tfFlowApprove.getSetup().intValue() <= 4) {//阅卷参数检查
                     processLimitedTime = this.getProcessLimitedTime(flowTaskResult,
                             ProcessLimitedEnum.MARK_START_TIME.getKey());
                     execField = ProcessLimitedEnum.MARK_START_TIME.getKey();
                     createJobRemind(execField, processLimitedTime, taskList, tfCustomFlowEntity, tfCustomFlow,
                             tfFlowLog, sysUser.getId(), "阅卷参数检查");
                 }
-                if (tfFlowApprove.getSetup().intValue() >= 2 && tfFlowApprove.getSetup().intValue() <= 5) {//阅卷收尾检查
+                if (tfFlowApprove.getSetup().intValue() >= 1 && tfFlowApprove.getSetup().intValue() <= 5) {//阅卷收尾检查
                     processLimitedTime = this.getProcessLimitedTime(flowTaskResult,
                             ProcessLimitedEnum.MARK_END_TIME.getKey());
                     execField = ProcessLimitedEnum.MARK_END_TIME.getKey();

+ 4 - 0
sop-business/src/main/resources/db/log/haoguanghui_update_log.sql

@@ -46,3 +46,7 @@ update sys_privilege set sequence=5 where id=44;
 -- 匹配导出
 INSERT INTO sys_privilege(`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (430, '导出', 'Export', 'BUTTON', 51, 5, 'AUTH', '435', 1, 0, 1);
 INSERT INTO sys_privilege(`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (435, '匹配导出', '/api/admin/tb/crm/receiver/export', 'URL', 51, 9, 'AUTH', NULL, 1, 1, 0);
+
+
+-- 2024-09-14
+INSERT INTO sys_privilege(`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (291, '客户表查询', '/api/sys/custom/list/by/serviceUnit', 'URL', 64, 34, 'SYS', NULL, 1, 1, 0);

+ 10 - 0
sop-business/src/main/resources/mapper/SysCustomMapper.xml

@@ -37,4 +37,14 @@
             </if>
         </where>
     </select>
+    <select id="listCustomerByServiceUnit" resultType="com.qmth.sop.business.entity.SysCustom">
+        select distinct sc.*
+        from t_b_sop_info tbsi
+        inner join t_b_crm tbc on tbsi.crm_no = tbc.crm_no
+        inner join sys_custom sc on sc.id = tbc.custom_id
+        where tbsi.service_id = #{serviceUnitId}
+        <if test="dpr != null and dpr.hasAccountManager">
+            AND tbc.crm_user_id= #{dpr.requestUserId}
+        </if>
+    </select>
 </mapper>