紧急问题修改,bug修改,后置拆零,扫码加锁,完成单据拆零待赋码

dev_2.5_mutiscan
yewj 3 months ago
parent 4a8f320746
commit d0500ba458

@ -126,7 +126,6 @@ public class SysCustomConfigController extends BaseController {
@AuthRuleAnnotation("") @AuthRuleAnnotation("")
@PostMapping("/getConfigs") @PostMapping("/getConfigs")
@Log(title = "界面配置管理")
public BaseResponse getConfigs(@RequestBody SysCustomConfigRequest request, BindingResult bindingResult) { public BaseResponse getConfigs(@RequestBody SysCustomConfigRequest request, BindingResult bindingResult) {
if (bindingResult.hasErrors()) { if (bindingResult.hasErrors()) {

@ -463,21 +463,22 @@ public class IoCodeTempController extends BaseController {
AddCodeResult addCodeResult = new AddCodeResult(); AddCodeResult addCodeResult = new AddCodeResult();
List<String> codeList = addOrderCodeRequest.getCodeList(); List<String> codeList = addOrderCodeRequest.getCodeList();
if (CollUtil.isEmpty(codeList) && StrUtil.isEmpty(addOrderCodeRequest.getCode())) if (CollUtil.isEmpty(codeList) && StrUtil.isEmpty(addOrderCodeRequest.getCode()))
return ResultVOUtils.error(500, "追溯码不能为空"); return ResultVOUtils.error(550, "追溯码不能为空");
if (StrUtil.isNotEmpty(addOrderCodeRequest.getCode()) && CollUtil.isEmpty(codeList)) { if (StrUtil.isNotEmpty(addOrderCodeRequest.getCode()) && CollUtil.isEmpty(codeList)) {
codeList = new ArrayList<>(); codeList = new ArrayList<>();
codeList.add(addOrderCodeRequest.getCode()); codeList.add(addOrderCodeRequest.getCode());
addOrderCodeRequest.setCodeList(codeList); addOrderCodeRequest.setCodeList(codeList);
} }
if (CollUtil.isNotEmpty(codeList)) { if (CollUtil.isNotEmpty(codeList)) {
String firstCode = codeList.get(0); String firstCode = codeList.get(0);
UdiEntity udiEntity = FilterUdiUtils.getUdi(firstCode); UdiEntity udiEntity = FilterUdiUtils.getUdi(firstCode);
if (udiEntity == null) {
return ResultVOUtils.error(550, "追溯码格式错误!");
}
if (IntUtil.value(udiEntity.getProductType()) == 2) { if (IntUtil.value(udiEntity.getProductType()) == 2) {
addOrderCodeRequest.setProductType(2); addOrderCodeRequest.setProductType(2);
} }
} }
// 获取第一个码判断类型,如果是药品类型则使用批量处理方法 // 获取第一个码判断类型,如果是药品类型则使用批量处理方法
if (!codeList.isEmpty() && IntUtil.value(addOrderCodeRequest.getProductType()) == 2) { if (!codeList.isEmpty() && IntUtil.value(addOrderCodeRequest.getProductType()) == 2) {
String firstCode = codeList.get(0); String firstCode = codeList.get(0);

@ -2,6 +2,7 @@ package com.glxp.api.controller.inout;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.res.BaseResponse;
@ -33,6 +34,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -127,7 +129,18 @@ public class IoSplitController extends BaseController {
*/ */
@PostMapping("/udiwms/ioSplit/material/order/split") @PostMapping("/udiwms/ioSplit/material/order/split")
public BaseResponse startSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust) { public BaseResponse startSplit(@RequestBody AddTagCodeReqeust addTagCodeReqeust) {
List<IoCollectOrder> collectOrders = new ArrayList<>();
IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo()); IoCollectOrder collectOrder = collectOrderService.getByBillNo(addTagCodeReqeust.getBillNo());
if (StrUtil.isNotEmpty(collectOrder.getSummaryNo())) {
List<IoCollectOrder> temps = collectOrderService.list(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getSummaryNo, collectOrder.getSummaryNo()));
if (CollUtil.isNotEmpty(temps)) {
collectOrders.addAll(temps);
}
} else {
collectOrders.add(collectOrder);
}
if (collectOrder == null) { if (collectOrder == null) {
return ResultVOUtils.error(500, "未找到单据"); return ResultVOUtils.error(500, "未找到单据");
} }
@ -137,7 +150,11 @@ public class IoSplitController extends BaseController {
if (sysWorkplaceDocumentEntity.getProductType() == 1) { if (sysWorkplaceDocumentEntity.getProductType() == 1) {
splitCodeService.preQxAutoTagCode(collectOrder, null); splitCodeService.preQxAutoTagCode(collectOrder, null);
} else { } else {
splitCodeService.preAutoTagCode(collectOrder, null);
for (IoCollectOrder temp : collectOrders) {
splitCodeService.preAutoTagCode(temp, null);
}
} }
collectOrderService.updateById(collectOrder); collectOrderService.updateById(collectOrder);
return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看"); return ResultVOUtils.success("后台已开始赋码,请稍后刷新查看");

@ -235,16 +235,16 @@ public class AddCoodeService {
if (StringUtils.isNotBlank(orderId)) { if (StringUtils.isNotBlank(orderId)) {
existingCodesMap = codeTempService.batchCheckCodesExistence(processedCodes, orderId); existingCodesMap = codeTempService.batchCheckCodesExistence(processedCodes, orderId);
} }
for (Map.Entry<String, IoCodeTempEntity> entry : existingCodesMap.entrySet()) { // for (Map.Entry<String, IoCodeTempEntity> entry : existingCodesMap.entrySet()) {
IoCodeTempEntity codeTempEntity = entry.getValue(); // IoCodeTempEntity codeTempEntity = entry.getValue();
if (codeTempEntity != null) { // if (codeTempEntity != null) {
VailCodeResultResponse invalidResponse = new VailCodeResultResponse(); // VailCodeResultResponse invalidResponse = new VailCodeResultResponse();
invalidResponse.setCode(codeTempEntity.getCode()); // invalidResponse.setCode(codeTempEntity.getCode());
invalidResponse.setStatus(2); // invalidResponse.setStatus(2);
invalidResponse.setErrMsg("重复扫码"); // invalidResponse.setErrMsg("重复扫码");
vailCodeResultResponses.add(invalidResponse); // vailCodeResultResponses.add(invalidResponse);
} // }
} // }
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(invCode); InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(invCode);
// 4. 获取组编号 // 4. 获取组编号
@ -253,12 +253,14 @@ public class AddCoodeService {
int processors = Runtime.getRuntime().availableProcessors(); int processors = Runtime.getRuntime().availableProcessors();
ExecutorService executor = Executors.newFixedThreadPool(Math.min(processors * 2, 10)); ExecutorService executor = Executors.newFixedThreadPool(Math.min(processors * 2, 10));
// 准备请求参数 // 准备请求参数
IoOrderEntity orderEntity;
AddOrderRequest addOrderRequest = new AddOrderRequest(); AddOrderRequest addOrderRequest = new AddOrderRequest();
synchronized (addOrderCodeRequest.getCorpOrderId().intern()) {
BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest); BeanUtils.copyProperties(addOrderCodeRequest, addOrderRequest);
addOrderRequest.setBillNo(orderId); addOrderRequest.setBillNo(orderId);
addOrderRequest.setInvCode(invCode); addOrderRequest.setInvCode(invCode);
IoOrderEntity isExit = orderService.findByBillNo(orderId); IoOrderEntity isExit = orderService.findByBillNo(orderId);
IoOrderEntity orderEntity = new IoOrderEntity(); orderEntity = new IoOrderEntity();
if (isExit == null) { if (isExit == null) {
String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd")); String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd"));
orderEntity.setBillNo(orderNo); orderEntity.setBillNo(orderNo);
@ -288,14 +290,17 @@ public class AddCoodeService {
orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode()); orderEntity.setWorkPlaceCode(addOrderRequest.getWorkPlaceCode());
orderEntity.setSplitBusType(addOrderRequest.getSplitBusType()); orderEntity.setSplitBusType(addOrderRequest.getSplitBusType());
orderEntity.setFifoSplit(addOrderRequest.getFifoSplit()); orderEntity.setFifoSplit(addOrderRequest.getFifoSplit());
orderEntity.setSplitBusType(addOrderRequest.getSplitBusType());
// orderEntity.setWorkPlaceQueueCode(queueCode);
orderEntity.setProductType(2); orderEntity.setProductType(2);
orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag()); orderEntity.setFifoSplitTag(addOrderRequest.getFifoSplitTag());
// 使用corpOrderId作为同步锁
synchronized (addOrderRequest.getCorpOrderId().intern()) {
orderService.insertOrder(orderEntity); orderService.insertOrder(orderEntity);
addOrderRequest.setBillNo(orderNo); addOrderRequest.setBillNo(orderNo);
}
} else orderEntity = isExit; } else orderEntity = isExit;
}
try { try {
// 创建异步任务 // 创建异步任务
List<CompletableFuture<VailCodeResultResponse>> futures = udiEntityMap.entrySet().stream().map(entry -> { List<CompletableFuture<VailCodeResultResponse>> futures = udiEntityMap.entrySet().stream().map(entry -> {
@ -366,9 +371,11 @@ public class AddCoodeService {
}); });
if (CollUtil.isNotEmpty(successCodes)) { if (CollUtil.isNotEmpty(successCodes)) {
synchronized (orderEntity.getBillNo().intern()) {
List<IoCodeTempEntity> codeTempEntities = codeTempService.selectByCodes(successCodes, orderEntity.getBillNo()); List<IoCodeTempEntity> codeTempEntities = codeTempService.selectByCodes(successCodes, orderEntity.getBillNo());
genOrderDetailCodeBatch(orderEntity, codeTempEntities); genOrderDetailCodeBatch(orderEntity, codeTempEntities);
} }
}
addCodeResult.setOrderId(orderEntity.getBillNo()); addCodeResult.setOrderId(orderEntity.getBillNo());
addCodeResult.setVailCodeResultResponses(vailCodeResultResponses); addCodeResult.setVailCodeResultResponses(vailCodeResultResponses);
log.info("批量处理药品追溯码完成,共{}个,耗时{}ms", codeList.size(), (System.currentTimeMillis() - startTime)); log.info("批量处理药品追溯码完成,共{}个,耗时{}ms", codeList.size(), (System.currentTimeMillis() - startTime));
@ -521,7 +528,7 @@ public class AddCoodeService {
if (byBillNo != null && !StrUtil.isBlank(byBillNo.getWorkPlaceQueueCode())) { if (byBillNo != null && !StrUtil.isBlank(byBillNo.getWorkPlaceQueueCode())) {
queueCode = byBillNo.getWorkPlaceQueueCode(); queueCode = byBillNo.getWorkPlaceQueueCode();
} else { } else {
// userId 没有什么用 设置为1 问题不大 避免空指针 // userId Nothing 没有什么用 设置为1 问题不大 避免空指针
queueCode = ioSplitFifoInvService.setQueueCode(addOrderRequest.getWorkPlaceCode(), 1 + "", udiRelevanceResponse1.getRelId()); queueCode = ioSplitFifoInvService.setQueueCode(addOrderRequest.getWorkPlaceCode(), 1 + "", udiRelevanceResponse1.getRelId());
addCodeResult.setQueueCode(queueCode); addCodeResult.setQueueCode(queueCode);
} }

@ -1527,7 +1527,7 @@ public class HeartService {
* *
* @param exportType * @param exportType
*/ */
@Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
public void pullData(BasicExportTypeEnum exportType) { public void pullData(BasicExportTypeEnum exportType) {
switch (exportType) { switch (exportType) {
case IO_ORDER: case IO_ORDER:

@ -42,7 +42,7 @@ public class BasicExportTimeServiceImpl extends ServiceImpl<BasicExportTimeDao,B
@Override @Override
public boolean insertExportStatus(BasicExportStatusTimeEntity basicExportStatusTimeEntity) { public boolean insertExportStatus(BasicExportStatusTimeEntity basicExportStatusTimeEntity) {
return basicExportTimeDao.insertExportStatus(basicExportStatusTimeEntity); return basicExportTimeDao.insertOrUpdate(basicExportStatusTimeEntity);
} }

Loading…
Cancel
Save