lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java
@@ -17,12 +17,14 @@
import org.jeecg.common.constant.DataBaseConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.eam.constant.*;
import org.jeecg.modules.eam.entity.*;
import org.jeecg.modules.eam.mapper.EamTechnicalStatusEvaluationOrderMapper;
import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderQuery;
import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderRequest;
import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderResult;
import org.jeecg.modules.eam.service.*;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
@@ -41,6 +43,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
@@ -84,6 +87,8 @@
    private ISysUserService sysUserService;
    @Autowired
    private IEamEquipmentExtendService equipmentExtendService;
    @Autowired
    private IEamTechnicalStatusEvaluationOrderDetailService eamTechnicalStatusEvaluationOrderDetailService;
    @Override
    public IPage<EamTechnicalStatusEvaluationOrder> queryPageList(Page<EamTechnicalStatusEvaluationOrder> page, EamTechnicalStatusEvaluationOrderQuery query) {
@@ -165,15 +170,20 @@
        if (CollectionUtil.isEmpty(standardDetailList)) {
            throw new JeecgBootException("技术状态鉴定规范检查项为空,添加失败!");
        }
        EamTechnicalStatusEvaluationOrder unCompleted = checkDuplicate(request.getEquipmentId());
        if(unCompleted != null) {
            throw new JeecgBootException("设备已存在未完成的技术状态鉴定工单,无法再次新增!");
        }
        EamTechnicalStatusEvaluationOrder order = new EamTechnicalStatusEvaluationOrder();
        order.setOrderNum(request.getOrderNum());
        order.setEquipmentId(request.getEquipmentId());
        order.setStandardId(request.getStandardId());
        order.setEvaluationDate(request.getEvaluationDate());
        order.setFreezeOrderDate(request.getFreezeOrderDate());
        order.setOrderExpirationDate(request.getOrderExpirationDate());
        order.setRemark(request.getRemark());
        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.TECHNICAL_STATUS_EVALUATION_ORDER_CODE_RULE);
        order.setOrderNum(codeSeq);
        order.setCreationMethod(OrderCreationMethodEnum.MANUAL.name());
        order.setCreationMethod(request.getCreationMethod());
        //状态初始化
        order.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name());
        //删除标记
@@ -245,7 +255,7 @@
        this.getBaseMapper().updateById(entity);
        //启动流程
        flowCommonService.initActBusiness("工单号: " + entity.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode() + ";安装位置" + equipment.getInstallationPosition(),
        flowCommonService.initActBusiness("工单号: " + entity.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode(),
                entity.getId(), "IEamTechnicalStatusEvaluationOrderService", "technical_status_evaluation_process", null);
        Map<String, Object> variables = new HashMap<>();
        variables.put("dataId", entity.getId());
@@ -331,7 +341,7 @@
        List<UserSelector> userSelectors;
        switch (status) {
            case UNDER_EVALUATION:
                if(CollectionUtil.isEmpty(request.getTableDetailList())) {
                if (CollectionUtil.isEmpty(request.getTableDetailList())) {
                    throw new JeecgBootException("检查明细信息为空!");
                }
                boolean parallelCompletion = flowTaskService.checkParallelCompletion(flowMyBusiness.getTaskId());
@@ -495,8 +505,6 @@
                    values.put("NextAssignee", userApprovalList);
                    entity.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.REPAIRER_SIGNING.name());
                }
//                //更新设备保养状态
//                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.NORMAL.name());
                break;
            case PROCESS_TECHNICIAN_SIGNING:
                //工艺员签字
@@ -536,11 +544,11 @@
                //设置entity
                if (BusinessCodeConst.APPROVED.equals(request.getDepartTechnicalLeaderSignatureResult())) {
                    values.put("NextAssignee", userApprovalList);
                    entity.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.PROCESS_TECHNICIAN_SIGNING.name());
                    entity.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.INSPECTOR_SIGNING.name());
                } else {
                    userApprovalList = Collections.singletonList(entity.getProcessTechnicianSignature());
                    values.put("NextAssignee", userApprovalList);
                    entity.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.INSPECTOR_SIGNING.name());
                    entity.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.PROCESS_TECHNICIAN_SIGNING.name());
                }
                break;
            case INSPECTOR_SIGNING:
