修复一些可能的并发问题

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.incrementer.IdentifierGenerator;
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
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.orderBody.OrderBodyDO;
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.processStepItem.OrderProcessStepItemDO;
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.system.api.process.ProcessGroupApi;
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 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.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.module.executor.dal.mysql.process.OrderProcessMapper;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
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.security.core.util.SecurityFrameworkUtils.getUserOrganId;
@@ -84,7 +80,6 @@ public class OrderProcessServiceImpl implements OrderProcessService {
@Resource
private GoodsMapper goodsMapper;
private static Integer INDEX = 0;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -115,11 +110,11 @@ public class OrderProcessServiceImpl implements OrderProcessService {
// 需要获取工序组的具体信息,以及工序组中工序的信息,然后将工序组中工序的信息插入到生产单工序步骤表中
ProcessListReqDTO processListReqDTO = processGroupApi.getProcessGroupDetail(createReqVO.getGroupId());
AtomicInteger INDEX = new AtomicInteger(0);
processListReqDTO.getLists().forEach(processRespDTO -> {
Long processStepDOId = (Long) identifierGenerator.nextId(null);
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);
// 生产单中是否存在加工组,若存在加工组,需要逐条加工组信息写入到生产单工序步骤表
@@ -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());
// 批量插入
@@ -1,10 +1,9 @@
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.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.JSONArray;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Component
public class ExcelReadUtil { // 文件读取
private Boolean index = true;
private int isErr;
private AtomicInteger isErr = new AtomicInteger(0);
@Resource
private DictDataApi dictDataApi;
@@ -50,12 +45,13 @@ public class ExcelReadUtil { // 文件读取
List<Map<Integer, String>> dataLists = excelListener.getDataLists();// 读取的内容
List<OrderPlateImportExcelVO> list = new ArrayList<>();// plate
AtomicBoolean index = new AtomicBoolean(true);
dataLists.forEach(
item -> {
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(12), item.get(13));
} else {
@@ -66,12 +62,11 @@ public class ExcelReadUtil { // 文件读取
}
}
);
index = true;
index.set(true);
map.put("order", orderMap);
if (orderMap.size() == 0)
isErr = -1;
if (list.size() == 0)
isErr = -1;
if (MapUtil.isNotEmpty(orderMap) || CollectionUtil.isNotEmpty(list)) {
isErr.set(-1);
}
map.put("plate", list);
return map;
@@ -391,7 +386,7 @@ public class ExcelReadUtil { // 文件读取
}
if (!flag) {
isErr++;
isErr.getAndIncrement();
}
JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(errList));// 错误列表
vo.setResult(String.valueOf(jsonArray));
@@ -432,10 +427,10 @@ public class ExcelReadUtil { // 文件读取
}
public int isErr() {
return isErr;
return isErr.get();
}
public void setErr(int isErr) {
this.isErr = isErr;
this.isErr.set(isErr);
}
}