From 983ec5db92ebd76a8ece828106f3abf3fb84bad6 Mon Sep 17 00:00:00 2001 From: mashuai Date: Wed, 19 Feb 2025 17:31:20 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PartCheckInfoController.java | 39 ++++ .../part/domain/PartTypeCheckDetails.java | 3 + .../part/domain/PartTypeQueryDto.java | 3 + .../part/domain/vo/PartChaseVerifyVo.java | 29 +++ .../part/mapper/PartArrivedMapper.java | 8 + .../material/part/mapper/PartCheckMapper.java | 27 +++ .../part/service/IPartCheckInfoService.java | 18 ++ .../impl/IPartCheckInfoServiceImpl.java | 180 ++++++++++++++++++ .../service/impl/PartAcceptServiceImpl.java | 37 +++- .../service/impl/PartArrivedServiceImpl.java | 127 +++++++++--- .../domain/dto/PurchaseNoticePersonDto.java | 5 + .../impl/PurchaseNoticePersonServiceImpl.java | 13 ++ .../mapper/material/part/PartAcceptMapper.xml | 5 +- .../material/part/PartArrivedMapper.xml | 20 +- .../mapper/material/part/PartCheckMapper.xml | 34 ++++ .../purchase/PurchaseCheckDetailsMapper.xml | 2 +- 16 files changed, 503 insertions(+), 47 deletions(-) create mode 100644 bonus-modules/bonus-material/src/main/java/com/bonus/material/part/controller/PartCheckInfoController.java create mode 100644 bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/vo/PartChaseVerifyVo.java create mode 100644 bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartCheckMapper.java create mode 100644 bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/IPartCheckInfoService.java create mode 100644 bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/IPartCheckInfoServiceImpl.java create mode 100644 bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartCheckMapper.xml diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/controller/PartCheckInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/controller/PartCheckInfoController.java new file mode 100644 index 00000000..882a138b --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/controller/PartCheckInfoController.java @@ -0,0 +1,39 @@ +package com.bonus.material.part.controller; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.log.annotation.SysLog; +import com.bonus.common.log.enums.OperaType; +import com.bonus.material.common.annotation.PreventRepeatSubmit; +import com.bonus.material.part.domain.vo.PartChaseVerifyVo; +import com.bonus.material.part.service.IPartCheckInfoService; +import com.bonus.material.purchase.domain.vo.PurchaseVerifyVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @Author ma_sh + * @create 2025/2/18 16:14 + */ +@Api(tags = "配件入库管理接口") +@RestController +@RequestMapping("/part_check") +public class PartCheckInfoController { + + @Resource + private IPartCheckInfoService partCheckInfoService; + + /** + * 配件内层批量验收API + * @param partChaseVerifyVo + * @return + */ + @ApiOperation("配件内层批量验收API") + @PreventRepeatSubmit + @PostMapping("/innerVerify") + public AjaxResult innerVerify(@RequestBody PartChaseVerifyVo partChaseVerifyVo) { + return partCheckInfoService.innerVerify(partChaseVerifyVo); + } +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeCheckDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeCheckDetails.java index fcecd101..d8ad6f57 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeCheckDetails.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeCheckDetails.java @@ -34,6 +34,9 @@ public class PartTypeCheckDetails extends BaseEntity { @ApiModelProperty(value = "任务ID") private Long taskId; + @ApiModelProperty(value = "验收人ID") + private Long checkUser; + /** 规格id */ //@Excel(name = "规格id") @ApiModelProperty(value = "规格id") diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeQueryDto.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeQueryDto.java index 77c50c30..b07b11f2 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeQueryDto.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/PartTypeQueryDto.java @@ -32,6 +32,9 @@ public class PartTypeQueryDto { @ApiModelProperty(value = "是否完成") private Integer isFinish; + @ApiModelProperty(value = "任务状态名称,未完成/已完成") + private String taskStatusName; + @ApiModelProperty(value = "开始时间") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/vo/PartChaseVerifyVo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/vo/PartChaseVerifyVo.java new file mode 100644 index 00000000..7fe02eb0 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/domain/vo/PartChaseVerifyVo.java @@ -0,0 +1,29 @@ +package com.bonus.material.part.domain.vo; + +import com.bonus.material.part.domain.PartTypeCheckDetails; +import com.bonus.material.purchase.domain.PurchaseCheckDetails; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @Author ma_sh + * @create 2025/2/19 14:22 + */ +@Data +public class PartChaseVerifyVo { + + @ApiModelProperty(value = "id列表") + private List taskIds; + + @ApiModelProperty(value = "验收是否通过") + private Boolean verifyPass; + + /** 验收结论 */ + @ApiModelProperty(value = "验收结论") + private String checkResult; + + @ApiModelProperty(value = "新购物资列表") + List purchaseCheckDetailsList; +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartArrivedMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartArrivedMapper.java index b1209ed2..feba904d 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartArrivedMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartArrivedMapper.java @@ -117,4 +117,12 @@ public interface PartArrivedMapper * @return 外层信息 */ PartTypeCheckInfo getCheckInfoForm(PartTypeQueryDto partTypeQueryDto); + + /** + * 更新任务状态 + * @param taskId + * @param status + * @return + */ + int updateTaskStatus(@Param("taskId") Long taskId,@Param("status") Integer status); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartCheckMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartCheckMapper.java new file mode 100644 index 00000000..3b6b7871 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/mapper/PartCheckMapper.java @@ -0,0 +1,27 @@ +package com.bonus.material.part.mapper; + +import com.bonus.material.part.domain.PartTypeCheckDetails; +import org.apache.ibatis.annotations.Param; + +/** + * @Author ma_sh + * @create 2025/2/18 17:10 + */ +public interface PartCheckMapper { + + /** + * 任务状态更新 + * @param taskId + * @param newTaskStatus + * @param checkResult + * @return + */ + int batchUpdateDetailsTaskStatus(@Param("taskId") Long taskId, @Param("newTaskStatus") Integer newTaskStatus, @Param("checkResult") String checkResult); + + /** + * 更新采购明细 + * @param details + * @return + */ + int updatePurchaseDetails4Check(PartTypeCheckDetails details); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/IPartCheckInfoService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/IPartCheckInfoService.java new file mode 100644 index 00000000..af04e729 --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/IPartCheckInfoService.java @@ -0,0 +1,18 @@ +package com.bonus.material.part.service; + +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.part.domain.vo.PartChaseVerifyVo; + +/** + * @Author ma_sh + * @create 2025/2/18 17:09 + */ +public interface IPartCheckInfoService { + + /** + * 配件内层批量验收API + * @param partChaseVerifyVo + * @return + */ + AjaxResult innerVerify(PartChaseVerifyVo partChaseVerifyVo); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/IPartCheckInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/IPartCheckInfoServiceImpl.java new file mode 100644 index 00000000..b786ee4f --- /dev/null +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/IPartCheckInfoServiceImpl.java @@ -0,0 +1,180 @@ +package com.bonus.material.part.service.impl; + +import com.bonus.common.biz.domain.BmFileInfo; +import com.bonus.common.biz.enums.PartLeaseTaskStatusEnum; +import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; +import com.bonus.common.biz.enums.TmTaskTypeEnum; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.utils.SecurityUtils; +import com.bonus.material.basic.mapper.BmFileInfoMapper; +import com.bonus.material.countersign.domain.SignProcessVo; +import com.bonus.material.countersign.mapper.SignProcessMapper; +import com.bonus.material.part.domain.PartLeaseDetails; +import com.bonus.material.part.domain.PartTypeCheckDetails; +import com.bonus.material.part.domain.PartTypeQueryDto; +import com.bonus.material.part.domain.vo.PartChaseVerifyVo; +import com.bonus.material.part.mapper.PartArrivedMapper; +import com.bonus.material.part.mapper.PartCheckMapper; +import com.bonus.material.part.service.IPartCheckInfoService; +import com.bonus.material.purchase.domain.PurchaseCheckDetails; +import com.bonus.material.purchase.domain.PurchaseSignRecord; +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @Author ma_sh + * @create 2025/2/18 17:10 + */ +@Service +public class IPartCheckInfoServiceImpl implements IPartCheckInfoService { + + @Resource + private SignProcessMapper signProcessMapper; + + @Resource + private PartCheckMapper partCheckMapper; + + @Resource + private PartArrivedMapper partArrivedMapper; + + @Resource + private BmFileInfoMapper bmFileInfoMapper; + + /** + * 配件内层批量验收API + * @param partChaseVerifyVo + * @return + */ + @Override + public AjaxResult innerVerify(PartChaseVerifyVo partChaseVerifyVo) { + try { + AjaxResult result = new AjaxResult(); + if (!CollectionUtils.isEmpty(partChaseVerifyVo.getPurchaseCheckDetailsList())) { + if (BooleanUtils.isTrue(partChaseVerifyVo.getVerifyPass())) { + // 验收通过处理流程 + for (PartTypeCheckDetails details : partChaseVerifyVo.getPurchaseCheckDetailsList()) { + // 前端选择验收通过操作,进入会签校验流程 + if (null != details && null != details.getTaskId()) { + // 查询已进行会签的org_id集合 + List purchaseSignRecordList = signProcessMapper.getPurchaseSignRecordByTask(details.getTaskId()); + Long loginUserDeptId = SecurityUtils.getLoginUser().getSysUser().getDeptId(); + if (null == loginUserDeptId || 0 == loginUserDeptId) { + return AjaxResult.error("会签失败!,请检查用户部门信息"); + } + if (CollectionUtils.isEmpty(purchaseSignRecordList)) { + // 如果该任务没有进行过会签,则无需校验 直接进行会签流程 + int addPurchaseSignResult = signProcessMapper.insertPurchaseSignRecord(new PurchaseSignRecord(details.getTaskId(), SecurityUtils.getUserId(), loginUserDeptId)); + if (0 < addPurchaseSignResult) { + return AjaxResult.success("会签成功"); + } else { + return AjaxResult.error("会签失败!,插入0条数据"); + } + } else { + + // 查询需要进行会签的org_id集合 + List signProcessVoList = signProcessMapper.getList(new SignProcessVo()); + if (CollectionUtils.isEmpty(signProcessVoList)) { + return AjaxResult.error("会签失败!,未查询到会签配置流程!"); + } else { + // 查询出配置需要会签的org_id集合 + Set configSignOrgSet = signProcessVoList.stream().map(SignProcessVo::getOrgId).collect(Collectors.toSet()); + // 获取已进行会签的org_id集合 + Set signedOrgSet = purchaseSignRecordList.stream().map(PurchaseSignRecord::getOrgId).collect(Collectors.toSet()); + // 移除已会签的org_id + configSignOrgSet.removeAll(signedOrgSet); + if (!CollectionUtils.isEmpty(configSignOrgSet)) { + // 如果还有需要进行会签的数据,那么进行本次会签 + int addPurchaseSignResult = signProcessMapper.insertPurchaseSignRecord(new PurchaseSignRecord(details.getTaskId(), SecurityUtils.getUserId(), loginUserDeptId)); + if (0 < addPurchaseSignResult) { + // 会签成功,对配置的流程进行处理 + configSignOrgSet.remove(loginUserDeptId); + if (configSignOrgSet.isEmpty()) { + System.out.println("ONE会签成功,放行进行验收流程!"); + } else { + // 如果本次会签完成后还有需要进行会签的,那么本次会签完成,返回前端 + return AjaxResult.success("会签成功!"); + } + } else { + return AjaxResult.error("会签失败!,插入0条数据"); + } + } else { + System.out.println("TWO会签成功,已全部进行会签,放行进行验收流程!"); + } + } + } + + } else { + return AjaxResult.error("detail数据异常,任务ID为空"); + } + details.setCheckUser(SecurityUtils.getUserId()); + details.setStatus(PurchaseTaskStatusEnum.TO_STORE.getStatus()); + result = 0 < partCheckMapper.updatePurchaseDetails4Check(details) ? AjaxResult.success("验收成功") : AjaxResult.error("details无验证信息"); + extractedFile(details); + } + } else { + // 验收驳回处理流程 + for (PartTypeCheckDetails details : partChaseVerifyVo.getPurchaseCheckDetailsList()) { + details.setStatus(PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus()); + result = 0 < partCheckMapper.updatePurchaseDetails4Check(details) ? AjaxResult.success("驳回成功") : AjaxResult.error("details无验证信息"); + extractedFile(details); + } + } + List taskIdList = partChaseVerifyVo.getPurchaseCheckDetailsList().stream(). + map(PartTypeCheckDetails::getTaskId) + .distinct() + .collect(Collectors.toList()); + for (Long taskId : taskIdList) { + PartTypeQueryDto partTypeQueryDto = new PartTypeQueryDto(); + partTypeQueryDto.setTaskId(taskId); + List partTypeCheckDetailsList = partArrivedMapper.selectPartTypeCheckDetailsListByQueryDto(partTypeQueryDto); + // 将集合中的status取出 + List statusList = partTypeCheckDetailsList.stream() + .map(PartTypeCheckDetails::getStatus) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(statusList)) { + int publishedStatus = PurchaseTaskStatusEnum.TO_CHECK.getStatus(); + int inProgressStatus = PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus(); + boolean notContainsNoFinished =!statusList.contains(publishedStatus); + boolean allReject = statusList.stream() + .allMatch(status -> status.equals(inProgressStatus)); + if (notContainsNoFinished && !allReject) { + partArrivedMapper.updateTaskStatus(taskId, PurchaseTaskStatusEnum.TO_STORE.getStatus()); + } else if (notContainsNoFinished && allReject) { + partArrivedMapper.updateTaskStatus(taskId, PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus()); + } + } + } + } + return result; + } catch (final Exception e) { + return AjaxResult.error("验收状态更改失败,异常报错:" + e.getMessage()); + } + } + + /** + * 验收文件上传 + * @param details + */ + private void extractedFile(PartTypeCheckDetails details) { + if (!CollectionUtils.isEmpty(details.getBmFileInfos())) { + for (final BmFileInfo bmFileInfo : details.getBmFileInfos()) { + if (null != bmFileInfo.getTaskType() && Objects.equals(TmTaskTypeEnum.TM_TASK_AGREEMENT_MANAGEMENT.getTaskTypeId(), bmFileInfo.getTaskType())) { + bmFileInfo.setTaskId(details.getTaskId()); + bmFileInfo.setModelId(details.getId()); + bmFileInfo.setCreateBy(SecurityUtils.getUsername()); + bmFileInfo.setCreateTime(DateUtils.getNowDate()); + bmFileInfoMapper.insertBmFileInfo(bmFileInfo); + } + } + } + } +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartAcceptServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartAcceptServiceImpl.java index 2ebfa321..f28de319 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartAcceptServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartAcceptServiceImpl.java @@ -2,23 +2,26 @@ package com.bonus.material.part.service.impl; +import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.basic.mapper.BmFileInfoMapper; import com.bonus.material.part.domain.*; import com.bonus.material.part.mapper.PartAcceptMapper; +import com.bonus.material.part.mapper.PartArrivedMapper; import com.bonus.material.part.service.IPartAcceptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.List; - - +import java.util.stream.Collectors; /** @@ -30,12 +33,15 @@ import java.util.List; @Service public class PartAcceptServiceImpl implements IPartAcceptService { - @Autowired + @Resource private PartAcceptMapper partAcceptMapper; @Resource BmFileInfoMapper bmFileInfoMapper; + @Resource + private PartArrivedMapper partArrivedMapper; + /** * 查询配件类型三级树 * @param partTypeDto @@ -52,6 +58,7 @@ public class PartAcceptServiceImpl implements IPartAcceptService * @return */ @Override + @Transactional(rollbackFor = Exception.class) public AjaxResult partTypeWarehouse(List partTypeCheckDetails) { if (partTypeCheckDetails.size() == 0){ return AjaxResult.error("请选择要操作的记录"); @@ -64,9 +71,27 @@ public class PartAcceptServiceImpl implements IPartAcceptService return AjaxResult.error("操作失败"); } } - int countThree = partAcceptMapper.selectStatus(partTypeCheckDetails.get(0).getTaskId()); - if(countThree == 0) { - partAcceptMapper.updateStatus(partTypeCheckDetails.get(0).getTaskId()); + PartTypeQueryDto partTypeQueryDto = new PartTypeQueryDto(); + Long taskId = partTypeCheckDetails.get(0).getTaskId(); + partTypeQueryDto.setTaskId(taskId); + List partTypeCheckDetailsList = partArrivedMapper.selectPartTypeCheckDetailsListByQueryDto(partTypeQueryDto); + // 将集合中的status取出 + List statusList = partTypeCheckDetailsList.stream() + .map(PartTypeCheckDetails::getStatus) + .collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(statusList)) { + int publishedStatus = PurchaseTaskStatusEnum.TO_CHECK.getStatus(); + int inProgressStatus = PurchaseTaskStatusEnum.TO_STORE.getStatus(); + int inStoreStatus = PurchaseTaskStatusEnum.IN_STORE.getStatus(); + boolean notContainsNoFinished =!statusList.contains(publishedStatus); + boolean containToStore = statusList.contains(inProgressStatus); + boolean allStore = statusList.stream() + .allMatch(status -> status.equals(inStoreStatus)); + if (notContainsNoFinished && allStore) { + partArrivedMapper.updateTaskStatus(taskId, PurchaseTaskStatusEnum.IN_STORE.getStatus()); + } else if (notContainsNoFinished && containToStore) { + partArrivedMapper.updateTaskStatus(taskId, PurchaseTaskStatusEnum.TASK_IN_PROGRESS.getStatus()); + } } return AjaxResult.success(); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartArrivedServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartArrivedServiceImpl.java index 21c30338..a2b77d49 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartArrivedServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/part/service/impl/PartArrivedServiceImpl.java @@ -1,9 +1,12 @@ package com.bonus.material.part.service.impl; +import com.bonus.common.biz.enums.PurchaseTaskStageEnum; +import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; import com.bonus.common.biz.enums.TmTaskTypeEnum; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.biz.domain.BmFileInfo; @@ -11,6 +14,7 @@ import com.bonus.material.basic.mapper.BmFileInfoMapper; import com.bonus.material.part.domain.*; import com.bonus.material.part.mapper.PartArrivedMapper; import com.bonus.material.part.service.IPartArrivedService; +import com.bonus.material.purchase.domain.PurchaseCheckInfo; import com.bonus.material.task.domain.TmTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; @@ -22,6 +26,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; import static com.bonus.common.biz.constant.MaterialConstants.PART_TASK_TYPE_LABEL; @@ -34,12 +39,17 @@ import static com.bonus.common.biz.constant.MaterialConstants.PART_TASK_TYPE_LAB @Service public class PartArrivedServiceImpl implements IPartArrivedService { - @Autowired + @Resource private PartArrivedMapper partArrivedMapper; @Resource BmFileInfoMapper bmFileInfoMapper; + // 引入新购任务阶段常量 + private static final int PURCHASE_TASK_STAGE_MANAGE = 1; + private static final int PURCHASE_TASK_STAGE_CHECK = 2; + private static final int PURCHASE_TASK_STAGE_STORE = 3; + /** * 查询配件类型三级树--前端联动式下拉框 * @param partId 类型id @@ -96,7 +106,7 @@ public class PartArrivedServiceImpl implements IPartArrivedService final int thisMonthMaxOrder = partArrivedMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_PART_TYPE.getTaskTypeId()); String taskCode = genderTaskCode(thisMonthMaxOrder); final TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_PART_TYPE.getTaskTypeId(), - 0, + PurchaseTaskStatusEnum.TO_NOTICE.getStatus(), partTypeCheckDto.getPartTypeCheckInfo().getCompanyId(), thisMonthMaxOrder + 1, taskCode); tmTask.setCreateTime(DateUtils.getNowDate()); partArrivedMapper.insertTmTask(tmTask); @@ -119,7 +129,7 @@ public class PartArrivedServiceImpl implements IPartArrivedService if (!CollectionUtils.isEmpty(partTypeCheckDetailsList)) { for (PartTypeCheckDetails details : partTypeCheckDetailsList) { details.setTaskId(taskId); - details.setStatus(0); + details.setStatus(1); details.setInputStatus("0"); final List bmFileInfos = details.getBmFileInfos(); if (!CollectionUtils.isEmpty(bmFileInfos)) { @@ -162,39 +172,98 @@ public class PartArrivedServiceImpl implements IPartArrivedService @Override public List selectPartTypeCheckInfoList(PartTypeQueryDto partTypeQueryDto) { List partTypeCheckInfos = partArrivedMapper.selectPartTypeCheckInfoJoinList(partTypeQueryDto); - int count = 0; + List purchaseCheckInfoResult = new ArrayList<>(); for (int i = 0; i < partTypeCheckInfos.size(); i++) { List partTypeCheckDetails = partArrivedMapper.selectPartTypeCheckDetailsList(partTypeCheckInfos.get(i).getTaskId()); - if(partTypeCheckDetails.size()>0){ - count = (int) partTypeCheckDetails.stream() - .filter(details -> details.getStatus() == 0) - .count(); - if(count>0){ - partTypeCheckInfos.get(i).setTaskStatusName("未完成"); - }else{ - partTypeCheckInfos.get(i).setTaskStatusName("已完成"); + if (null != partTypeQueryDto.getTaskStage()) { + // 根据阶段来过滤详情数据 + switch (partTypeQueryDto.getTaskStage()) { + case PURCHASE_TASK_STAGE_MANAGE: + // 新购管理阶段展示全部任务、不进行过滤 + if (partTypeCheckInfos.get(i).getTaskStatus().equals(PurchaseTaskStatusEnum.TO_NOTICE.getStatus()) || + partTypeCheckInfos.get(i).getTaskStatus().equals(PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus())) { + partTypeCheckInfos.get(i).setTaskStatusName("未完成"); + } else { + partTypeCheckInfos.get(i).setTaskStatusName("已完成"); + } + break; + case PURCHASE_TASK_STAGE_CHECK: + partTypeCheckDetails = partTypeCheckDetails.stream().filter(o -> !PurchaseTaskStatusEnum.TO_NOTICE.getStatus().equals(o.getStatus())).collect(Collectors.toList()); + partTypeCheckDetails = partTypeCheckDetails.stream().filter(o -> !PurchaseTaskStatusEnum.TO_CHECK_AFTER_REJECT.getStatus().equals(o.getStatus())).collect(Collectors.toList()); + if (partTypeCheckInfos.get(i).getTaskStatus().equals(PurchaseTaskStatusEnum.TO_CHECK.getStatus())) { + partTypeCheckInfos.get(i).setTaskStatusName("未完成"); + } else { + partTypeCheckInfos.get(i).setTaskStatusName("已完成"); + } + break; + case PURCHASE_TASK_STAGE_STORE: + partTypeCheckDetails = partTypeCheckDetails.stream().filter(o -> + PurchaseTaskStatusEnum.IN_STORE.getStatus().equals(o.getStatus()) || + PurchaseTaskStatusEnum.TO_STORE.getStatus().equals(o.getStatus()) || + PurchaseTaskStatusEnum.TASK_FINISHED.getStatus().equals(o.getStatus()) || + (PurchaseTaskStatusEnum.TO_CHECK.getStatus().equals(o.getStatus())) + ).collect(Collectors.toList()); + if (partTypeCheckInfos.get(i).getTaskStatus().equals(PurchaseTaskStatusEnum.TASK_IN_PROGRESS.getStatus()) || + partTypeCheckInfos.get(i).getTaskStatus().equals(PurchaseTaskStatusEnum.TO_STORE.getStatus()) || + partTypeCheckInfos.get(i).getTaskStatus().equals(PurchaseTaskStatusEnum.TO_CHECK.getStatus())) { + partTypeCheckInfos.get(i).setTaskStatusName("未完成"); + } else { + partTypeCheckInfos.get(i).setTaskStatusName("已完成"); + } + break; + default: + System.err.println("未知的新购任务阶段:" + partTypeQueryDto.getTaskStage()); } } - - BigDecimal purchaseNum = new BigDecimal(0); - BigDecimal purchasePrice = new BigDecimal(0); - BigDecimal purchaseTaxPrice = new BigDecimal(0); - String partName = ""; - for (int j = 0; j < partTypeCheckDetails.size(); j++) { - purchaseNum = purchaseNum.add(partTypeCheckDetails.get(j).getPurchaseNum()); - purchasePrice = purchasePrice.add(partTypeCheckDetails.get(j).getPurchasePrice().multiply(partTypeCheckDetails.get(j).getPurchaseNum())); - purchaseTaxPrice = purchaseTaxPrice.add(partTypeCheckDetails.get(j).getPurchaseTaxPrice().multiply(partTypeCheckDetails.get(j).getPurchaseNum())); - partName = partName + partTypeCheckDetails.get(j).getMaTypeName(); - if (j < partTypeCheckDetails.size() - 1) { - partName += ","; + if(!CollectionUtils.isEmpty(partTypeCheckDetails)) { + BigDecimal purchaseNum = new BigDecimal(0); + BigDecimal purchasePrice = new BigDecimal(0); + BigDecimal purchaseTaxPrice = new BigDecimal(0); + String partName = ""; + for (int j = 0; j < partTypeCheckDetails.size(); j++) { + purchaseNum = purchaseNum.add(partTypeCheckDetails.get(j).getPurchaseNum()); + purchasePrice = purchasePrice.add(partTypeCheckDetails.get(j).getPurchasePrice().multiply(partTypeCheckDetails.get(j).getPurchaseNum())); + purchaseTaxPrice = purchaseTaxPrice.add(partTypeCheckDetails.get(j).getPurchaseTaxPrice().multiply(partTypeCheckDetails.get(j).getPurchaseNum())); + partName = partName + partTypeCheckDetails.get(j).getMaTypeName(); + if (j < partTypeCheckDetails.size() - 1) { + partName += ","; + } } + partTypeCheckInfos.get(i).setPurchaseMaNumber(purchaseNum); + partTypeCheckInfos.get(i).setPurchasePrice(purchasePrice); + partTypeCheckInfos.get(i).setPurchaseTaxPrice(purchaseTaxPrice); + partTypeCheckInfos.get(i).setPurchaseMaTypeName(partName); } - partTypeCheckInfos.get(i).setPurchaseMaNumber(purchaseNum); - partTypeCheckInfos.get(i).setPurchasePrice(purchasePrice); - partTypeCheckInfos.get(i).setPurchaseTaxPrice(purchaseTaxPrice); - partTypeCheckInfos.get(i).setPurchaseMaTypeName(partName); + purchaseCheckInfoResult.add(partTypeCheckInfos.get(i)); } - return partTypeCheckInfos; + if (!CollectionUtils.isEmpty(purchaseCheckInfoResult)) { + String keyWord = partTypeQueryDto.getKeyWord(); + // 如果关键字不为空,进行过滤 + if (StringUtils.isNotBlank(keyWord)) { + purchaseCheckInfoResult = purchaseCheckInfoResult.stream() + .filter(item -> containsKeyword(item, keyWord)) + .collect(Collectors.toList()); + } + if (StringUtils.isNotBlank(partTypeQueryDto.getTaskStatusName())) { + purchaseCheckInfoResult = purchaseCheckInfoResult.stream() + .filter(item -> item.getTaskStatusName().equals(partTypeQueryDto.getTaskStatusName())) + .collect(Collectors.toList()); + } + } + return purchaseCheckInfoResult; + } + + /** + * 判断关键字是否在任务信息中 + * @param item + * @param keyWord + * @return + */ + private boolean containsKeyword(PartTypeCheckInfo item, String keyWord) { + return (item.getPurchaseMaTypeName() != null && item.getPurchaseMaTypeName().contains(keyWord)) || + (item.getCode() != null && item.getCode().contains(keyWord)) || + (item.getSupplier() != null && item.getSupplier().contains(keyWord)) || + (item.getCreateBy() != null && item.getCreateBy().contains(keyWord)); } /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseNoticePersonDto.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseNoticePersonDto.java index ef6f2cd2..ad4b4964 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseNoticePersonDto.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/domain/dto/PurchaseNoticePersonDto.java @@ -20,6 +20,11 @@ import java.util.List; @ToString public class PurchaseNoticePersonDto { + /** + * 是否配件验收,0 是 + */ + private Integer isPartFlag; + /** * 电话号码 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseNoticePersonServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseNoticePersonServiceImpl.java index 87fbec5d..5ee1b364 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseNoticePersonServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseNoticePersonServiceImpl.java @@ -8,6 +8,7 @@ import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.core.utils.sms.SmsUtils; import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.material.part.mapper.PartCheckMapper; import com.bonus.material.purchase.domain.dto.PurchaseNoticePersonDto; import com.bonus.material.task.domain.TmTask; import com.bonus.material.task.mapper.TmTaskMapper; @@ -37,6 +38,9 @@ public class PurchaseNoticePersonServiceImpl implements IPurchaseNoticePersonSer @Resource private PurchaseCheckDetailsServiceImpl purchaseCheckDetailsService; + @Resource + private PartCheckMapper partCheckMapper; + /** * 查询新购短信通知人员 * @@ -84,6 +88,15 @@ public class PurchaseNoticePersonServiceImpl implements IPurchaseNoticePersonSer String sendResult = SmsUtils.smsToken(splitPhoneNumber, purchaseNoticePersonDto.getContent(),""); if (sendResult != null) { // 发送短信后修改任务状态 + if (purchaseNoticePersonDto.getIsPartFlag() != null && purchaseNoticePersonDto.getIsPartFlag() == 0) { + tmTaskMapper.updateTmTask(new TmTask() + .setTaskId(purchaseNoticePersonDto.getTaskId()) + .setTaskType(TmTaskTypeEnum.TM_TASK_PART_TYPE.getTaskTypeId()) + .setTaskStatus(PurchaseTaskStatusEnum.TO_CHECK.getStatus()) + ); + // 修改配件采购明细的任务状态 + partCheckMapper.batchUpdateDetailsTaskStatus(purchaseNoticePersonDto.getTaskId(), PurchaseTaskStatusEnum.TO_CHECK.getStatus(), ""); + } tmTaskMapper.updateTmTask(new TmTask() .setTaskId(purchaseNoticePersonDto.getTaskId()) .setTaskType(TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId()) diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartAcceptMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartAcceptMapper.xml index 4411e030..5cc204f7 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartAcceptMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartAcceptMapper.xml @@ -30,7 +30,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update purchase_part_details - set status = 1 + set + input_num = #{purchaseNum}, + input_time = now(), + status = 19 where id = #{id} and del_flag = 0 diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartArrivedMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartArrivedMapper.xml index a2ce3f5f..caed440c 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartArrivedMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/part/PartArrivedMapper.xml @@ -4,6 +4,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + update + tm_task + set + task_status = #{status} + where + task_id = #{taskId} + + @@ -138,7 +138,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"