@@ -556,6 +564,11 @@
                entity.setInspectorComment(request.getInspectorComment());
                entity.setEvaluationResult(request.getEvaluationResult());
                entity.setEvaluationReason(request.getEvaluationReason());
                //更新设备技术状态
                // 按照填报完成日期计算本次三保日期,去除时分秒
                Date evaluationDate = DateUtils.localDateToDate(DateUtils.dateToLocalDate(entity.getActualEndTime()));
                equipmentExtendService.updateTechnologyParam(equipment.getId(), entity.getEvaluationResult(),
                        evaluationDate, CommonConstant.STATUS_0);
                break;
        }
        request.setValues(values);
@@ -574,14 +587,125 @@
    @Transactional(rollbackFor = Exception.class)
    public boolean updateEvaluationStatus(String orderId, String evaluationStatus) {
        UpdateWrapper<EamTechnicalStatusEvaluationOrder> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("order_id", orderId);
        updateWrapper.eq("id", orderId);
        updateWrapper.set("evaluation_status", evaluationStatus);
        updateWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
        updateWrapper.eq("evaluation_status", TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name());
        updateWrapper.in("evaluation_status", Arrays.asList(TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name(), TechnicalStatusEvaluationOrderStatusEnum.LOCKED.name()));
        int update = this.getBaseMapper().update(null, updateWrapper);
        return update > 0;
    }
    @Override
    public List<EamTechnicalStatusEvaluationOrder> selectWaitEvaluationOrderList() {
        LambdaQueryWrapper<EamTechnicalStatusEvaluationOrder> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EamTechnicalStatusEvaluationOrder::getEvaluationStatus, TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name());
        queryWrapper.isNotNull(EamTechnicalStatusEvaluationOrder::getFreezeOrderDate);
        queryWrapper.eq(EamTechnicalStatusEvaluationOrder::getDelFlag, CommonConstant.DEL_FLAG_0);
        LocalDate localDate = LocalDate.now();
        queryWrapper.lt(EamTechnicalStatusEvaluationOrder::getFreezeOrderDate, localDate.toString());
        return this.getBaseMapper().selectList(queryWrapper);
    }
    @Override
    public List<EamTechnicalStatusEvaluationOrder> selectUncompletedEvaluationOrderList() {
        LambdaQueryWrapper<EamTechnicalStatusEvaluationOrder> queryWrapper = new LambdaQueryWrapper<>();
        List<String> statusList = Arrays.asList(TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name(),
                TechnicalStatusEvaluationOrderStatusEnum.UNDER_EVALUATION.name(),
                TechnicalStatusEvaluationOrderStatusEnum.REPAIRER_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.REPAIR_MANAGER_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.PROCESS_TECHNICIAN_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.DEPART_TECHNICAL_LEADER_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.INSPECTOR_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.LOCKED.name()
        );
        queryWrapper.in(EamTechnicalStatusEvaluationOrder::getEvaluationStatus, statusList);
        queryWrapper.isNotNull(EamTechnicalStatusEvaluationOrder::getOrderExpirationDate);
        queryWrapper.eq(EamTechnicalStatusEvaluationOrder::getDelFlag, CommonConstant.DEL_FLAG_0);
        LocalDate localDate = LocalDate.now();
        queryWrapper.lt(EamTechnicalStatusEvaluationOrder::getOrderExpirationDate, localDate.toString());
        return this.getBaseMapper().selectList(queryWrapper);
    }
    /**
     * 技术鉴定表批量打印接口
     * @param ids
     * @param type
     * @return
     */
    @Override
    public List<EamTechnicalStatusEvaluationOrderResult> batchPrint(String ids, String type){
        QueryWrapper<EamTechnicalStatusEvaluationOrder> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ems.del_flag",CommonConstant.DEL_FLAG_0.toString());
        queryWrapper.eq("ems.evaluation_status",TechnicalStatusEvaluationOrderStatusEnum.COMPLETED.name());
        //用户数据权限
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null) {
            return new ArrayList<>();
        }
        if (StringUtils.isNotBlank(sysUser.getEamEquipmentIds())) {
            //选择了设备,根据设备id过滤设备
            List<String> equipArr = Arrays.asList(sysUser.getEamEquipmentIds().split(","));
            queryWrapper.in("e.equipment_code", equipArr);
        } else {
            //没有选择设备,根据中心过滤设备
            List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
            if(!CollectionUtils.isEmpty(baseFactoryUserList)){
                Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
                Set<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
                queryWrapper.in("e.factory_org_code", factoryCode);
            } else {
                return new ArrayList<>();
            }
        }
        //查询条件过滤
        if (StrUtil.isNotEmpty(ids)) {
            List<String> idList = Arrays.asList(ids.split(","));
            queryWrapper.in("ems.id", idList);
        } else {
            queryWrapper.orderByDesc("ems.create_time");
        }
        List<EamTechnicalStatusEvaluationOrderResult> list = this.baseMapper.queryList(queryWrapper);
        list.forEach(item->{
            if (TechnicalStatusEvaluationCheckCategoryEnum.SAFETY_EQUIPMENT_CHECK.name().equals(type)){
                List<EamTechnicalStatusEvaluationOrderDetail> evaluationStandardDetails=
                        eamTechnicalStatusEvaluationOrderDetailService.queryList(item.getId(),TechnicalStatusEvaluationCheckCategoryEnum.SAFETY_EQUIPMENT_CHECK.name());
                item.setTableSafetyDetailList(evaluationStandardDetails);
            }else if (TechnicalStatusEvaluationCheckCategoryEnum.PRECISION_CHECK.name().equals(type)){
                List<EamTechnicalStatusEvaluationOrderDetail> evaluationOrderDetails=
                        eamTechnicalStatusEvaluationOrderDetailService.queryList(item.getId(),TechnicalStatusEvaluationCheckCategoryEnum.PRECISION_CHECK.name());
                item.setTablePrecisionDetailList(evaluationOrderDetails);
            }else  if (TechnicalStatusEvaluationCheckCategoryEnum.OTHER_CHECK.name().equals(type)){
                List<EamTechnicalStatusEvaluationOrderDetail> evaluationOrderDetails=
                        eamTechnicalStatusEvaluationOrderDetailService.queryList(item.getId(),TechnicalStatusEvaluationCheckCategoryEnum.OTHER_CHECK.name());
                item.setTableOtherDetailList(evaluationOrderDetails);
            }
        });
        return list;
    }
    private EamTechnicalStatusEvaluationOrder checkDuplicate(String equipmentId) {
        LambdaQueryWrapper<EamTechnicalStatusEvaluationOrder> queryWrapper = new LambdaQueryWrapper<>();
        List<String> statusList = Arrays.asList(TechnicalStatusEvaluationOrderStatusEnum.WAIT_EVALUATION.name(),
                TechnicalStatusEvaluationOrderStatusEnum.UNDER_EVALUATION.name(),
                TechnicalStatusEvaluationOrderStatusEnum.REPAIRER_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.REPAIR_MANAGER_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.PROCESS_TECHNICIAN_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.DEPART_TECHNICAL_LEADER_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.INSPECTOR_SIGNING.name(),
                TechnicalStatusEvaluationOrderStatusEnum.LOCKED.name(),
                TechnicalStatusEvaluationOrderStatusEnum.CHANGING.name()
        );
        queryWrapper.in(EamTechnicalStatusEvaluationOrder::getEvaluationStatus, statusList);
        queryWrapper.eq(EamTechnicalStatusEvaluationOrder::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(EamTechnicalStatusEvaluationOrder::getEquipmentId, equipmentId);
        List<EamTechnicalStatusEvaluationOrder> list = this.getBaseMapper().selectList(queryWrapper);
        if (CollectionUtil.isEmpty(list)) {
            return null;
        }
        return list.get(0);
    }
    private void checkDetailResult(List<EamTechnicalStatusEvaluationOrderDetail> detailList, TechnicalStatusEvaluationCheckCategoryEnum checkCategory) {
        boolean b;
        switch (checkCategory) {