This commit is contained in:
mashuai 2025-01-10 17:51:49 +08:00
parent 12bb2ed637
commit 3d6a274eed
11 changed files with 150 additions and 5 deletions

View File

@ -15,7 +15,7 @@ public enum PurchaseTaskStatusEnum {
TO_CHECK(2, "待验收", PurchaseTaskStageEnum.CHECK.getCode()), TO_CHECK(2, "待验收", PurchaseTaskStageEnum.CHECK.getCode()),
TO_BIND(3, "待绑定", PurchaseTaskStageEnum.BIND.getCode()), TO_BIND(3, "待绑定", PurchaseTaskStageEnum.BIND.getCode()),
TO_STORE(4, "待入库", PurchaseTaskStageEnum.STORE.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_BIND_AFTER_REJECT(13, "绑定(被驳回)", PurchaseTaskStageEnum.CHECK.getCode()),
TO_STORE_AFTER_REJECT(14, "入库(被驳回)", PurchaseTaskStageEnum.BIND.getCode()), TO_STORE_AFTER_REJECT(14, "入库(被驳回)", PurchaseTaskStageEnum.BIND.getCode()),
IN_STORE(19, "已入库", PurchaseTaskStageEnum.STORE.getCode()), IN_STORE(19, "已入库", PurchaseTaskStageEnum.STORE.getCode()),

View File

@ -103,4 +103,7 @@ public class BmQrBoxInfo extends BaseEntity
@ApiModelProperty(value = "标准箱信息") @ApiModelProperty(value = "标准箱信息")
private String msg; private String msg;
@ApiModelProperty(value = "任务ID")
private String taskId;
} }

View File

@ -115,4 +115,11 @@ public interface BmQrBoxMapper {
* @return * @return
*/ */
List<BmQrBoxInfo> getBoxCodeList(BmQrBoxInfo bmQrBoxInfo); List<BmQrBoxInfo> getBoxCodeList(BmQrBoxInfo bmQrBoxInfo);
/**
* 查询在库信息
* @param bmQrBoxInfo
* @return
*/
List<BmQrBoxInfo> getBoxBindListById(BmQrBoxInfo bmQrBoxInfo);
} }

View File

@ -1,6 +1,7 @@
package com.bonus.material.basic.service.impl; package com.bonus.material.basic.service.impl;
import cn.hutool.core.collection.CollectionUtil; 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.BackstageApplication;
import com.bonus.common.biz.config.DateTimeHelper; import com.bonus.common.biz.config.DateTimeHelper;
import com.bonus.common.biz.config.QrCodeUtils; 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.basic.service.BmQrBoxService;
import com.bonus.material.ma.domain.vo.MachineVo; import com.bonus.material.ma.domain.vo.MachineVo;
import com.bonus.material.ma.mapper.MachineMapper; 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.PurchaseBindMapper;
import com.bonus.material.purchase.mapper.PurchaseStorageMapper; import com.bonus.material.purchase.mapper.PurchaseStorageMapper;
import com.bonus.material.task.mapper.TmTaskMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
@ -34,6 +39,7 @@ import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author ma_sh * @author ma_sh
@ -55,6 +61,9 @@ public class BmQrBoxServiceImpl implements BmQrBoxService {
@Resource @Resource
private PurchaseStorageMapper purchaseStorageMapper; private PurchaseStorageMapper purchaseStorageMapper;
@Resource
private TmTaskMapper tmTaskMapper;
/** /**
* 查询二维码标准箱管理列表 * 查询二维码标准箱管理列表
*/ */
@ -287,13 +296,52 @@ public class BmQrBoxServiceImpl implements BmQrBoxService {
* @param bmQrBoxInfo 标准箱信息 * @param bmQrBoxInfo 标准箱信息
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult appReceive(BmQrBoxInfo bmQrBoxInfo) { public AjaxResult appReceive(BmQrBoxInfo bmQrBoxInfo) {
int result = 0;
// 用来存储每个 taskId 的出现次数
Map<String, Integer> taskIdCountMap = new HashMap<>();
final List<BmQrBoxInfo> bmQrBoxInfos = bmQrBoxMapper.find(new BmQrBoxInfo().setBoxId(bmQrBoxInfo.getBoxId())); final List<BmQrBoxInfo> bmQrBoxInfos = bmQrBoxMapper.find(new BmQrBoxInfo().setBoxId(bmQrBoxInfo.getBoxId()));
if (!bmQrBoxInfos.isEmpty()) { if (!bmQrBoxInfos.isEmpty()) {
final BmQrBoxInfo item = bmQrBoxInfos.get(0); final BmQrBoxInfo item = bmQrBoxInfos.get(0);
if (null == item.getTransferUser() || !Objects.equals(item.getTransferUser(), SecurityUtils.getUserId())) { if (null == item.getTransferUser() || !Objects.equals(item.getTransferUser(), SecurityUtils.getUserId())) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "接收失败,当前操作非移交人,无法接收!"); return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "接收失败,当前操作非移交人,无法接收!");
} }
List<BmQrBoxInfo> 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<String, Integer> 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<PurchaseCheckDetails> 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<PurchaseVo> statusList = purchaseStorageMapper.select(taskId);
result += updateTaskStatus(statusList);
}
}
}
} else { } else {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "接收失败,无此标准箱信息!"); return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), "接收失败,无此标准箱信息!");
} }
@ -305,6 +353,29 @@ public class BmQrBoxServiceImpl implements BmQrBoxService {
AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg()); AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
} }
/**
* 更新任务状态
* @param details
* @return
*/
private int updateTaskStatus(List<PurchaseVo> details) {
Map<Integer, List<Integer>> 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<Integer> 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 - 扫码创建标准箱 * APP - 扫码创建标准箱
* *

View File

@ -117,4 +117,13 @@ public interface PurchaseBindMapper {
* @return * @return
*/ */
List<PurchaseVo> selectPurchaseCheckDetailsById(PurchaseDto purchaseDto); List<PurchaseVo> selectPurchaseCheckDetailsById(PurchaseDto purchaseDto);
/**
* 更改状态
* @param taskId
* @param typeId
* @param count
* @return
*/
int updatePurchaseBindByTaskIdAndTypeId(@Param("taskId") String taskId,@Param("typeId") Long typeId,@Param("count") int count);
} }

