diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java index a826bff96..1f6ca6d99 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/enums/ErrorCodeConstants.java @@ -64,6 +64,7 @@ public interface ErrorCodeConstants { ErrorCode FILE_READ_ERR = new ErrorCode(1_002_029_012, "文件读取错误"); ErrorCode FILE_ADD_ERR = new ErrorCode(1_002_029_012, "文件已经存在是否强制保存"); ErrorCode FILE_UPLOAD_ERR = new ErrorCode(1_002_029_012, "文件内容为空"); + ErrorCode ORDER_STATUS_CONFLICT = new ErrorCode(1_002_029_006, "生产单状态冲突,禁止投入生产"); ErrorCode SOURCE_NOT_EXITS_ERROR = new ErrorCode(1_002_029_013, "源数据查询失败"); ErrorCode ORDER_CAN_NOT_DELETE = new ErrorCode(1_002_029_013, "存在状态不符合强制删除的生产单,禁止删除"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index 4fd7102d5..32dd202fb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -262,17 +262,22 @@ public class OrderController { return; } else if (excelReadUtil.isErr() > 0) { // 返回文件 -// System.out.println("(Map) " + (Map) map.get("order")+ " , (List)" +(List) map.get("plate")); ExcelWriterUtil.write(response, (Map) map.get("order"), (List) map.get("plate"), orderService.getSavePath() + File.separator + "生产单Excel导入错误导出模板.xlsx"); return; } else { // 获取数据 list = (List) map.get("plate"); - orderDO = excelReadUtil.changeOrderDO((Map) map.get("order")).setOrderType(0).setStatus(1); - if (!orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())) { - ExcelWriterUtil.writeErr(response, "自定义生产单号存在", orderService.getSavePath() + File.separator + "错误文件.xlsx"); + Map mapOrder = excelReadUtil.changeOrderDO((Map) map.get("order")); + orderDO = ((OrderDO) mapOrder.get("order")).setOrderType(0).setStatus(1); + String err = ((String) mapOrder.get("error")); + if (!orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())) { + err += orderDO.getCustomOrderNo() + "-自定义生产单号已存在;"; } + if (!err.equals("")) { + ExcelWriterUtil.writeErr(response, err, orderService.getSavePath() + File.separator + "错误文件.xlsx"); + } + } } else if (type == 1) { // json diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java index 964afb347..b0a588f88 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java @@ -61,4 +61,11 @@ public interface OrderBodyMapper extends BaseMapperX { .eq(OrderBodyDO::getOrganId, organId)); } + // 生产单柜体记录数量 + default int selectCountByOrderId(Long orderId, Long organId, Integer deleted) { + return Math.toIntExact(selectCount(new LambdaUpdateWrapper() + .eq(OrderBodyDO::getOrderId, orderId) + .eq(OrderBodyDO::getDeleted, deleted) + .eq(OrderBodyDO::getOrganId, organId))); + } } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index fdf6cf77b..e0a2f6e6c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -211,6 +211,12 @@ public class OrderServiceImpl implements OrderService { orderProcessMapper.updateOrderDeleted(orderId, OrderDeletedEnum.NOT_DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); processStepMapper.updateOrderDeleted(orderId, OrderDeletedEnum.NOT_DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); + if (orderDO.getStatus() == OrderStatusEnum.EMPTY.getStatus() ) { + if (orderBodyMapper.selectCountByOrderId(orderId, SecurityFrameworkUtils.getLoginUser().getOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0) { + orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); + } + } + } private void validateOrderExists(Long id, Long organId) { @@ -346,6 +352,10 @@ public class OrderServiceImpl implements OrderService { orderPartsMapper.updateDeletedById(partsList, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); }); } + // 生产单柜体数量判断 + if (orderBodyMapper.selectCountByOrderId(orderId, SecurityFrameworkUtils.getLoginUser().getOrganId(),OrderDeletedEnum.NOT_DELETED.getStatus()) == 0) { + orderMapper.updateOrderStatus(orderId, OrderStatusEnum.EMPTY.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId()); + } } @Override @@ -560,7 +570,7 @@ public class OrderServiceImpl implements OrderService { goodsDO = (List) map.get("goodsDO"); List plateGoodDOS = (List) map.get("plateGoodDOLists"); - validateCustomOrderNoExists(orderDO.getCustomOrderNo()); +// validateCustomOrderNoExists(orderDO.getCustomOrderNo()); orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, null, itemDO, orderDO, goodsDO, plateGoodDOS); orderInputProcessor.batchSaveModel(orderModelDOS); orderInputProcessor.batchSaveOrderPartsModel(orderPartsRemarks); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java index a0fdcea1c..413220646 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/process/OrderProcessServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; 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.order.OrderDO; 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.processStep.ProcessStepDO; @@ -15,6 +16,7 @@ import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; import com.cf.imes.module.executor.dal.mysql.processStep.ProcessStepMapper; import com.cf.imes.module.executor.dal.mysql.processStepItem.ProcessStepItemMapper; +import com.cf.imes.module.executor.enums.OrderDeletedEnum; 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; @@ -84,9 +86,15 @@ public class OrderProcessServiceImpl implements OrderProcessService { @Override @Transactional(rollbackFor = Exception.class) public Long createOrderProcess(OrderProcessSaveReqVO createReqVO) { + OrderDO order = orderMapper.selectOrderOne(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()); // 当生产不为删除时,校验生产单存在 - if (orderMapper.selectOrder(createReqVO.getOrderId(), SecurityFrameworkUtils.getLoginUser().getOrganId()).isEmpty()) { + if (order == null) { throw exception(ORDER_NOT_EXISTS); + }else { +// 校验生产单状态 + if (order.getStatus() != OrderStatusEnum.NEW_ORDER.getStatus()) { + throw exception(ORDER_STATUS_CONFLICT); + } } // 校验工序组存在 if (!processGroupApi.getProcessGroup(createReqVO.getGroupId())) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java index 1aa09c2b8..42ac82fa6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java @@ -21,9 +21,12 @@ import java.io.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Slf4j @Component @@ -73,11 +76,19 @@ public class ExcelReadUtil { // 文件读取 } // order 数据转换 - public OrderDO changeOrderDO(Map orderMap) { + public Map changeOrderDO(Map orderMap) { + Map map = new HashMap<>(); String s = (String) orderMap.get("出货日期"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate orderDate = LocalDate.parse(s, formatter); - + // string 拼接 + String error = ""; + // 电话校验 + if (validatePhoneNumber((String) orderMap.get("客户电话"))) { + error += (String) orderMap.get("客户电话")+ "-客户电话格式错误;"; + } + if (validatePhoneNumber((String) orderMap.get("经销商电话"))) { + error += (String) orderMap.get("经销商电话")+ "-经销商电话格式错误;"; + } OrderDO orderDO = OrderDO.builder() .organId(OrganContextHolder.getOrganId()) .dataType(0) @@ -88,13 +99,54 @@ public class ExcelReadUtil { // 文件读取 .address((String) orderMap.get("客户地址")) .phoneNumber((String) orderMap.get("客户电话")) .salesman((String) orderMap.get("业务员")) - .deliveryDate(orderDate.atStartOfDay()) .splitter((String) orderMap.get("拆单员")) .remark((String) orderMap.get("备注")) .build(); - return orderDO; + try { + LocalDate orderDate = LocalDate.parse(s, formatter); + orderDO.setDeliveryDate(orderDate.atStartOfDay()); + } catch (DateTimeParseException e) { + error += s + "-出货日期格式错误;"; + } + map.put("order", orderDO); + map.put("error", error); + return map; } + private Boolean validatePhoneNumber(String phoneNumber) { + // 定义手机号正则表达式 + String regex = "^1[3-9]\\d{9}$"; + + // 编译正则表达式 + Pattern pattern = Pattern.compile(regex); + + // 创建 Matcher 对象 + Matcher matcher = pattern.matcher(phoneNumber); + + // 判断手机号是否匹配正则表达式 + if (!matcher.matches()) { + return false; + } + return true; + } + + // 日期合法性校验 + private Boolean validateDate(String dateString) { + // 定义日期正则表达式 + String regex = "^\\d{4}/\\d{2}/\\d{2}$"; + + // 编译正则表达式 + Pattern pattern = Pattern.compile(regex); + + // 创建 Matcher 对象 + Matcher matcher = pattern.matcher(dateString); + + // 判断日期是否匹配正则表达式 + if (!matcher.matches()) { + return false; + } + return true; + } private LocalDateTime changeTime(String dateString) { // 使用 DateTimeFormatter 解析字符串为 LocalDateTime 对象 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单Excel导入错误导出模板.xlsx b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单Excel导入错误导出模板.xlsx index e09ec97b8..dfc6ef8e7 100644 Binary files a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单Excel导入错误导出模板.xlsx and b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单Excel导入错误导出模板.xlsx differ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单新增Excel模板.xlsx b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单新增Excel模板.xlsx index 22a672f75..a18f221c6 100644 Binary files a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单新增Excel模板.xlsx and b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/type/生产单新增Excel模板.xlsx differ