From 13cddfef9a8ad508228e5d14906e4baf73875701 Mon Sep 17 00:00:00 2001 From: mashuai Date: Tue, 11 Mar 2025 09:15:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=B4=E4=BF=AE=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/constant/TaskTypeConstants.java | 5 + .../sgzb/common/core/enums/TaskTypeEnum.java | 4 + .../sgzb/base/domain/RepairTaskDetails.java | 11 + .../bonus/sgzb/base/mapper/RepairMapper.java | 14 ++ .../base/service/impl/RepairServiceImpl.java | 196 +++++++++++++++++- .../resources/mapper/base/RepairMapper.xml | 123 ++++++++++- 6 files changed, 340 insertions(+), 13 deletions(-) diff --git a/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/constant/TaskTypeConstants.java b/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/constant/TaskTypeConstants.java index c9cd89b..d1870b6 100644 --- a/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/constant/TaskTypeConstants.java +++ b/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/constant/TaskTypeConstants.java @@ -17,5 +17,10 @@ public class TaskTypeConstants { */ public static final String WX = "WX"; + /** + * 维修审核任务 + */ + public static final String WS = "WS"; + } diff --git a/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/enums/TaskTypeEnum.java b/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/enums/TaskTypeEnum.java index eb693be..398e192 100644 --- a/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/enums/TaskTypeEnum.java +++ b/sgzb-common/sgzb-common-core/src/main/java/com/bonus/sgzb/common/core/enums/TaskTypeEnum.java @@ -17,6 +17,10 @@ public enum TaskTypeEnum { *维修任务 */ MAINTENANCE_TASK(41, "维修任务"), + /** + * 维修审核任务 + */ + REPAIR_AUDIT_TASK(45, "维修审核任务"), /** * 报废任务 */ diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/domain/RepairTaskDetails.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/domain/RepairTaskDetails.java index 57c9d64..4464b03 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/domain/RepairTaskDetails.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/domain/RepairTaskDetails.java @@ -84,6 +84,8 @@ public class RepairTaskDetails { private String keyword; private String typeId; private String repairRemark; + + private String remark; private Long companyId; /** * 任务创建人 @@ -91,4 +93,13 @@ public class RepairTaskDetails { @ApiModelProperty(value = "任务创建人") private Long createBy; + @ApiModelProperty(value = "退料id") + private Long backId; + + @ApiModelProperty(value = "维修拆分层级") + private String level; + + @ApiModelProperty(value = "维修拆分父级id") + private Long parentId; + } diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/mapper/RepairMapper.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/mapper/RepairMapper.java index 53b1de4..7fd282f 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/mapper/RepairMapper.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/mapper/RepairMapper.java @@ -163,4 +163,18 @@ public interface RepairMapper { int addRepairCost(@Param("bean") RepairApplyRecord bean, @Param("costs") BigDecimal costs,@Param("partType") String partType); BigDecimal selectPartPrice(Long partId); + + /** + * 修改维修状态 + * @param id + * @return + */ + int updateStatus(@Param("id") Long id); + + /** + * 新增维修记录 + * @param repairTaskDetail + * @return + */ + int insertRepaired(RepairTaskDetails repairTaskDetail); } diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/service/impl/RepairServiceImpl.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/service/impl/RepairServiceImpl.java index a862232..170b859 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/service/impl/RepairServiceImpl.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/base/service/impl/RepairServiceImpl.java @@ -1,6 +1,7 @@ package com.bonus.sgzb.base.service.impl; import com.bonus.sgzb.app.mapper.BackReceiveMapper; +import com.bonus.sgzb.base.api.domain.BackApplyInfo; import com.bonus.sgzb.base.api.domain.FileInfo; import com.bonus.sgzb.base.domain.RepairApplyRecord; import com.bonus.sgzb.base.domain.RepairPartDetails; @@ -9,8 +10,12 @@ import com.bonus.sgzb.base.domain.RepairTaskDetails; import com.bonus.sgzb.base.domain.vo.DictVo; import com.bonus.sgzb.base.mapper.RepairMapper; import com.bonus.sgzb.base.service.RepairService; +import com.bonus.sgzb.common.core.constant.TaskTypeConstants; +import com.bonus.sgzb.common.core.enums.TaskStatusEnum; +import com.bonus.sgzb.common.core.enums.TaskTypeEnum; import com.bonus.sgzb.common.core.exception.ServiceException; import com.bonus.sgzb.common.core.utils.DateUtils; +import com.bonus.sgzb.common.core.utils.StringUtils; import com.bonus.sgzb.common.core.web.domain.AjaxResult; import com.bonus.sgzb.common.security.utils.SecurityUtils; import com.bonus.sgzb.material.domain.TmTask; @@ -20,10 +25,13 @@ import com.bonus.sgzb.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -264,29 +272,209 @@ public class RepairServiceImpl implements RepairService { @Transactional(rollbackFor = Exception.class) public AjaxResult endRepairTask(List taskList) { LoginUser loginUser = SecurityUtils.getLoginUser(); + // 1.查询选择任务是否还有未完成维修的数据 for (RepairTask task : taskList) { - int i = mapper.getUnFinish(task); - if (i > 0) { - throw new ServiceException("选中的数据中包含维修未完成的,请完成维修再进行提交审核"); + // 查询选择的任务中是否存在未维修的单子,进行不能提交审核提醒 + List detailsList = mapper.getDetailsListByTaskId(task); + if (!CollectionUtils.isEmpty(detailsList)) { + int repairedNum = 0; + int scrapNum = 0; + String taskCode = ""; + for (RepairTaskDetails repairTaskDetails : detailsList) { + repairedNum = repairedNum + repairTaskDetails.getRepairedNum(); + scrapNum = scrapNum + repairTaskDetails.getScrapNum(); + taskCode = repairTaskDetails.getCode(); + } + if (repairedNum + scrapNum == 0) { + return AjaxResult.error("维修单号" + taskCode + "还未进行维修,请先维修后再提交审核!"); + } } } int i = mapper.updateTaskStatus(taskList, loginUser.getUserid()); + if (i == 0) { + return AjaxResult.error("修改外层任务状态失败"); + } for (RepairTask task : taskList) { + // 维修拆分标志 + boolean isWxFlag = false; + // 维修拆分数据集合 + List repairTaskDetails = new ArrayList<>(); task.setCreateBy(loginUser.getUserid()); Long agreementId = mapper.getAgreementId(task); + //生成维修审核单号 + String code = genWsCodeRule(TaskTypeEnum.REPAIR_AUDIT_TASK.getCode()); List detailsList = mapper.getDetailsListByTaskId(task); + task.setRepairCode(code); mapper.addTask(task); for (RepairTaskDetails details : detailsList) { + // 将待修状态改为已维修 + i = mapper.updateStatus(details.getId()); + if (i == 0) { + throw new ServiceException("待修状态修改失败"); + } + if (StringUtils.isNotBlank(details.getMaId())) { + if ("0".equals(details.getStatus())) { + isWxFlag = true; + details.setLevel((StringUtils.isNotBlank(details.getLevel())) ? String.valueOf(Integer.parseInt(details.getLevel()) + 1) : "1"); + details.setParentId(details.getId()); + repairTaskDetails.add(details); + continue; + } + } else { + int repairNum = details.getRepairNum(); + int repairedNum = details.getRepairedNum(); + int scrapNum = details.getScrapNum(); + if (repairedNum + scrapNum < repairNum) { + isWxFlag = true; + RepairTaskDetails taskDetails = new RepairTaskDetails(); + taskDetails.setRepairNum(repairNum - repairedNum - scrapNum); + taskDetails.setTypeId(details.getTypeId()); + taskDetails.setLevel((StringUtils.isNotBlank(details.getLevel())) ? String.valueOf(Integer.parseInt(details.getLevel()) + 1) : "1"); + taskDetails.setParentId(details.getId()); + taskDetails.setBackId(details.getBackId()); + taskDetails.setCreateBy(details.getCreateBy()); + repairTaskDetails.add(taskDetails); + } + } details.setCreateBy(loginUser.getUserid()); details.setTaskId(task.getTaskId()); - mapper.addAuditDetails(details); + details.setRepairNum(details.getRepairedNum() + details.getScrapNum()); + // 如果合格数和报废数都为0,则未进行维修,不插入审核表 + if (details.getRepairedNum() == 0 && + details.getScrapNum() == 0) { + continue; + } + i = mapper.addAuditDetails(details); + if (i == 0) { + throw new ServiceException("维修审核添加失败"); + } } task.setAgreementId(agreementId); mapper.createAgreementTask(task); + // 进行维修拆分 + if (isWxFlag) { + // 插入任务表 + Long newTaskId = insertTt(SecurityUtils.getUsername()); + // 插入协议任务表 + int res = insertTta(newTaskId, agreementId); + if (res <= 0) { + throw new ServiceException("协议任务表插入失败"); + } + if (!CollectionUtils.isEmpty(repairTaskDetails)) { + for (RepairTaskDetails repairTaskDetail : repairTaskDetails) { + repairTaskDetail.setTaskId(String.valueOf(newTaskId)); + repairTaskDetail.setStatus("0"); + i = mapper.insertRepaired(repairTaskDetail); + if (i == 0) { + throw new ServiceException("维修拆分插入失败"); + } + } + } else { + throw new ServiceException("维修拆分数据组装错误"); + } + } } return AjaxResult.success(); } + /** + * 插入协议任务表 + * @param newTaskId + * @param agreementId + * @return + */ + private int insertTta(Long newTaskId, Long agreementId) { + int res; + RepairTask task = new RepairTask(); + task.setTaskId(newTaskId.toString()); + task.setAgreementId(agreementId); + task.setCreateBy(SecurityUtils.getUserId()); + res = mapper.createAgreementTask(task); + return res; + } + + /** + * 生成维修任务单号 + * @param username + * @return + */ + private Long insertTt(String username) { + int newTask; + //生成单号 + String code = genWxCodeRule(TaskTypeEnum.MAINTENANCE_TASK.getCode()); + BackApplyInfo applyInfo = new BackApplyInfo(); + applyInfo.setTaskType(TaskTypeEnum.MAINTENANCE_TASK.getCode()); + applyInfo.setTaskStatus(TaskStatusEnum.REPAIRPENDING.getCode()); + applyInfo.setCode(code); + //创建人 + applyInfo.setCreateBy(username); + newTask = backReceiveMapper.insertTt(applyInfo); + if (newTask > 0 && applyInfo.getTaskId() > 0) { + newTask = applyInfo.getTaskId(); + } + return (long) newTask; + } + + /** + * 生成维修任务单号 + * @param taskType + * @return + */ + private String genWxCodeRule(Integer taskType) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + Integer taskNum = backReceiveMapper.selectTaskNumByMonthWx(nowDate, taskType); + + String taskNumStr = ""; + if (taskNum != null) { + // 将字符串转换为整数 +// int num = Integer.parseInt(taskNum); + // 执行加一操作 + taskNum++; + // 将结果转换回字符串格式,并确保结果是四位数,不足四位则在前面补0 + taskNumStr = String.format("%04d", taskNum); + } else { + taskNumStr = "0001"; + } + String code = ""; + if (TaskTypeEnum.MAINTENANCE_TASK.getCode().equals(taskType)) { + code = TaskTypeConstants.WX; + } + code = code + format + "-" + taskNumStr; + return code; + } + + /** + * 生成维修审核任务单号 + * @param taskType + * @return + */ + private String genWsCodeRule(Integer taskType) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + Integer taskNum = backReceiveMapper.selectTaskNumByMonthWx(nowDate, taskType); + + String taskNumStr = ""; + if (taskNum != null) { + // 将字符串转换为整数 +// int num = Integer.parseInt(taskNum); + // 执行加一操作 + taskNum++; + // 将结果转换回字符串格式,并确保结果是四位数,不足四位则在前面补0 + taskNumStr = String.format("%04d", taskNum); + } else { + taskNumStr = "0001"; + } + String code = ""; + if (TaskTypeEnum.REPAIR_AUDIT_TASK.getCode().equals(taskType)) { + code = TaskTypeConstants.WS; + } + code = code + format + "-" + taskNumStr; + return code; + } + @Override public List getDicSelect(String value) { return mapper.getDicSelect(value); diff --git a/sgzb-modules/sgzb-material/src/main/resources/mapper/base/RepairMapper.xml b/sgzb-modules/sgzb-material/src/main/resources/mapper/base/RepairMapper.xml index d206039..c89579a 100644 --- a/sgzb-modules/sgzb-material/src/main/resources/mapper/base/RepairMapper.xml +++ b/sgzb-modules/sgzb-material/src/main/resources/mapper/base/RepairMapper.xml @@ -25,6 +25,95 @@ insert into repair_cost (task_id,repair_id,type_id,ma_id,repair_num,costs,part_type,status,company_id) values (#{bean.taskId},#{bean.id},#{bean.typeId},#{bean.maId},#{bean.repairNum},#{costs},#{partType},'0',#{bean.companyId}); + + insert into repair_apply_details + ( + + task_id, + + + ma_id, + + + type_id, + + + repair_num, + + + status, + + + create_by, + + + update_by, + + update_time, + + remark, + + + company_id, + + + back_id, + + + level, + + + parent_id, + + + repair_remark, + + create_time + ) + values ( + + #{taskId}, + + + #{maId}, + + + #{typeId}, + + + #{repairNum}, + + + #{status}, + + + #{createBy}, + + + #{createBy}, + + NOW(), + + #{remark}, + + + #{companyId}, + + + #{backId}, + + + #{level}, + + + #{parentId}, + + + #{repairRemark}, + + NOW() + ) + update repair_apply_details set repaired_num = #{repairNum}, @@ -68,6 +157,15 @@ where id = #{id} + + update + repair_apply_details + set + status = '1' + where + id = #{id} + +