View File

@ -82,4 +82,22 @@ public interface PurchaseStorageMapper {
int updateMachineByCode(PurchaseDto dto); int updateMachineByCode(PurchaseDto dto);
Long selectIdByTaskId(@Param("taskId") Long taskId, @Param("typeId") Long typeId); 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);
} }

View File

@ -7,6 +7,7 @@ import com.bonus.common.biz.constant.MaterialConstants;
import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.biz.enums.HttpCodeEnum;
import com.bonus.common.biz.enums.MaTypeManageTypeEnum; import com.bonus.common.biz.enums.MaTypeManageTypeEnum;
import com.bonus.common.biz.enums.PurchaseTaskStatusEnum; 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.utils.DateUtils;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.security.utils.SecurityUtils; import com.bonus.common.security.utils.SecurityUtils;
@ -162,7 +163,7 @@ public class PurchaseBindServiceImpl implements IPurchaseBindService {
return AjaxResult.error(1116,"插入maMachine时SQL执行失败!"); return AjaxResult.error(1116,"插入maMachine时SQL执行失败!");
} }
} catch (Exception e) { } catch (Exception e) {
return AjaxResult.error(1116,"插入maMachine时SQL执行失败!,检查编码是否重复"); throw new ServiceException(e.getMessage() + "插入maMachine时SQL执行失败!");
} }
} }
// 更新绑定数量并刷新状态 // 更新绑定数量并刷新状态

View File

@ -161,4 +161,7 @@ public class ScrapApplyDetails extends BaseEntity {
/** 报废备注 */ /** 报废备注 */
private String scrapRemark; private String scrapRemark;
@ApiModelProperty(value = "关键字")
private String keyWord;
} }

View File

@ -33,7 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bqb.create_time as createTime, bqb.create_time as createTime,
bqb.update_by as updateBy, bqb.update_by as updateBy,
bqb.update_time as updateTime, 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, mm.type_id as maTypeId,
COUNT(qbb.box_id) as devNum COUNT(qbb.box_id) as devNum
from bm_qrcode_box bqb 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, qb.id as id,qb.box_id as boxId,qb.create_by as createBy,
mt1.type_name as typeName, mt1.type_name as typeName,
mt.type_name as typeModelName, 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 FROM
bm_qrcode_box_bind qb bm_qrcode_box_bind qb
LEFT JOIN ma_machine mm ON qb.ma_id = mm.ma_id 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 group by
qbb.box_id LIMIT 1 qbb.box_id LIMIT 1
</select> </select>
<select id="getBoxBindListById" resultType="com.bonus.material.basic.domain.BmQrBoxInfo">
SELECT
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.buy_task as taskId
FROM
bm_qrcode_box_bind qb
LEFT JOIN ma_machine mm ON qb.ma_id = mm.ma_id
LEFT JOIN ma_type mt ON mm.type_id = mt.type_id AND mt.del_flag = '0'
LEFT JOIN ma_type mt1 ON mt.parent_id = mt1.type_id AND mt1.del_flag = '0'
where
(mm.ma_status = 0 or mm.ma_status =5) and
qb.box_id = #{boxId}
</select>
</mapper> </mapper>

View File

@ -260,7 +260,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM FROM
bm_qrcode_info bm_qrcode_info
WHERE WHERE
DATE_FORMAT(create_time, '%Y-%m') = #{genMonth} and ma_code is null DATE_FORMAT(create_time, '%Y-%m') = #{genMonth}
ORDER BY ORDER BY
qr_code DESC qr_code DESC
</select> </select>
@ -384,6 +384,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and del_flag = '0' and del_flag = '0'
</update> </update>
<update id="updatePurchaseBindByTaskIdAndTypeId">
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}
</update>
<select id="checkQrCodeIsBind" resultType="boolean"> <select id="checkQrCodeIsBind" resultType="boolean">
select count(1) > 0 from bm_qrcode_info where qr_code = #{qrCode} and is_bind = '1' and del_flag = '0' select count(1) > 0 from bm_qrcode_info where qr_code = #{qrCode} and is_bind = '1' and del_flag = '0'
</select> </select>

View File

@ -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 ma_machine SET ma_status = 1 WHERE ma_code = #{maCode} and type_id = #{typeId}
</update> </update>
<update id="updatePurchaseBindByTaskIdAndTypeId">
UPDATE purchase_check_details SET `status` = #{status} WHERE task_id = #{taskId} and type_id = #{typeId}
</update>
<update id="updatePurchaseBindBy">
UPDATE purchase_check_details SET `status` = if(bind_num = input_num, #{status}, `status`) WHERE task_id = #{taskId} and type_id = #{typeId}
</update>
<select id="selectAll" resultType="com.bonus.material.purchase.domain.vo.PurchaseVo"> <select id="selectAll" resultType="com.bonus.material.purchase.domain.vo.PurchaseVo">
SELECT SELECT
pci.task_id as taskId, pci.task_id as taskId,