Przeglądaj źródła

add:考勤打卡页面 查询服务单元-sop方法优化

caozixuan 1 rok temu
rodzic
commit
bbcdfba425

+ 48 - 24
sop-api/src/main/java/com/qmth/sop/server/api/TBDingController.java

@@ -8,21 +8,17 @@ import com.qmth.sop.business.bean.params.DingSaveParam;
 import com.qmth.sop.business.bean.result.*;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBCrm;
+import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.entity.TBTask;
-import com.qmth.sop.business.service.TBCrmService;
-import com.qmth.sop.business.service.TBDingService;
-import com.qmth.sop.business.service.TBSopInfoService;
-import com.qmth.sop.business.service.TBTaskService;
+import com.qmth.sop.business.service.*;
 import com.qmth.sop.business.templete.execute.AsyncDingCountExportService;
 import com.qmth.sop.common.contant.SystemConstant;
-import com.qmth.sop.common.enums.DingResultEnum;
-import com.qmth.sop.common.enums.DingSubmitStatusEnum;
-import com.qmth.sop.common.enums.InOutTypeEnum;
-import com.qmth.sop.common.enums.TaskTypeEnum;
+import com.qmth.sop.common.enums.*;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
 import io.swagger.annotations.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
@@ -35,6 +31,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 考勤打卡表 控制器
@@ -63,6 +60,9 @@ public class TBDingController {
     @Resource
     TBCrmService tbCrmService;
 
+    @Resource
+    TBServiceService tbServiceService;
+
     @ApiOperation(value = "工时统计统计查询接口")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "工时统计统计查询结果", response = TBDingSubmitQueryResult.class)})
@@ -225,25 +225,49 @@ public class TBDingController {
     @RequestMapping(value = "/ding_find_running_sop", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = DingElementResult.class)})
     @OperationLog
