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 e8b932c62..6d2db10a9 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 @@ -409,7 +409,7 @@ public class OrderController { } @PostMapping("/get-platesDetailsPage") - @Operation(summary = "生产单详情-板材详细信息(分页)") + @Operation(summary = "生产单详情-板件详细信息(分页)") @PreAuthorize("@ss.hasPermission('production:manager-list:detail')") public CommonResult> platesDetails(@Valid @RequestBody OrderBodyPageRespVO orderBodyPageRespVO) { if (orderBodyPageRespVO.getDeleted() == null) { @@ -434,6 +434,20 @@ public class OrderController { orderBodyPageRespVO.getPageNo(), orderBodyPageRespVO.getPageSize(), !orderBodyPageRespVO.getDeleted() ? 0 : 1)); } + + @PostMapping("/get-goodsDetailsPage") + @Operation(summary = "生产单详情-板材详细信息(分页)") + @PreAuthorize("@ss.hasPermission('production:manager-list:detail')") + public CommonResult> goodsDetails(@Valid @RequestBody OrderBodyPageRespVO orderBodyPageRespVO) { + if (orderBodyPageRespVO.getDeleted() == null) { + orderBodyPageRespVO.setDeleted(false); + } + return success(orderService.getGoodsDetail(orderBodyPageRespVO.getOrderId(), + orderBodyPageRespVO.getRoomIds(), orderBodyPageRespVO.getBodyIds(), + orderBodyPageRespVO.getGroupIds(), orderBodyPageRespVO.getGoodsId(), + orderBodyPageRespVO.getPageNo(), orderBodyPageRespVO.getPageSize(), !orderBodyPageRespVO.getDeleted() ? 0 : 1)); + } + @DeleteMapping("/delete-body") @Operation(summary = "删除柜体") @PreAuthorize("@ss.hasPermission('production:manager-list:deleteCabinet')") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyPageRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyPageRespVO.java index d4f51cb65..fe5cc0686 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyPageRespVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderBodyPageRespVO.java @@ -32,6 +32,9 @@ public class OrderBodyPageRespVO extends PageParam { @Schema(description = "配件名称", example = "1024") private String partsName; + @Schema(description = "板材id", example = "1024") + private Set goodsId; + @Schema(description = "是否删除", example = "false") private Boolean deleted; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsDetailRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsDetailRespVO.java new file mode 100644 index 000000000..f8b176210 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsDetailRespVO.java @@ -0,0 +1,59 @@ +package com.cf.imes.module.executor.controller.admin.order.vo.order; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 生产单板材表 order_parts_{N} Response VO") +@Data +@ExcelIgnoreUnannotated +public class OrderGoodsDetailRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long id; + + @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED) + private Long orderId; + + @Schema(description = "客户的商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String goodsId; + + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + private String goodsName; + + @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED) + private String material; + + @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) + private String color; + + @Schema(description = "纹理", example = "true") + private Boolean texture; + + @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) + private Double width; + + @Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED) + private Double height; + + @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED) + private Double thickness; + + @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED) + private String brand; + + @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED) + private String spec; + + @Schema(description = "小板片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer number; + + @Schema(description = "小板总面积", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Double area; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便") + private String remark; + + private Long organId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsRespVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsRespVO.java new file mode 100644 index 000000000..6b11a79a7 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsRespVO.java @@ -0,0 +1,38 @@ +package com.cf.imes.module.executor.controller.admin.order.vo.order; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 板材生产单关系表 + */ +@Schema(description = "管理后台 - 板材生产单关系表 order Response VO") +@Data +@ExcelIgnoreUnannotated +public class OrderGoodsRespVO { + + @Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20230414026120") + private Long orderId; + + @Schema(description = "房间Id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long roomId; + + @Schema(description = "柜体Id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long bodyId; + + @Schema(description = "加工组Id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long groupId; + + @Schema(description = "板材名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String goodsName; + + @Schema(description = "板材id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long goodsId; + + @Schema(description = "小板片数", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer totalPlates; + + @Schema(description = "小班面积", requiredMode = Schema.RequiredMode.REQUIRED) + private Double totalArea; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderPlatesDetailReqVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderPlatesDetailReqVO.java index 1a73f3190..ca8f86fe8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderPlatesDetailReqVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderPlatesDetailReqVO.java @@ -21,7 +21,7 @@ public class OrderPlatesDetailReqVO { @Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") private String name; - @Schema(description = "自定义板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") + @Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") private String plateNo; @Schema(description = "材质", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/vo/OrderPartsRemark.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/vo/OrderPartsRemark.java index a073162ea..b31682c43 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/vo/OrderPartsRemark.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/vo/OrderPartsRemark.java @@ -23,7 +23,7 @@ public class OrderPartsRemark extends ESDocument { @Schema(description = "备注") private String remark; - @Schema(description = "五金额外规格") + @Schema(description = "额外规格") private String specExtras; @Schema(description = "门板组件铰链备注") diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java index 127566088..9a91b2192 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java @@ -38,7 +38,7 @@ public class PlateDO extends BaseDO { */ private String name; /** - * 自定义板编号,设计有板编号,则保留设计板编号;设计没有且在机台设置中设置了自定义板编号规则,则按规则自动生成 + * 组织中唯一板编号 */ private String plateNo; /** diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java index df1771646..e27049f6a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java @@ -3,6 +3,8 @@ package com.cf.imes.module.executor.dal.mysql.orderItem; import com.baomidou.mybatisplus.core.metadata.IPage; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsDetailRespVO; +import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlatesDetailRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO; @@ -117,4 +119,12 @@ public interface OrderItemMapper extends BaseMapperX { void deletePackList(@Param("orderId") Long orderId,@Param("packIds") List packIds,@Param("organId") Long organId); + + List selectGoodsByOrderId(@Param("orderId") Long orderId, + @Param("organId") Long organId, + @Param("deleted") Integer deleted); + + IPage selectGoodsDetailByOrderId(@Param("page") IPage page, @Param("orderId") Long orderId, @Param("roomId") Set roomId, + @Param("bodyId") Set bodyId, @Param("groupId") Set groupId, @Param("goodsId") Set goodsId, + @Param("organId") Long organId, @Param("deleted") Integer deleted); } \ 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/OrderInputProcessor.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java index a19f9d85b..184e6201d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderInputProcessor.java @@ -105,10 +105,14 @@ public class OrderInputProcessor { * @param itemDOS */ @Transactional(rollbackFor = Exception.class) - public void batchInsert(Collection rawGoodsDOS, Collection orderBodyDOS, - Collection orderGroupDOS, Collection orderPartsDOS, - Collection plateDOS, Collection itemDOS, - Collection goodsDOS, Collection plateGoodDOS) { + public void batchInsert(Collection rawGoodsDOS, + Collection orderBodyDOS, + Collection orderGroupDOS, + Collection orderPartsDOS, + Collection plateDOS, + Collection itemDOS, + Collection goodsDOS, + Collection plateGoodDOS) { // if (rawGoodsDOS != null) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java index e05b3873b..792fbc18d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java @@ -82,6 +82,15 @@ public interface OrderService { */ PageResult getPartsDetail(Long orderId, Set roomId , Set bodyId, Set groupId, String name, Integer pageNo, Integer pageSize, Integer deleted); + /** + * @param orderId: 生产单id + * @param roomId: 房间id + * @param bodyId: 柜体id + * @return List + * 需要修改返回值 + */ + PageResult getGoodsDetail(Long orderId, Set roomId , Set bodyId, Set groupId, Set goodsId, Integer pageNo, Integer pageSize, Integer deleted); + /** * 删除柜体/柜体还原 * @param orderId: 生产单id @@ -95,8 +104,6 @@ public interface OrderService { /** * @param listMap:生产单号 * @return Boolean - * @author Administrator - * @date 2024/3/30 */ Long importApiData(Map listMap); 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 71cdb53dc..9bda2485d 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 @@ -49,6 +49,7 @@ import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper; import com.cf.imes.module.executor.enums.OrderDeletedEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.service.plan.PlanService; +import com.cf.imes.module.executor.util.deviseData.structure.FieldConstants; import com.cf.imes.module.executor.util.deviseData.structure.PlateDetail; import com.cf.imes.module.executor.util.fileConversion.admin.SnowflakeIdWorker3rd; import org.springframework.aop.framework.AopContext; @@ -215,9 +216,13 @@ public class OrderServiceImpl implements OrderService { // 配件 List orderItemDOS = orderItemMapper.selectPartsByOrderId(orderId, getUserOrganId(), deleted); + // 板材 + List orderGoodsRespVOS = orderItemMapper.selectGoodsByOrderId(orderId, getUserOrganId(), deleted); + Map map = new HashMap<>(); map.put("module", orderModuleRespVOList); map.put("parts", orderItemDOS); + map.put("goods", orderGoodsRespVOS); return map; } @@ -241,6 +246,15 @@ public class OrderServiceImpl implements OrderService { return new PageResult(orderDetail.getRecords(), orderDetail.getTotal()); } + @Override + public PageResult getGoodsDetail(Long orderId, Set roomId, Set bodyId, Set groupId, Set goodsId, Integer pageNo, Integer pageSize, Integer deleted) { + PageDTO page = new PageDTO<>(pageNo, pageSize); + + IPage goodsDetail = orderItemMapper.selectGoodsDetailByOrderId(page, orderId, roomId, bodyId, groupId, goodsId, getUserOrganId(), deleted); + + return new PageResult(goodsDetail.getRecords(), goodsDetail.getTotal()); + } + @Override @Transactional(rollbackFor = Exception.class) public void updateDeleteBody(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 @@ -369,7 +383,7 @@ public class OrderServiceImpl implements OrderService { List bodyDO = (List) listMap.get("bodyDO"); List groupDO = (List) listMap.get("groupDO"); List partsDO = (List) listMap.get("partsDO"); - List plateDO = (List) listMap.get("platesDO"); + List plateDO = (List) listMap.get(FieldConstants.PLATE); List plateDetail = (List) listMap.get("plateDetail"); List itemDO = (List) listMap.get("itemDO"); List partsRemark = (List) listMap.get("partsRemark"); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/FieldConstants.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/FieldConstants.java new file mode 100644 index 000000000..3c8a64581 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/FieldConstants.java @@ -0,0 +1,20 @@ +package com.cf.imes.module.executor.util.deviseData.structure; + +/** + * 数据格式转换对应的常量 + */ +public class FieldConstants { + + public static final String ORDER = "orderDO"; + public static final String BODY = "bodyDO"; + public static final String GROUP = "groupDO"; + public static final String GOODS = "goodsDO"; + public static final String RAW_GOODS = "rawGoodsDO"; + public static final String PARTS = "partsDO"; + public static final String PLATE = "plateDO"; + public static final String ITEM = "itemDO"; + public static final String PLATE_DETAIL = "plateDetail"; + + public static final String PARTS_REMARK = "partsRemark"; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java index 7b4e6c76f..4a0c762c8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java @@ -1,7 +1,6 @@ package com.cf.imes.module.executor.util.deviseData.structure; import com.alibaba.fastjson.JSONObject; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -57,7 +56,7 @@ public class PlateDetail{ // 板材所属加工组 private String group;// 板件加工组Group的名称,可以有多个 // 加工组具体信息 - private List groupList; +// private List groupList; // 成品长宽、面积 private BigDecimal plateWidth; @@ -83,11 +82,11 @@ public class PlateDetail{ private BigDecimal offsetY; // 大板基本信息 - private BoardInfo boardInfo; +// private BoardInfo boardInfo; // 配件基本信息 - private List partsInfos; + private List partsInfos; // xml中有,估计之后不需要 // 排钻类型 - private List drillsInfos; + private List drillsInfos; // api中有 private Double throughHoleCount; // 挖孔的孔数 private Double throughModelCount; // 挖穿的造型数 @@ -103,11 +102,11 @@ public class PlateDetail{ private List rawPointDetail ; //原始点明细(含封边) private List basePointDetail ; //坯料点明细 - private Map holeCount;//孔类型数量集合 + private Map holeCount;//孔类型数量集合 (xml中特有----孔类型,对应的数量) private List holeDetail ; //孔明细,表示板上的孔 - private Map contourCount;//凹槽数量集合 - private List contourDetail ; //造型明细(凹槽) - private List isletsDetail ; //造型明细(孤岛) + private Map contourCount;//凹槽数量集合 (xml中特有----槽所在板面的对应数量) + private List contourDetail ; //造型明细(xml中为凹槽,将孤岛的信息放入槽中) +// private List isletsDetail ; //造型明细(孤岛)不需要 private List sideHoleDetail;//侧面孔明细 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/SnowflakeIdWorker3rd.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/SnowflakeIdWorker3rd.java index 2d0c520de..db0ce773f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/SnowflakeIdWorker3rd.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/SnowflakeIdWorker3rd.java @@ -50,9 +50,10 @@ public class SnowflakeIdWorker3rd { /** 测试 */ public static void main(String[] args) { SnowflakeIdWorker3rd idWorker = new SnowflakeIdWorker3rd(); - for (int i = 0; i < 1000; i++) { + long obtainingTime = idWorker.obtainingTime(); + for (int i = 0; i < 10001; i++) { long id = idWorker.nextId(); - System.out.println(i + ": " + id + " " + "2406" + Long.toString(id).substring(2)); + System.out.println(i + ": " + id + " " + obtainingTime + Long.toString(id).substring(2)); } // long id = idWorker.nextId(); // System.out.println(id); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java index 30e74fc14..531eda885 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java @@ -18,6 +18,7 @@ import com.cf.imes.module.executor.util.fileConversion.admin.SnowflakeIdWorker3r import com.cf.imes.module.executor.util.deviseData.structure.*; import com.cf.imes.module.system.api.dict.DictDataApi; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -50,71 +51,94 @@ public class ApiTypeRealize { private static final Integer Y = 1; private static final Integer Z = 2; - private static final String VALUE = "value"; + private static final Integer INDEX = 0; + /** - * @param dataPlates: 板件生产信息 + * @param dataPlates: 板件生产信息 造型数据 * @param dataParts: 配件信息 * @param dataBody: 柜体信息 * @param dataGoods: 商品信息 - * @param plates: 板件信息 + * @param plates: 板件信息 板件明细 * @param dataModule: 加工组信息 + * @param dataBlocks: 大板信息 * @return Map> */ - public Map apiPlateDataChange(JSONObject order, JSONObject dataPlates, JSONObject dataParts - , JSONObject dataBody, JSONObject dataGoods - , JSONObject plates, JSONObject dataModule - , JSONObject dataBlocks, String orderNo,Long orderId, Long organId) { - + public Map apiPlateDataChange(JSONObject order, + JSONObject dataPlates, + JSONObject dataParts, + JSONObject dataBody, + JSONObject dataGoods, + JSONObject plates, + JSONObject dataModule, + JSONObject dataBlocks, + String orderNo, + Long orderId, + Long organId) { Map map = new HashMap<>(); + List itemsList = new ArrayList<>(); + // 生产单数据 OrderDO orderDO = orderInfoChange(order, orderId, orderNo, organId); - map.put("orderDO", orderDO); + map.put(FieldConstants.ORDER, orderDO); + // 商品信息数据 信息以全 Map goodsInfoChange = rawGoodsInfoChange(dataGoods, orderId, organId); - Map rawGoodsDOS = (Map) goodsInfoChange.get("rawGoodsDOS"); - Map goodsDOS = (Map) goodsInfoChange.get("goodsDOS"); - List goodsDO = new ArrayList<>(goodsDOS.values()); // (List) - map.put("goodsDO", goodsDO); - List rawGoodsDO = new ArrayList<>(rawGoodsDOS.values()); - map.put("rawGoodsDO", rawGoodsDO); + Map rawGoodsDOS = (Map) goodsInfoChange.get(FieldConstants.RAW_GOODS); + Map goodsDOS = (Map) goodsInfoChange.get(FieldConstants.GOODS); + // 柜体信息 少异形数量、板材数量 Map bodyInfoChange = bodyInfoChange(dataBody, orderId, organId); // 加工组 少异形数量、板材数量 - Map> group = groupInfoChange(dataModule, orderId, bodyInfoChange, organId); + Map group = groupInfoChange(dataModule, orderId, bodyInfoChange, organId); Map orderGroupDO = (Map) group.get("orderGroup"); Map> groupLists = (Map>) group.get("lists"); // 加工组中包含的板件、配件id + + // 配件 - Map> partsDO = partsInfoChange(dataParts, orderId, - (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange, organId); + Map partsDO = partsInfoChange(dataParts, orderId, goodsDOS, bodyInfoChange, organId); Map partsRemark = (Map) partsDO.get("remarks"); // 配件备注 - map.put("partsRemark", partsRemark.values().stream().collect(Collectors.toList())); + map.put(FieldConstants.PARTS_REMARK, new ArrayList<>(partsRemark.values())); Map orderPartsDO = (Map) partsDO.get("partsInfos"); - map.put("partsDO", orderPartsDO.values().stream().collect(Collectors.toList())); + map.put(FieldConstants.PARTS, new ArrayList<>(orderPartsDO.values())); Map partsItems = (Map) partsDO.get("partsItems"); - List itemsList = new ArrayList<>(); partsItems = orderPartsChange(orderGroupDO, groupLists, partsItems);// item补充 itemsList.addAll(partsItems.values()); + + // 板材 写库 - Map> platesDO = platesInfoChange(dataPlates, plates, orderId, - (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange, dataBlocks, organId); + Map platesDO = platesInfoChange(dataPlates, plates, orderId, goodsDOS, bodyInfoChange, dataBlocks, organId); + Map orderPlatesDO = (Map) platesDO.get("platesInfos"); - map.put("platesDO", orderPlatesDO.values().stream().collect(Collectors.toList())); - map.put("plateDetail", platesDO.get("plateDetail").values().stream().collect(Collectors.toList())); + map.put(FieldConstants.PLATE, new ArrayList<>(orderPlatesDO.values())); + + Map plateDetail = (Map) platesDO.get("plateDetail"); + map.put(FieldConstants.PLATE_DETAIL, new ArrayList<>(plateDetail.values())); + Map platesItems = (Map) platesDO.get("platesItems"); + Map bodyItemsPlates = (Map) platesDO.get("bodyInfos"); + platesItems = orderPartsChange(orderGroupDO, groupLists, platesItems);// item补充 itemsList.addAll(platesItems.values()); - map.put("groupDO", groupAddUnregularNum(itemsList, orderPlatesDO, orderGroupDO).values().stream().collect(Collectors.toList())); - map.put("itemDO", itemsList); - map.put("bodyDO", bodyItemsPlates.values().stream().collect(Collectors.toList())); + + + + List goodsDO = new ArrayList<>(goodsDOS.values()); // (List) + map.put(FieldConstants.GOODS, goodsDO); + List rawGoodsDO = new ArrayList<>(rawGoodsDOS.values()); + map.put(FieldConstants.RAW_GOODS, rawGoodsDO); + + map.put(FieldConstants.GROUP, new ArrayList<>(groupAddUnregularNum(itemsList, orderPlatesDO, orderGroupDO).values())); + map.put(FieldConstants.ITEM, itemsList); + map.put(FieldConstants.BODY, new ArrayList<>(bodyItemsPlates.values())); return map; } @@ -126,11 +150,10 @@ public class ApiTypeRealize { * @param groupLists: ModuleID 板材、配件id * @param items: ItemID item * @return Map - * @author Administrator - * @date 2024/5/8 */ public Map orderPartsChange(Map orderGroupDO, - Map> groupLists, Map items) { + Map> groupLists, + Map items) { AtomicInteger groupNum = new AtomicInteger(0); groupLists.forEach((k, v) -> { @@ -170,12 +193,14 @@ public class ApiTypeRealize { /** * 加工组异形板赋值 */ - public Map groupAddUnregularNum(List itemsList, Map orderPlatesDO, Map orderGroupDO) { + public Map groupAddUnregularNum(List itemsList, + Map orderPlatesDO, + Map orderGroupDO) { Map> groupPlate = itemsList.stream().collect(Collectors.groupingBy(OrderItemDO::getGroupId)); - List orderItemDOList = orderPlatesDO.values().stream().collect(Collectors.toList()); + List orderItemDOList = orderPlatesDO.values().stream().toList(); Map plateDOMap = orderItemDOList.stream().collect(Collectors.toMap(PlateDO::getId, plate -> plate)); - List orderGroupDOList = orderGroupDO.values().stream().collect(Collectors.toList()); + List orderGroupDOList = orderGroupDO.values().stream().toList(); Map orderGroupDOMap = orderGroupDOList.stream().collect(Collectors.toMap(OrderGroupDO::getId, v -> v)); AtomicInteger specialShapedNum = new AtomicInteger(0); @@ -183,16 +208,14 @@ public class ApiTypeRealize { v.forEach(item -> { if (plateDOMap.get(item.getPlateId()) != null) { - if (plateDOMap.get(item.getPlateId()).getIsSpecialShaped()) { // 异形相加 + if (Boolean.TRUE.equals(plateDOMap.get(item.getPlateId()).getIsSpecialShaped())) { // 异形相加 specialShapedNum.getAndIncrement(); -// System.out.println(k + " 对应 " + specialShapedNum); } } }); if (orderGroupDOMap.get(k) != null) {// m 加工组 orderGroupDOMap.get(k).setUnregularNum(specialShapedNum.get()); } - ; specialShapedNum.set(0); }); return orderGroupDO; @@ -201,12 +224,15 @@ public class ApiTypeRealize { /** * 加工组 信息转换 */ - private Map> groupInfoChange(JSONObject dataModule, Long orderId, Map bodyInfoChange, Long organId) { - Map> map = new HashMap<>(); + private Map groupInfoChange(JSONObject dataModule, + Long orderId, + Map bodyInfoChange, + Long organId) { + Map map = new HashMap<>(); Map orderGroupDOs = new HashMap<>();// 加工组id 和 加工组信息 Map> groupLists = new HashMap<>();// 加工组id 和 详细信息 - JSONArray value = dataModule.getJSONArray("value"); + JSONArray value = dataModule.getJSONArray(ProduceApiConstants.VALUE); if (value != null && !value.isEmpty()) { for (int i = 0; i < value.size(); i++) { JSONObject group = value.getJSONObject(i); @@ -214,13 +240,13 @@ public class ApiTypeRealize { OrderGroupDO bodyInfo = OrderGroupDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) - .bodyId(bodyInfoChange.get(group.getLong("BoxID")).getId())//group.getLong("BoxID") - .groupTypeId(group.getLong("ModuleTypeID")) + .bodyId(bodyInfoChange.get(group.getLong(ProduceApiConstants.M_BOX_ID)).getId())//group.getLong("BoxID") + .groupTypeId(group.getLong(ProduceApiConstants.M_MODULE_TYPE_ID)) .groupTypeName("无") - .name(group.getString("ModuleTypeName")) - .width(group.getDouble("Width")) - .height(group.getDouble("Length")) - .depth(group.getDouble("Thickness")) + .name(group.getString(ProduceApiConstants.M_MODULE_TYPE_NAME)) + .width(group.getDouble(ProduceApiConstants.M_WIDTH)) + .height(group.getDouble(ProduceApiConstants.M_LENGTH)) + .depth(group.getDouble(ProduceApiConstants.M_THICKNESS)) .multiNum(0) .plateNum(0) .unregularNum(0) @@ -228,8 +254,8 @@ public class ApiTypeRealize { .remark("无") .organId(organId) .build(); - groupLists.put(group.getLong("ModuleID"), jsonArrayToList(group.getJSONArray("ItemIDList"))); - orderGroupDOs.put(group.getLong("ModuleID"), bodyInfo); + groupLists.put(group.getLong(ProduceApiConstants.M_MODULE_ID), jsonArrayToList(group.getJSONArray(ProduceApiConstants.M_ITEM_ID_LIST))); + orderGroupDOs.put(group.getLong(ProduceApiConstants.M_MODULE_ID), bodyInfo); } } @@ -242,17 +268,19 @@ public class ApiTypeRealize { * 生产单信息转换 * */ - public OrderDO orderInfoChange(JSONObject orderJson, Long orderId, String orderNo, Long organId) { - // 获取 Orders 字段对应的数组 - JSONObject order = orderJson.getJSONArray("data").getJSONObject(0); + public OrderDO orderInfoChange(JSONObject orderJson, + Long orderId, + String orderNo, + Long organId) { + // 获取生产单信息 + JSONObject order = orderJson.getJSONArray(ProduceApiConstants.DATA).getJSONObject(INDEX); - // 如果 Orders 数组不为空,则获取第一个订单对象 + // 检验数据合法性 if (order != null && !order.isEmpty()) { - // 获取生产单信息 - // 使用 DateTimeFormatter 解析日期字符串 + // 数据校验 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate orderDate = LocalDate.parse(order.getString("start_date"), formatter); - LocalDate deliveryDate = LocalDate.parse(order.getString("end_date"), formatter); + LocalDate orderDate = LocalDate.parse(order.getString(ProduceApiConstants.OL_START_DATE), formatter); + LocalDate deliveryDate = LocalDate.parse(order.getString(ProduceApiConstants.OL_END_DATE), formatter); if (deliveryDate.isBefore(orderDate)) { // 将 deliveryDate 设置为 orderDate 后的第 30 天 deliveryDate = orderDate.plusMonths(1); @@ -267,15 +295,15 @@ public class ApiTypeRealize { .deliveryDate(deliveryDate.atStartOfDay()) .orderType(OrderTypeEnum.MAIN_ORDER.getStatus()) .dataType(DataTypeEnum.API_IMPORT.getStatus()) - .customOrderNo(order.getString("custom_order_no")) - .customer(order.getString("cosignee_name")) - .address(order.getString("cosignee_address")) - .phoneNumber(order.getString("cosignee_phone")) - .dealer(order.getString("store_name")) - .dealerPhoneNumber(order.getString("store_phone")) - .salesman(order.getString("nick_name")) - .splitter(order.getString("cd_nick_name")) - .remark(orderRemark + order.getString("comments")) + .customOrderNo(order.getString(ProduceApiConstants.OL_CUSTOM_ORDER_NO)) + .customer(order.getString(ProduceApiConstants.OL_CUSTOMER_NAME)) + .address(order.getString(ProduceApiConstants.OL_CUSTOMER_ADDRESS)) + .phoneNumber(order.getString(ProduceApiConstants.OL_CUSTOMER_PHONE)) + .dealer(order.getString(ProduceApiConstants.OL_STORE_NAME)) + .dealerPhoneNumber(order.getString(ProduceApiConstants.OL_STORE_PHONE)) + .salesman(order.getString(ProduceApiConstants.OL_NICK_NAME)) + .splitter(order.getString(ProduceApiConstants.OL_CD_NICK_NAME)) + .remark(orderRemark + order.getString(ProduceApiConstants.OL_COMMENTS)) .organId(organId) .build(); @@ -314,9 +342,12 @@ public class ApiTypeRealize { * @param orderId: * @return Map> String 标识 , Long:商品ID标识,RawGoodsDO:商品信息 */ - public Map rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId, Long organId) { + public Map rawGoodsInfoChange(JSONObject dataRawGoods, + Long orderId, + Long organId) { - if (dataRawGoods.getJSONArray("List") == null || dataRawGoods.getJSONArray("List").isEmpty()) { + JSONArray goodsLists = dataRawGoods.getJSONArray(ProduceApiConstants.LIST); + if (goodsLists == null || goodsLists.isEmpty()) { return Collections.emptyMap(); } @@ -324,50 +355,48 @@ public class ApiTypeRealize { Map rawGoodsDOS = new HashMap<>(); Map goodsDOS = new HashMap<>(); - JSONArray goodsLists = dataRawGoods.getJSONArray("List"); + for (int i = 0; i < goodsLists.size(); i++) { JSONObject goods = goodsLists.getJSONObject(i); RawGoodsDO rawGoodsDO = RawGoodsDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) - .rawGoodsId(goods.getString("GoodsID")) - .goodsName(goods.getString("GoodsName")) - .material(goods.getString("Material")) - .color(goods.getString("Color")) - .texture(getTexture( goods.getJSONObject("ExtraProp"))) - .thickness(goods.getDouble("Thickness")) -// .price(goods.getDouble("Price")) - .brand(goods.getString("Brand")) - .spec(goods.getString("Spec")) + .rawGoodsId(goods.getString(ProduceApiConstants.G_DOOR_ID)) + .goodsName(goods.getString(ProduceApiConstants.G_GOODS_NAME)) + .material(goods.getString(ProduceApiConstants.G_MATERIAL)) + .color(goods.getString(ProduceApiConstants.G_COLOR)) + .texture(getTexture( goods.getJSONObject(ProduceApiConstants.G_EXTRA_PROP))) + .thickness(goods.getDouble(ProduceApiConstants.G_THICKNESS)) + .brand(goods.getString(ProduceApiConstants.G_BRAND)) + .spec(goods.getString(ProduceApiConstants.G_SPEC)) .organId(organId) .build(); - rawGoodsDOS.put(goods.getLong("GoodsID"), rawGoodsDO); + rawGoodsDOS.put(goods.getLong(ProduceApiConstants.G_DOOR_ID), rawGoodsDO); GoodsDO goodsDO = GoodsDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) .rawGoodsId(String.valueOf(rawGoodsDO.getId())) - .goodsId(goods.getString("GoodsID")) // 先填这个,后面改 - .goodsName(goods.getString("GoodsName")) - .material(goods.getString("Material")) - .color(goods.getString("Color")) - .texture(getTexture( goods.getJSONObject("ExtraProp"))) - .width(BigDecimal.valueOf(goods.getDouble("Width"))) - .height(BigDecimal.valueOf(goods.getDouble("Height"))) - .thickness(BigDecimal.valueOf(goods.getDouble("Thickness"))) - .price(BigDecimal.valueOf(goods.getDouble("Price"))) - .brand(goods.getString("Brand")) - .spec(goods.getString("Spec")) + .goodsId(goods.getString(ProduceApiConstants.G_DOOR_ID)) // 先填这个,后面改 + .goodsName(goods.getString(ProduceApiConstants.G_GOODS_NAME)) + .material(goods.getString(ProduceApiConstants.G_MATERIAL)) + .color(goods.getString(ProduceApiConstants.G_COLOR)) + .texture(getTexture( goods.getJSONObject(ProduceApiConstants.G_EXTRA_PROP))) + .width(BigDecimal.valueOf(goods.getDouble(ProduceApiConstants.G_WIDTH))) + .height(BigDecimal.valueOf(goods.getDouble(ProduceApiConstants.G_HEIGHT))) + .thickness(BigDecimal.valueOf(goods.getDouble(ProduceApiConstants.G_THICKNESS))) + .brand(goods.getString(ProduceApiConstants.G_BRAND)) + .spec(goods.getString(ProduceApiConstants.G_SPEC)) .organId(organId) .build(); - goodsDOS.put(goods.getLong("GoodsID"), goodsDO); + goodsDOS.put(goods.getLong(ProduceApiConstants.G_DOOR_ID), goodsDO); } - map.put("rawGoodsDOS", rawGoodsDOS); - map.put("goodsDOS", goodsDOS); + map.put(FieldConstants.RAW_GOODS, rawGoodsDOS); + map.put(FieldConstants.GOODS, goodsDOS); return map; } @@ -377,25 +406,28 @@ public class ApiTypeRealize { * @param dataBody: * @return Map Integer:柜体ID标识,OrderBodyDO:柜体信息(差数据) */ - private Map bodyInfoChange(JSONObject dataBody, Long orderId, Long organId) { + private Map bodyInfoChange(JSONObject dataBody, + Long orderId, + Long organId) { - if (dataBody.getJSONArray("List") == null || dataBody.getJSONArray("List").isEmpty()) { - return null; + JSONArray bodyLists = dataBody.getJSONArray(ProduceApiConstants.LIST); + + if (bodyLists == null || bodyLists.isEmpty()) { + return Collections.emptyMap(); } Map bodyInfos = new HashMap<>(); - JSONArray bodyLists = dataBody.getJSONArray("List"); for (int i = 0; i < bodyLists.size(); i++) { JSONObject body = bodyLists.getJSONObject(i); OrderBodyDO bodyInfo = OrderBodyDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) - .roomId(Long.valueOf(body.getString("RoomID"))) - .roomName(body.getString("Room")) - .name(body.getString("Name")) - .width(body.getDouble("Width")) - .height(body.getDouble("Height")) - .depth(body.getDouble("Depth")) + .roomId(Long.valueOf(body.getString(ProduceApiConstants.B_ROOM_ID))) + .roomName(body.getString(ProduceApiConstants.B_ROOM_NAME)) + .name(body.getString(ProduceApiConstants.B_NAME)) + .width(body.getDouble(ProduceApiConstants.B_WIDTH)) + .height(body.getDouble(ProduceApiConstants.B_HEIGHT)) + .depth(body.getDouble(ProduceApiConstants.B_DEPTH)) .multiNum(0) .plateNum(0) .unregularNum(0) @@ -403,7 +435,7 @@ public class ApiTypeRealize { .remark("") .organId(organId) .build(); - bodyInfos.put(body.getLong("BoxID"), bodyInfo); + bodyInfos.put(body.getLong(ProduceApiConstants.B_BOX_ID), bodyInfo); } return bodyInfos; @@ -428,59 +460,65 @@ public class ApiTypeRealize { * @param orderId: * @param goodsDOMap: * @return Map Integer指配件的dataId标识id - * @author Administrator - * @date 2024/4/30 */ - public Map> partsInfoChange(JSONObject value, Long orderId, Map goodsDOMap, Map bodyInfos, Long organId) { - Map> map = new HashMap<>(); + public Map partsInfoChange(JSONObject value, + Long orderId, + Map goodsDOMap, + Map bodyInfos, + Long organId) { + + if (value == null || value.isEmpty()) { + return Collections.emptyMap(); + } + + Map map = new HashMap<>(); Map partsInfos = new HashMap<>(); Map partsItem = new HashMap<>(); Map remarks = new HashMap<>(); - if (value != null && !value.isEmpty()) { - JSONArray partsLists = value.getJSONArray("List"); + + JSONArray partsLists = value.getJSONArray(ProduceApiConstants.LIST); for (int i = 0; i < partsLists.size(); i++) { JSONObject parts = partsLists.getJSONObject(i); Long partsId = (Long) identifierGenerator.nextId(null); OrderPartsDO partsInfo = OrderPartsDO.builder() .id(partsId) .orderId(orderId) - .goodsId(String.valueOf(goodsDOMap.get(parts.getLong("GoodsID")) != null - ? goodsDOMap.get(parts.getLong("GoodsID")).getId() : parts.getLong("GoodsID"))) - .name(parts.getString("Name")) - .material(String.valueOf(goodsDOMap.get(parts.getLong("GoodsID")) != null - ? goodsDOMap.get(parts.getLong("GoodsID")).getMaterial() : "")) - .type(parts.getString("ObjectType")) - .model(parts.getString("Model")) - .spec(parts.getString("Spec")) - .brand(parts.getString("Brand")) - .factory(parts.getString("Factory")) - .unit(parts.getString("Units")) - .price(parts.getDouble("Price")) - .isComposite(parts.getBoolean("IsComposite")) - .remark(parts.getString("Remark")) + .goodsId(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null + ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getId() : parts.getLong(ProduceApiConstants.PD_GOODS_ID))) + .name(parts.getString(ProduceApiConstants.PD_NAME)) + .material(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null + ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getMaterial() : "")) + .type(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE)) + .model(parts.getString(ProduceApiConstants.PD_MODEL)) + .spec(parts.getString(ProduceApiConstants.PD_SPEC)) + .brand(parts.getString(ProduceApiConstants.PD_BRAND)) + .factory(parts.getString(ProduceApiConstants.PD_FACTORY)) + .unit(parts.getString(ProduceApiConstants.PD_UNITS)) + .isComposite(parts.getBoolean(ProduceApiConstants.PD_IS_COMPOSITE)) + .remark(parts.getString(ProduceApiConstants.PD_REMARK)) .organId(organId) .build(); - remarks.put(parts.getLong("ItemID"), partsRemarkChange(parts, orderId, partsId)); - partsInfos.put(parts.getLong("ItemID"), partsInfo); + remarks.put(parts.getLong(ProduceApiConstants.PD_ITEM_NO), partsRemarkChange(parts, orderId, partsId)); + partsInfos.put(parts.getLong(ProduceApiConstants.PD_ITEM_NO), partsInfo); // item 明细 OrderItemDO item = OrderItemDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) .type(OrderItemTypeEnum.PARTS_ITEM.getStatus()) - .roomId(bodyInfos.get(parts.getLong("BoxID")).getRoomId()) - .bodyId(bodyInfos.get(parts.getLong("BoxID")).getId()) + .roomId(bodyInfos.get(parts.getLong(ProduceApiConstants.PD_BOX_ID)).getRoomId()) + .bodyId(bodyInfos.get(parts.getLong(ProduceApiConstants.PD_BOX_ID)).getId()) .planId(0L) .packageId(0L) .groupId(0L) .partsId(partsId) - .num(parts.getDouble("Num")) + .num(parts.getDouble(ProduceApiConstants.PD_NUM)) .organId(organId) .build(); - partsItem.put(parts.getLong("ItemID"), item); + partsItem.put(parts.getLong(ProduceApiConstants.PD_ITEM_NO), item); } - } + map.put("partsInfos", partsInfos); map.put("partsItems", partsItem); @@ -489,16 +527,18 @@ public class ApiTypeRealize { } // 配件备注集合 - private OrderPartsRemark partsRemarkChange(JSONObject value, Long orderId, Long partsId) { + private OrderPartsRemark partsRemarkChange(JSONObject value, + Long orderId, + Long partsId) { OrderPartsRemark remark = new OrderPartsRemark(); if (value != null && !value.isEmpty()) { remark.setPartsId(partsId); remark.setOrderId(orderId); - remark.setRemark(value.getString("Remark")); - remark.setSpecExtras(value.getString("SpecExtras")); - remark.setSpecialRemark(value.getString("SpecialRemark")); - remark.setDoorRemark(value.getString("DoorRemark")); - remark.setHingeRemark(value.getString("HingeRemark")); + remark.setRemark(value.getString(ProduceApiConstants.PD_REMARK)); + remark.setSpecExtras(value.getString(ProduceApiConstants.PD_SPEC_EXTRAS)); + remark.setSpecialRemark(value.getString(ProduceApiConstants.PD_SPECIAL_REMARK)); + remark.setDoorRemark(value.getString(ProduceApiConstants.PD_DOOR_REMARK)); + remark.setHingeRemark(value.getString(ProduceApiConstants.PD_HINGE_REMARK)); } return remark; } @@ -509,21 +549,29 @@ public class ApiTypeRealize { * dataPlates 板材明细 * dataBlocks 板材数据 */ - private Map> platesInfoChange(JSONObject value, JSONObject dataPlates, Long orderId, - Map goodsDOMap, Map bodyInfos, - JSONObject dataBlocks, Long organId) { + private Map platesInfoChange(JSONObject value, + JSONObject dataPlates, + Long orderId, + Map goodsDOMap, + Map bodyInfos, + JSONObject dataBlocks, + Long organId) { // 板材 写ES Map plateDetail = platesDetailChange(value); // 板材数据 Map plateMap = getBlocksData(dataBlocks); - Map> map = new HashMap<>(); + Map map = new HashMap<>(); Map platesInfos = new HashMap<>(); Map platesItem = new HashMap<>(); - if (dataPlates != null && !dataPlates.isEmpty()) { - JSONArray plateLists = dataPlates.getJSONArray("List"); + if (dataPlates == null || dataPlates.isEmpty()) { + return map; + } + + + JSONArray plateLists = dataPlates.getJSONArray(ProduceApiConstants.LIST); for (int i = 0; i < plateLists.size(); i++) { long plateNo = idWorker.nextId(); long obtainingTime = idWorker.obtainingTime(); @@ -531,53 +579,53 @@ public class ApiTypeRealize { JSONObject plate = plateLists.getJSONObject(i); Integer type = Integer.valueOf(dictDataApi.parseDictData(DictTypeConstants.PLATE_TYPE, - plate.getString("BoardType")) + plate.getString(ProduceApiConstants.BD_BOARD_TYPE)) .getData().getValue()); Long plateId = (Long) identifierGenerator.nextId(null); - String remarkJson = plate.getString("RemarkJson").replace("\"", "").trim(); + String remarkJson = plate.getString(ProduceApiConstants.BD_REMARK_JSON).replace("\"", "").trim(); String remark = !remarkJson.trim().isEmpty() ? remarkJson : ""; PlateDO plateInfo = PlateDO.builder() .id(plateId) .orderId(orderId) - .name(plate.getString("BoardName")) + .name(plate.getString(ProduceApiConstants.BD_BOARD_NAME)) .plateNo((obtainingTime) + Long.toString(plateNo).substring(2)) .type(type) - .goodsId(goodsDOMap.get(plate.getLong("GoodsID")) != null ? goodsDOMap.get(plate.getLong("GoodsID")).getId() : plate.getLong("GoodsID")) - .splitHeight(BigDecimal.valueOf(plate.getDouble("SpliteHeight"))) - .splitThickness(BigDecimal.valueOf(plate.getDouble("SpliteThickness"))) - .splitWidth(BigDecimal.valueOf(plate.getDouble("SpliteWidth"))) - .sealLeft(BigDecimal.valueOf(plate.getDouble("SealedLeft"))) - .sealRight(BigDecimal.valueOf(plate.getDouble("SealedRight"))) - .sealUp(BigDecimal.valueOf(plate.getDouble("SealedUp"))) - .sealDown(BigDecimal.valueOf(plate.getDouble("SealedDown"))) + .goodsId(goodsDOMap.get(plate.getLong(ProduceApiConstants.BD_GOODS_ID)) != null ? + goodsDOMap.get(plate.getLong(ProduceApiConstants.BD_GOODS_ID)).getId() : plate.getLong(ProduceApiConstants.BD_GOODS_ID)) + .splitHeight(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_HEIGHT))) + .splitThickness(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_THICKNESS))) + .splitWidth(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SPLIT_WIDTH))) + .sealLeft(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_LEFT))) + .sealRight(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_RIGHT))) + .sealUp(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_UP))) + .sealDown(BigDecimal.valueOf(plate.getDouble(ProduceApiConstants.BD_SEALED_DOWN))) .holeArrange(0) // 排孔类型 值无实际含义,默认初始化值 .unregularPointCount(0)// 异形孔个数 值无实际含义,默认初始化值 - .frontHoleCount(plate.getInteger("FrontHoleCount")) - .sideHoleCount(plate.getInteger("BackHoleCount")) - .sideHoleCount(plate.getInteger("SideHoleCount")) - .frontModelCount(plate.getInteger("FrontModelCount")) - .backModelCount(plate.getInteger("BackModelCount")) - .isDoor(plate.getInteger("OpenDoorType") != 0) - .openDoorType(plate.getInteger("OpenDoorType")) + .frontHoleCount(plate.getInteger(ProduceApiConstants.BD_FRONT_HOLE_COUNT)) + .sideHoleCount(plate.getInteger(ProduceApiConstants.BD_BACK_HOLE_COUNT)) + .sideHoleCount(plate.getInteger(ProduceApiConstants.BD_SIDE_HOLE_COUNT)) + .frontModelCount(plate.getInteger(ProduceApiConstants.BD_FRONT_MODEL_COUNT)) + .backModelCount(plate.getInteger(ProduceApiConstants.BD_BACK_MODEL_COUNT)) + .isDoor(plate.getInteger(ProduceApiConstants.BD_OPEN_DOOR_TYPE) != 0) + .openDoorType(plate.getInteger(ProduceApiConstants.BD_OPEN_DOOR_TYPE)) .isArcAcross(false) .moduleTypeId(0L) - .isSculpt(plate.getBoolean("IsModel")) - .isSpecialShaped(plate.getBoolean("UnRegular")) + .isSculpt(plate.getBoolean(ProduceApiConstants.BD_IS_MODEL)) + .isSpecialShaped(plate.getBoolean(ProduceApiConstants.BD_IS_UN_REGULAR)) .isCancel(false) .filterType("") .remark(remark) .organId(organId) .build(); - // item 明细 OrderItemDO itemPlate = OrderItemDO.builder() .id((Long) identifierGenerator.nextId(null)) .orderId(orderId) .type(OrderItemTypeEnum.PLATE_ITEM.getStatus()) - .roomId(bodyInfos.get(plate.getLong("BoxID")).getRoomId()) - .bodyId(bodyInfos.get(plate.getLong("BoxID")).getId()) + .roomId(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getRoomId()) + .bodyId(bodyInfos.get(plate.getLong(ProduceApiConstants.BD_BOX_ID)).getId()) .planId(0L) .packageId(0L) .groupId(0L) @@ -588,29 +636,34 @@ public class ApiTypeRealize { .build(); if (plateDetail != null){ - Long blockNo = plate.getLong("BlockNo"); - if (plateDetail.get(blockNo) != null) { - plateDetail.get(blockNo).setPlateId(plateId) - .setExtraRemark(plate.getString("ExtraRemark").replace("\"", "").trim()) - .setSpecialRemarkDei(plate.getString("SpecialRemark").replace("\"", "").trim()) - .setExtraHandleRemark(plate.getString("ExtraHandleRemark").replace("\"", "").trim()) - .setDrillsRemark(plate.getString("DrillsRemark").replace("\"", "").trim()) - .setInfoRemark(plate.getString("InfoRemark").replace("\"", "").trim()) - .setRemarkJsonDei(plate.getString("RemarkJson").replace("\"", "").trim()); + Long blockNo = plate.getLong(ProduceApiConstants.BD_BLOCK_NO); + System.out.println("blockNo " + blockNo); + PlateDetail plateDetailInfo = plateDetail.get(blockNo); + System.out.println("hhhh " + plateDetailInfo); - plateInfo.setHoleFace(plateDetail.get(blockNo).getTypographicFace()) - .setOffsetX(plateDetail.get(blockNo).getOffsetX()).setOffsetY(plateDetail.get(blockNo).getOffsetY()); + if (plateDetailInfo != null) { + plateDetailInfo.setPlateId(plateId) + .setExtraRemark(plate.getString(ProduceApiConstants.BD_EXTRA_REMARK).replace("\"", "").trim()) + .setSpecialRemarkDei(plate.getString(ProduceApiConstants.BD_SPECIAL_REMARK).replace("\"", "").trim()) + .setExtraHandleRemark(plate.getString(ProduceApiConstants.BD_EXTRA_HANDLE_REMARK).replace("\"", "").trim()) + .setDrillsRemark(plate.getString(ProduceApiConstants.BD_DRILLS_REMARK).replace("\"", "").trim()) + .setInfoRemark(plate.getString(ProduceApiConstants.BD_INFO_REMARK).replace("\"", "").trim()) + .setRemarkJsonDei(remarkJson); - if (plateDetail.get(blockNo).getThroughModelCount() != null - && plateDetail.get(blockNo).getThroughModelCount() > 0){ + plateInfo.setHoleFace(plateDetailInfo.getTypographicFace()) + .setOffsetX(plateDetailInfo.getOffsetX()) + .setOffsetY(plateDetailInfo.getOffsetY()); + + if (plateDetailInfo.getThroughModelCount() != null + && plateDetailInfo.getThroughModelCount() > 0){ plateInfo.setFilterType(plateInfo.getFilterType() + ",1"); } - if (plateDetail.get(blockNo).getThroughHoleCount() != null - && plateDetail.get(blockNo).getThroughHoleCount() > 0){ + if (plateDetailInfo.getThroughHoleCount() != null + && plateDetailInfo.getThroughHoleCount() > 0){ plateInfo.setFilterType(plateInfo.getFilterType() + ",2"); } - if (plateDetail.get(blockNo).getHas2DModel() != null - && plateDetail.get(blockNo).getHas2DModel()){ + if (plateDetailInfo.getHas2DModel() != null + && plateDetailInfo.getHas2DModel()){ plateInfo.setFilterType(plateInfo.getFilterType() + ",4"); } @@ -618,36 +671,35 @@ public class ApiTypeRealize { if (plateMap.get(blockNo) != null) { JSONObject jsonObject = plateMap.get(blockNo); - if (plateDetail.get(blockNo) != null){ - plateDetail.get(blockNo) - .setRemarkJson(jsonObject.getString("RemarkJson").replace("\"", "").trim()) - .setSpecialRemark(jsonObject.getString("SpecialRemark").replace("\"", "").trim()); + if (plateDetailInfo != null){ + plateDetailInfo.setRemarkJson(jsonObject.getString(ProduceApiConstants.BG_REMARK_JSON).replace("\"", "").trim()) + .setSpecialRemark(jsonObject.getString(ProduceApiConstants.BG_SPECIAL_REMARK).replace("\"", "").trim()); } } } if (plateMap != null){ - Long blockNo = plate.getLong("BlockNo"); + Long blockNo = plate.getLong(ProduceApiConstants.BD_BLOCK_NO); if (plateMap.get(blockNo) != null) { JSONObject jsonObject = plateMap.get(blockNo); - plateInfo.setHeight(BigDecimal.valueOf(jsonObject.getDouble("Height"))) - .setWidth(BigDecimal.valueOf(jsonObject.getDouble("Width"))) - .setThickness(BigDecimal.valueOf(jsonObject.getDouble("Thickness"))) - .setArea(BigDecimal.valueOf(jsonObject.getDouble("Area"))) - .setTexture(jsonObject.getInteger("Wave")) - .setIsRowHole(jsonObject.getBoolean("IsHole")); + plateInfo.setHeight(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_HEIGHT))) + .setWidth(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_WIDTH))) + .setThickness(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_THICKNESS))) + .setArea(BigDecimal.valueOf(jsonObject.getDouble(ProduceApiConstants.BG_AREA))) + .setTexture(jsonObject.getInteger(ProduceApiConstants.BG_WAVE)) + .setIsRowHole(jsonObject.getBoolean(ProduceApiConstants.BG_IS_HOLE)); } } - platesInfos.put(plate.getLong("ItemID"), plateInfo); - platesItem.put(plate.getLong("ItemID"), itemPlate); + platesInfos.put(plate.getLong(ProduceApiConstants.BD_ITEM_ID), plateInfo); + platesItem.put(plate.getLong(ProduceApiConstants.BD_ITEM_ID), itemPlate); } - } - List platesList = platesItem.values().stream().collect(Collectors.toList()); - List plateDOList = platesInfos.values().stream().collect(Collectors.toList()); + + List platesList = platesItem.values().stream().toList(); + List plateDOList = platesInfos.values().stream().toList(); Map> platesDetail = platesList.stream() .collect(Collectors.groupingBy(OrderItemDO::getBodyId)); // 根据柜体分组 @@ -663,7 +715,7 @@ public class ApiTypeRealize { v.forEach(item -> { NUM.getAndIncrement(); - if (plateDOMap.get(item.getPlateId()).getIsSpecialShaped()) { // 异形相加 + if (Boolean.TRUE.equals(plateDOMap.get(item.getPlateId()).getIsSpecialShaped())) { // 异形相加 specialShapedNum.getAndIncrement(); } }); @@ -688,13 +740,16 @@ public class ApiTypeRealize { */ public Map getBlocksData(JSONObject dataBlocks) { Map map = new HashMap<>(); - JSONArray ordersArray = dataBlocks.getJSONArray("List"); + JSONArray ordersArray = dataBlocks.getJSONArray(ProduceApiConstants.LIST); if (ordersArray != null && !ordersArray.isEmpty()) { for (int i = 0; i < ordersArray.size(); i++) { JSONObject block = ordersArray.getJSONObject(i); - map.put(block.getLong("BlockNo"), block); + // 订单号去N + String blockNo = block.getString(ProduceApiConstants.BG_BLOCK_NO).replace("N", ""); + map.put(Long.valueOf(blockNo), block); } } + System.out.println("map 板材 " + map); return map; } @@ -702,73 +757,79 @@ public class ApiTypeRealize { * 板材设计数据转换成PlateDetail Integer指BlockID板id */ public Map platesDetailChange(JSONObject dataPlates) { + + if (dataPlates.getJSONObject(ProduceApiConstants.VALUE) == null) { + return Collections.emptyMap(); + } + Map plateDetails = new HashMap<>(); - if (dataPlates.getJSONObject("value") != null){ + // 获取 Orders 字段对应的数组 - JSONArray ordersArray = dataPlates.getJSONObject("value").getJSONArray("Orders"); - System.err.println(dataPlates); - if (ordersArray != null && !ordersArray.isEmpty()) { + JSONArray ordersArray = dataPlates.getJSONObject(ProduceApiConstants.VALUE).getJSONArray(ProduceApiConstants.OPD_ORDER); + if (ordersArray == null || ordersArray.isEmpty()) { + return Collections.emptyMap(); + } + for (int i = 0; i < ordersArray.size(); i++) { - System.out.println("kkk " + ordersArray.get(i)); + JSONObject order = ordersArray.getJSONObject(i); // 获取材料信息 - JSONArray materialJson = order.getJSONArray("Materials"); + JSONArray materialJson = order.getJSONArray(ProduceApiConstants.BPD_MATERIALS); if (materialJson != null && !materialJson.isEmpty()) { for (int j = 0; j < materialJson.size(); j++) { JSONObject material = materialJson.getJSONObject(j); -// goodsMap.put() + // 板件信息 - JSONArray blocks = material.getJSONArray("Blocks"); + JSONArray blocks = material.getJSONArray(ProduceApiConstants.BPD_BLOCKS); if (blocks != null && !blocks.isEmpty()) { for (int k = 0; k < blocks.size(); k++) { JSONObject block = blocks.getJSONObject(k);// 每块板 PlateDetail plateDetail = PlateDetail.builder() - .bodyNo(block.getString("BoxNo")) - .plateNo(block.getString("BlockNo")) - .name(block.getString("BlockName")) - .customPlateNo(block.getString("CustomNo")) - .roomsName(block.getString("RoomName")) - .bodyName(block.getString("BoxName")) - .group(block.getString("ProcessGroupName")) + .bodyNo(block.getString(ProduceApiConstants.BPD_BOX_NO)) + .plateNo(block.getString(ProduceApiConstants.BPD_BLOCK_NO)) + .name(block.getString(ProduceApiConstants.BPD_BLOCK_NAME)) + .customPlateNo(block.getString(ProduceApiConstants.BPD_CUSTOM_BLOCK_NO)) + .roomsName(block.getString(ProduceApiConstants.BPD_ROOM_NAME)) + .bodyName(block.getString(ProduceApiConstants.BPD_BOX_NAME)) + .group(block.getString(ProduceApiConstants.BPD_PROCESS_GROUP_NAME)) .multiNum(1) - .plateWidth(block.getBigDecimal("Width")) - .plateLength(block.getBigDecimal("Length")) - .acreage(block.getBigDecimal("Size")) - .splitWidth(block.getBigDecimal("CuttingWidth")) - .splitLength(block.getBigDecimal("CuttingLength")) - .sealAcreage(block.getBigDecimal("CuttingSize")) - .isUnRegular(block.getBoolean("IsUnRegular")) - .sealLeft(block.getBigDecimal("BorderLeft")) - .sealRight(block.getBigDecimal("BorderRight")) - .sealUp(block.getBigDecimal("BorderUpper")) - .sealDown(block.getBigDecimal("BorderUnder")) - .texture(block.getInteger("Wave")) - .typographicFace(Integer.valueOf(block.getString("PlaceFace"))) - .openDoorType(Integer.valueOf(block.getString("OpenDoorType"))) - .offsetX(block.getBigDecimal("OffsetX")) - .offsetY(block.getBigDecimal("OffsetY")) + .plateWidth(block.getBigDecimal(ProduceApiConstants.BPD_WIDTH)) + .plateLength(block.getBigDecimal(ProduceApiConstants.BPD_LENGTH)) + .acreage(block.getBigDecimal(ProduceApiConstants.BPD_SIZE)) + .splitWidth(block.getBigDecimal(ProduceApiConstants.BPD_CUTTING_WIDTH)) + .splitLength(block.getBigDecimal(ProduceApiConstants.BPD_CUTTING_LENGTH)) + .sealAcreage(block.getBigDecimal(ProduceApiConstants.BPD_CUTTING_SIZE)) + .isUnRegular(block.getBoolean(ProduceApiConstants.BPD_IS_UN_REGULAR)) + .sealLeft(block.getBigDecimal(ProduceApiConstants.BPD_BORDER_LEFT)) + .sealRight(block.getBigDecimal(ProduceApiConstants.BPD_BORDER_RIGHT)) + .sealUp(block.getBigDecimal(ProduceApiConstants.BPD_BORDER_UPPER)) + .sealDown(block.getBigDecimal(ProduceApiConstants.BPD_BORDER_UNDER)) + .texture(block.getInteger(ProduceApiConstants.BPD_WAVE)) + .typographicFace(Integer.valueOf(block.getString(ProduceApiConstants.BPD_PLACE_FACE))) + .openDoorType(Integer.valueOf(block.getString(ProduceApiConstants.BPD_OPEN_DOOR_TYPE))) + .offsetX(block.getBigDecimal(ProduceApiConstants.BPD_OFFSET_X)) + .offsetY(block.getBigDecimal(ProduceApiConstants.BPD_OFFSET_Y)) .pointDetail(getPointDetail(block, true)) .rawPointDetail(getPointDetail(block, false)) .holeDetail(getHoleDetail(block, true)) .sideHoleDetail(getHoleDetail(block, false)) .contourDetail(getModelDetail(block)) -// 排钻类型 - .drillsInfos(getDrillsInfo(block)) .build(); - if (block.getJSONObject("ExtraRemark") != null) { - JSONObject extraRemark = block.getJSONObject("ExtraRemark").getJSONObject("extra"); + if (block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK) != null) { + JSONObject extraRemark = block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK).getJSONObject(ProduceApiConstants.BPD_EXTRA); if (extraRemark != null) - plateDetail.setBoardType(extraRemark.getString("boardType")) - .setThroughHoleCount(Double.valueOf(extraRemark.getString("throughHoleCount"))) - .setThroughModelCount(Double.valueOf(extraRemark.getString("throughModelCount"))) - .setHas2DModel(Boolean.valueOf(extraRemark.getString("has2DModel"))) - .setHas3DModel(Boolean.valueOf(extraRemark.getString("has3DModel"))) - .setPlateExtraRemark(block.getJSONObject("ExtraRemark")) - .setSideRemark(remarkToMap(block)); + plateDetail.setBoardType(extraRemark.getString(ProduceApiConstants.BPD_EXTRA_BOARD_TYPE)) + .setThroughHoleCount(Double.valueOf(extraRemark.getString(ProduceApiConstants.BPD_EXTRA_THROUGH_HOLE_COUNT))) + .setThroughModelCount(Double.valueOf(extraRemark.getString(ProduceApiConstants.BPD_EXTRA_THROUGH_MODEL_COUNT))) + .setHas2DModel(Boolean.valueOf(extraRemark.getString(ProduceApiConstants.BPD_EXTRA_HAS_2D_MODEL))) + .setHas3DModel(Boolean.valueOf(extraRemark.getString(ProduceApiConstants.BPD_EXTRA_HAS_3D_MODEL))) + .setPlateExtraRemark(block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK)) + .setSideRemark(remarkToMap(block)) + .setDrillsInfos(getDrillsInfo(block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK))); } - plateDetails.put(block.getLong("BlockNo"), plateDetail); + plateDetails.put(block.getLong(ProduceApiConstants.BPD_BLOCK_NO), plateDetail); } } } @@ -777,10 +838,8 @@ public class ApiTypeRealize { // System.out.println("板块 " + plateDetails); } - } else { -// System.out.println("JSON 数据中没有订单信息(Orders 数组为空)。"); - } - } + + return plateDetails; @@ -788,66 +847,74 @@ public class ApiTypeRealize { // 异形板的开料轮廓 (type 为true,不含封边;其他为,含封边) - private List getPointDetail(JSONObject block, Boolean type) { + private List getPointDetail(JSONObject block, + Boolean type) { List pointDetailList = new ArrayList<>(); if (type) { // 不含封边 - JSONArray pointsJson = block.getJSONArray("Points"); - if (pointsJson != null && !pointsJson.isEmpty()) { + JSONArray pointsJson = block.getJSONArray(ProduceApiConstants.BPD_POINTS); + if (pointsJson == null || pointsJson.isEmpty()) { + return pointDetailList; + } + for (int i = 0; i < pointsJson.size(); i++) { JSONObject point = pointsJson.getJSONObject(i); pointDetailList.add(PointDetail.builder() - .pointX(Double.valueOf(point.getString("X"))) - .pointY(Double.valueOf(point.getString("Y"))) - .curve(Double.valueOf(point.getString("Curve"))) + .pointX(Double.valueOf(point.getString(ProduceApiConstants.BPD_POINTS_X))) + .pointY(Double.valueOf(point.getString(ProduceApiConstants.BPD_POINTS_Y))) + .curve(Double.valueOf(point.getString(ProduceApiConstants.BPD_POINTS_CURVE))) .build()); } - } + } else { // 含封边 - JSONArray orgPointsJson = block.getJSONArray("OrgPoints"); - if (orgPointsJson != null && !orgPointsJson.isEmpty()) { + JSONArray orgPointsJson = block.getJSONArray(ProduceApiConstants.BPD_ORG_POINTS); + if (orgPointsJson == null || orgPointsJson.isEmpty()) { + return pointDetailList; + } + for (int i = 0; i < orgPointsJson.size(); i++) { JSONObject rawPoint = orgPointsJson.getJSONObject(i); pointDetailList.add(PointDetail.builder() - .pointX(Double.valueOf(rawPoint.getString("X"))) - .pointY(Double.valueOf(rawPoint.getString("Y"))) - .curve(Double.valueOf(rawPoint.getString("Curve"))) - .sealSize(BigDecimal.valueOf(Double.valueOf(rawPoint.getString("Edge")))) + .pointX(Double.valueOf(rawPoint.getString(ProduceApiConstants.BPD_POINTS_X))) + .pointY(Double.valueOf(rawPoint.getString(ProduceApiConstants.BPD_POINTS_Y))) + .curve(Double.valueOf(rawPoint.getString(ProduceApiConstants.BPD_POINTS_CURVE))) + .sealSize(BigDecimal.valueOf(Double.valueOf(rawPoint.getString(ProduceApiConstants.BPD_POINTS_EDGE)))) .build()); } - } + } return pointDetailList; } // 孔明细板数据解析 (type 为true,正面;false,侧面) - private List getHoleDetail(JSONObject block, Boolean type) { + private List getHoleDetail(JSONObject block, + Boolean type) { List holeDetails = new ArrayList<>(); if (type) { // 1,正面 - JSONArray holes = block.getJSONArray("Holes"); + JSONArray holes = block.getJSONArray(ProduceApiConstants.BPD_HOLES); if (holes == null || holes.isEmpty()) { return Collections.emptyList(); } for (int i = 0; i < holes.size(); i++) { JSONObject hole = holes.getJSONObject(i); holeDetails.add(HoleDetail.builder() - .startX(Double.valueOf(hole.getString("X"))) - .startY(Double.valueOf(hole.getString("Y"))) - .faceType(hole.getInteger("Face")) - .radius(Double.parseDouble(hole.getString("Diameter")) / 2) - .depth(Double.valueOf(hole.getString("Depth"))) + .startX(Double.valueOf(hole.getString(ProduceApiConstants.BPD_HOLE_X))) + .startY(Double.valueOf(hole.getString(ProduceApiConstants.BPD_HOLE_Y))) + .faceType(hole.getInteger(ProduceApiConstants.BPD_HOLE_FACE)) + .radius(Double.parseDouble(hole.getString(ProduceApiConstants.BPD_HOLE_DIAMETER)) / 2) + .depth(Double.valueOf(hole.getString(ProduceApiConstants.BPD_HOLE_DEPTH))) .build()); } } else { - JSONArray sideHoles = block.getJSONArray("SideHoles"); + JSONArray sideHoles = block.getJSONArray(ProduceApiConstants.BPD_SIDE_HOLES); if (sideHoles == null || sideHoles.isEmpty()) { return Collections.emptyList(); } for (int i = 0; i < sideHoles.size(); i++) { JSONObject hole = sideHoles.getJSONObject(i); - String[] startPoints = splitAndTrim(hole.getString("StartPoint")); - String[] endPoints = splitAndTrim(hole.getString("EndPoint")); + String[] startPoints = splitAndTrim(hole.getString(ProduceApiConstants.BPD_HOLE_START_POINT)); + String[] endPoints = splitAndTrim(hole.getString(ProduceApiConstants.BPD_HOLE_END_POINT)); try { holeDetails.add(HoleDetail.builder() .startX(Double.valueOf(startPoints[X])) @@ -857,9 +924,9 @@ public class ApiTypeRealize { .endY(Double.valueOf(endPoints[Y])) .endZ(Double.valueOf(endPoints[Z])) .faceType(2) - .direction(hole.getInteger("Direction")) - .radius(Double.parseDouble(hole.getString("Diameter")) / 2) - .depth(Double.valueOf(hole.getString("Depth"))) + .direction(hole.getInteger(ProduceApiConstants.BPD_HOLE_DIRECTION)) + .radius(Double.parseDouble(hole.getString(ProduceApiConstants.BPD_HOLE_DIAMETER)) / 2) + .depth(Double.valueOf(hole.getString(ProduceApiConstants.BPD_HOLE_DEPTH))) .build()); } catch (Exception e) { // System.out.println("HoleDetail " + hole); @@ -874,7 +941,7 @@ public class ApiTypeRealize { // 造型明细板数据解析 (type 为1,正面;3,侧面) private List getModelDetail(JSONObject block) { - JSONArray models = block.getJSONArray("Models"); + JSONArray models = block.getJSONArray(ProduceApiConstants.BPD_MODEL); if (models == null || models.isEmpty()) { return null; @@ -885,43 +952,43 @@ public class ApiTypeRealize { JSONObject model = models.getJSONObject(i); List pointLists = new ArrayList<>(); - JSONArray pointsJson = model.getJSONArray("Points"); + JSONArray pointsJson = model.getJSONArray(ProduceApiConstants.BPD_MODEL_POINTS); if (pointsJson != null && !pointsJson.isEmpty()) { for (int j = 0; j < pointsJson.size(); j++) { JSONObject point = pointsJson.getJSONObject(j); - String[] points = splitAndTrim(point.getString("Pos")); + String[] points = splitAndTrim(point.getString(ProduceApiConstants.BPD_MODEL_POINTS_POS)); pointLists.add(PointList.builder() .pointX(Double.valueOf(points[X])) .pointY(Double.valueOf(points[Y])) .pointZ(Double.valueOf(points[Z])) - .curve(Double.valueOf(point.getString("Curve"))) + .curve(Double.valueOf(point.getString(ProduceApiConstants.BPD_MODEL_POINTS_CURVE))) .build()); } } List offSetLists = new ArrayList<>(); - JSONArray offSets = model.getJSONArray("OffsetList"); + JSONArray offSets = model.getJSONArray(ProduceApiConstants.BPD_MODEL_OFFSET_LIST); if (offSets != null && !offSets.isEmpty()) { for (int j = 0; j < offSets.size(); j++) { JSONObject offSet = offSets.getJSONObject(j); offSetLists.add(OffSetList.builder() - .value(Double.valueOf(offSet.getString("Value"))) - .name(offSet.getString("Name")) - .radius(Double.parseDouble(offSet.getString("Diameter")) / 2) - .angle(Double.valueOf(offSet.getString("Angle"))) - .depth(Double.valueOf(offSet.getString("Depth"))) + .value(Double.valueOf(offSet.getString(ProduceApiConstants.BPD_MODEL_OFFSET_LIST_VALUE))) + .name(offSet.getString(ProduceApiConstants.BPD_MODEL_OFFSET_LIST_NAME)) + .radius(Double.parseDouble(offSet.getString(ProduceApiConstants.BPD_MODEL_OFFSET_LIST_DIRECTION)) / 2) + .angle(Double.valueOf(offSet.getString(ProduceApiConstants.BPD_MODEL_OFFSET_LIST_ANGLE))) + .depth(Double.valueOf(offSet.getString(ProduceApiConstants.BPD_MODEL_OFFSET_LIST_DEPTH))) .build()); } } modelDetails.add(ModelDetail.builder() - .depth(Double.valueOf(model.getString("Depth"))) - .faceType(Integer.valueOf(model.getString("Face"))) - .knifeName(model.getString("ToolNo")) - .knifeRadius(Double.parseDouble(model.getString("Diameter")) / 2) + .depth(Double.valueOf(model.getString(ProduceApiConstants.BPD_MODEL_DEPTH))) + .faceType(Integer.valueOf(model.getString(ProduceApiConstants.BPD_MODEL_FACE))) + .knifeName(model.getString(ProduceApiConstants.BPD_MODEL_TOOL_NO)) + .knifeRadius(Double.parseDouble(model.getString(ProduceApiConstants.BPD_MODEL_DIAMETER)) / 2) .pointList(pointLists) .offSetList(offSetLists) - .originModeling(getOriginModeling(model.getJSONObject("OriginModeling"))) + .originModeling(getOriginModeling(model.getJSONObject(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING))) .build()); } @@ -935,18 +1002,18 @@ public class ApiTypeRealize { return null; } - JSONArray outLine = originModeling.getJSONArray("Outline"); - JSONArray holes = originModeling.getJSONArray("Holes"); + JSONArray outLine = originModeling.getJSONArray(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_OUTLINE); + JSONArray holes = originModeling.getJSONArray(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_HOLES); return IOriginModelingData.builder() - .thickness(Double.valueOf(originModeling.getString("Thickness"))) - .knifeRadius(Double.valueOf(originModeling.getString("KnifeRadius"))) - .dir(originModeling.getInteger("Dir")) + .thickness(Double.valueOf(originModeling.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_THICKNESS))) + .knifeRadius(Double.valueOf(originModeling.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_KNIFE_RADIUS))) + .dir(originModeling.getInteger(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_DIR)) .outline(getOutlineOrOutline(outLine)) .holes(getOutlineOrHoles(holes)) - .addLen(Double.valueOf(originModeling.getString("AddLen"))) - .addWidth(Double.valueOf(originModeling.getString("AddWidth"))) - .addDepth(Double.valueOf(originModeling.getString("AddDepth"))) + .addLen(Double.valueOf(originModeling.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_ADD_LEN))) + .addWidth(Double.valueOf(originModeling.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_ADD_WIDTH))) + .addDepth(Double.valueOf(originModeling.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_ADD_DEPTH))) .build(); } @@ -958,7 +1025,7 @@ public class ApiTypeRealize { List contourDataList = new ArrayList<>(); for (int i = 0; i < json.size(); i++) { JSONObject element = json.getJSONObject(i); - String[] points = splitAndTrim(element.getString("Pos")); + String[] points = splitAndTrim(element.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_OUTLINE_POS)); Point pointVO = Point.builder() .x(Double.valueOf(points[X])) .y(Double.valueOf(points[Y])) @@ -966,7 +1033,7 @@ public class ApiTypeRealize { .build(); IContourData iContourDataVO = IContourData.builder() .pts(pointVO) - .buls(Double.valueOf(element.getString("Curve"))) + .buls(Double.valueOf(element.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_OUTLINE_CURVE))) .build(); contourDataList.add(iContourDataVO); } @@ -988,7 +1055,7 @@ public class ApiTypeRealize { List contourData = new ArrayList<>(); for (int j = 0; j < element.size(); j++) { JSONObject point = element.getJSONObject(i); - String[] points = splitAndTrim(point.getString("Pos")); + String[] points = splitAndTrim(point.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_HOLES_POS)); Point pointVO = Point.builder() .x(Double.valueOf(points[X])) .y(Double.valueOf(points[Y])) @@ -996,7 +1063,7 @@ public class ApiTypeRealize { .build(); IContourData iContourDataVO = IContourData.builder() .pts(pointVO) - .buls(Double.valueOf(point.getString("Curve"))) + .buls(Double.valueOf(point.getString(ProduceApiConstants.BPD_MODEL_ORIGIN_MODELING_HOLES_CURVE))) .build(); contourData.add(iContourDataVO); } @@ -1007,7 +1074,7 @@ public class ApiTypeRealize { // 排钻数据 private List getDrillsInfo(JSONObject block) { - JSONArray drills = block.getJSONArray("drills"); + JSONArray drills = block.getJSONArray(ProduceApiConstants.BPD_DRILLS); if (drills == null || drills.isEmpty()) { return null; @@ -1016,10 +1083,10 @@ public class ApiTypeRealize { for (int i = 0; i < drills.size(); i++) { JSONObject drill = drills.getJSONObject(i); drillsInfos.add(DrillsInfo.builder() - .name(drill.getString("name")) - .type(drill.getString("type")) - .face(drill.getString("face")) - .count(Double.valueOf(drill.getString("count"))) + .name(drill.getString(ProduceApiConstants.BPD_DRILL_NAME)) + .type(drill.getString(ProduceApiConstants.BPD_DRILL_TYPE)) + .face(drill.getString(ProduceApiConstants.BPD_DRILL_FACE)) + .count(Double.valueOf(drill.getString(ProduceApiConstants.BPD_DRILL_COUNT))) .build()); } return drillsInfos; @@ -1037,10 +1104,11 @@ public class ApiTypeRealize { // 将remark转为map public Map remarkToMap(JSONObject block) { + String remark = "Remark"; Map map = new HashMap<>(); for (int i = 1; i < 6; i++) { - if (block.getString("Remark" + i) != null && !block.getString("Remark" + i).isEmpty()) { - map.put("Remark" + i, block.getString("Remark" + i)); + if (block.getString(remark + i) != null && !block.getString(remark + i).isEmpty()) { + map.put(remark + i, block.getString(remark + i)); } } return map; @@ -1061,15 +1129,15 @@ public class ApiTypeRealize { return map; } - // 纹理解析 + // 商品数据对应中 纹理解析 public Boolean getTexture(JSONObject extraProp) { JSONObject jsonObject = new JSONObject(extraProp); - if (jsonObject.getString("HasWave") != null){ - String hasWave = jsonObject.getString("HasWave").trim(); - if (hasWave.equals("0")){ + if (jsonObject.getString(ProduceApiConstants.G_HAS_WAVE) != null){ + String hasWave = jsonObject.getString(ProduceApiConstants.G_HAS_WAVE).trim(); + if (hasWave.equals(ProduceApiConstants.ZERO)){ // 无 return false; } } - return true; + return true; // 有 } } \ 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/util/fileConversion/admin/api/webcad/ProduceApiConstants.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java new file mode 100644 index 000000000..918be543d --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java @@ -0,0 +1,282 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad; + +/** + * 原系统生产接口返回字段对应参数常量 + */ +public class ProduceApiConstants { + + public static final String VALUE = "value"; + public static final String LIST = "List"; + public static final String DATA = "data"; + public static final String CODE = "err_code"; + public static final String ZERO = "0"; + public static final String ONE = "1"; + + + // ========== getApiOrderPartsMessage partsList 配件明细模块 ========== + public static final String PD_ROOM_ID = "RoomID"; // 房间标识 + public static final String PD_BOX_ID = "BoxID"; // 柜体标识 + public static final String PD_NAME = "Name"; // 配件名称 + public static final String PD_BRAND = "Brand"; // 配件品牌 + public static final String PD_FACTORY = "Factory"; // 配件厂商 + public static final String PD_ITEM_NO = "ItemNo"; // 配件编号 + public static final String PD_DATA_ID = "DataID"; // 配件标识 + public static final String PD_GOODS_ID = "GoodsID"; // 商品对应标识 + public static final String PD_MODEL = "Model"; // 配件型号 + public static final String PD_NUM = "Num"; // 配件数量 + public static final String PD_SPEC = "Spec"; // 配件规格 + public static final String PD_UNITS = "Units"; // 配件单位 + public static final String PD_REMARK = "Remark"; // 配件备注 + public static final String PD_IS_COMPOSITE = "IsComposite"; // 是否组件 + public static final String PD_GROUP_NAME = "GroupName"; // 五金分类 + public static final String PD_OBJECT_TYPE = "ObjectType"; // 五金类型 + public static final String PD_SPEC_EXTRAS = "SpecExtras"; // 五金额外规格 + public static final String PD_PARTS_SPEC = "PartsSpec"; // 配件属性 + public static final String PD_PARTS_SPEC_SPEC = "spec"; // 配件属性 -> 规格 + public static final String PD_PARTS_SPEC_MATERIAL = "material"; // 配件属性 -> 材质 + public static final String PD_PARTS_SPEC_COLOR = "color"; // 配件属性 -> 颜色 + public static final String PD_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串) + public static final String PD_PROCESS_GROUP = "ProcessGroup"; // 五金加工组 + public static final String PD_DOOR_REMARK = "DoorRemark"; // 门板组件铰链备注 + public static final String PD_HINGE_REMARK = "HingeRemark"; // 门板组件拉手备注 + public static final String PD_ROOM_NAME = "RoomName"; // 房间名称 + public static final String PD_BOX_NAME = "BoxName"; // 柜体名称 + public static final String PD_ITEM_ID = "ItemID"; // 配件ID + public static final String PD_MODULE_TYPE_ID_LIST = "ModuleTypeIDList"; // 加工组类型ID + public static final String PD_MODULE_ID_LIST = "ModuleIDList"; // 加工组ID + public static final String PD_SIZE = "Size"; // 配件尺寸 + public static final String PD_LENGTH = "Length"; // 配件长 + public static final String PD_WIDTH = "Width"; // 配件宽 + public static final String PD_THICKNESS = "Thickness"; // 配件厚 + + // ========== getApiOrderBodyMessage boxsList 柜体明细模块 ========== + public static final String B_BOX_ID = "BoxID"; // 柜体标识 + public static final String B_ROOM_ID = "RoomID"; // 房间标识 + public static final String B_ROOM_NAME = "Room"; // 房间名 + public static final String B_NAME = "Name"; // 柜体名 + public static final String B_WIDTH = "Width"; // 宽 + public static final String B_HEIGHT = "Height"; // 高 + public static final String B_DEPTH = "Depth"; // 深 + + // ========== getApiOrderGoodsMessage goodsList 商品数据信息模块 ========== + public static final String G_BRAND = "Brand"; // 商品品牌 + public static final String G_COLOR = "Color"; // 商品颜色 + public static final String G_DOOR_ID = "GoodsID"; // 商品标识 + public static final String G_GOODS_SN = "GoodsSN"; // 商品编号 + public static final String G_GOODS_NAME = "GoodsName"; // 商品名称 + public static final String G_HEIGHT = "Height"; // 商品长度 + public static final String G_MATERIAL = "Material"; // 商品材料 + public static final String G_SPEC = "Spec"; // 商品规格 + public static final String G_THICKNESS = "Thickness"; // 商品厚度 + public static final String G_WIDTH = "Width"; // 商品宽度 + public static final String G_EXTRA_PROP = "ExtraProp"; // 额外属性 + public static final String G_HAS_WAVE = "HasWave"; // 有无纹路 1:有;0:无 + + // ========== getApiModuleTypeDataMessage getModuleTypeList 加工组关联板件、五金信息列表模块 ========== + public static final String M_MODULE_TYPE_ID = "ModuleTypeID"; // 加工组类型ID + public static final String M_MODULE_TYPE_NAME = "ModuleTypeName"; // 加工组名称 + public static final String M_MODULE_ID = "ModuleID"; // 加工组ID + public static final String M_ROOM_ID = "RoomID"; // 房间ID + public static final String M_ROOM_NAME = "RoomName"; // 房间名称 + public static final String M_BOX_ID = "BoxID"; // 柜体ID + public static final String M_BOX_NAME = "BoxName"; // 柜体名称 + public static final String M_LENGTH = "Length"; // 加工组长 + public static final String M_WIDTH = "Width"; // 加工组宽 + public static final String M_THICKNESS = "Thickness"; // 加工组厚 + public static final String M_ITEM_ID_LIST = "ItemIDList"; // 加工组关联的板ID + + // ========== getApiBlocksDataMessage blocksList 板块明细模块 ========== + public static final String BD_BLOCK_NO = "BlockNo"; // 板材编号 + public static final String BD_BOX_ID = "BoxID"; // 柜体标识 + public static final String BD_GOODS_ID = "GoodsID"; // 商品标识 + public static final String BD_OPEN_DOOR_TYPE = "OpenDoorType"; // 开门类型 + public static final String BD_EXTRA_REMARK = "ExtraRemark"; // 扩展备注 + public static final String BD_PROCESS_GROUP = "ProcessGroup"; // 加工组 + public static final String BD_GROUP_TYPE = "GroupType"; // 类型(柜体,加工组) + public static final String BD_UN_REGULAR_POINT_COUNT = "UnRegularPointCount"; // 异形数 + public static final String BD_BACK_HOLE_COUNT = "BackHoleCount"; // 反面孔数 + public static final String BD_FRONT_MODEL_COUNT = "FrontModelCount"; // 正面造型数 + public static final String BD_BACK_MODEL_COUNT = "BackModelCount"; // 反面造型数 + public static final String BD_SIDE_HOLE_COUNT = "SideHoleCount"; // 侧面孔数 + public static final String BD_FRONT_HOLE_COUNT = "FrontHoleCount"; // 正面孔数 + public static final String BD_CUT_LENGTH = "CutLength"; // 开料长 + public static final String BD_CUT_WIDTH = "CutWidth"; // 开料宽 + public static final String BD_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串) + public static final String BD_EXTRA_HANDLE_REMARK = "ExtraHandleRemark"; // 拉手备注 + public static final String BD_DRILLS_REMARK = "DrillsRemark"; // 排钻备注(Json字符串) + public static final String BD_INFO_REMARK = "InfoRemark"; //板其他备注(Json字符串) + public static final String BD_BOARD_NAME = "BoardName"; // 板名称 + public static final String BD_SEALED_LEFT = "SealedLeft"; // 左封边 + public static final String BD_SEALED_RIGHT = "SealedRight"; // 右封边 + public static final String BD_SEALED_UP = "SealedUp"; // 上封边 + public static final String BD_SEALED_DOWN = "SealedDown"; // 下封边 + public static final String BD_IS_MODEL = "IsModel"; // 是否有造型 + public static final String BD_IS_UN_REGULAR = "UnRegular"; // 是否异形 + public static final String BD_IS_FRONT_HOLE = "FrontHole"; // 是否有正面孔 + public static final String BD_IS_BACK_HOLE = "BackHole"; // 是否有反面孔 + public static final String BD_IS_SIDE_HOLE = "SideHole"; // 是否有侧面孔 + public static final String BD_IS_FRONT_MODEL = "FrontModel"; // 是否有正面造型 + public static final String BD_IS_BACK_MODEL = "BackModel"; // 是否有反面造型 + public static final String BD_BOARD_TYPE = "BoardType"; // 板类型 层板,立板,背板 + public static final String BD_SPLIT_THICKNESS = "SpliteThickness"; // 拆单厚 + public static final String BD_SPLIT_WIDTH = "SpliteWidth"; // 拆单宽 + public static final String BD_SPLIT_HEIGHT = "SpliteHeight"; // 拆单长 + public static final String BD_CUSTOMIZE_BLOCK_NO = "CustBlockNo"; // 自定义板号 + public static final String BD_REMARK_JSON = "RemarkJson"; // 板件备注(Json字符串) + public static final String BD_IS_COPY = "IsCopy"; // 是否成倍拆单(false为原柜,true为成倍复制的柜子) + public static final String BD_MUL_NUM = "MultNum"; // 成倍拆单数量 + public static final String BD_GROUP_NO = "GroupNo"; // 按柜(房名)名分组的柜体序号 + public static final String BD_BOX_NO = "BoxNo"; // 成倍拆单柜体序号 + public static final String BD_BOX_MUL_NUM = "BoxMultNum"; // 成倍拆单数量(总数、原柜和复制柜一致) + public static final String BD_ROOM_NAME = "RoomName"; // 房间名 + public static final String BD_BOX_NAME = "BoxName"; // 柜体名 + public static final String BD_ITEM_ID = "ItemID"; // 板ID + public static final String BD_MODULE_TYPE_ID_LIST = "ModuleTypeIDList"; // 加工组类型ID + public static final String BD_MODULE_ID_LIST = "ModuleIDList"; // 加工组ID + + // ========== getApiBlocksMessage getBlocks 板件数据(概括)模块 ========== + public static final String BG_ORDER_NO = "OrderNo"; // 订单号 + public static final String BG_ROOM_NAME = "RoomName"; // 房间名 + public static final String BG_BOX_NAME = "BoxName"; // 柜体名 + public static final String BG_BOX_ID = "BoxID"; // 柜体标识 + public static final String BG_BLOCK_NO = "BlockNo"; // 板编号 + public static final String BG_BOARD_NAME = "BoardName"; // 板名称 + public static final String BG_GOODS_ID = "GoodsID"; // 商品标识 + public static final String BG_MATERIAL = "Material"; // 材料名称 + public static final String BG_COLOR = "Color"; // 颜色 + public static final String BG_BRAND = "Brand"; // 品牌 + public static final String BG_HEIGHT = "Height"; // 长 + public static final String BG_WIDTH = "Width"; // 宽 + public static final String BG_THICKNESS = "Thickness"; // 厚 + public static final String BG_AREA = "Area"; // 面积 + public static final String BG_WAVE = "Wave"; // 纹路(正纹 = 0, 可翻转 = 1, 反纹 = 2 ) + public static final String BG_SEAL = "Seal"; // 封边信息(格式:左封边,右封边,上封边,下封边) + public static final String BG_IS_UN_REGULAR = "IsUnRegular"; // 是否异形 + public static final String BG_IS_MODEL = "IsModel"; // 是否造型 + public static final String BG_IS_HOLE = "IsHole"; // 是否有孔 + public static final String BG_REMARK_JSON = "RemarkJson"; // 备注(Json格式) + public static final String BG_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串) + + // ========== getApiOrderList orderList 生产单列表模块 ========== + public static final String OL_ORDER_NO = "order_no"; // 订单编号 + public static final String OL_CUSTOM_ORDER_NO = "custom_order_no"; // 自定义单号 + public static final String OL_STORE_NAME = "store_name"; // 门店名称 + public static final String OL_STORE_PHONE = "store_phone"; // 门店电话 + public static final String OL_CUSTOMER_NAME = "cosignee_name"; // 客户名称 + public static final String OL_CUSTOMER_PHONE = "cosignee_phone"; // 客户电话 + public static final String OL_CUSTOMER_ADDRESS = "cosignee_address"; // 客户地址 + public static final String OL_START_DATE = "start_date"; // 订单开始时间 + public static final String OL_END_DATE = "end_date"; // 订单结束时间 + public static final String OL_ORDER_STATUS = "submit_state"; // 平台状态 + public static final String OL_COMMENTS = "comments"; // 备注 + public static final String OL_NICK_NAME = "nick_name"; // 业务员昵称 + public static final String OL_CD_NICK_NAME = "cd_nick_name"; // 拆单员昵称 + + // ========== getApiOrderMessage orderPlanData 生产数据模块 ========== + public static final String OPD_ORDER = "Orders"; + public static final String BPD_ORDER_NO = "OrderNo"; // 订单号 + public static final String BPD_CUSTOM_ORDER_NO = "CustomOrderNo"; // 自定义单号 + + public static final String BPD_MATERIALS = "Materials"; + public static final String BPD_MATERIALS_NAME = "Name"; // 材质名称 + public static final String BPD_MATERIALS_GOODS_ID = "GoodsID"; + public static final String BPD_MATERIALS_COLOR = "Color"; + public static final String BPD_MATERIALS_SPECIFICATION = "Specification"; // 板材规格——长宽 + public static final String BPD_MATERIALS_ONE = "Material"; + public static final String BPD_MATERIALS_THICKNESS = "Thickness"; // 板材厚度 + public static final String BPD_MATERIALS_WIDTH = "Width"; + public static final String BPD_MATERIALS_LENGTH = "Length"; + public static final String BPD_MATERIALS_WAVE = "WaveFlag"; // 有无纹路 + + public static final String BPD_BLOCKS = "Blocks"; // 板编号 + public static final String BPD_BLOCK_NO = "BlockNo"; // 板编号 + public static final String BPD_ROOM_NAME = "RoomName"; // 房间名 + public static final String BPD_BOX_NO = "BoxNo"; // 柜体号 + public static final String BPD_BOX_NAME = "BoxName"; // 柜体名 + public static final String BPD_BLOCK_ID = "BlockID"; // 板ID + public static final String BPD_CUSTOM_BLOCK_NO = "CustomNo"; // (自定义)板号 + public static final String BPD_BLOCK_NAME = "BlockName"; // 板名称 + public static final String BPD_OPEN_DOOR_TYPE = "OpenDoorType"; // 开门类型 0=非门板 1=左开门板 2=右开门板 3=上开门板 4=下开门板 + + public static final String BPD_EXTRA_REMARK = "ExtraRemark"; // 额外补充 + public static final String BPD_DRILLS = "drills"; + public static final String BPD_DRILL_NAME = "name"; + public static final String BPD_DRILL_TYPE = "type"; + public static final String BPD_DRILL_FACE = "face"; + public static final String BPD_DRILL_COUNT = "count"; + public static final String BPD_EXTRA = "extra"; + public static final String BPD_EXTRA_BOARD_TYPE = "boardType"; // 板类型 + public static final String BPD_EXTRA_THROUGH_HOLE_COUNT = "throughHoleCount"; // 挖穿的孔数 + public static final String BPD_EXTRA_THROUGH_MODEL_COUNT = "throughModelCount"; // 挖穿的造型数 + public static final String BPD_EXTRA_HAS_2D_MODEL = "has2DModel"; // 是否有二维刀路 + public static final String BPD_EXTRA_HAS_3D_MODEL = "has3DModel"; // + + public static final String BPD_PROCESS_GROUP_NAME = "ProcessGroupName"; // 加工组(名称) + public static final String BPD_WIDTH = "Width"; // 成品宽 + public static final String BPD_LENGTH = "Length"; // 成品长 + public static final String BPD_SIZE = "Size"; // 成品面积 + public static final String BPD_CUTTING_WIDTH = "CuttingWidth"; // 开料宽 + public static final String BPD_CUTTING_LENGTH = "CuttingLength"; // 开料长 + public static final String BPD_CUTTING_SIZE = "CuttingSize"; // 开料面积 + public static final String BPD_BORDER_LEFT = "BorderLeft"; // 左封边 用于矩形,异形板对接封边分在原始轮廓里定义 + public static final String BPD_BORDER_RIGHT = "BorderRight"; // 右封边 + public static final String BPD_BORDER_UPPER = "BorderUpper"; // 上封边 + public static final String BPD_BORDER_UNDER = "BorderUnder"; // 下封边 + public static final String BPD_WAVE = "Wave"; // 纹路 正纹 = 0,可翻转 = 1, 反纹 = 2 + public static final String BPD_PLACE_FACE = "PlaceFace"; // 排版面 正面 = 0, 反面 = 1, 随意面 = 2 + public static final String BPD_IS_UN_REGULAR = "IsUnRegular"; // 是否异形 + public static final String BPD_OFFSET_X = "OffsetX"; // 开料轮廓,成品轮廓 偏移量X + public static final String BPD_OFFSET_Y = "OffsetY"; // 开料轮廓,成品轮廓 偏移量y + + public static final String BPD_POINTS = "Points"; // 异形板的开料轮廓 (不含封边) + public static final String BPD_ORG_POINTS = "OrgPoints"; // 异形板的成品轮廓 (含封边) + public static final String BPD_POINTS_X = "X"; + public static final String BPD_POINTS_Y = "Y"; + public static final String BPD_POINTS_CURVE = "Curve"; + public static final String BPD_POINTS_EDGE = "Edge"; + + public static final String BPD_HOLES = "Holes"; // 孔 + public static final String BPD_SIDE_HOLES = "SideHoles"; // 侧孔 (基于成品轮廓 含封边) + public static final String BPD_HOLE_X = "X"; + public static final String BPD_HOLE_Y = "Y"; + public static final String BPD_HOLE_DEPTH = "Depth"; + public static final String BPD_HOLE_DIAMETER = "Diameter"; + public static final String BPD_HOLE_FACE = "Face"; + public static final String BPD_HOLE_DIRECTION = "Direction"; + public static final String BPD_HOLE_END_POINT = "EndPoint"; + public static final String BPD_HOLE_START_POINT = "StartPoint"; + + public static final String BPD_MODEL = "Models"; // 造型 + public static final String BPD_MODEL_DEPTH = "Depth"; + public static final String BPD_MODEL_DIAMETER = "Diameter"; + public static final String BPD_MODEL_FACE = "Face"; + public static final String BPD_MODEL_TOOL_NO = "ToolNo"; + + public static final String BPD_MODEL_ORIGIN_MODELING = "OriginModeling"; // 造型 原始轮廓 + public static final String BPD_MODEL_ORIGIN_MODELING_ADD_DEPTH = "AddDepth"; + public static final String BPD_MODEL_ORIGIN_MODELING_ADD_LEN = "AddLen"; + public static final String BPD_MODEL_ORIGIN_MODELING_ADD_WIDTH = "AddWidth"; + public static final String BPD_MODEL_ORIGIN_MODELING_DIR = "Dir"; + public static final String BPD_MODEL_ORIGIN_MODELING_KNIFE_RADIUS = "KnifeRadius"; + public static final String BPD_MODEL_ORIGIN_MODELING_THICKNESS = "Thickness"; + + public static final String BPD_MODEL_ORIGIN_MODELING_OUTLINE = "Outline"; // 造型 原始轮廓 outline + public static final String BPD_MODEL_ORIGIN_MODELING_OUTLINE_CURVE = "Curve"; + public static final String BPD_MODEL_ORIGIN_MODELING_OUTLINE_POS = "Pos"; + + public static final String BPD_MODEL_ORIGIN_MODELING_HOLES = "Holes"; // 造型 原始轮廓 holes + public static final String BPD_MODEL_ORIGIN_MODELING_HOLES_CURVE = "Curve"; + public static final String BPD_MODEL_ORIGIN_MODELING_HOLES_POS = "Pos"; + + public static final String BPD_MODEL_POINTS = "Points"; // 造型 刀路点阵 + public static final String BPD_MODEL_POINTS_CURVE = "Curve"; + public static final String BPD_MODEL_POINTS_POS = "Pos"; + + public static final String BPD_MODEL_OFFSET_LIST = "OffsetList"; // 造型 偏移刀路 + public static final String BPD_MODEL_OFFSET_LIST_ANGLE = "Angle"; + public static final String BPD_MODEL_OFFSET_LIST_DEPTH = "Depth"; + public static final String BPD_MODEL_OFFSET_LIST_DIRECTION = "Diameter"; + public static final String BPD_MODEL_OFFSET_LIST_NAME = "Name"; + public static final String BPD_MODEL_OFFSET_LIST_VALUE = "Value"; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java index 8802bed73..5f3165ca5 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java @@ -6,7 +6,6 @@ import lombok.NoArgsConstructor; import javax.xml.bind.annotation.*; import java.io.Serializable; -import java.util.List; @Data @AllArgsConstructor @@ -56,6 +55,14 @@ public class GrooveXmlVO implements Serializable { @XmlAttribute(name = "depthExtend") private String depthExtend; + // 造型/凹槽(边缘)的刀路方向——内圈顺时针(最)外圈逆时针、内圈顺时针(最)外圈顺时针、内圈逆时针(最)外圈顺时针、内圈逆时针(最)外圈逆时针 + @XmlAttribute(name = "direction") + private String direction; + + // 加工模式/方式——由内向外、由外向内 + @XmlAttribute(name = "mode") + private String mode; + // 圆角半径 @XmlAttribute(name = "round") private String round; @@ -92,6 +99,10 @@ public class GrooveXmlVO implements Serializable { @XmlElement(name = "offsetLines") private OffsetLineXmlVOS offsetLineXmlVOS; + // 原始造型(外)轮廓信息 + @XmlElement(name = "Outline") + private OutlineXmlVO outlineXmlVO; + @XmlAttribute(name = "result") private String result; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLUtil.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLUtil.java index 506a10339..a48c7d99b 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLUtil.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLUtil.java @@ -871,7 +871,7 @@ public class XMLUtil { flag.set(false); } else { for (PointXmlVO pointXmlVO : pointXmlVOS.getPointXmlVOList()) { - checkPoint(pointXmlVO, flag); + checkPointRemoveZ(pointXmlVO, flag, "孤岛"); } } } @@ -970,6 +970,8 @@ public class XMLUtil { isEmptyAddAndPositiveNumber(grooveXmlVO::getWidthExtend, grooveXmlVO::setWidthExtend, "0", Double.class, "槽宽度延长", flag); isEmptyAddAndPositiveNumber(grooveXmlVO::getLengthExtend, grooveXmlVO::setLengthExtend, "0", Double.class, "槽长度延长", flag); isEmptyAddAndPositiveNumber(grooveXmlVO::getDepthExtend, grooveXmlVO::setDepthExtend, "0", Double.class, "槽深度延长", flag); + isEmptyAddAndPositiveNumber(grooveXmlVO::getDirection, grooveXmlVO::setDirection, "0", Double.class, "造型/凹槽(边缘)的刀路方向", flag); + isEmptyAddAndPositiveNumber(grooveXmlVO::getMode, grooveXmlVO::setMode, "0", Double.class, "加工模式/方式", flag); isEmptyAddAndPositiveNumber(grooveXmlVO::getRound, grooveXmlVO::setRound, "0", Double.class, "圆角半径", flag); if (grooveXmlVO.getType().trim().equals("路径槽") || grooveXmlVO.getType().trim().equals("折返路径槽")) { @@ -981,12 +983,21 @@ public class XMLUtil { isEmptyAddAndPositiveNumber(grooveXmlVO::getTangentAngle, grooveXmlVO::setTangentAngle, "0", Double.class, "角度(二维刀路V型刀提角/清角用)", flag); isEmptyAddAndPositiveNumber(grooveXmlVO::getIsletCount, grooveXmlVO::setIsletCount, "0", Integer.class, "孤岛数量", flag); + if (grooveXmlVO.getOutlineXmlVO() == null || grooveXmlVO.getOutlineXmlVO().getPointXmlVOList() == null || grooveXmlVO.getOutlineXmlVO().getPointXmlVOList().size() < 1) { + grooveXmlVO.setResult("---< 原始造型(外)轮廓点阵列表不可为空 >---"); + flag.set(false); + } else { + for (PointXmlVO pointXmlVO : grooveXmlVO.getOutlineXmlVO().getPointXmlVOList()) { + checkPoint(pointXmlVO, flag, "原始造型(外)轮廓"); + } + } + if (grooveXmlVO.getPointXmlVOS() == null || grooveXmlVO.getPointXmlVOS().getPointXmlVOList() == null || grooveXmlVO.getPointXmlVOS().getPointXmlVOList().size() < 1) { grooveXmlVO.setResult("---< 槽点坐标列表不可为空 >---"); flag.set(false); } else { for (PointXmlVO pointXmlVO : grooveXmlVO.getPointXmlVOS().getPointXmlVOList()) { - checkPoint(pointXmlVO, flag); + checkPoint(pointXmlVO, flag, "刀路点阵"); } } @@ -1007,8 +1018,8 @@ public class XMLUtil { private void checkRawOutline(RawOutlineXmlVO rawOutlineXmlVO, AtomicBoolean flag) { boolean index = isEmptyBackAndPositiveNumberAndBack(rawOutlineXmlVO::getCount, "小板坯料(精加工)轮廓点阵列表数量 "+ rawOutlineXmlVO.getCount(), rawOutlineXmlVO::setCount, Integer.class, flag); - isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetX, rawOutlineXmlVO::setReferenceOffsetX, Double.class, "小板坯料(精加工)轮廓参考点X坐标不可为空 " +rawOutlineXmlVO.getReferenceOffsetX() , flag); - isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetY, rawOutlineXmlVO::setReferenceOffsetY, Double.class, "小板坯料(精加工)轮廓参考点Y坐标不可为空 " +rawOutlineXmlVO.getReferenceOffsetY() , flag); + isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetX, rawOutlineXmlVO::setReferenceOffsetX, Double.class, "相对于成品轮廓,基准点的X坐标偏移量" +rawOutlineXmlVO.getReferenceOffsetX() , flag); + isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetY, rawOutlineXmlVO::setReferenceOffsetY, Double.class, "相对于成品轮廓,基准点的Y坐标偏移量" +rawOutlineXmlVO.getReferenceOffsetY() , flag); if (rawOutlineXmlVO.getPointXmlVOList() != null && !rawOutlineXmlVO.getPointXmlVOList().isEmpty()) { @@ -1018,7 +1029,7 @@ public class XMLUtil { flag.set(false); } else { for (PointXmlVO pointXmlVO : rawOutlineXmlVO.getPointXmlVOList()) { - checkPoint(pointXmlVO, flag); + checkPointRemoveZ(pointXmlVO, flag, "坯料轮廓信息"); } } } @@ -1038,7 +1049,7 @@ public class XMLUtil { flag.set(false); } else { for (PointXmlVO pointXmlVO : cuttingOutlineXmlVO.getPointXmlVOList()) { - checkPoint(pointXmlVO, flag); + checkPointRemoveZ(pointXmlVO, flag, "开料成型轮廓信息"); } } } @@ -1056,6 +1067,7 @@ public class XMLUtil { if (Integer.parseInt(outlineXmlVO.getCount()) != outlineXmlVO.getPointXmlVOList().size()) { outlineXmlVO.setCount("---< 小板轮廓点阵数量与实际数量不一致 >---"); flag.set(false); + return; } @@ -1065,8 +1077,6 @@ public class XMLUtil { isEmptyBackAndNumber(pointXmlVO::getCurvature, pointXmlVO::setCurvature, Double.class, "小板轮廓边圆弧凹凸度", flag); isEmptyBackAndNumber(pointXmlVO::getRadius, pointXmlVO::setRadius, Double.class, "小板轮廓边圆弧半径", flag); - - checkPoint(pointXmlVO, flag); checkEdging(pointXmlVO, flag); // if (!(StringUtils.isEmpty(pointXmlVO.getItemCode()) && StringUtils.isEmpty(pointXmlVO.getEdgingName()) && // StringUtils.isEmpty(pointXmlVO.getEdgingColor()) && StringUtils.isEmpty(pointXmlVO.getEdgingMaterial()) && @@ -1128,11 +1138,17 @@ public class XMLUtil { // point 验证 - private void checkPoint(PointXmlVO pointXmlVO, AtomicBoolean flag) { - isEmptyBackAndNumber(pointXmlVO::getPointX, pointXmlVO::setPointX, Double.class, pointXmlVO.getPointX(), flag); - isEmptyBackAndNumber(pointXmlVO::getPointY, pointXmlVO::setPointY, Double.class, pointXmlVO.getPointY(), flag); - isEmptyBackAndNumber(pointXmlVO::getCurvature, pointXmlVO::setCurvature, Double.class, pointXmlVO.getCurvature(), flag); - isEmptyBackAndNumber(pointXmlVO::getRadius, pointXmlVO::setRadius, Double.class, pointXmlVO.getRadius(), flag); + private void checkPointRemoveZ(PointXmlVO pointXmlVO, AtomicBoolean flag, String name) { + isEmptyBackAndNumber(pointXmlVO::getPointX, pointXmlVO::setPointX, Double.class, name + "起点X坐标", flag); + isEmptyBackAndNumber(pointXmlVO::getPointY, pointXmlVO::setPointY, Double.class, name + "起点Y坐标", flag); + isEmptyBackAndNumber(pointXmlVO::getCurvature, pointXmlVO::setCurvature, Double.class, name + "起点圆弧凹凸度", flag); + isEmptyBackAndNumber(pointXmlVO::getRadius, pointXmlVO::setRadius, Double.class, name + "起点圆弧半径", flag); + + } + + private void checkPoint(PointXmlVO pointXmlVO, AtomicBoolean flag, String name) { + checkPointRemoveZ(pointXmlVO, flag, name); + isEmptyBackAndNumber(pointXmlVO::getPointZ, pointXmlVO::setPointZ, Double.class, name + "起点Z坐标", flag); } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java index cfc17330e..ec88a516f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java @@ -26,6 +26,8 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import java.util.function.Consumer; +import java.util.function.Supplier; import java.util.stream.Collectors; @@ -199,6 +201,22 @@ public class XmlTypeRealize { return groupInfos; } + private void isEmptyAndAdd(Supplier getName, Consumer setName, Supplier getCode, Consumer setCode) { + String name = getName.get(); + String code = getCode.get(); + + if (StringUtils.isEmpty(name) && StringUtils.isEmpty(code)) { + setName.accept(NOT_ASSIGNED); + setCode.accept(NOT_ASSIGNED_CODE); + } + if (StringUtils.isEmpty(code) && !StringUtils.isEmpty(name)){ + setCode.accept(NOT_ASSIGNED_CODE + " + " + name); + } + if (!StringUtils.isEmpty(code) && StringUtils.isEmpty(name)){ + setName.accept(NOT_ASSIGNED + " + " + code); + } + } + // 板材信息转换 public Map goodsInfoChange(OrderXmlVO orderXmlVO, Long orderId, Long organId) { Map map = new HashMap<>(); @@ -219,166 +237,112 @@ public class XmlTypeRealize { Map groupInfos = groupInfoChange(orderXmlVO.getGroupXmlVOS(), orderId, organId); // groupInfos 这个在跟着一起变 Map itemInfos = new HashMap<>(); -// Map partsInfos = new HashMap<>(); + Map orderPartsRemarks = new HashMap<>(); Map partsDOInfos = new HashMap<>(); - if (orderXmlVO.getMaterialXmlVO() != null) { - MaterialXmlVO materialXmlVO = orderXmlVO.getMaterialXmlVO(); - if (materialXmlVO.getAccessoryXmlVO() != null && materialXmlVO.getAssemblieXmlVOS() != null && materialXmlVO.getPlateXmlVOS() != null) { + if (orderXmlVO.getMaterialXmlVO() == null) { + return map; + } + + MaterialXmlVO materialXmlVO = orderXmlVO.getMaterialXmlVO(); + Map> edgingMap; + Map> hardwareMap; + Map> assemblyMap; + // 配件 + if (materialXmlVO.getAccessoryXmlVO() != null ) { + AccessoryXmlVO accessoryXmlVO = materialXmlVO.getAccessoryXmlVO(); + if (accessoryXmlVO.getEdgingXmlVOS() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList() != null && !accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList().isEmpty()) { + List edgingList = accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList(); + edgingList.forEach(edgingXmlVO -> { + isEmptyAndAdd(edgingXmlVO::getRoomName, edgingXmlVO::setRoomName, edgingXmlVO::getRoomCode, edgingXmlVO::setRoomCode); + + isEmptyAndAdd(edgingXmlVO::getBoxName, edgingXmlVO::setBoxName, edgingXmlVO::getBoxCode, edgingXmlVO::setBoxCode); + + }); + // 以itemCode为条件进行分组,成map + edgingMap = edgingList.stream().collect(Collectors.groupingBy(EdgingXmlVO::getItemCode)); + // 遍历map + edgingMap.forEach((key, value) -> { + if (key == null) { // 没有itemCode + Map> edgingMapWithNull = value.stream().collect(Collectors.groupingBy(edgingXmlVO -> + edgingXmlVO.getManufacturer() + edgingXmlVO.getBrand() + edgingXmlVO.getName() + edgingXmlVO.getMaterial() + + edgingXmlVO.getSpecs() + edgingXmlVO.getColor() + edgingXmlVO.getWidth() + edgingXmlVO.getThickness())); + + edgingMap.putAll(edgingMapWithNull); + + } + }); + } else { + edgingMap = null; + } + if (accessoryXmlVO.getHardwareXmlVOS() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList() != null && !accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList().isEmpty()) { + List hardwareXmlVOS = accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList(); + hardwareXmlVOS.forEach(hardwareXmlVO -> { + isEmptyAndAdd(hardwareXmlVO::getRoomName, hardwareXmlVO::setRoomName, hardwareXmlVO::getRoomCode, hardwareXmlVO::setRoomCode); + + isEmptyAndAdd(hardwareXmlVO::getBoxName, hardwareXmlVO::setBoxName, hardwareXmlVO::getBoxCode, hardwareXmlVO::setBoxCode); + + }); + // 以itemCode为条件进行分组,成map + hardwareMap = hardwareXmlVOS.stream().collect(Collectors.groupingBy(HardwareXmlVO::getItemCode)); + // 遍历map + hardwareMap.forEach((key, value) -> { + if (key == null) { //没有itemCode + Map> hardwareMapWithNull = value.stream().collect(Collectors.groupingBy(hardwareXmlVO -> + hardwareXmlVO.getManufacturer() + hardwareXmlVO.getBrand() + hardwareXmlVO.getName() + hardwareXmlVO.getMaterial() + + hardwareXmlVO.getSpecs() + hardwareXmlVO.getColor() + hardwareXmlVO.getType())); + + hardwareMap.putAll(hardwareMapWithNull); + } + }); + } else { + hardwareMap = null; + } + } else { + hardwareMap = null; + edgingMap = null; + } + + if (materialXmlVO.getAssemblieXmlVOS() != null) { + AssemblieXmlVOS assemblieXmlVOS = materialXmlVO.getAssemblieXmlVOS(); + if (assemblieXmlVOS.getAssemblyXmlVOList() != null && !assemblieXmlVOS.getAssemblyXmlVOList().isEmpty()) { + List assemblyList = assemblieXmlVOS.getAssemblyXmlVOList(); + assemblyList.forEach(assemblyXmlVO -> { + isEmptyAndAdd(assemblyXmlVO::getRoomName, assemblyXmlVO::setRoomName, assemblyXmlVO::getRoomCode, assemblyXmlVO::setRoomCode); + + isEmptyAndAdd(assemblyXmlVO::getBoxName, assemblyXmlVO::setBoxName, assemblyXmlVO::getBoxCode, assemblyXmlVO::setBoxCode); + + + }); + assemblyMap = assemblieXmlVOS.getAssemblyXmlVOList().stream().collect(Collectors.groupingBy(AssemblyXmlVO::getItemCode)); + assemblyMap.forEach((key, value) -> { + if (key == null) { // 没有itemCode + Map> assemblyMapWithNull = value.stream().collect(Collectors.groupingBy(assemblyXmlVO -> + assemblyXmlVO.getManufacturer() + assemblyXmlVO.getBrand() + assemblyXmlVO.getName() + assemblyXmlVO.getMaterial() + + assemblyXmlVO.getSpecs() + assemblyXmlVO.getColor() + assemblyXmlVO.getType())); + + assemblyMap.putAll(assemblyMapWithNull); + } + }); + } else { + assemblyMap = null; + } + } else { + assemblyMap = null; + } + + Map> partInfoAll = goodsInfoChange(organId, orderId, edgingMap, hardwareMap, assemblyMap, roomInfos, groupInfos); + itemInfos.putAll(partInfoAll.get("orderItemMap")); + orderPartsRemarks.putAll(partInfoAll.get("orderPartsRemarks")); + partsDOInfos.putAll(partInfoAll.get("orderPartsDOMap")); + + if (materialXmlVO.getPlateXmlVOS() != null) { PlateXmlVOS plateXmlVOS = materialXmlVO.getPlateXmlVOS(); - AssemblieXmlVOS assemblieXmlVOS = materialXmlVO.getAssemblieXmlVOS(); - AccessoryXmlVO accessoryXmlVO = materialXmlVO.getAccessoryXmlVO(); - // 配件 - Map> edgingMap; - Map> hardwareMap; - Map> assemblyMap; - if (accessoryXmlVO.getEdgingXmlVOS() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList().size() > 0) { - List edgingList = accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList(); - edgingList.forEach(edgingXmlVO -> { - if (edgingXmlVO.getRoomName() == null && edgingXmlVO.getRoomCode() == null) { - edgingXmlVO.setRoomName(NOT_ASSIGNED); - edgingXmlVO.setRoomCode(NOT_ASSIGNED_CODE); - } - if (edgingXmlVO.getRoomCode() == null && edgingXmlVO.getRoomName() != null){ - edgingXmlVO.setRoomCode(NOT_ASSIGNED_CODE + " + " + edgingXmlVO.getRoomName()); - } - if (edgingXmlVO.getRoomCode() != null && edgingXmlVO.getRoomName() == null){ - edgingXmlVO.setRoomName(NOT_ASSIGNED + " + " + edgingXmlVO.getRoomCode()); - } - - if (edgingXmlVO.getBoxName() == null && edgingXmlVO.getBoxCode() == null) { - edgingXmlVO.setBoxName(NOT_ASSIGNED); - edgingXmlVO.setBoxCode(NOT_ASSIGNED_CODE); - } - if (edgingXmlVO.getBoxCode() == null && edgingXmlVO.getBoxName() != null){ - edgingXmlVO.setBoxCode(NOT_ASSIGNED_CODE + " + " + edgingXmlVO.getBoxName()); - } - if (edgingXmlVO.getBoxCode() != null && edgingXmlVO.getBoxName() == null){ - edgingXmlVO.setBoxName(NOT_ASSIGNED + " + " + edgingXmlVO.getBoxCode()); - } -// if (edgingXmlVO.getGroupCode() == null && edgingXmlVO.getGroupName() != null){ -// edgingXmlVO.setGroupCode(NOT_ASSIGNED_CODE + " + " + edgingXmlVO.getGroupName()); -// } -// if (edgingXmlVO.getGroupCode() != null && edgingXmlVO.getGroupName() == null){ -// edgingXmlVO.setGroupName(NOT_ASSIGNED + " + " + edgingXmlVO.getGroupCode()); -// } - }); - // 以itemCode为条件进行分组,成map - edgingMap = edgingList.stream().collect(Collectors.groupingBy(EdgingXmlVO::getItemCode)); - // 遍历map - edgingMap.forEach((key, value) -> { - if (key == null) { // 没有itemCode - Map> edgingMapWithNull = value.stream().collect(Collectors.groupingBy(edgingXmlVO -> - edgingXmlVO.getManufacturer() + edgingXmlVO.getBrand() + edgingXmlVO.getName() + edgingXmlVO.getMaterial() + - edgingXmlVO.getSpecs() + edgingXmlVO.getColor() + edgingXmlVO.getWidth() + edgingXmlVO.getThickness())); - - edgingMap.putAll(edgingMapWithNull); - - } - }); - } else { - edgingMap = null; - } - if (accessoryXmlVO.getHardwareXmlVOS() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList().size() > 0) { - List hardwareXmlVOS = accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList(); - hardwareXmlVOS.forEach(hardwareXmlVO -> { - if (hardwareXmlVO.getRoomName() == null && hardwareXmlVO.getRoomCode() == null) { - hardwareXmlVO.setRoomName(NOT_ASSIGNED); - hardwareXmlVO.setRoomCode(NOT_ASSIGNED_CODE); - } - if (hardwareXmlVO.getRoomCode() == null && hardwareXmlVO.getRoomName() != null){ - hardwareXmlVO.setRoomCode(NOT_ASSIGNED_CODE + " + " + hardwareXmlVO.getRoomName()); - } - if (hardwareXmlVO.getRoomCode() != null && hardwareXmlVO.getRoomName() == null){ - hardwareXmlVO.setRoomName(NOT_ASSIGNED + " + " + hardwareXmlVO.getRoomCode()); - } - if (hardwareXmlVO.getBoxName() == null && hardwareXmlVO.getBoxCode() == null) { - hardwareXmlVO.setBoxName(NOT_ASSIGNED); - hardwareXmlVO.setBoxCode(NOT_ASSIGNED_CODE); - } - if (hardwareXmlVO.getBoxCode() == null && hardwareXmlVO.getBoxName() != null){ - hardwareXmlVO.setBoxCode(NOT_ASSIGNED_CODE + " + " + hardwareXmlVO.getBoxName()); - } - if (hardwareXmlVO.getBoxCode() != null && hardwareXmlVO.getBoxName() == null){ - hardwareXmlVO.setBoxName(NOT_ASSIGNED + " + " + hardwareXmlVO.getBoxCode()); - } -// if (hardwareXmlVO.getGroupCode() == null && hardwareXmlVO.getGroupName() != null){ -// hardwareXmlVO.setGroupCode(NOT_ASSIGNED_CODE + " + " + hardwareXmlVO.getGroupName()); -// } -// if (hardwareXmlVO.getGroupCode() != null && hardwareXmlVO.getGroupName() == null){ -// hardwareXmlVO.setGroupName(NOT_ASSIGNED + " + " + hardwareXmlVO.getGroupCode()); -// } - }); - // 以itemCode为条件进行分组,成map - hardwareMap = hardwareXmlVOS.stream().collect(Collectors.groupingBy(HardwareXmlVO::getItemCode)); - // 遍历map - hardwareMap.forEach((key, value) -> { - if (key == null) { //没有itemCode - Map> hardwareMapWithNull = value.stream().collect(Collectors.groupingBy(hardwareXmlVO -> - hardwareXmlVO.getManufacturer() + hardwareXmlVO.getBrand() + hardwareXmlVO.getName() + hardwareXmlVO.getMaterial() + - hardwareXmlVO.getSpecs() + hardwareXmlVO.getColor() + hardwareXmlVO.getType())); - - hardwareMap.putAll(hardwareMapWithNull); - } - }); - } else { - hardwareMap = null; - } - if (assemblieXmlVOS.getAssemblyXmlVOList() != null && assemblieXmlVOS.getAssemblyXmlVOList().size() > 0) { - List assemblyList = assemblieXmlVOS.getAssemblyXmlVOList(); - assemblyList.forEach(assemblyXmlVO -> { - if (assemblyXmlVO.getRoomName() == null && assemblyXmlVO.getRoomCode() == null) { - assemblyXmlVO.setRoomName(NOT_ASSIGNED); - assemblyXmlVO.setRoomCode(NOT_ASSIGNED_CODE); - } - if (assemblyXmlVO.getRoomCode() == null && assemblyXmlVO.getRoomName() != null){ - assemblyXmlVO.setRoomCode(NOT_ASSIGNED_CODE + " + " + assemblyXmlVO.getRoomName()); - } - if (assemblyXmlVO.getRoomCode() != null && assemblyXmlVO.getRoomName() == null){ - assemblyXmlVO.setRoomName(NOT_ASSIGNED + " + " + assemblyXmlVO.getRoomCode()); - } - if (assemblyXmlVO.getBoxName() == null && assemblyXmlVO.getBoxCode() == null) { - assemblyXmlVO.setBoxName(NOT_ASSIGNED); - assemblyXmlVO.setBoxCode(NOT_ASSIGNED_CODE); - } - if (assemblyXmlVO.getBoxCode() == null && assemblyXmlVO.getBoxName() != null){ - assemblyXmlVO.setBoxCode(NOT_ASSIGNED_CODE + " + " + assemblyXmlVO.getBoxName()); - } - if (assemblyXmlVO.getBoxCode() != null && assemblyXmlVO.getBoxName() == null){ - assemblyXmlVO.setBoxName(NOT_ASSIGNED + " + " + assemblyXmlVO.getBoxCode()); - } -// if (assemblyXmlVO.getGroupCode() == null && assemblyXmlVO.getGroupName() != null){ -// assemblyXmlVO.setGroupCode(NOT_ASSIGNED_CODE + " + " + assemblyXmlVO.getGroupName()); -// } -// if (assemblyXmlVO.getGroupCode() != null && assemblyXmlVO.getGroupName() == null){ -// assemblyXmlVO.setGroupName(NOT_ASSIGNED + " + " + assemblyXmlVO.getGroupCode()); -// } - }); - assemblyMap = assemblieXmlVOS.getAssemblyXmlVOList().stream().collect(Collectors.groupingBy(AssemblyXmlVO::getItemCode)); - assemblyMap.forEach((key, value) -> { - if (key == null) { // 没有itemCode - Map> assemblyMapWithNull = value.stream().collect(Collectors.groupingBy(assemblyXmlVO -> - assemblyXmlVO.getManufacturer() + assemblyXmlVO.getBrand() + assemblyXmlVO.getName() + assemblyXmlVO.getMaterial() + - assemblyXmlVO.getSpecs() + assemblyXmlVO.getColor() + assemblyXmlVO.getType())); - - assemblyMap.putAll(assemblyMapWithNull); - } - }); - } else { - assemblyMap = null; - } - Map> partInfoAll = goodsInfoChange(organId, orderId, edgingMap, hardwareMap, assemblyMap, roomInfos, groupInfos); - -// Map> partAllInfo = goodsInfoChange(accessoryXmlVO, assemblieXmlVOS, orderId, organId, roomInfos, groupInfos); - itemInfos.putAll(partInfoAll.get("orderItemMap")); -// partsInfos.putAll(partInfoAll.get("orderPartsMap")); - orderPartsRemarks.putAll(partInfoAll.get("orderPartsRemarks")); - partsDOInfos.putAll(partInfoAll.get("orderPartsDOMap")); // 板材 - if (plateXmlVOS.getPlateXmlVOList() != null && plateXmlVOS.getPlateXmlVOList().size() > 0) { + if (plateXmlVOS.getPlateXmlVOList() != null && !plateXmlVOS.getPlateXmlVOList().isEmpty()) { for (PlateXmlVO plateXmlVO : plateXmlVOS.getPlateXmlVOList()) { if (StringUtils.equals(plateXmlVO.getGrained().trim(), "无")) { plateXmlVO.setGrained("false"); @@ -424,14 +388,14 @@ public class XmlTypeRealize { goodsDOs.add(goodsDO); // 小板信息 -// plateDetail = plateInfoChange(plateXmlVO.getBlockXmlVOS(), orderId, goodsDO.getId(), organId, roomInfos, groupInfos, partsInfos, itemInfos, plateDOs, boxBasePositions, roomBasePositions); + plateInfoChange(plateDetail, organId, orderId, goodsId, plateXmlVO.getBlockXmlVOS(), plateDOs, itemInfos, partsDOInfos, roomInfos, groupInfos, boxBasePositions, roomBasePositions); -// plateDetail.add(plateInfoChange(organId, orderId, goodsId, plateXmlVO.getBlockXmlVOS(), plateDOs, itemInfos, partsDOInfos, roomInfos, groupInfos, boxBasePositions, roomBasePositions)); + } } } - } + // 取map中的值 List orderBodyDOList = roomInfos.values().stream() @@ -453,8 +417,7 @@ public class XmlTypeRealize { map.put("orderItemDOS", itemDOList); map.put("plateDetail", plateDetail); map.put("orderPartsRemarks", partRemarks); -// System.out.println(" orderBodyDOS " + orderBodyDOList); -// System.out.println(" orderPartsDOS " + partDOList); + return map; } @@ -584,7 +547,7 @@ public class XmlTypeRealize { for (EdgingXmlVO edgingVO : value) { partsNum = partsNum + Double.parseDouble(edgingVO.getCount()); - if (edgingVO.getRemarkXmlVOS() != null && edgingVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && edgingVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) { + if (edgingVO.getRemarkXmlVOS() != null && edgingVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && !edgingVO.getRemarkXmlVOS().getRemarkXmlVOList().isEmpty()) { finalRemarkXmlVOS.addAll(edgingVO.getRemarkXmlVOS().getRemarkXmlVOList()); } } @@ -601,7 +564,7 @@ public class XmlTypeRealize { .build()); }); - if (finalRemarkXmlVOS.size() > 0) { + if (!finalRemarkXmlVOS.isEmpty()) { orderPartsRemarks.put(key, OrderPartsRemark.builder() .partsId(partsId) .orderId(orderId) @@ -653,7 +616,7 @@ public class XmlTypeRealize { for (HardwareXmlVO hardwareVO : value) { partsNum = partsNum + Double.parseDouble(hardwareVO.getCount()); - if (hardwareVO.getRemarkXmlVOS() != null && hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) { + if (hardwareVO.getRemarkXmlVOS() != null && hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && !hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList().isEmpty()) { finalRemarkXmlVOS.addAll(hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList()); } } @@ -670,7 +633,7 @@ public class XmlTypeRealize { .build()); }); - if (finalRemarkXmlVOS.size() > 0) { + if (!finalRemarkXmlVOS.isEmpty()) { orderPartsRemarks.put(key, OrderPartsRemark.builder() .partsId(partsId) .orderId(orderId) @@ -722,7 +685,7 @@ public class XmlTypeRealize { for (AssemblyXmlVO assemblyVO : value) { partsNum = partsNum + Double.parseDouble(assemblyVO.getCount()); - if (assemblyVO.getRemarkXmlVOS() != null && assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) { + if (assemblyVO.getRemarkXmlVOS() != null && assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && !assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList().isEmpty()) { finalRemarkXmlVOS.addAll(assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList()); } } @@ -739,7 +702,7 @@ public class XmlTypeRealize { .build()); }); - if (finalRemarkXmlVOS.size() > 0) { + if (!finalRemarkXmlVOS.isEmpty()) { orderPartsRemarks.put(key, OrderPartsRemark.builder() .partsId(partsId) .orderId(orderId) @@ -761,9 +724,12 @@ public class XmlTypeRealize { List plateDOs, Map orderItemMap, Map partsDO, Map> roomInfos, Map groupInfos, Map> boxBasePositionMap, Map roomBasePositions) { -// List plateDetails = new ArrayList<>(); - if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() != null && blockXmlVOS.getBlockXmlVOList().size() > 0) { + if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() == null || blockXmlVOS.getBlockXmlVOList().isEmpty()) { + + } + + if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() != null && !blockXmlVOS.getBlockXmlVOList().isEmpty()) { for (BlockXmlVO blockXmlVO : blockXmlVOS.getBlockXmlVOList()) { long plateNo = idWorker.nextId(); @@ -800,9 +766,9 @@ public class XmlTypeRealize { .moduleName(blockXmlVO.getModuleName()) .moduleCode(blockXmlVO.getModuleCode()) .build(); -// Map idMap = getId(blockXmlVO.getRoomCode(), blockXmlVO.getBoxCode(), roomInfos, blockXmlVO.getGroupCode(), groupInfos, plateNum, unregularNum, orderId, organId); + Map idMap = getId(positionVO, roomInfos, groupInfos, plateNum, unregularNum, orderId, organId); -// 出错 null + // 柜体基点坐标 BasePosition boxBasePoint = null; if (boxBasePositionMap.get(blockXmlVO.getRoomCode()) != null){ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml index 674ee39ad..a434addba 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/application-local.yaml @@ -87,6 +87,9 @@ spring: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 elasticsearch: uris: 192.168.1.205:9200 + security-http-ssl-enable: false + username: elastic + password: admin. --- #################### 定时任务相关配置 #################### xxl: diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml index 880522688..c34ad5f49 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderItem/OrderItemMapper.xml @@ -186,6 +186,97 @@ + + + \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java index 26b7f8025..9163a7557 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/DictTypeConstants.java @@ -8,4 +8,6 @@ package com.cf.imes.module.manage.enums; public class DictTypeConstants { public static final String PLATE_TEXTURE = "plate_texture_type";// 板件纹里 + + public static final String PART_CATEGORY = "part_category";// 配件主类型 } diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java index ce0f6a6f6..7c1c4eb37 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/ErrorCodeConstants.java @@ -1,8 +1,14 @@ package com.cf.imes.module.manage.enums; +import com.cf.imes.framework.common.exception.ErrorCode; + /** * @author there * 生产管理服务错误码枚举 使用1-004-000-000 段 */ public interface ErrorCodeConstants { + + public static final ErrorCode PARTS_NOT_EXISTS = new ErrorCode(1_004_000_000, "配件不存在"); + public static final ErrorCode PARTS_GOOD_ID_EXISTS = new ErrorCode(1_004_000_000, "配件标识已存在"); + } diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java new file mode 100644 index 000000000..159d5113f --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/CategoryEnum.java @@ -0,0 +1,22 @@ +package com.cf.imes.module.manage.enums.parts; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 配件主类的枚举值 + */ +@Getter +@AllArgsConstructor +public enum CategoryEnum implements ObjectEnum{ + + ASSEMBLY("组件"), + HARDWARE("五金"), + EDGING("封边条"); + + /** + * 类别名称 + */ + private final String value; + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/ObjectEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/ObjectEnum.java new file mode 100644 index 000000000..5b322d63c --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/ObjectEnum.java @@ -0,0 +1,6 @@ +package com.cf.imes.module.manage.enums.parts; + +public interface ObjectEnum { + + String getValue(); +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/WhetherEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/WhetherEnum.java new file mode 100644 index 000000000..89d611c54 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/parts/WhetherEnum.java @@ -0,0 +1,17 @@ +package com.cf.imes.module.manage.enums.parts; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum WhetherEnum implements ObjectEnum{ + + TRUE("是"), + FALSE("否"); + + /** + * 类别名称 + */ + private final String value; +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlatePlaceStyleEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlatePlaceStyleEnum.java similarity index 93% rename from cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlatePlaceStyleEnum.java rename to cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlatePlaceStyleEnum.java index f6b2d1813..4d9031481 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlatePlaceStyleEnum.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlatePlaceStyleEnum.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.manage.enums; +package com.cf.imes.module.manage.enums.remainPlate; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlateStatusEnum.java similarity index 90% rename from cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java rename to cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlateStatusEnum.java index 98dd9ce3f..bd3ae4534 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateStatusEnum.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlateStatusEnum.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.manage.enums; +package com.cf.imes.module.manage.enums.remainPlate; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateUseTypeEnum.java b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlateUseTypeEnum.java similarity index 91% rename from cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateUseTypeEnum.java rename to cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlateUseTypeEnum.java index 37dadf579..437285c0e 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/RemainPlateUseTypeEnum.java +++ b/cf-module-prod-manage/cf-module-prod-manage-api/src/main/java/com/cf/imes/module/manage/enums/remainPlate/RemainPlateUseTypeEnum.java @@ -1,4 +1,4 @@ -package com.cf.imes.module.manage.enums; +package com.cf.imes.module.manage.enums.remainPlate; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java new file mode 100644 index 000000000..8dff9c736 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java @@ -0,0 +1,148 @@ +package com.cf.imes.module.manage.controller.admin.parts; + +import com.cf.imes.module.manage.controller.admin.parts.vo.*; +import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportExcelVO; +import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; +import com.cf.imes.module.manage.service.parts.PartsExcelListener; +import com.cf.imes.module.manage.service.parts.PartsService; +import com.cf.imes.module.manage.util.file.ExcelReadUtil; +import io.swagger.v3.oas.annotations.Parameters; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.*; +import javax.servlet.http.*; +import javax.validation.constraints.NotEmpty; +import java.util.*; +import java.io.IOException; + +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import static com.cf.imes.framework.common.pojo.CommonResult.success; + +import com.cf.imes.framework.excel.core.util.ExcelUtils; + +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; +import org.springframework.web.multipart.MultipartFile; + +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 配件管理") +@RestController +@RequestMapping("/manage/parts/") +@Validated +public class PartsController { + + @Resource + private PartsService partsService; + + final String IMPORT_TEMPLATE = "配件导入模板.xlsx"; + + @PostMapping("/create") + @Operation(summary = "创建配件") + @PreAuthorize("@ss.hasAnyPermissions('system:accessory:create','base:accessory:create')") + public CommonResult create(@Valid @RequestBody PartsSaveReqVO createReqVO) { + return success(partsService.create(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新配件") + @PreAuthorize("@ss.hasAnyPermissions('system:accessory:update','base:accessory:update')") + public CommonResult update(@Valid @RequestBody PartsSaveReqVO updateReqVO) { + partsService.update(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除配件") + @Parameters({ + @Parameter(name = "id", description = "编号", required = true, example = "1024"), + @Parameter(name = "organId", description = "板材所属组织ID", example = "1024") + }) + @PreAuthorize("@ss.hasAnyPermissions('system:accessory:delete','base:accessory:delete')") + public CommonResult delete(@RequestParam("id") Long id, + @RequestParam(value = "organId",required = false, defaultValue = "0") Long organId) { + partsService.delete(id, organId); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得配件") + @Parameters({ + @Parameter(name = "id", description = "编号", required = true, example = "1024"), + @Parameter(name = "organId", description = "板材所属组织ID", example = "1024") + }) + @PreAuthorize("@ss.hasAnyPermissions('system:accessory:query','base:accessory:query')") + public CommonResult get(@RequestParam("id") Long id, + @RequestParam(value = "organId", required = false, defaultValue = "0") Long organId) { + PartsDO partsDO = partsService.get(id, organId); + return success(BeanUtils.toBean(partsDO, PartsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得配件分页") + @PreAuthorize("@ss.hasAnyPermissions('manage:parts:query','base:accessory:query')") + public CommonResult> getPage(@Valid PartsPageReqVO pageReqVO) { + PageResult pageResult = partsService.getPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PartsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出配件文件") + @PreAuthorize("@ss.hasAnyPermissions('manage:parts:export','base:accessory:export')") + @OperateLog(type = EXPORT) + public void exportExcel(@Valid PartsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = partsService.getPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "配件表 parts_{N}.xls", "数据", PartsRespVO.class, + BeanUtils.toBean(list, PartsRespVO.class)); + } + + @GetMapping("/get-import-template") + @Operation(summary = "获得导入配件模板") + @Parameter(name = "value", description = "文件类型", required = true, example = "0") + public void importTemplate(HttpServletResponse response, @RequestParam("value") @NotEmpty(message = "文件路径不能为空") String value) { + partsService.exportTemplate(response, value); + } + + @PostMapping("/import") + @Operation(summary = "导入配件") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "updateSupport", description = "是否支持更新", example = "true"), + @Parameter(name = "organId", description = "配件所属组织ID") + }) + @PreAuthorize("@ss.hasAnyPermissions('system:accessory:import','base:accessory:import')") + public void importExcel(@RequestParam("file") MultipartFile file, + @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport, + @RequestParam(value = "organId", required = false, defaultValue = "0") Long organId, + HttpServletResponse response) throws Exception { + + ExcelReadUtil excelReadUtil = new ExcelReadUtil(); + PartsExcelListener listener = new PartsExcelListener(); + List list = excelReadUtil.read(file, PartsImportExcelVO.class, listener); + System.out.println(" list = " + list); + if (!excelReadUtil.getFlag()) + ExcelUtils.write(response, IMPORT_TEMPLATE, "配件列表", PartsImportExcelVO.class, list); + else { + if (list.isEmpty()){ + PartsImportExcelVO partsImportExcelVO = PartsImportExcelVO.builder().result("导入失败,请保证导入文件中包含配件数据").build(); + list.add(partsImportExcelVO); + ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PartsImportExcelVO.class, list); + } else { + partsService.importPartsList(list, updateSupport, organId);// 成功,批量导入 + } + } + } + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java new file mode 100644 index 000000000..6c37eac23 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsImportExcelVO.java @@ -0,0 +1,73 @@ +package com.cf.imes.module.manage.controller.admin.parts.vo; + +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 配件导入模板 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class PartsImportExcelVO { + + @ExcelProperty("配件编号") + private String goodsId; + + @ExcelProperty("复合部件") + private String isComposite; + + @ExcelProperty("配件类型") + private String category; + + @ExcelProperty("配件子类") + private String type; + + @ExcelProperty("配件名称") + private String name; + + @ExcelProperty("型号") + private String model; + + @ExcelProperty("颜色") + private String color; + + @ExcelProperty("材质") + private String material; + + @ExcelProperty("单位") + private String unit; + + @ExcelProperty("规格") + private String spec; + + @ExcelProperty("品牌") + private String brand; + + @ExcelProperty("厂家") + private String factor; + + @ExcelProperty("长度")// float(8,3) + private String length; + + @ExcelProperty("宽度")// float(8,3) + private String width; + + @ExcelProperty("厚度") + private String thickness; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("上传结果") + @ExcelIgnore + private String result; + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsPageReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsPageReqVO.java new file mode 100644 index 000000000..847742c22 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsPageReqVO.java @@ -0,0 +1,104 @@ +package com.cf.imes.module.manage.controller.admin.parts.vo; + +import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.validation.NumberValid; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Size; +import java.time.LocalDateTime; + +import static com.cf.imes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 查询 + */ +@Schema(description = "管理后台 - 配件分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PartsPageReqVO extends PageParam { + + @Schema(description = "设计端商品ID", example = "26589") + @Size(max = 32, message = "配件编号长度不能超过32个字符") + private String goodsId; + + @Schema(description = "配件名称", example = "张三") + @Size(max = 64, message = "配件名称长度不能超过64个字符") + private String name; + + @Schema(description = "颜色") + @Size(max = 32, message = "颜色长度不能超过32个字符") + private String color; + + @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板") + @Size(max = 64, message = "材质长度不能超过64个字符") + private String material; + + @Schema(description = "配件类型", example = "2") + @Size(max = 32, message = "配件类型长度不能超过323个字符") + private String category; + + @Schema(description = "配件子类", example = "2") + @Size(max = 64, message = "配件子类长度不能超过64个字符") + private String type; + + @Schema(description = "型号") + @Size(max = 64, message = "配件型号长度不能超过64个字符") + private String model; + + @Schema(description = "规格") + @Size(max = 64, message = "配件规格不能超过64个字符") + private String spec; + + @Schema(description = "宽度") + @NumberValid(name = "宽度") + private Double[] width; + + @Schema(description = "长度") + @NumberValid(name = "长度") + private Double[] length; + + @Schema(description = "厚度") + @NumberValid(name = "厚度") + private Double[] thickness; + + @Schema(description = "品牌") + @Size(max = 64, message = "配件品牌不能超过64个字符") + private String brand; + + @Schema(description = "厂家") + @Size(max = 128, message = "厂家长度不能超过64个字符") + private String factory; + + @Schema(description = "单位") + @Size(max = 32, message = "单位长度不能超过64个字符") + private String unit; + + @Schema(description = "是否复合部件:0 否 1 是") + private Boolean isComposite; + + @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", example = "你说的对") + @Size(max = 255, message = "子配件列表长度不能超过255个字符") + private String subparts; + + @Schema(description = "备注", example = "你说的对") + @Size(max = 255, message = "备注长度不能超过255个字符") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + private Long organId; + + @Schema(description = "排序", example = "ascend") + private String order; + + @Schema(description = "排序字段", example = "id") + private String field; + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java new file mode 100644 index 000000000..9e050e408 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsRespVO.java @@ -0,0 +1,97 @@ +package com.cf.imes.module.manage.controller.admin.parts.vo; + +import com.cf.imes.framework.common.validation.NumberValid; +import com.cf.imes.framework.excel.core.annotations.DictFormat; +import com.cf.imes.module.manage.enums.DictTypeConstants; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Size; + +@Schema(description = "管理后台 - 配件 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PartsRespVO { + + @Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238") + @ExcelProperty("配件 ID") + private Long id; + + @Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589") + @ExcelProperty("设计端商品ID") + private String goodsId; + + @Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("配件名称") + private String name; + + @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 32, message = "颜色长度不能超过32个字符") + private String color; + + @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板") + private String material; + + @Schema(description = "配件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("配件类型") + @DictFormat(DictTypeConstants.PART_CATEGORY) + private String category; + + @Schema(description = "配件子类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("配件子类") + private String type; + + @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("型号") + private String model; + + @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @NumberValid(name = "宽度") + private Double width; + + @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED) + @NumberValid(name = "长度") + private Double length; + + @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @NumberValid(name = "厚度") + private Double thickness; + + @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("规格") + private String spec; + + @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("品牌") + private String brand; + + @Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("厂家") + private String factory; + + @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("单位") + private String unit; + + @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否复合部件:0 否 1 是") + private Boolean isComposite; + + @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @ExcelProperty("是否复合部件:0 否 1 是") + private String subparts; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java new file mode 100644 index 000000000..7b38d7342 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/vo/PartsSaveReqVO.java @@ -0,0 +1,95 @@ +package com.cf.imes.module.manage.controller.admin.parts.vo; + +import com.cf.imes.framework.common.validation.NumberValid; +import com.cf.imes.module.manage.validation.parts.PartsCategoryValid; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 配件 新增/修改 Request VO") +@Data +public class PartsSaveReqVO { + + @Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11238") + private Long id; + + @Schema(description = "设计端商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26589") + @NotEmpty(message = "设计端商品ID不能为空") + @Size(max = 32, message = "设计端商品ID长度不能超过32个字符") + private String goodsId; + + @Schema(description = "配件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "配件名称不能为空") + @Size(max = 64, message = "配件名称长度不能超过64个字符") + private String name; + + @Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 32, message = "颜色长度不能超过32个字符") + @NotEmpty(message = "颜色不能为空") + private String color; + + @Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板不能为空") + @Size(max = 64, message = "材质长度不能超过64个字符") + private String material; + + @Schema(description = "配件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotEmpty(message = "配件类型不能为空") + @Size(max = 32, message = "配件类型长度不能超过32个字符") + @PartsCategoryValid + private String category; + + @Schema(description = "配件子类", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @Size(max = 64, message = "配件子类长度不能超过64个字符") + private String type; + + @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "型号不能为空") + @Size(max = 64, message = "型号长度不能超过64个字符") + private String model; + + @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) + @NumberValid(name = "宽度") + private Double width; + + @Schema(description = "长度", requiredMode = Schema.RequiredMode.REQUIRED) + @NumberValid(name = "长度") + private Double length; + + @Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED) + @NumberValid(name = "厚度") + private Double thickness; + + @Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 64, message = "规格长度不能超过64个字符") + private String spec; + + @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 64, message = "品牌长度不能超过64个字符") + private String brand; + + @Schema(description = "厂家", requiredMode = Schema.RequiredMode.REQUIRED) + @Size(max = 128, message = "厂家长度不能超过128个字符") + private String factory; + + @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "单位不能为空") + @Size(max = 32, message = "单位长度不能超过32个字符") + private String unit; + + @Schema(description = "是否复合部件:0 否 1 是", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否复合部件不能为空") + private Boolean isComposite; + + @Schema(description = "子配件ID列表,复合部件时记录子配件ID,半角逗号分隔", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @Size(max = 255, message = "子配件列表长度不能超过255个字符") + private String subparts; + + @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对") + @Size(max = 255, message = "备注长度不能超过255个字符") + private String remark; + + private Long organId; + +} \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java index 313176260..20c3ed6a5 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java @@ -42,6 +42,8 @@ public class PlateController { @Resource private PlateService plateService; + final String IMPORT_TEMPLATE = "板材导入模板.xlsx"; + @PostMapping("/create") @Operation(summary = "创建板材信息") // @PreAuthorize("@ss.hasPermission('manage:plate:create')") @@ -123,7 +125,7 @@ public class PlateController { .thickness(String.valueOf(18)).brand("鸿达树").spec("2750*1220*18").remark("测试").color("白玉木兰").texture("无").build() ); // 输出 - ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list); + ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list); } @PostMapping("/import") @@ -143,12 +145,12 @@ public class PlateController { List list = plateExcelUtil.read(file, PlateImportExcelVO.class); // 判断文件是否导入成功 if (!plateExcelUtil.getFlag()) - ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list); + ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list); else { if (list.size() == 0){ PlateImportExcelVO plateImportExcelVO = PlateImportExcelVO.builder().result("导入失败,请保证导入文件中包含板材数据").build(); list.add(plateImportExcelVO); - ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list); + ExcelUtils.write(response, IMPORT_TEMPLATE, "板材列表", PlateImportExcelVO.class, list); }else { plateService.importPlateList(list, updateSupport, organId);// 成功,批量导入 } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/parts/PartsDO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/parts/PartsDO.java new file mode 100644 index 000000000..8bd9c78ff --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/parts/PartsDO.java @@ -0,0 +1,101 @@ +package com.cf.imes.module.manage.dal.dataobject.parts; + +import lombok.*; +import com.baomidou.mybatisplus.annotation.*; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; + +/** + * 配件表 parts_{N} DO + * + * @author 晨丰科技 + */ +@TableName("parts") +@KeySequence("parts_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PartsDO extends BaseDO { + + /** + * 配件 ID + */ + @TableId + private Long id; + /** + * 组织id + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long organId; + /** + * 设计端商品ID + */ + private String goodsId; + /** + * 配件名称 + */ + private String name; + /** + * 材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板 + */ + private String material; + /** + * 颜色 + */ + private String color; + /** + * 配件类型 + */ + private String type; + /** + * 配件主类 + */ + private String category; + /** + * 型号 + */ + private String model; + /** + * 宽度 + */ + private Double width; + /** + * 长度 + */ + private Double length; + /** + * 厚度 + */ + private Double thickness; + /** + * 规格 + */ + private String spec; + /** + * 品牌 + */ + private String brand; + /** + * 厂家 + */ + private String factory; + /** + * 单位 + */ + private String unit; + /** + * 是否复合部件:0 否 1 是 + */ + private Boolean isComposite; + /** + * 子配件ID列表,复合部件时记录子配件ID,半角逗号分隔 + */ + private String subparts; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java new file mode 100644 index 000000000..e744fb58f --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java @@ -0,0 +1,106 @@ +package com.cf.imes.module.manage.dal.mysql.parts; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsPageReqVO; +import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 配件表 parts_{N} Mapper + * + * @author 晨丰科技 + */ +@Mapper +public interface PartsMapper extends BaseMapperX { + + default PageResult selectPage(PartsPageReqVO reqVO) { + LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() + .eqIfPresent(PartsDO::getOrganId, reqVO.getOrganId()) + .eqIfPresent(PartsDO::getCategory, reqVO.getCategory()) + .likeIfPresent(PartsDO::getGoodsId, reqVO.getGoodsId()) + .likeIfPresent(PartsDO::getColor, reqVO.getColor()) + .likeIfPresent(PartsDO::getType, reqVO.getType()) + .likeIfPresent(PartsDO::getName, reqVO.getName()) + .likeIfPresent(PartsDO::getMaterial, reqVO.getMaterial()) + .likeIfPresent(PartsDO::getModel, reqVO.getModel()) + .likeIfPresent(PartsDO::getSpec, reqVO.getSpec()) + .likeIfPresent(PartsDO::getBrand, reqVO.getBrand()) + .likeIfPresent(PartsDO::getFactory, reqVO.getFactory()) + .likeIfPresent(PartsDO::getUnit, reqVO.getUnit()) + .eqIfPresent(PartsDO::getIsComposite, reqVO.getIsComposite()) + .betweenIfPresent(PartsDO::getWidth, reqVO.getWidth()) + .betweenIfPresent(PartsDO::getLength, reqVO.getLength()) + .betweenIfPresent(PartsDO::getThickness, reqVO.getThickness()) + .likeIfPresent(PartsDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(PartsDO::getCreateTime, reqVO.getCreateTime()); + + if (reqVO.getOrder() == null) { + queryWrapper.orderByDesc(PartsDO::getGoodsId); + }else { + if (reqVO.getOrder().equals("ascend")) { + switch (reqVO.getField()) { + case "goodsId" -> queryWrapper.orderByAsc(PartsDO::getGoodsId); + case "isComposite" -> queryWrapper.orderByAsc(PartsDO::getIsComposite); + case "category" -> queryWrapper.orderByAsc(PartsDO::getCategory); + case "type" -> queryWrapper.orderByAsc(PartsDO::getType); + case "name" -> queryWrapper.orderByAsc(PartsDO::getName); + case "model" -> queryWrapper.orderByAsc(PartsDO::getModel); + case "material" -> queryWrapper.orderByAsc(PartsDO::getMaterial); + case "color" -> queryWrapper.orderByAsc(PartsDO::getColor); + case "unit" -> queryWrapper.orderByAsc(PartsDO::getUnit); + case "spec" -> queryWrapper.orderByAsc(PartsDO::getSpec); + case "brand" -> queryWrapper.orderByAsc(PartsDO::getBrand); + case "factory" -> queryWrapper.orderByAsc(PartsDO::getFactory); + case "width" -> queryWrapper.orderByAsc(PartsDO::getWidth); + case "length" -> queryWrapper.orderByAsc(PartsDO::getLength); + case "thickness" -> queryWrapper.orderByAsc(PartsDO::getThickness); + default -> { + // default不排序 + } + } + }else if (reqVO.getOrder().equals("descend")) { + switch (reqVO.getField()) { + case "goodsId" -> queryWrapper.orderByDesc(PartsDO::getGoodsId); + case "isComposite" -> queryWrapper.orderByDesc(PartsDO::getIsComposite); + case "category" -> queryWrapper.orderByDesc(PartsDO::getCategory); + case "type" -> queryWrapper.orderByDesc(PartsDO::getType); + case "name" -> queryWrapper.orderByDesc(PartsDO::getName); + case "model" -> queryWrapper.orderByDesc(PartsDO::getModel); + case "material" -> queryWrapper.orderByDesc(PartsDO::getMaterial); + case "color" -> queryWrapper.orderByDesc(PartsDO::getColor); + case "unit" -> queryWrapper.orderByDesc(PartsDO::getUnit); + case "spec" -> queryWrapper.orderByDesc(PartsDO::getSpec); + case "brand" -> queryWrapper.orderByDesc(PartsDO::getBrand); + case "factory" -> queryWrapper.orderByDesc(PartsDO::getFactory); + case "width" -> queryWrapper.orderByDesc(PartsDO::getWidth); + case "length" -> queryWrapper.orderByDesc(PartsDO::getLength); + case "thickness" -> queryWrapper.orderByDesc(PartsDO::getThickness); + default -> { + // default不排序 + } + } + } + } + + return selectPage(reqVO, queryWrapper); + } + + default PartsDO selectById(Long id , Long organId) { + return selectOne(PartsDO::getId, id, PartsDO::getOrganId, organId); + } + + default PartsDO selectByGoodID(String goodId , Long organId) { + return selectOne(PartsDO::getGoodsId, goodId, PartsDO::getOrganId, organId); + } + + default PartsDO selectExceptGoodID(Long id, String goodId , Long organId) { + return selectOne(new LambdaQueryWrapperX() + .ne(PartsDO::getId, id) + .eq(PartsDO::getGoodsId, goodId) + .eq(PartsDO::getOrganId, organId)); + } + +} \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java new file mode 100644 index 000000000..5d4fa1f80 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsExcelListener.java @@ -0,0 +1,211 @@ +package com.cf.imes.module.manage.service.parts; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.nacos.common.utils.StringUtils; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsImportExcelVO; +import com.cf.imes.module.manage.enums.parts.CategoryEnum; +import com.cf.imes.module.manage.enums.parts.ObjectEnum; +import com.cf.imes.module.manage.enums.parts.WhetherEnum; +import com.cf.imes.module.manage.util.file.ExcelListener; +import lombok.extern.slf4j.Slf4j; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * 配件 导入监听器 + */ +@Slf4j +public final class PartsExcelListener extends ExcelListener { + + private static final String ZERO = "0"; + + /** + * 自定义用于暂时存储data + * 可以通过实例获取该值 + */ + private List datas = new ArrayList<>(); + + private boolean flag = true; + + private Map valueMap = new HashMap<>(); + + // 非空判断,错误写入;不为空则判断字符串长度是否超过 + private void isEmptyAndAdd(Supplier getter, Consumer setter,String msg, int maxLength) { + String value = getter.get(); + if (StringUtils.isEmpty(value)) { + setter.accept(msg + "不可为空"); + this.flag = false; + } else { // 字符长度判断 + isLong(value, setter, maxLength, msg); + } + } + + private void isEmpty(Supplier getter, Consumer setter,String msg) { + String value = getter.get(); + if (StringUtils.isEmpty(value)) { + setter.accept(msg + "不可为空"); + this.flag = false; + } + } + + //不为空时,判断长度 + private void isNotEmptyAndAdd(Supplier getter, Consumer setter,String msg, int maxLength) { + String value = getter.get(); + if (StringUtils.isNotEmpty(value)) { + isLong(value, setter, maxLength, msg); + } + } + + // 非空判断,并判断枚举值是否正确 + private & ObjectEnum> void isEmptyAndEnumAdd(Supplier getter, Consumer setter, String msg, Class enumClass) { + String value = getter.get(); + if (StringUtils.isEmpty(value)) { + setter.accept(msg + "不可为空"); + this.flag = false; + } else { + boolean isValid = false; + for (T enumValue : enumClass.getEnumConstants()) { + if (Objects.equals(enumValue.getValue(), value)) { + isValid = true; + break; + } + } + if (!isValid) { + setter.accept(msg + "请使用规范标识填写表格"); + this.flag = false; + } + } + } + + // 非空时判断字符串是否可以转换为Double,并判断整数位与小数位是否符合长度要求 + private void isEmptyAndDoubleAdd(Supplier getter, Consumer setter, String msg, int integerLength, int decimalLength) { + String value = getter.get(); + if (StringUtils.isNotEmpty(value)) { + // 判断是否可以转换 + try { + Double d = Double.parseDouble(value); + if (d < Double.parseDouble(ZERO)) { + setter.accept(msg + "必须大于0"); + } else { + // 处理科学计数法,保留小数点后四位 + DecimalFormat decimalFormat = new DecimalFormat("#.####"); + String valueString = decimalFormat.format(d); + + String[] split = valueString.split("\\."); + // 获取小数点前的位数 + int integerPartLength = split[0].length(); + // 获取小数点后的位数 + int fractionalPartLength = 0; + if (split.length > 2) { + fractionalPartLength = split[1].length(); + } + + if (integerPartLength > integerLength || fractionalPartLength > decimalLength) { + setter.accept(msg + "长度不合法,总长度不超过8位,小数点后不超过3位"); + } + } + } catch (NumberFormatException e) { + setter.accept(msg + "必须为数字"); + this.flag = false; + } + + } + } + // 判断字符串长度是否过长 + private void isLong(String value, Consumer setter, int maxLength, String msg) { + if (value.length() > maxLength) { + setter.accept(msg + "长度不能超过" + maxLength + "个字符"); + this.flag = false; + } + } + // 结果数据生成 + private String setResult(String result, String value) { + if (StringUtils.isEmpty(result)) { + return value; + } else { + return result + "," + value; + } + } + + /** + * 每解析一行都会回调invoke()方法 + * + * @param data 读取后的数据对象 + * @param context 内容 + */ + @Override + public void invoke(PartsImportExcelVO data, AnalysisContext context) { + isEmptyAndAdd(data::getGoodsId, data::setResult, setResult(data.getResult(), "编号"), 32); + isEmptyAndEnumAdd(data::getIsComposite, data::setResult, setResult(data.getResult(), "是否复合部件"), WhetherEnum.class); + isEmptyAndEnumAdd(data::getCategory, data::setResult, setResult(data.getResult(), "类型"), CategoryEnum.class); + isNotEmptyAndAdd(data::getCategory, data::setResult, setResult(data.getResult(), "类型"),32); + isNotEmptyAndAdd(data::getType, data::setResult, setResult(data.getResult(), "子类型"), 64); + isEmptyAndAdd(data::getName, data::setResult, setResult(data.getResult(), "名称"), 64); + isEmptyAndAdd(data::getModel, data::setResult, setResult(data.getResult(), "型号"), 64); + isEmptyAndAdd(data::getColor, data::setResult, setResult(data.getResult(), "颜色"), 64); + isEmptyAndAdd(data::getMaterial, data::setResult, setResult(data.getResult(), "材质"), 64); + isEmptyAndAdd(data::getUnit, data::setResult, setResult(data.getResult(), "单位"), 32); + isNotEmptyAndAdd(data::getSpec, data::setResult, setResult(data.getResult(), "规格"), 64); + isNotEmptyAndAdd(data::getBrand, data::setResult, setResult(data.getResult(), "品牌"), 64); + isNotEmptyAndAdd(data::getFactor, data::setResult, setResult(data.getResult(), "厂家"), 128); + isEmptyAndDoubleAdd(data::getLength, data::setResult, setResult(data.getResult(), "长度"), 5 , 3); + isEmptyAndDoubleAdd(data::getWidth, data::setResult, setResult(data.getResult(), "宽度"), 5 , 3); + isEmptyAndDoubleAdd(data::getThickness, data::setResult, setResult(data.getResult(), "厚度"), 5 , 3); + isNotEmptyAndAdd(data::getRemark, data::setResult, setResult(data.getResult(), "备注"), 255); + + // 当为封边的时候,一定需要 + if (StringUtils.isNotEmpty(data.getCategory())) { + if (data.getCategory().equals(CategoryEnum.EDGING.getValue())) { + isEmpty(data::getThickness, data::setResult, setResult(data.getResult(), "厚度")); + isEmpty(data::getWidth, data::setResult, setResult(data.getResult(), "宽度")); + } + } + + if (data.getResult() != null) + data.setResult(data.getResult().replace("null,", "")); + valueMap.put(context.getCurrentRowNum(), data.getResult()); + datas.add(data); + } + + /** + * 读取完后操作 + * + * @param context + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + if (this.flag) + log.info("PlateExcelListener 所有数据读取完成"); + } + + /** + * 返回数据 + * + * @return 返回读取的数据集合 + **/ + public List getDates() { + return datas; + } + + /** + * 返回读取结果 + * + * @return 是否读取成功 + **/ + public boolean getFlag() { + return flag; + } + + /** + * 返回错误信息 + * + * @return String + **/ + public Map getValueMap() { + return valueMap; + } +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java new file mode 100644 index 000000000..c64014565 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java @@ -0,0 +1,84 @@ +package com.cf.imes.module.manage.service.parts; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.*; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsImportExcelVO; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsPageReqVO; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsSaveReqVO; +import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportExcelVO; +import com.cf.imes.module.manage.controller.admin.plate.vo.plate.PlateImportRespVO; +import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; +import org.springframework.boot.system.ApplicationHome; + +import java.io.File; +import java.util.List; + +/** + * 配件表 parts_{N} Service 接口 + * + * @author 晨丰科技 + */ +public interface PartsService { + + /** + * 创建配件表 parts_{N} + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long create(@Valid PartsSaveReqVO createReqVO); + + /** + * 更新配件表 parts_{N} + * + * @param updateReqVO 更新信息 + */ + void update(@Valid PartsSaveReqVO updateReqVO); + + /** + * 删除配件表 parts_{N} + * + * @param id 编号 + */ + void delete(Long id, Long organId); + + /** + * 获得配件表 parts_{N} + * + * @param id 编号 + * @return 配件表 parts_{N} + */ + PartsDO get(Long id, Long organId); + + /** + * 获得配件表 parts_{N}分页 + * + * @param pageReqVO 分页查询 + * @return 配件表 parts_{N}分页 + */ + PageResult getPage(PartsPageReqVO pageReqVO); + + /** + * 生产导入文件模板下载 + */ + void exportTemplate(HttpServletResponse response, String value); + + /** + * 批量导入配件 + * + * @param importParts 导入配件列表 + * @param isUpdateSupport 是否支持更新 + */ + void importPartsList(List importParts, boolean isUpdateSupport , Long organId); + + + default String getSavePath() { + ApplicationHome applicationHome = new ApplicationHome(this.getClass()); + + // 保存目录位置根据项目需求可随意更改 + return applicationHome.getDir().getAbsolutePath() + File.separator + "type"; + + } +} \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java new file mode 100644 index 000000000..2c3a960d5 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java @@ -0,0 +1,209 @@ +package com.cf.imes.module.manage.service.parts; + +import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.organ.core.aop.OrganIgnore; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsImportExcelVO; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsPageReqVO; +import com.cf.imes.module.manage.controller.admin.parts.vo.PartsSaveReqVO; +import com.cf.imes.module.manage.util.file.FileHelperUtil; +import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; +import com.cf.imes.module.manage.dal.mysql.parts.PartsMapper; +import com.cf.imes.module.system.api.organ.OrganApi; +import com.cf.imes.module.system.api.permission.PermissionApi; +import com.cf.imes.module.system.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; + + +import java.util.ArrayList; +import java.util.List; + +import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; +import static com.cf.imes.module.manage.enums.ErrorCodeConstants.PARTS_GOOD_ID_EXISTS; +import static com.cf.imes.module.manage.enums.ErrorCodeConstants.PARTS_NOT_EXISTS; + + +/** + * 配件表 parts_{N} Service 实现类 + * + * @author 晨丰科技 + */ +@Service +@Validated +public class PartsServiceImpl implements PartsService { + + @Resource + private PartsMapper partsMapper; + + @Resource + private OrganApi organApi; + + @Resource + private PermissionApi permissionApi; + + private final static String BASE_PARTS_IMPORT_PERMISSION = "base:accessory:import"; // 导入板材 + private final static String BASE_PARTS_DELETE_PERMISSION = "base:accessory:delete"; // 删除板材信息 + private final static String BASE_PARTS_CREATE_PERMISSION = "base:accessory:create"; // 创建板材信息 + private final static String BASE_PARTS_UPDATE_PERMISSION = "base:accessory:update"; // 更新板材信息 + private final static String BASE_PARTS_QUERY_PERMISSION = "base:accessory:query"; // 获得板材信息 + + + @Override + @OrganIgnore + public Long create(PartsSaveReqVO createReqVO) { + + PartsDO partsDO = BeanUtils.toBean(createReqVO, PartsDO.class); + Long organId = getOrganId(BASE_PARTS_CREATE_PERMISSION, getLoginUser().getId(), partsDO.getOrganId()); + partsDO.setOrganId(organId).setIsComposite(false); + // 判断是否存在--- goodsId + if (validateExistsByGoodsId(partsDO.getGoodsId(), organId)) { + throw exception(PARTS_GOOD_ID_EXISTS); + } + + partsMapper.insert(partsDO); + // 返回 + return partsDO.getId(); + } + + @Override + @OrganIgnore + @Transactional(rollbackFor = Exception.class) + public void update(PartsSaveReqVO updateReqVO) { + Long organId = getOrganId(BASE_PARTS_UPDATE_PERMISSION, getLoginUser().getId(), updateReqVO.getOrganId()); + // 校验id存在 + boolean index = validateExistsById(updateReqVO.getId(),organId); + + if (!index) { + throw exception(PARTS_NOT_EXISTS); + } + + // 校验goodsId是否存在 + if (!validateExistsExceptGoodsId(updateReqVO.getId(),updateReqVO.getGoodsId(),organId)) { + throw exception(PARTS_GOOD_ID_EXISTS); + } + // 更新 + updateReqVO.setOrganId(organId); + PartsDO updateObj = BeanUtils.toBean(updateReqVO, PartsDO.class); + partsMapper.updateById(updateObj); + } + + @Override + public void delete(Long id, Long organId) { + // 校验存在 + if (!validateExistsById(id, getOrganId(BASE_PARTS_DELETE_PERMISSION, getLoginUser().getId(), organId))) { + throw exception(PARTS_NOT_EXISTS); + } + + // 删除 + partsMapper.deleteById(id); + } + + private boolean validateExistsById(Long id, Long organId) { + if (partsMapper.selectById(id, organId) == null) { + return false; + } + return true; + } + + private boolean validateExistsByGoodsId(String goodsId, Long organId) { + if (partsMapper.selectByGoodID(goodsId, organId) == null) { + return false; + } + return true; + } + + private boolean validateExistsExceptGoodsId(Long id, String goodsId, Long organId) { + if (partsMapper.selectExceptGoodID(id, goodsId, organId) == null) { // 不存在相同的goods_id + return true; + } + return false; + } + + @Override + public PartsDO get(Long id, Long organId) { + organId = getOrganId(BASE_PARTS_QUERY_PERMISSION, getLoginUser().getId(), organId); + return partsMapper.selectById(id, organId); + } + + @Override + public PageResult getPage(PartsPageReqVO pageReqVO) { + pageReqVO.setOrganId(getOrganId(BASE_PARTS_QUERY_PERMISSION, getLoginUser().getId(), pageReqVO.getOrganId())); + + return partsMapper.selectPage(pageReqVO); + } + + @Override + public void exportTemplate(HttpServletResponse response, String value) { + String rootPath = getSavePath(); + FileHelperUtil.getFile(rootPath, response, value); + } + + @Override + public void importPartsList(List importParts, boolean isUpdateSupport, Long organId) { + + // 组织id + organId = getOrganId(BASE_PARTS_IMPORT_PERMISSION, getLoginUser().getId(), organId); + + // 批量插入集合 + List insertList = new ArrayList<>(); + // 批量更新集合 + List updateList = new ArrayList<>(); + + Long finalOrganId = organId; + + importParts.forEach(importPart -> { + // 判断如果不存在,在进行插入 + PartsDO existPlate = partsMapper.selectByGoodID(importPart.getGoodsId(), finalOrganId); + if (existPlate == null) { // 不存在 + insertList.add(BeanUtils.toBean(importPart, PartsDO.class).setOrganId(finalOrganId)); + return; + } + // 判断是否允许更新 + if (!isUpdateSupport) { + PartsDO partsDO = BeanUtils.toBean(importPart, PartsDO.class).setOrganId(finalOrganId).setId(existPlate.getId()); + updateList.add(partsDO); + } + }); +// 批量插入,批量更新 + if (insertList.size() > 0) { + partsMapper.insertBatch(insertList); + } + if (updateList.size() > 0) { + partsMapper.updateBatch(updateList); + } + } + + private void validateOrganExists(Long organId) { + CommonResult index = organApi.validOrgan(organId); + if (!index.isSuccess()) { + throw exception(ErrorCodeConstants.ORGAN_NOT_EXISTS); + } + } + + // 组织id返回 + private Long getOrganId(String type, Long userId, Long organId) { + + boolean hasPermission = permissionApi.hasRoles(userId, type).getData(); + + Long organIdDefault = OrganContextHolder.getOrganId(); + + if (hasPermission && organId != null && organId != 0) { + + validateOrganExists(organId); + + organIdDefault = organId; + } + + return organIdDefault; + } + +} \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java index eed41e26b..c7a954174 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/remainplaten/RemainPlateServiceImpl.java @@ -6,8 +6,8 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateSav import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO; import com.cf.imes.module.manage.dal.mysql.remainplaten.RemainPlateMapper; import com.cf.imes.framework.common.enums.DeletedCodeEnum; -import com.cf.imes.module.manage.enums.RemainPlateStatusEnum; -import com.cf.imes.module.manage.enums.RemainPlateUseTypeEnum; +import com.cf.imes.module.manage.enums.remainPlate.RemainPlateStatusEnum; +import com.cf.imes.module.manage.enums.remainPlate.RemainPlateUseTypeEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/ExcelListener.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/ExcelListener.java new file mode 100644 index 000000000..701ddcbb5 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/ExcelListener.java @@ -0,0 +1,68 @@ +package com.cf.imes.module.manage.util.file; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * 文件读取监听 + */ +public class ExcelListener extends AnalysisEventListener { + /** + * 自定义用于暂时存储data + * 可以通过实例获取该值 + */ + private List dates = new ArrayList<>(); + + private boolean flag = true; + + private Map valueMap = new HashMap<>(); + + + @Override + public void invoke(T t, AnalysisContext analysisContext) { + + } + + /** + * 读取完后操作 + * + * @param context + */ + @Override + public void doAfterAllAnalysed(AnalysisContext context) { + + } + + /** + * 返回数据 + * + * @return 返回读取的数据集合 + **/ + public List getDates() { + return dates; + } + + /** + * 返回读取结果 + * + * @return 是否读取成功 + **/ + public boolean getFlag() { + return flag; + } + + /** + * 返回错误信息 + * + * @return String + **/ + public Map getValueMap() { + return valueMap; + } +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/ExcelReadUtil.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/ExcelReadUtil.java new file mode 100644 index 000000000..19259f31a --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/ExcelReadUtil.java @@ -0,0 +1,61 @@ +package com.cf.imes.module.manage.util.file; + +import com.alibaba.excel.EasyExcelFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +/** + * 文件读取 + */ +@Slf4j +public final class ExcelReadUtil{ + + private String value; + private boolean flag; + + public List read(MultipartFile file, Class head, ExcelListener listener) throws IOException { + value = ""; + flag = true; + + if (file.isEmpty()) { + value = "文件为空"; + flag = false; + throw new IOException("文件为空"); + } else if (!(file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls"))) { + value = "文件格式不正确"; + flag = false; + throw new IOException("文件格式不正确"); + } else if (file.getSize() > 1024 * 1024 * 10) { + value = "文件大小超过 10M"; + flag = false; + throw new IOException("文件大小超过 10M"); + } else if (file.getSize() == 0) { + value = "文件大小为 0"; + flag = false; + throw new IOException("文件大小为 0"); + } else { + EasyExcelFactory.read(file.getInputStream(), head, listener) + .autoCloseStream(true) // 不要自动关闭,交给 Servlet 自己处理 + .headRowNumber(1).sheet(0).doRead(); + //获取读取的数据 + List list = listener.getDates(); + flag = listener.getFlag(); + if (!flag) { + value = "导入数据有误"; + } + return list; + } + } + + public String getValue() { + return value; + } + + public boolean getFlag() { + return flag; + } + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/FileHelperUtil.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/FileHelperUtil.java new file mode 100644 index 000000000..6cfba6e11 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/util/file/FileHelperUtil.java @@ -0,0 +1,38 @@ +package com.cf.imes.module.manage.util.file; + +import org.springframework.boot.system.ApplicationHome; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; + +/** + * 文件上传下载相工具类 + */ +public class FileHelperUtil { + + // 文件下载 + public static void getFile(String route, HttpServletResponse response, String value) { + // path是指想要下载的文件的路径 + File file = new File(route + File.separator + value); + // 获取文件名 + String filename = file.getName(); + // 将文件写入输入流 + try (FileInputStream fis = new FileInputStream(file)) { + byte[] buffer = new byte[fis.available()]; + fis.read(buffer); + fis.close(); + + response.reset(); + response.setCharacterEncoding("UTF-8"); + response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); + response.addHeader("Content-Length", "" + file.length()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + response.setContentType("application/octet-stream"); + outputStream.write(buffer); + outputStream.flush(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/common/CommonStatusValidator.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/common/CommonStatusValidator.java index 0a4423210..a74568c20 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/common/CommonStatusValidator.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/common/CommonStatusValidator.java @@ -2,7 +2,7 @@ package com.cf.imes.module.manage.validation.common; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; -import com.cf.imes.module.manage.enums.RemainPlateStatusEnum; +import com.cf.imes.module.manage.enums.remainPlate.RemainPlateStatusEnum; /** * 状态校验 diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/parts/PartsCategoryValid.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/parts/PartsCategoryValid.java new file mode 100644 index 000000000..dc50473a9 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/parts/PartsCategoryValid.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.manage.validation.parts; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.*; + +/** + * 配件主类校验注解 + */ +@Target({ + ElementType.FIELD, +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = {PartsCategoryValidator.class} +) +public @interface PartsCategoryValid { + + String message() default "配件主类不合法,1:封边条,2:五金,3:组件"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/parts/PartsCategoryValidator.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/parts/PartsCategoryValidator.java new file mode 100644 index 000000000..c6f04af59 --- /dev/null +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/parts/PartsCategoryValidator.java @@ -0,0 +1,28 @@ +package com.cf.imes.module.manage.validation.parts; + +import cn.hutool.core.util.ObjectUtil; +import com.cf.imes.module.manage.enums.parts.CategoryEnum; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.Objects; + +/** + * 配件主类校验 + */ +public class PartsCategoryValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (ObjectUtil.isNull(value)) { + return true; + } + for (CategoryEnum categoryEnum : CategoryEnum.values()) { + if (Objects.equals(categoryEnum.getValue(), value)) { + return true; + } + } + return false; + } + +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/placeStyle/PlaceStyleValidator.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/placeStyle/PlaceStyleValidator.java index b3a72a304..b775e29c5 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/placeStyle/PlaceStyleValidator.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/placeStyle/PlaceStyleValidator.java @@ -1,6 +1,6 @@ package com.cf.imes.module.manage.validation.placeStyle; -import com.cf.imes.module.manage.enums.RemainPlatePlaceStyleEnum; +import com.cf.imes.module.manage.enums.remainPlate.RemainPlatePlaceStyleEnum; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/type/TypeFieldValidator.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/type/TypeFieldValidator.java index ef9e77ae8..ab689ff54 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/type/TypeFieldValidator.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/validation/type/TypeFieldValidator.java @@ -1,6 +1,6 @@ package com.cf.imes.module.manage.validation.type; -import com.cf.imes.module.manage.enums.RemainPlateUseTypeEnum; +import com.cf.imes.module.manage.enums.remainPlate.RemainPlateUseTypeEnum; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx new file mode 100644 index 000000000..5a3f0aeb5 Binary files /dev/null and b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_parts_add.xlsx differ diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 1657c81d9..c17b953c6 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -243,6 +243,7 @@ public class ErrorCodeConstants { public static final ErrorCode PROCESS_GROUP_NAME_EXISTS = new ErrorCode(1_002_032_003, "工序名称已存在"); public static final ErrorCode PROCESS_GROUP_CUTTING_ERROR = new ErrorCode(1_002_032_004, "开料工序类型已经存在,禁止重复"); public static final ErrorCode PROCESS_GROUP_PACKING_ERROR = new ErrorCode(1_002_032_005, "打包工序类型已经存在,禁止重复"); + public static final ErrorCode PROCESS_ITEM_NOT_EXISTS = new ErrorCode(1_002_032_006, "工序信息不存在"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java index b3c63d083..2a9c349f8 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/process/ProcessGroupServiceImpl.java @@ -65,9 +65,11 @@ public class ProcessGroupServiceImpl implements ProcessGroupService { // 判断重复 int isCutting = 0; int isPacking = 0; - if (createReqVO.getItems() != null) { + if (createReqVO.getItems() == null) { + throw exception(PROCESS_ITEM_NOT_EXISTS); + } List list = cuttingItems(createReqVO.getItems()); - if (list.size() > 0) { + if (!list.isEmpty()) { for (String item : list) { ProcessDO process = processMapper.selectOneById(Long.valueOf(item), OrganContextHolder.getOrganId()); if (process.getType() == ProcessTypeEnum.TYPE_ONE.getStatus()){ @@ -78,7 +80,7 @@ public class ProcessGroupServiceImpl implements ProcessGroupService { } } } - } + if (isCutting > 1){ throw exception(PROCESS_GROUP_CUTTING_ERROR); } diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml index 99c0250e2..45e9078ac 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application-local.yaml @@ -77,6 +77,9 @@ spring: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 elasticsearch: uris: 192.168.1.205:9200 + security-http-ssl-enable: false + username: elastic + password: admin. --- #################### 定时任务相关配置 #################### xxl: