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..876f30230 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 @@ -56,6 +56,7 @@ public interface ErrorCodeConstants { ErrorCode ORDER_STATUS_ERROR = new ErrorCode(1_002_029_006, "生产单不允许删除"); ErrorCode APP_TOKEN_ERROR = new ErrorCode(1_002_029_007, "token获取失败"); ErrorCode PLATE_PLAN_DATA_ERROR = new ErrorCode(1_002_029_008, "板材生产数据获取错误或此单不存在"); + ErrorCode PLATE_PLAN_DATA_NULL = new ErrorCode(1_002_029_008, "板材生产源数据为空"); ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误"); ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_010, "柜体数据获取错误"); ErrorCode GOODS_DATA_ERROR = new ErrorCode(1_002_029_011, "商品信息获取错误"); @@ -64,6 +65,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 b15e165e1..f86ee8561 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 @@ -39,6 +39,7 @@ import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLATE_PLAN_DATA_ERROR; +import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLATE_PLAN_DATA_NULL; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.service.order.OrderService; @@ -228,6 +229,9 @@ public class OrderController { if (!dataPlates.getString("err_code").equals("0")) { throw exception(PLATE_PLAN_DATA_ERROR); } + if (dataPlates.getJSONObject("value") == null) { + throw exception(PLATE_PLAN_DATA_NULL); + } JSONObject dataParts = apiDataAchieve.getApiPartsMessage(token, orderNo).get(); JSONObject dataBody = apiDataAchieve.getApiBodyMessage(token, orderNo).get(); JSONObject dataGoods = apiDataAchieve.getApiGoodsMessage(token, orderNo).get(); @@ -273,17 +277,25 @@ 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")); + if (list.size() == 0) { + orderDO.setStatus(0); } + 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 005a910e4..906c652bc 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 @@ -64,4 +64,11 @@ public interface OrderBodyMapper extends BaseMapperX { List selectRoomAndBody(@Param("orderIds") List orderIds, @Param("organId") Long 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 14f0941d7..04138fc89 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 @@ -219,6 +219,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) { @@ -365,6 +371,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 @@ -579,7 +589,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..78bdc1244 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,11 +99,35 @@ 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 LocalDateTime changeTime(String dateString) { 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..2a663c272 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-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java index 3d9fb2019..f106d3456 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlatePageReqVO.java @@ -49,6 +49,9 @@ public class RemainPlatePageReqVO extends PageParam { @Schema(description = "颜色") private String color; + @Schema(description = "纹理") + private String texture; + @Schema(description = "宽度") private BigDecimal[] width; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java index 03736b370..9da84d1cb 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateRespVO.java @@ -7,6 +7,8 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; +import javax.validation.constraints.NotEmpty; + @Schema(description = "管理后台 - 生产单余料板表 order_remain_plate_{N} Response VO") @Data @ExcelIgnoreUnannotated @@ -56,6 +58,10 @@ public class RemainPlateRespVO { @ExcelProperty("颜色") private String color; + @Schema(description = "纹理 有 无", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("纹理 有 无") + private String texture; + @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("宽度") private BigDecimal width; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java index 50377d8b4..9b0d3341d 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/remain/RemainPlateSaveReqVO.java @@ -47,6 +47,10 @@ public class RemainPlateSaveReqVO { @NotEmpty(message = "颜色不能为空") private String color; + @Schema(description = "纹理 有 无", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "纹理不能为空") + private String texture; + @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "宽度不能为空") private BigDecimal width; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java index 14ce761cf..582b07522 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java @@ -66,6 +66,10 @@ public class RemainPlateDO extends BaseDO { * 颜色 */ private String color; + /** + * 纹理 + */ + private Boolean texture; /** * 宽度 */ diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java index 0fc128468..ea17cb243 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/remainplaten/RemainPlateMapper.java @@ -36,6 +36,7 @@ public interface RemainPlateMapper extends BaseMapperX { .eqIfPresent(RemainPlateDO::getPlaceStyle, reqVO.getPlaceStyle()) .likeIfPresent(RemainPlateDO::getStore, reqVO.getStore()) .eqIfPresent(RemainPlateDO::getCount, reqVO.getCount()) + .eqIfPresent(RemainPlateDO::getTexture, reqVO.getTexture()) .likeIfPresent(RemainPlateDO::getRemark, reqVO.getRemark()) .eqIfPresent(RemainPlateDO::getUseType, reqVO.getUseType()) .eqIfPresent(RemainPlateDO::getOrganId, reqVO.getOrganId())