This commit is contained in:
parent
12bb2ed637
commit
3d6a274eed
|
|
@ -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()),
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 - 扫码创建标准箱
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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执行失败!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 更新绑定数量,并刷新状态
|
// 更新绑定数量,并刷新状态
|
||||||
|
|
|
||||||
|
|
@ -161,4 +161,7 @@ public class ScrapApplyDetails extends BaseEntity {
|
||||||
|
|
||||||
/** 报废备注 */
|
/** 报废备注 */
|
||||||
private String scrapRemark;
|
private String scrapRemark;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "关键字")
|
||||||
|
private String keyWord;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue