修复一些可能的并发问题

This commit is contained in:
gaoqr
2024-06-26 11:57:41 +08:00
parent 99b42111c5
commit ec1fba4dc1
2 changed files with 19 additions and 29 deletions
@@ -2,12 +2,10 @@ package com.cf.imes.module.executor.service.process;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO; import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
import com.cf.imes.module.executor.dal.dataobject.processStepItem.OrderProcessStepItemDO; import com.cf.imes.module.executor.dal.dataobject.processStepItem.OrderProcessStepItemDO;
import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper;
@@ -21,7 +19,6 @@ import com.cf.imes.module.executor.enums.OrderStatusEnum;
import com.cf.imes.module.executor.enums.ProcessTypeEnum; import com.cf.imes.module.executor.enums.ProcessTypeEnum;
import com.cf.imes.module.system.api.process.ProcessGroupApi; import com.cf.imes.module.system.api.process.ProcessGroupApi;
import com.cf.imes.module.system.api.process.dto.ProcessListReqDTO; import com.cf.imes.module.system.api.process.dto.ProcessListReqDTO;
import com.cf.imes.module.system.api.process.dto.ProcessRespDTO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -31,15 +28,14 @@ import org.springframework.validation.annotation.Validated;
import com.cf.imes.module.executor.controller.admin.process.vo.*; import com.cf.imes.module.executor.controller.admin.process.vo.*;
import com.cf.imes.module.executor.dal.dataobject.process.OrderProcessDO; import com.cf.imes.module.executor.dal.dataobject.process.OrderProcessDO;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.executor.dal.mysql.process.OrderProcessMapper; import com.cf.imes.module.executor.dal.mysql.process.OrderProcessMapper;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
@@ -84,7 +80,6 @@ public class OrderProcessServiceImpl implements OrderProcessService {
@Resource @Resource
private GoodsMapper goodsMapper; private GoodsMapper goodsMapper;
private static Integer INDEX = 0;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -115,11 +110,11 @@ public class OrderProcessServiceImpl implements OrderProcessService {
// 需要获取工序组的具体信息,以及工序组中工序的信息,然后将工序组中工序的信息插入到生产单工序步骤表中 // 需要获取工序组的具体信息,以及工序组中工序的信息,然后将工序组中工序的信息插入到生产单工序步骤表中
ProcessListReqDTO processListReqDTO = processGroupApi.getProcessGroupDetail(createReqVO.getGroupId()); ProcessListReqDTO processListReqDTO = processGroupApi.getProcessGroupDetail(createReqVO.getGroupId());
AtomicInteger INDEX = new AtomicInteger(0);
processListReqDTO.getLists().forEach(processRespDTO -> { processListReqDTO.getLists().forEach(processRespDTO -> {
Long processStepDOId = (Long) identifierGenerator.nextId(null); Long processStepDOId = (Long) identifierGenerator.nextId(null);
ProcessStepDO processStepDO = BeanUtils.toBean(processRespDTO, ProcessStepDO.class).setId(processStepDOId).setOrderId(createReqVO.getOrderId()) ProcessStepDO processStepDO = BeanUtils.toBean(processRespDTO, ProcessStepDO.class).setId(processStepDOId).setOrderId(createReqVO.getOrderId())
.setStatus(false).setProcessinfoId(processRespDTO.getId()).setOrderProcessId(orderProcess.getId()).setFinishTime(null).setSort(INDEX++);// 计划日期没有填写 .setStatus(false).setProcessinfoId(processRespDTO.getId()).setOrderProcessId(orderProcess.getId()).setFinishTime(null).setSort(INDEX.getAndIncrement());// 计划日期没有填写
processStepDOS.add(processStepDO); processStepDOS.add(processStepDO);
// 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表 // 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表
@@ -171,7 +166,7 @@ public class OrderProcessServiceImpl implements OrderProcessService {
} }
} }
}); });
INDEX = 0; INDEX.set(0);
// 修改生产单的状态 // 修改生产单的状态
orderMapper.updateOrderStatus(createReqVO.getOrderId(), OrderStatusEnum.NO_SORT.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); orderMapper.updateOrderStatus(createReqVO.getOrderId(), OrderStatusEnum.NO_SORT.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId());
// 批量插入 // 批量插入
@@ -1,10 +1,9 @@
package com.cf.imes.module.executor.util.fileConversion.admin.files.excel; package com.cf.imes.module.executor.util.fileConversion.admin.files.excel;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.common.utils.StringUtils;
@@ -15,25 +14,21 @@ import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO;
import com.cf.imes.module.system.enums.DictTypeConstants; import com.cf.imes.module.system.enums.DictTypeConstants;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j @Slf4j
@Component @Component
public class ExcelReadUtil { // 文件读取 public class ExcelReadUtil { // 文件读取
private AtomicInteger isErr = new AtomicInteger(0);
private Boolean index = true;
private int isErr;
@Resource @Resource
private DictDataApi dictDataApi; private DictDataApi dictDataApi;
@@ -50,12 +45,13 @@ public class ExcelReadUtil { // 文件读取
List<Map<Integer, String>> dataLists = excelListener.getDataLists();// 读取的内容 List<Map<Integer, String>> dataLists = excelListener.getDataLists();// 读取的内容
List<OrderPlateImportExcelVO> list = new ArrayList<>();// plate List<OrderPlateImportExcelVO> list = new ArrayList<>();// plate
AtomicBoolean index = new AtomicBoolean(true);
dataLists.forEach( dataLists.forEach(
item -> { item -> {
if (item.get(0).equals("###")) { if (item.get(0).equals("###")) {
index = false; index.set(false);
} }
if (index) { if (index.get()) {
orderMap.put(item.get(0), item.get(1)); orderMap.put(item.get(0), item.get(1));
orderMap.put(item.get(12), item.get(13)); orderMap.put(item.get(12), item.get(13));
} else { } else {
@@ -66,12 +62,11 @@ public class ExcelReadUtil { // 文件读取
} }
} }
); );
index = true; index.set(true);
map.put("order", orderMap); map.put("order", orderMap);
if (orderMap.size() == 0) if (MapUtil.isNotEmpty(orderMap) || CollectionUtil.isNotEmpty(list)) {
isErr = -1; isErr.set(-1);
if (list.size() == 0) }
isErr = -1;
map.put("plate", list); map.put("plate", list);
return map; return map;
@@ -391,7 +386,7 @@ public class ExcelReadUtil { // 文件读取
} }
if (!flag) { if (!flag) {
isErr++; isErr.getAndIncrement();
} }
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(errList));// 错误列表 JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(errList));// 错误列表
vo.setResult(String.valueOf(jsonArray)); vo.setResult(String.valueOf(jsonArray));
@@ -432,10 +427,10 @@ public class ExcelReadUtil { // 文件读取
} }
public int isErr() { public int isErr() {
return isErr; return isErr.get();
} }
public void setErr(int isErr) { public void setErr(int isErr) {
this.isErr = isErr; this.isErr.set(isErr);
} }
} }