diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/controller/RepairController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/controller/RepairController.java index 01b0fbf2..cbb2a1cc 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/controller/RepairController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/controller/RepairController.java @@ -232,19 +232,4 @@ public class RepairController extends BaseController { return js; } -// public static void main(String[] args) { -// String url = "http://10.138.55.102:10000/api_gqj/pre"; -// JSONObject js = null; -// try { -// OCRBean o = new OCRBean(); -// String jsonStr = JSONObject.toJSONString(o); -// String data = "{\"code\": \"fack_code\"}"; //HttpHelper.sendHttpPostForToken(url, jsonStr); -// js = JSONObject.parseObject(data); -// System.out.println(js); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } - - } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTask.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTask.java index 76cdca29..6b301fc4 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTask.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTask.java @@ -32,6 +32,12 @@ public class RepairTask { @ApiModelProperty(value = "任务当月序号 例如:1 插入及查询时请携带任务类型") private Integer monthOrder; + @ApiModelProperty(value = "维修拆分层级") + private String level; + + @ApiModelProperty(value = "维修拆分父级id") + private Long parentId; + /** * 维修单号 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTaskDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTaskDetails.java index a13c07c1..951d42f2 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTaskDetails.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/RepairTaskDetails.java @@ -26,6 +26,13 @@ public class RepairTaskDetails extends BaseEntity { */ @ApiModelProperty(value = "任务ID") private Long taskId; + + /** + * 前任务ID + */ + @ApiModelProperty(value = "前任务ID") + private Long preTaskId; + /** * 机具ID */ @@ -114,6 +121,30 @@ public class RepairTaskDetails extends BaseEntity { @ApiModelProperty(value = "维修任务编码") private String taskCode; + @ApiModelProperty(value = "维修拆分层级") + private String level; + + @ApiModelProperty(value = "维修拆分父级id") + private Long parentId; + + /** + * 维修前总量 + */ + @ApiModelProperty(value = "维修前总量") + private BigDecimal preRepairNum; + + /** + * 维修前合格总量 + */ + @ApiModelProperty(value = "维修前合格总量") + private BigDecimal preRepairedNum; + + /** + * 维修前报废总量 + */ + @ApiModelProperty(value = "维修前报废总量") + private BigDecimal preScrapNum; + public RepairTaskDetails(Long taskId) { this.taskId = taskId; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceVO.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceVO.java index a72397ec..1d87ae14 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceVO.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceVO.java @@ -26,6 +26,9 @@ public class RepairDeviceVO { @ApiModelProperty(value = "任务ID") private Long taskId; + @ApiModelProperty(value = "任务ID") + private Long newTaskId; + @ApiModelProperty(value = "设备表主键id") private Long maId; @@ -110,6 +113,14 @@ public class RepairDeviceVO { @ApiModelProperty(value = "报废附件") private List fileList; + private String createBy; + + @ApiModelProperty(value = "维修拆分层级") + private String level; + + @ApiModelProperty(value = "维修拆分父级id") + private Long parentId; + // 手动覆盖 getter 方法,确保 List 始终被初始化 public List getCodeInRepairPartList() { if (this.codeInRepairPartList == null) {this.codeInRepairPartList = new ArrayList<>();} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairApplyDetailsMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairApplyDetailsMapper.java index 66ae4cd1..6fd74698 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairApplyDetailsMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairApplyDetailsMapper.java @@ -1,7 +1,9 @@ package com.bonus.material.repair.mapper; +import java.util.ArrayList; import java.util.List; import com.bonus.material.repair.domain.RepairApplyDetails; +import com.bonus.material.repair.domain.RepairAuditDetails; import com.bonus.material.repair.domain.RepairTaskDetails; import org.apache.ibatis.annotations.Param; @@ -75,7 +77,21 @@ public interface RepairApplyDetailsMapper { * @param repairId * @return */ - String selectById(Long repairId); + RepairAuditDetails selectById(Long repairId); int updateStatus(@Param("repairId") Long repairId, @Param("status") Integer status); + + /** + * 获取维修任务详情 + * @param ids + * @return + */ + List getList(@Param("list") ArrayList ids); + + /** + * 根据旧维修任务ID获取维修任务详情 + * @param oldWxTaskId + * @return + */ + List getRepairDetails(Long oldWxTaskId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairMapper.java index c06af176..067b1c0d 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/mapper/RepairMapper.java @@ -212,4 +212,25 @@ public interface RepairMapper { * @return */ List getAuditDetailsById(RepairTaskDetails details); + + /** + * 新增维修任务明细 + * @param bean + * @return + */ + int insertRepaired(RepairDeviceVO bean); + + /** + * 查询维修任务明细 + * @param taskList + * @return + */ + List getRepairTaskDetails(@Param("list") List taskList); + + /** + * 查询维修任务明细 + * @param details + * @return + */ + List getRepairDetailsById(RepairTaskDetails details); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairAuditDetailsServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairAuditDetailsServiceImpl.java index de137a2b..7f73bf87 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairAuditDetailsServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairAuditDetailsServiceImpl.java @@ -515,7 +515,8 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService // 查询维修审核明细 final List repairAuditDetailList = repairAuditDetailsMapper.selectRepairAuditDetailsByTaskIds(Collections.singletonList(repairAuditDetail.getTaskId())); // 批量插入维修入库明细 - batchInsertRepairInputDetails(repairAuditDetailList, agreementId); + List scrapApplyDetails = new ArrayList<>(); + batchInsertRepairInputDetails(scrapApplyDetails, repairAuditDetailList, agreementId); // 更新任务状态 taskMapper.updateTaskStatus(String.valueOf(repairAuditDetail.getTaskId()), RepairTaskStatusEnum.TASK_STATUS_REVIEW.getStatus()); } @@ -577,11 +578,13 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService final RepairAuditDetails auditDetails1 = repairAuditDetails.get(0); final String status = auditDetails1.getStatus(); // 1通过 2驳回 // 根据repairId查询前任务id - String preTaskId = repairApplyDetailsMapper.selectById(auditDetails1.getRepairId()); + RepairAuditDetails dto = repairApplyDetailsMapper.selectById(auditDetails1.getRepairId()); + // 查询报废详情 + final List scrapApplyDetails = scrapApplyDetailsMapper.selectScrapByTaskId(dto); if ("1".equals(status)) { //根据任务id查询协议id final Long agreementId = taskAgreementMapper.selectAgreementIdByTaskId(auditDetails1.getTaskId()); - batchInsertRepairInputDetails(repairAuditDetails, agreementId); + batchInsertRepairInputDetails(scrapApplyDetails,repairAuditDetails, agreementId); } else if ("2".equals(status)) { for (final RepairAuditDetails auditDetails : repairAuditDetails) { repairApplyDetailsMapper.updateRepairApplyDetailsAfterReject( @@ -589,7 +592,7 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService ObjectUtils.defaultIfNull(auditDetails.getScrapNum(),0).longValue(), auditDetails.getRepairId()); repairApplyDetailsMapper.updateStatus(auditDetails.getRepairId(), RepairTaskStatusEnum.TASK_STATUS_PROCESSING.getStatus()); } - taskMapper.updateTaskStatus(preTaskId, RepairTaskStatusEnum.TASK_STATUS_PROCESSING.getStatus()); + taskMapper.updateTaskStatus(dto.getTaskId().toString(), RepairTaskStatusEnum.TASK_STATUS_PROCESSING.getStatus()); } try { @@ -630,7 +633,7 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService // System.out.println(b); // } - private void batchInsertRepairInputDetails(List repairAuditDetailsByQuery, Long agreementId) { + private void batchInsertRepairInputDetails(List scrapApplyDetailList, List repairAuditDetailsByQuery, Long agreementId) { boolean inputFlag = false; boolean scrapFlag = false; for (RepairAuditDetails repairAuditDetails : repairAuditDetailsByQuery) { @@ -659,6 +662,8 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService } final List inputList = new ArrayList<>(); for (final RepairAuditDetails details : repairAuditDetailsByQuery) { + RepairAuditDetails dto = repairApplyDetailsMapper.selectById(details.getRepairId()); + List list = scrapApplyDetailsMapper.selectScrapByTaskId(dto); //修改机具状态 if (null != details.getMaId()) { repairAuditDetailsMapper.updateMachine(details); @@ -674,6 +679,13 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService inputList.add(inputVo); } if (details.getScrapNum().compareTo(BigDecimal.ZERO) > 0) { + ScrapApplyDetails bean = null; + if (!CollectionUtils.isEmpty(list)) { + bean = list.get(0); + } + if (!CollectionUtils.isEmpty(scrapApplyDetailList)) { + bean = scrapApplyDetailList.get(0); + } ScrapApplyDetails scrapApplyDetails = new ScrapApplyDetails(); scrapApplyDetails.setTaskId(newScrapTaskId); scrapApplyDetails.setTypeId(details.getTypeId()); @@ -684,6 +696,10 @@ public class RepairAuditDetailsServiceImpl implements IRepairAuditDetailsService scrapApplyDetails.setParentId(details.getId()); scrapApplyDetails.setCreateBy(SecurityUtils.getUsername()); scrapApplyDetails.setCreateTime(new Date()); + if (bean != null) { + scrapApplyDetails.setScrapReason(bean.getScrapReason() == null ? "" : bean.getScrapReason()); + scrapApplyDetails.setScrapType(bean.getScrapType() == null ? null : bean.getScrapType()); + } scrapApplyDetailsMapper.insertScrapApplyDetails(scrapApplyDetails); } } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java index 8cbae59b..fda67ada 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java @@ -23,6 +23,8 @@ import com.bonus.material.repair.mapper.RepairMapper; import com.bonus.material.repair.service.RepairService; import com.bonus.material.settlement.mapper.SltAgreementInfoMapper; import com.bonus.material.task.domain.TmTask; +import com.bonus.material.task.domain.TmTaskAgreement; +import com.bonus.material.task.mapper.TmTaskAgreementMapper; import com.bonus.material.task.mapper.TmTaskMapper; import com.bonus.system.api.domain.SysUser; import com.bonus.system.api.model.LoginUser; @@ -70,6 +72,9 @@ public class RepairServiceImpl implements RepairService { @Resource private SltAgreementInfoMapper sltAgreementInfoMapper; + @Resource + private TmTaskAgreementMapper taskAgreementMapper; + // 1:内部维修 2:外部返厂维修 3:报废 private final int INNER_REPAIR = 1; // 需要严格匹配枚举值 RepairTypeEnum.INNER_REPAIR.getTypeId(); private final int RETURN_FACTORY = 2; // 需要严格匹配枚举值 RepairTypeEnum.RETURN_FACTORY.getTypeId(); @@ -455,6 +460,9 @@ public class RepairServiceImpl implements RepairService { @Override public AjaxResult batchRepairApply(@NotNull List repairDeviceVOList) { + BigDecimal innerNum = BigDecimal.ZERO; + BigDecimal outerNum = BigDecimal.ZERO; + BigDecimal scrapRepairNum = BigDecimal.ZERO; // 准备业务逻辑数据 LoginUser loginUser = SecurityUtils.getLoginUser(); // 配件集合 @@ -462,7 +470,77 @@ public class RepairServiceImpl implements RepairService { // 校验参数,过滤空数据 repairDeviceVOList.removeIf(Objects::isNull); - + // 先根据任务id查询维修任务详情,判断是否需要维修拆分 + boolean isNeedSplit = false; + // 过滤出repairType不为null的RepairDeviceVO,并获取它们的id组成一个集合 + List idList = repairDeviceVOList.stream() + .filter(device -> device.getRepairType() != null) + .map(RepairDeviceVO::getId) + .collect(Collectors.toList()); + List detailsList = repairApplyDetailsMapper.getRepairDetailsWhichNotSent(repairDeviceVOList.get(0).getTaskId()); + if (!CollectionUtils.isEmpty(detailsList)) { + for (RepairTaskDetails bean : detailsList) { + for (RepairDeviceVO repairDeviceVO : repairDeviceVOList) { + if (Objects.equals(MaTypeManageTypeEnum.CODE_DEVICE.getTypeId(), repairDeviceVO.getManageType())) { + if (!idList.contains(bean.getId()) && "0".equals(bean.getStatus())) { + isNeedSplit = true; + break; + } + } else if (Objects.equals(MaTypeManageTypeEnum.NUMBER_DEVICE.getTypeId(), repairDeviceVO.getManageType())) { + if (!idList.contains(bean.getId()) && "0".equals(bean.getStatus())) { + isNeedSplit = true; + } else if (idList.contains(bean.getId())) { + if (Objects.equals(bean.getTypeId(), repairDeviceVO.getTypeId().toString())) { + if (CollectionUtil.isNotEmpty(repairDeviceVO.getNumberInRepairPartList())) { + partList = repairDeviceVO.getNumberInRepairPartList(); + if (null != partList.get(0).getRepairNum() && 0 < partList.get(0).getRepairNum().compareTo(BigDecimal.ZERO)) { + // 分拆维修单, 准备数据 + innerNum = partList.get(0).getRepairNum(); + } + } + if (CollectionUtil.isNotEmpty(repairDeviceVO.getNumberOutRepairPartList())) { + partList = repairDeviceVO.getNumberOutRepairPartList(); + if (null != partList.get(0).getRepairNum() && partList.get(0).getRepairNum().compareTo(BigDecimal.ZERO) > 0) { + // 分拆维修单, 准备数据 + outerNum = partList.get(0).getRepairNum(); + } + } + // 处理配件集合数据 -- 数量管理--报废维修 + if (CollectionUtil.isNotEmpty(repairDeviceVO.getNumberScrapRepairPartList())) { + // 判断报废数量是否为空 + if (repairDeviceVO.getNumberScrapRepairPartList().get(0).getScrapNum() != null && repairDeviceVO.getNumberScrapRepairPartList().get(0).getScrapNum().compareTo(BigDecimal.ZERO) > 0) { + // 获取维修详情表中的维修详情记录:待维修、已维修、已报废的数量 + RepairTaskDetails details = repairMapper.getById(bean.getId()); + if (Objects.isNull(details)) { + throw new ServiceException("此维修记录不存在,请检查后提交!"); + } + // 分拆维修单, 准备数据 + scrapRepairNum = repairDeviceVO.getNumberScrapRepairPartList().get(0).getScrapNum(); + } + } + } + } + BigDecimal add = innerNum.add(outerNum).add(scrapRepairNum); + BigDecimal subtract = bean.getRepairNum().subtract(bean.getRepairedNum()).subtract(bean.getScrapNum()); + if (add.compareTo(subtract) < 0) { + isNeedSplit = true; + } + } + } + } + } + Long newTaskId = null; + if (isNeedSplit) { + // 查询协议ID + Long agreementId = taskAgreementMapper.selectAgreementIdByTaskId(repairDeviceVOList.get(0).getTaskId()); + // 插入任务表 + newTaskId = insertTt(SecurityUtils.getUsername()); + // 插入协议任务表 + int res = insertTta(newTaskId, agreementId); + if (res <= 0) { + throw new ServiceException("协议任务表插入失败"); + } + } for (RepairDeviceVO bean : repairDeviceVOList) { if (null == bean.getManageType()) {throw new ServiceException("请选择物资管理方式");} if (Objects.equals(MaTypeManageTypeEnum.CODE_DEVICE.getTypeId(), bean.getManageType())) { @@ -475,12 +553,29 @@ public class RepairServiceImpl implements RepairService { partList = bean.getCodeInRepairPartList(); // 更新维修数量、并修改维修人员 repairMapper.updateRepairedNumAndStatus(bean.getId(), BigDecimal.ONE, 1, loginUser.getUsername(), loginUser.getUserid()); + if (isNeedSplit) { + bean.setNewTaskId(newTaskId); + bean.setRepairer(loginUser.getUsername()); + bean.setRepairedNum(bean.getRepairNum()); + bean.setParentId(bean.getId()); + bean.setLevel((StringUtils.isNotBlank(bean.getLevel())) ? String.valueOf(Integer.parseInt(bean.getLevel()) + 1) : "1"); + bean.setCreateBy(SecurityUtils.getUsername()); + repairMapper.insertRepaired(bean); + } break; } case RETURN_FACTORY: { partList = bean.getCodeOutRepairPartList(); // 更新维修数量、维修人员不变 repairMapper.updateRepairedNumTwoAndStatus(bean.getId(), BigDecimal.ONE, 1, loginUser.getUserid()); + if (isNeedSplit) { + bean.setNewTaskId(newTaskId); + bean.setRepairedNum(bean.getRepairNum()); + bean.setParentId(bean.getId()); + bean.setLevel((StringUtils.isNotBlank(bean.getLevel())) ? String.valueOf(Integer.parseInt(bean.getLevel()) + 1) : "1"); + bean.setCreateBy(SecurityUtils.getUsername()); + repairMapper.insertRepaired(bean); + } break; } case TO_SCRAP: { @@ -488,6 +583,14 @@ public class RepairServiceImpl implements RepairService { partList = bean.getCodeScrapRepairPartList(); // 更新报废数量 repairMapper.updateScrapNumAndStatus(bean.getId(), BigDecimal.ONE, 1, loginUser.getUserid()); + if (isNeedSplit) { + bean.setNewTaskId(newTaskId); + bean.setScrapNum(bean.getRepairNum()); + bean.setParentId(bean.getId()); + bean.setLevel((StringUtils.isNotBlank(bean.getLevel())) ? String.valueOf(Integer.parseInt(bean.getLevel()) + 1) : "1"); + bean.setCreateBy(SecurityUtils.getUsername()); + repairMapper.insertRepaired(bean); + } break; } default: @@ -504,7 +607,7 @@ public class RepairServiceImpl implements RepairService { } // 统一处理配件集合数据 - copeNumberManageInList(bean, partList, loginUser, bean.getManageType()); + copeNumberManageInList(bean, partList, loginUser, bean.getManageType(), isNeedSplit, newTaskId); } else if (Objects.equals(MaTypeManageTypeEnum.NUMBER_DEVICE.getTypeId(), bean.getManageType())) { // 物资管理方式--数量管理 @@ -547,7 +650,7 @@ public class RepairServiceImpl implements RepairService { // 分拆维修单, 准备数据 innerRepairNum = partList.get(0).getRepairNum(); // 处理配件集合数据 - copeNumberManageInList(bean, partList, loginUser, bean.getManageType()); + copeNumberManageInList(bean, partList, loginUser, bean.getManageType(), isNeedSplit, newTaskId); } } @@ -627,6 +730,10 @@ public class RepairServiceImpl implements RepairService { // 因报废操作无需配件, 只添加【维修记录表】 repairMapper.addRecord(repairApplyRecord); + if (isNeedSplit) { + repairApplyRecord.setTaskId(newTaskId); + repairMapper.addRecord(repairApplyRecord); + } } } else { // 报废类型无需配件,所以配件为空,添加【维修记录表】 @@ -641,13 +748,28 @@ public class RepairServiceImpl implements RepairService { // 因报废操作无需配件, 只添加【维修记录表】 repairMapper.addRecord(repairApplyRecord); + if (isNeedSplit) { + repairApplyRecord.setTaskId(newTaskId); + repairMapper.addRecord(repairApplyRecord); + } } } } // 拆分维修单 splitRepairDetailsToMultiple(bean, innerRepairNum, outerRepairNum, scrapNum, loginUser); - + if (isNeedSplit) { + // 维修单拆分合并 + bean.setNewTaskId(newTaskId); + bean.setRepairNum(innerRepairNum.add(outerRepairNum).add(scrapNum)); + bean.setRepairedNum(innerRepairNum.add(outerRepairNum)); + bean.setScrapNum(scrapNum); + bean.setStatus("1"); + bean.setParentId(bean.getId()); + bean.setLevel((StringUtils.isNotBlank(bean.getLevel())) ? String.valueOf(Integer.parseInt(bean.getLevel()) + 1) : "1"); + bean.setCreateBy(SecurityUtils.getUsername()); + repairMapper.insertRepaired(bean); + } } else { throw new ServiceException("请选择正确的维修类型"); } @@ -656,6 +778,44 @@ public class RepairServiceImpl implements RepairService { return AjaxResult.success("维修完成"); } + /** + * 拆分维修单,生成任务协议表 + * @param newTaskId + * @param agreementId + * @return + */ + private int insertTta(Long newTaskId, Long agreementId) { + int res; + TmTaskAgreement tmTaskAgreement = new TmTaskAgreement(newTaskId, agreementId); + tmTaskAgreement.setCreateTime(DateUtils.getNowDate()); + tmTaskAgreement.setCreateBy(SecurityUtils.getUsername()); + res = taskAgreementMapper.insertTmTaskAgreement(tmTaskAgreement); + return res; + } + + /** + * 生成任务表 + * @param createBy + * @return + */ + private Long insertTt(String createBy) { + Long newTask = null; + int thisMonthMaxOrder = taskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_REPAIR.getTaskTypeId()); + // 生成维修单号 + String code = genderWxTaskCode(thisMonthMaxOrder); + TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_REPAIR.getTaskTypeId(), RepairTaskStatusEnum.TASK_STATUS_PROCESSING.getStatus(), + null,thisMonthMaxOrder + 1, code); + tmTask.setCreateTime(DateUtils.getNowDate()); + tmTask.setCreateBy(createBy); + // 插入任务 + int taskId = taskMapper.insertTmTask(tmTask); + // 如果插入成功且返回的 taskId 大于 0 + if (taskId > 0 && tmTask.getTaskId() > 0) { + newTask = tmTask.getTaskId(); + } + return newTask; + } + /** * 将维修详情拆分到多个类别 * 此方法用于根据内修、外修和报废数量更新维修记录, @@ -714,7 +874,7 @@ public class RepairServiceImpl implements RepairService { * @param loginUser 当前登录用户 * @param manageType 管理方式:0编码管理 1数量管理 */ - private void copeNumberManageInList(RepairDeviceVO bean, List partList, LoginUser loginUser, Integer manageType) { + private void copeNumberManageInList(RepairDeviceVO bean, List partList, LoginUser loginUser, Integer manageType, Boolean isNeedSplit, Long newTaskId) { if (CollectionUtil.isNotEmpty(partList)) { if (null == bean.getManageType()) { throw new ServiceException("请选择物资管理方式"); @@ -839,9 +999,14 @@ public class RepairServiceImpl implements RepairService { .setRepairNum(BigDecimal.valueOf(!RepairTypeEnum.TO_SCRAP.getTypeId().equals(bean.getRepairType()) ? 1 : 0)) .setScrapNum(BigDecimal.valueOf(RepairTypeEnum.TO_SCRAP.getTypeId().equals(bean.getRepairType()) ? 1 : 0)) .setCreateBy(loginUser.getUsername()); - + repairApplyRecord.setScrapType(partList.get(0).getScrapType()); + repairApplyRecord.setScrapReason(partList.get(0).getScrapReason()); // 不选维修配件时, 只添加【维修记录表】 repairMapper.addRecord(repairApplyRecord); + if (isNeedSplit) { + repairApplyRecord.setTaskId(newTaskId); + repairMapper.addRecord(repairApplyRecord); + } } } else { // 配件为空,添加【维修记录表】 @@ -851,9 +1016,14 @@ public class RepairServiceImpl implements RepairService { .setRepairNum(BigDecimal.valueOf(!RepairTypeEnum.TO_SCRAP.getTypeId().equals(bean.getRepairType()) ? 1 : 0)) .setScrapNum(BigDecimal.valueOf(RepairTypeEnum.TO_SCRAP.getTypeId().equals(bean.getRepairType()) ? 1 : 0)) .setCreateBy(loginUser.getUsername()); - + repairApplyRecord.setScrapType(partList.get(0).getScrapType()); + repairApplyRecord.setScrapReason(partList.get(0).getScrapReason()); // 不选维修配件时, 只添加【维修记录表】 repairMapper.addRecord(repairApplyRecord); + if (isNeedSplit) { + repairApplyRecord.setTaskId(newTaskId); + repairMapper.addRecord(repairApplyRecord); + } } } @@ -884,23 +1054,37 @@ public class RepairServiceImpl implements RepairService { throw new ServiceException("任务" + task.getTaskId() + "还有未完成维修的数据,请先完成维修"); } } - + // 根据taskId去查询维修任务详情,按照level进行重新排序,确保维修拆分顺利进行 + List list = repairMapper.getRepairTaskDetails(taskList); + // 根据查询的list集合,根据level进行从大到小级别排序 + list.sort(Comparator.comparing(RepairTask::getLevel).reversed()); // 3.业务逻辑处理 - for (RepairTask task : taskList) { + for (RepairTask task : list) { // 查询维修任务的详情表 Long oldWxTaskId = task.getTaskId(); + List preDetailsList = null; List detailsList = repairApplyDetailsMapper.getRepairDetailsWhichNotSent(oldWxTaskId); BigDecimal thisRepairedNum = detailsList.stream().map(RepairTaskDetails::getRepairedNum).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal thisScrapNum = detailsList.stream().map(RepairTaskDetails::getScrapNum).reduce(BigDecimal.ZERO, BigDecimal::add); if (!CollectionUtils.isEmpty(detailsList) && 0 < (thisRepairedNum.add(thisScrapNum)).compareTo(BigDecimal.ZERO)) { + if (StringUtils.isNotBlank(detailsList.get(0).getLevel()) && Integer.parseInt(detailsList.get(0).getLevel()) > 1){ + preDetailsList = repairApplyDetailsMapper.getRepairDetails(oldWxTaskId); + if (!CollectionUtils.isEmpty(preDetailsList)) { + for (RepairTaskDetails repairTaskDetails : preDetailsList) { + if (repairTaskDetails.getParentId() != null && repairTaskDetails.getParentId() != 0) { + preDetailsList = getPreDetailsForTask(repairTaskDetails); + } + } + } + } task.setCreateBy(loginUser.getUserid()); Long agreementId = repairMapper.getAgreementId(task); // 新增tm_task表数据、修饰审核任务、状态是待审核 task.setTaskType(TmTaskTypeEnum.TM_TASK_REPAIR_AUDIT.getTaskTypeId()); task.setTaskStatus(RepairTaskStatusEnum.TASK_STATUS_TO_EXAM.getStatus()); int thisMonthMaxOrder = taskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_REPAIR_AUDIT.getTaskTypeId()); - // 生成维修单号 - String code = genderWxTaskCode(thisMonthMaxOrder); + // 生成维修审核单号 + String code = genderWsTaskCode(thisMonthMaxOrder); task.setRepairCode(code); task.setMonthOrder(thisMonthMaxOrder + 1); // 插入之前的维修任务id标记前置任务 @@ -913,16 +1097,49 @@ public class RepairServiceImpl implements RepairService { // 新增审计记录 for (RepairTaskDetails details : detailsList) { - RepairApplyDetails repairApplyDetails = createRepairDetailsCope(details); - repairApplyDetailsMapper.updateRepairApplyDetails(repairApplyDetails); + /*RepairApplyDetails repairApplyDetails = createRepairDetailsCope(details); + repairApplyDetailsMapper.updateRepairApplyDetails(repairApplyDetails);*/ details.setCreateBy(String.valueOf(loginUser.getUserid())); details.setTaskId(task.getTaskId()); - details.setRepairNum(details.getRepairNum()); + /*details.setRepairNum(details.getRepairNum()); details.setRepairedNum(details.getRepairedNum()); - details.setScrapNum(details.getScrapNum()); + details.setScrapNum(details.getScrapNum());*/ // 先根据id查询审核表中是否存在数据,存在则不用重复插入 - if (CollectionUtils.isEmpty(repairMapper.getAuditDetailsById(details))) { - repairMapper.addAuditDetails(details); + if (StringUtils.isNotBlank(details.getMaId())) { + List taskDetails = repairMapper.getRepairDetailsById(details); + if (CollectionUtils.isEmpty(taskDetails)) { + repairMapper.addAuditDetails(details); + } + } else { + List taskDetails = repairMapper.getRepairDetailsById(details); + if (!CollectionUtils.isEmpty(taskDetails) && taskDetails.size() > 0) { + for (RepairTaskDetails taskDetail : taskDetails) { + if (!CollectionUtils.isEmpty(preDetailsList) && preDetailsList.size() > 0) { + //获取到preDetailsList中的typeId和taskDetail相同的数据 + for (RepairTaskDetails preDetails : preDetailsList) { + if (preDetails.getTypeId().equals(taskDetail.getTypeId())) { + if (taskDetail.getRepairNum().compareTo(preDetails.getPreRepairNum()) < 0) { + details.setRepairNum(preDetails.getPreRepairNum().subtract(taskDetail.getRepairNum())); + details.setScrapNum(preDetails.getPreScrapNum().subtract(taskDetail.getScrapNum()).compareTo(BigDecimal.ZERO) > 0 ? preDetails.getPreScrapNum().subtract(taskDetail.getScrapNum()) : BigDecimal.ZERO); + details.setRepairedNum(preDetails.getPreRepairedNum().subtract(taskDetail.getRepairedNum()).compareTo(BigDecimal.ZERO) > 0 ? preDetails.getPreRepairedNum().subtract(taskDetail.getRepairedNum()) : BigDecimal.ZERO); + repairMapper.addAuditDetails(details); + } + } + } + } else { + if (taskDetail.getTypeId().equals(details.getTypeId())) { + if (taskDetail.getRepairNum().compareTo(details.getRepairNum()) < 0) { + details.setRepairNum(details.getRepairNum().subtract(taskDetail.getRepairNum())); + details.setScrapNum(details.getScrapNum().subtract(taskDetail.getScrapNum()).compareTo(BigDecimal.ZERO) > 0 ? details.getScrapNum().subtract(taskDetail.getScrapNum()) : BigDecimal.ZERO); + details.setRepairedNum(details.getRepairedNum().subtract(taskDetail.getRepairedNum()).compareTo(BigDecimal.ZERO) > 0 ? details.getRepairedNum().subtract(taskDetail.getRepairedNum()) : BigDecimal.ZERO); + repairMapper.addAuditDetails(details); + } + } + } + } + } else { + repairMapper.addAuditDetails(details); + } } } } @@ -930,6 +1147,33 @@ public class RepairServiceImpl implements RepairService { return AjaxResult.success("执行完毕"); } + /** + * 获取前置任务详情 + * @param repairTaskDetails + * @return + */ + private List getPreDetailsForTask(RepairTaskDetails repairTaskDetails) { + // 如果 parentId 为 0,表示达到了根任务,返回当前任务列表 + if (repairTaskDetails.getParentId() == 0) { + return Collections.singletonList(repairTaskDetails); + } + + // 否则,继续递归查询上一个任务 + List preDetailsList = repairApplyDetailsMapper.getRepairDetails(repairTaskDetails.getPreTaskId()); + if (!CollectionUtils.isEmpty(preDetailsList)) { + for (RepairTaskDetails preRepairTaskDetails : preDetailsList) { + if (preRepairTaskDetails.getParentId() != null && preRepairTaskDetails.getParentId() != 0) { + // 递归查询父任务 + return getPreDetailsForTask(preRepairTaskDetails); + } else { + // 找到 parentId 为 0 的任务,返回该任务 + return Collections.singletonList(preRepairTaskDetails); + } + } + } + return Collections.emptyList(); // 如果没有找到,返回空列表 + } + private static RepairApplyDetails createRepairDetailsCope(RepairTaskDetails details) { RepairApplyDetails repairApplyDetails = new RepairApplyDetails(); repairApplyDetails.setId(details.getId()); @@ -941,15 +1185,28 @@ public class RepairServiceImpl implements RepairService { } /** - * 生成维修单号 + * 生成维修审核单号 * @param thisMonthMaxOrder 当前月最大序号 */ + private String genderWsTaskCode(int thisMonthMaxOrder) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date nowDate = DateUtils.getNowDate(); + String format = dateFormat.format(nowDate); + String result = format.replace("-", ""); + return MaterialConstants.REPAIR_AUDIT_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1); + } + + /** + * 生成维修单号 + * @param thisMonthMaxOrder + * @return + */ private String genderWxTaskCode(int thisMonthMaxOrder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date nowDate = DateUtils.getNowDate(); String format = dateFormat.format(nowDate); String result = format.replace("-", ""); - return MaterialConstants.REPAIR_AUDIT_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1); + return MaterialConstants.REPAIR_TASK_TYPE_LABEL + result + String.format("-%03d", thisMonthMaxOrder + 1); } @Override @@ -1017,8 +1274,59 @@ public class RepairServiceImpl implements RepairService { * 维修明细--批量合格--更新明细status,以及repairedNum */ @Override + @Transactional(rollbackFor = Exception.class) public int batchQualified(ArrayList ids) { - return repairMapper.batchQualified(ids, SecurityUtils.getLoginUser().getUserid()); + int result = 0; + try { + // 根据id查询任务状态 + RepairAuditDetails dto = repairApplyDetailsMapper.selectById(ids.get(0)); + List detailsList = repairApplyDetailsMapper.getRepairDetailsWhichNotSent(dto.getTaskId()); + if (!CollectionUtils.isEmpty(detailsList)) { + Set idsSet = new HashSet<>(ids); + // 如果detailsList中的status除了ids中的数据,其余皆为已完成,则不需要创建新的维修单 + boolean hasStatus = false; + for (RepairTaskDetails details : detailsList) { + if (!idsSet.contains(details.getId()) && "0".equals(details.getStatus())) { + hasStatus = true; + break; + } + } + if (hasStatus) { + // 查询协议ID + Long agreementId = taskAgreementMapper.selectAgreementIdByTaskId(dto.getTaskId()); + // 插入任务表 + Long newTaskId = insertTt(SecurityUtils.getUsername()); + // 插入协议任务表 + int res = insertTta(newTaskId, agreementId); + if (res <= 0) { + throw new ServiceException("协议任务表插入失败"); + } + List list = repairApplyDetailsMapper.getList(ids); + for (RepairTaskDetails details : list) { + RepairDeviceVO bean = new RepairDeviceVO(); + bean.setTaskId(newTaskId); + bean.setMaId(details.getMaId() == null ? null :Long.valueOf(details.getMaId())); + bean.setTypeId(Long.valueOf(details.getTypeId())); + bean.setRepairNum(details.getRepairNum().subtract(details.getRepairedNum() == null ? BigDecimal.ZERO : details.getRepairedNum())); + bean.setRepairedNum(details.getRepairNum().subtract(details.getRepairedNum() == null ? BigDecimal.ZERO : details.getRepairedNum())); + bean.setStatus("1"); + bean.setCreateBy(SecurityUtils.getUsername()); + bean.setBackId(details.getBackId()); + bean.setParentId(details.getId()); + bean.setLevel((StringUtils.isNotBlank(details.getLevel())) ? String.valueOf(Integer.parseInt(details.getLevel()) + 1) : "1"); + if ("0".equals(details.getStatus())) { + repairMapper.insertRepaired(bean); + } + } + } + } + result += repairMapper.batchQualified(ids, SecurityUtils.getLoginUser().getUserid()); + } catch (NumberFormatException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + return result; } @Override diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairApplyDetailsMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairApplyDetailsMapper.xml index 51a7315b..6d38b2ca 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairApplyDetailsMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairApplyDetailsMapper.xml @@ -127,7 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + select rad.id, + rad.ma_id as maId, + rad.type_id as typeId, + rad.repair_num as repairNum, + rad.repaired_num as repairedNum, + rad.this_repaired_num as thisRepairedNum, + rad.scrap_num as scrapNum, + rad.this_scrap_num as thisScrapNum, + rad.company_id as companyId, + rad.back_id as backId, + rad.status as status, + rad.level as level, + rad.parent_id as parentId + from repair_apply_details rad + where rad.id in + + #{id} + + + + + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml index c98c9ec8..0fc6a7db 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml @@ -23,9 +23,9 @@ insert into repair_audit_details (task_id,repair_id,ma_id,type_id,repair_num,repaired_num,scrap_num,status, - create_by,create_time,company_id) + create_by,create_time,company_id, back_id) values (#{taskId},#{id},#{maId},#{typeId},#{repairNum},#{repairedNum},#{scrapNum},'0',#{createBy},now(), - #{companyId}); + #{companyId}, #{backId}); @@ -33,6 +33,88 @@ values (#{bean.taskId},#{bean.id},#{bean.typeId},#{bean.maId},#{bean.repairNum},#{costs},#{partType},'0',#{bean.repairType}); + + insert into repair_apply_details + ( + + task_id, + + + ma_id, + + + type_id, + + + repair_num, + + + repaired_num, + + + scrap_num, + + + status, + + + create_by, + + + remark, + + + back_id, + + + level, + + + parent_id, + + create_time + ) + values ( + + #{newTaskId}, + + + #{maId}, + + + #{typeId}, + + + #{repairNum}, + + + #{repairedNum}, + + + #{scrapNum}, + + + #{status}, + + + #{createBy}, + + + #{remark}, + + + #{backId}, + + + #{level}, + + + #{parentId}, + + NOW() + ) + + update repair_apply_details set repaired_num = #{repairNum}, @@ -300,6 +382,8 @@ rad.update_time as updateTime, rad.type_id as typeId, rad.back_id as backId, + rad.level as level, + rad.parent_id as parentId, rad.create_time, bai.CODE AS backCode, ( SELECT COUNT(*) FROM repair_cost rc WHERE rc.repair_id = rad.id ) AS totalCostRecords, @@ -553,18 +637,60 @@ + + + +