diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java index 9073ae7e..103c86c7 100644 --- a/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/enums/PurchaseTaskStatusEnum.java @@ -15,7 +15,7 @@ public enum PurchaseTaskStatusEnum { TO_CHECK(2, "待验收", PurchaseTaskStageEnum.CHECK.getCode()), TO_BIND(3, "待绑定", PurchaseTaskStageEnum.BIND.getCode()), TO_STORE(4, "待入库", PurchaseTaskStageEnum.STORE.getCode()), - TO_CHECK_AFTER_REJECT(12, "验收(被驳回)", PurchaseTaskStageEnum.MANAGE.getCode()), + TO_CHECK_AFTER_REJECT(12, "验收(被驳回)", PurchaseTaskStageEnum.CHECK.getCode()), TO_BIND_AFTER_REJECT(13, "绑定(被驳回)", PurchaseTaskStageEnum.CHECK.getCode()), TO_STORE_AFTER_REJECT(14, "入库(被驳回)", PurchaseTaskStageEnum.BIND.getCode()), IN_STORE(19, "已入库", PurchaseTaskStageEnum.STORE.getCode()), diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrBoxInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrBoxInfo.java index 993b91dc..94de4781 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrBoxInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmQrBoxInfo.java @@ -103,4 +103,7 @@ public class BmQrBoxInfo extends BaseEntity @ApiModelProperty(value = "标准箱信息") private String msg; + @ApiModelProperty(value = "任务ID") + private String taskId; + } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java index 50772637..222f5214 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmQrBoxMapper.java @@ -115,4 +115,11 @@ public interface BmQrBoxMapper { * @return */ List getBoxCodeList(BmQrBoxInfo bmQrBoxInfo); + + /** + * 查询在库信息 + * @param bmQrBoxInfo + * @return + */ + List getBoxBindListById(BmQrBoxInfo bmQrBoxInfo); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java index c9ef5ba3..403f7dd5 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmQrBoxServiceImpl.java @@ -1,6 +1,7 @@ package com.bonus.material.basic.service.impl; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.nacos.common.utils.CollectionUtils; import com.bonus.common.biz.config.BackstageApplication; import com.bonus.common.biz.config.DateTimeHelper; import com.bonus.common.biz.config.QrCodeUtils; @@ -20,10 +21,14 @@ import com.bonus.material.basic.mapper.BmQrBoxMapper; import com.bonus.material.basic.service.BmQrBoxService; import com.bonus.material.ma.domain.vo.MachineVo; import com.bonus.material.ma.mapper.MachineMapper; +import com.bonus.material.purchase.domain.PurchaseCheckDetails; +import com.bonus.material.purchase.domain.vo.PurchaseVo; import com.bonus.material.purchase.mapper.PurchaseBindMapper; import com.bonus.material.purchase.mapper.PurchaseStorageMapper; +import com.bonus.material.task.mapper.TmTaskMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; @@ -34,6 +39,7 @@ import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.*; +import java.util.stream.Collectors; /** * @author ma_sh @@ -55,6 +61,9 @@ public class BmQrBoxServiceImpl implements BmQrBoxService { @Resource private PurchaseStorageMapper purchaseStorageMapper; + @Resource + private TmTaskMapper tmTaskMapper; + /** * 查询二维码标准箱管理列表 */ @@ -287,13 +296,52 @@ public class BmQrBoxServiceImpl implements BmQrBoxService { * @param bmQrBoxInfo 标准箱信息 */ @Override + @Transactional(rollbackFor = Exception.class) public AjaxResult appReceive(BmQrBoxInfo bmQrBoxInfo) { + int result = 0; + // 用来存储每个 taskId 的出现次数 + Map taskIdCountMap = new HashMap<>(); final List bmQrBoxInfos = bmQrBoxMapper.find(new BmQrBoxInfo().setBoxId(bmQrBoxInfo.getBoxId())); if (!bmQrBoxInfos.isEmpty()) { final BmQrBoxInfo item = bmQrBoxInfos.get(0); if (null == item.getTransferUser() || !Objects.equals(item.getTransferUser(), SecurityUtils.getUserId())) { return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "接收失败,当前操作非移交人,无法接收!"); } + List list = bmQrBoxMapper.getBoxBindListById(bmQrBoxInfo); + if (CollectionUtils.isNotEmpty(list)) { + //修改机具状态为在库 + for (BmQrBoxInfo qrBoxInfo : list) { + result += machineMapper.updateStatus(qrBoxInfo.getMaId(), MaMachineStatusEnum.IN_STORE.getStatus()); + String taskId = qrBoxInfo.getTaskId(); + Long typeId = qrBoxInfo.getMaTypeId(); + // 使用 taskId 和 typeId 拼接成复合键 + String key = taskId + "_" + typeId; + taskIdCountMap.put(key, taskIdCountMap.getOrDefault(key, 0) + 1); + } + //根据taskId机器数量,更新入库数量 + if (result > 0) { + for (Map.Entry entry : taskIdCountMap.entrySet()) { + String key = entry.getKey(); + int count = entry.getValue(); + String[] parts = key.split("_"); + String taskId = parts[0]; + Long typeId = Long.parseLong(parts[1]); + result += purchaseBindMapper.updatePurchaseBindByTaskIdAndTypeId(taskId, typeId, count); + result += purchaseStorageMapper.updateStorageNum(BigDecimal.valueOf(count), typeId.intValue()); + PurchaseDto purchaseDto = new PurchaseDto(); + purchaseDto.setTaskId(taskId); + purchaseDto.setTypeId(typeId.intValue()); + List bindMaList = purchaseBindMapper.getMachineById(purchaseDto); + if (CollectionUtils.isNotEmpty(bindMaList)) { + result += purchaseStorageMapper.updatePurchaseBindByTaskIdAndTypeId(PurchaseTaskStatusEnum.TO_STORE.getStatus(), taskId, typeId); + } else { + result += purchaseStorageMapper.updatePurchaseBindBy(PurchaseTaskStatusEnum.IN_STORE.getStatus(), taskId, typeId); + } + List statusList = purchaseStorageMapper.select(taskId); + result += updateTaskStatus(statusList); + } + } + } } else { return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "接收失败,无此标准箱信息!"); } @@ -305,6 +353,29 @@ public class BmQrBoxServiceImpl implements BmQrBoxService { AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); } + /** + * 更新任务状态 + * @param details + * @return + */ + private int updateTaskStatus(List details) { + Map> groupedByIdStatus = details.stream() + .collect(Collectors.groupingBy( + PurchaseVo::getTaskId, + Collectors.mapping(PurchaseVo::getStatus, Collectors.toList()) + )); + return groupedByIdStatus.entrySet().stream() + .mapToInt(entry -> { + Integer id = entry.getKey(); + List statusList = entry.getValue(); + if (!statusList.contains(PurchaseTaskStatusEnum.TO_STORE.getStatus()) && !statusList.contains(PurchaseTaskStatusEnum.TO_STORE_AFTER_REJECT.getStatus()) + && statusList.stream().allMatch(status -> status.equals(PurchaseTaskStatusEnum.IN_STORE.getStatus()))) { + return tmTaskMapper.updateTaskStatus(id.toString(), PurchaseTaskStatusEnum.TASK_FINISHED.getStatus()); + } + return 0; + }).sum(); + } + /** * APP - 扫码创建标准箱 * diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseBindMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseBindMapper.java index f21256b5..537156de 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseBindMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseBindMapper.java @@ -117,4 +117,13 @@ public interface PurchaseBindMapper { * @return */ List selectPurchaseCheckDetailsById(PurchaseDto purchaseDto); + + /** + * 更改状态 + * @param taskId + * @param typeId + * @param count + * @return + */ + int updatePurchaseBindByTaskIdAndTypeId(@Param("taskId") String taskId,@Param("typeId") Long typeId,@Param("count") int count); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java index 290538d7..377367e3 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/mapper/PurchaseStorageMapper.java @@ -82,4 +82,22 @@ public interface PurchaseStorageMapper { int updateMachineByCode(PurchaseDto dto); Long selectIdByTaskId(@Param("taskId") Long taskId, @Param("typeId") Long typeId); + + /** + * 更新机具绑定状态 + * @param status + * @param taskId + * @param typeId + * @return + */ + int updatePurchaseBindByTaskIdAndTypeId(@Param("status") Integer status, @Param("taskId") String taskId, @Param("typeId") Long typeId); + + /** + * 更新机具绑定状态 + * @param status + * @param taskId + * @param typeId + * @return + */ + int updatePurchaseBindBy(@Param("status") Integer status, @Param("taskId") String taskId, @Param("typeId") Long typeId); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java index 38341650..fa372893 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/purchase/service/impl/PurchaseBindServiceImpl.java @@ -7,6 +7,7 @@ import com.bonus.common.biz.constant.MaterialConstants; import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.biz.enums.MaTypeManageTypeEnum; import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; +import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.security.utils.SecurityUtils; @@ -162,7 +163,7 @@ public class PurchaseBindServiceImpl implements IPurchaseBindService { return AjaxResult.error(1116,"插入maMachine时SQL执行失败!"); } } catch (Exception e) { - return AjaxResult.error(1116,"插入maMachine时SQL执行失败!,检查编码是否重复"); + throw new ServiceException(e.getMessage() + "插入maMachine时SQL执行失败!"); } } // 更新绑定数量,并刷新状态 diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java index ad28a78f..b877fb7d 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/scrap/domain/ScrapApplyDetails.java @@ -161,4 +161,7 @@ public class ScrapApplyDetails extends BaseEntity { /** 报废备注 */ private String scrapRemark; + + @ApiModelProperty(value = "关键字") + private String keyWord; } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrBoxMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrBoxMapper.xml index 82351bd9..92285c56 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrBoxMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmQrBoxMapper.xml @@ -33,7 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bqb.create_time as createTime, bqb.update_by as updateBy, bqb.update_time as updateTime, - bqb.transfer_user,bqb.input_user, + bqb.transfer_user as transferUser, + bqb.input_user as inputUser, mm.type_id as maTypeId, COUNT(qbb.box_id) as devNum from bm_qrcode_box bqb @@ -73,7 +74,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" qb.id as id,qb.box_id as boxId,qb.create_by as createBy, mt1.type_name as typeName, mt.type_name as typeModelName, - mm.ma_id as maId,mm.ma_code as maCode,mm.type_id as maTypeId + mm.ma_id as maId,mm.ma_code as maCode,mm.type_id as maTypeId, + mm.buy_task as taskId FROM bm_qrcode_box_bind qb LEFT JOIN ma_machine mm ON qb.ma_id = mm.ma_id @@ -268,4 +270,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by qbb.box_id LIMIT 1 + + \ No newline at end of file diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml index d90155a1..8206f5a9 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseBindMapper.xml @@ -260,7 +260,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM bm_qrcode_info WHERE - DATE_FORMAT(create_time, '%Y-%m') = #{genMonth} and ma_code is null + DATE_FORMAT(create_time, '%Y-%m') = #{genMonth} ORDER BY qr_code DESC @@ -384,6 +384,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and del_flag = '0' + + UPDATE purchase_check_details + SET input_num = ifnull(input_num, 0) + ifnull(#{count},0),input_time = now() + WHERE task_id = #{taskId} and type_id = #{typeId} + + diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml index 0283ab8a..c81a953f 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/purchase/PurchaseStorageMapper.xml @@ -52,6 +52,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" UPDATE ma_machine SET ma_status = 1 WHERE ma_code = #{maCode} and type_id = #{typeId} + + UPDATE purchase_check_details SET `status` = #{status} WHERE task_id = #{taskId} and type_id = #{typeId} + + + + UPDATE purchase_check_details SET `status` = if(bind_num = input_num, #{status}, `status`) WHERE task_id = #{taskId} and type_id = #{typeId} + +