-    public Result findDingRunningSop(@ApiParam(value = "服务单元id", required = true) @RequestParam String serviceUnitId) {
-        List<SopInfoResult> resultList = new ArrayList<>();
+    public Result findDingRunningSop() {
+        List<DingSopInfo> resultList = new ArrayList<>();
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         Long requestUserId = requestUser.getId();
 
-        TBCrm tbCrm = tbCrmService.findOccupiedCrm(requestUserId, null, SystemConstant.convertIdToLong(serviceUnitId));
-        if (Objects.nonNull(tbCrm)) {
-            CrmProjectResult crmProjectResult = tbCrmService.findCrmProjectBySopNoOrCrmNo(null, tbCrm.getCrmNo());
-            List<String> sopNoList = tbSopInfoService.findFlowPassageByCrmNo(tbCrm.getCrmNo());
-            for (String sopNo : sopNoList) {
-                SopInfoResult result = new SopInfoResult();
-                result.setSopNo(sopNo);
-                result.setCrmNo(tbCrm.getCrmNo());
-                result.setCrmName(tbCrm.getName());
-                result.setCustomId(crmProjectResult.getCustomId());
-                result.setCustomName(crmProjectResult.getCustomName());
-                result.setCustomType(crmProjectResult.getCustomType());
-                result.setCustomTypeStr(crmProjectResult.getCustomType().getTitle());
-                resultList.add(result);
+        List<TBCrm> tbCrmList = tbCrmService.findOccupiedCrm(requestUserId, null);
+        if (CollectionUtils.isNotEmpty(tbCrmList)) {
+            List<Long> serviceUnitIdList = tbCrmList.stream()
+                    .map(TBCrm::getServiceId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+
+            for (Long serviceUnitId : serviceUnitIdList) {
+                DingSopInfo cell = new DingSopInfo();
+                TBService service = tbServiceService.getById(serviceUnitId);
+                if (Objects.isNull(service)) {
+                    throw ExceptionResultEnum.ERROR.exception("未找到服务单元");
+                }
+                cell.setServiceUnitId(serviceUnitId);
+                cell.setServiceUnitName(service.getName());
+                List<TBCrm> crmInServiceList = tbCrmList.stream()
+                        .filter(e -> serviceUnitId.equals(e.getServiceId()))
+                        .distinct()
+                        .collect(Collectors.toList());
+                for (TBCrm tbCrm : crmInServiceList) {
+                    CrmProjectResult crmProjectResult = tbCrmService.findCrmProjectBySopNoOrCrmNo(null, tbCrm.getCrmNo());
+                    List<String> sopNoList = tbSopInfoService.findFlowPassageByCrmNo(tbCrm.getCrmNo());
+                    List<SopInfoResult> sopInfo = new ArrayList<>();
+                    for (String sopNo : sopNoList) {
+                        SopInfoResult result = new SopInfoResult();
+                        result.setSopNo(sopNo);
+                        result.setCrmNo(tbCrm.getCrmNo());
+                        result.setCrmName(tbCrm.getName());
+                        result.setCustomId(crmProjectResult.getCustomId());
+                        result.setCustomName(crmProjectResult.getCustomName());
+                        result.setCustomType(crmProjectResult.getCustomType());
+                        result.setCustomTypeStr(crmProjectResult.getCustomType().getTitle());
+                        sopInfo.add(result);
+                    }
+                    cell.setSopInfo(sopInfo);
+                }
+                resultList.add(cell);
             }
         }
         return ResultUtil.ok(resultList);

+ 48 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/DingSopInfo.java

@@ -0,0 +1,48 @@
+package com.qmth.sop.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description: 可打卡/已打卡 可选服务单元-sop信息
+ * @Author: CaoZixuan
+ * @Date: 2023-10-19
+ */
+public class DingSopInfo {
+    @ApiModelProperty("服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceUnitId;
+
+    @ApiModelProperty("服务单元名称")
+    private String serviceUnitName;
+
+    @ApiModelProperty("sop信息")
+    private List<SopInfoResult> sopInfo;
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public String getServiceUnitName() {
+        return serviceUnitName;
+    }
+
+    public void setServiceUnitName(String serviceUnitName) {
+        this.serviceUnitName = serviceUnitName;
+    }
+
+    public List<SopInfoResult> getSopInfo() {
+        return sopInfo;
+    }
+
+    public void setSopInfo(List<SopInfoResult> sopInfo) {
+        this.sopInfo = sopInfo;
+    }
+}

+ 1 - 3
sop-business/src/main/java/com/qmth/sop/business/mapper/TBCrmMapper.java

@@ -131,12 +131,10 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
      *
      * @param userId         工程师用户id
      * @param userArchivesId 工程师档案id
-     * @param serviceUnitId 服务单元id
      * @return 被占用的派单
      */
     List<TBCrm> findOccupiedCrm(@Param("userId") Long userId,
-                                @Param("userArchivesId") Long userArchivesId,
-                                @Param("serviceUnitId") Long serviceUnitId);
+                                @Param("userArchivesId") Long userArchivesId);
 
     /**
      * 根据绑定的服务单元id和客户地址查询符合条件的派单

+ 1 - 2
sop-business/src/main/java/com/qmth/sop/business/service/TBCrmService.java

@@ -148,10 +148,9 @@ public interface TBCrmService extends IService<TBCrm> {
      *
      * @param userId         用户id
      * @param userArchivesId 档案id
-     * @param serviceUnitId  服务单元id
      * @return 正在进行的派单(被占用的)
      */
-    TBCrm findOccupiedCrm(Long userId, Long userArchivesId, Long serviceUnitId);
+    List<TBCrm> findOccupiedCrm(Long userId, Long userArchivesId);
 
     /**
      * 更新派单发布状态

+ 2 - 10
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmServiceImpl.java

@@ -340,16 +340,8 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
     }
 
     @Override
-    public TBCrm findOccupiedCrm(Long userId, Long userArchivesId,Long serviceUnitId) {
-        TBCrm result = null;
-        List<TBCrm> tbCrmList = this.baseMapper.findOccupiedCrm(userId, userArchivesId,serviceUnitId);
-        if (CollectionUtils.isNotEmpty(tbCrmList)) {
-            if (tbCrmList.size() > 1) {
-                throw ExceptionResultEnum.ERROR.exception("被多个派单占用异常");
-            }
-            result = tbCrmList.get(0);
-        }
-        return result;
+    public List<TBCrm> findOccupiedCrm(Long userId, Long userArchivesId) {
+        return this.baseMapper.findOccupiedCrm(userId, userArchivesId);
     }
 
     @Transactional

+ 6 - 5
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java

@@ -163,12 +163,13 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
                     }
                     TBUserArchives tbUserArchives = tbUserArchivesService.findByUserId(userId);
                     if (!UserArchivesStatusEnum.FREE.equals(tbUserArchives.getStatus())) {
-                        TBCrm occupiedCrm = tbCrmService.findOccupiedCrm(userId, null, null);
-                        if (Objects.isNull(occupiedCrm)) {
+                        List<TBCrm> occupiedCrm = tbCrmService.findOccupiedCrm(userId, null);
+                        if (CollectionUtils.isEmpty(occupiedCrm)) {
                             throw ExceptionResultEnum.ERROR.exception("人员占用状态异常");
                         }
-                        if (!crmNo.equals(occupiedCrm.getCrmNo())) {
-                            throw ExceptionResultEnum.ERROR.exception(String.format("工程师[%s]已经被派单号为[%s],名称为[%s],状态为[%s]的派单占用,请先将工程师从派单中移出", tbUserArchives.getName(), occupiedCrm.getCrmNo(), occupiedCrm.getName(), occupiedCrm.getStatus()));
+                        if (!occupiedCrm.stream().map(TBCrm::getCrmNo).collect(Collectors.toList()).contains(crmNo)) {
+                            throw ExceptionResultEnum.ERROR.exception(String.format("工程师[%s]已经被派单号为[%s]的派单占用,请先将工程师从派单中移出",
+                                    tbUserArchives.getName(), occupiedCrm.stream().map(TBCrm::getCrmNo).collect(Collectors.joining())));
                         }
                     }
                     TBUserArchivesAllocation tbUserArchivesAllocation = new TBUserArchivesAllocation();
@@ -228,7 +229,7 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         if (regionCoordinatorId != null && regionCoordinatorId > 0) {
 
             UserArchivesResult userArchivesResult = tbUserArchivesService.findUserArchivesByArchivesIdORUserId(null, regionCoordinatorId);
-            if (Objects.nonNull(userArchivesResult)){
+            if (Objects.nonNull(userArchivesResult)) {
                 // 为空是大区经理兼任的情况 不处理
                 CrmArchivesAllocationResult region = new CrmArchivesAllocationResult();
                 region.setType(RoleTypeEnum.REGION_COORDINATOR);

+ 0 - 3
sop-business/src/main/resources/mapper/TBCrmMapper.xml

@@ -362,9 +362,6 @@
             <if test="userArchivesId != null">
                 AND tbuaa.archives_id = #{userArchivesId}
             </if>
-            <if test="serviceUnitId != null">
-                AND tbc.service_id = #{serviceUnitId}
-            </if>
             AND tbc.status != 'FINISH'
         </where>
     </select>