diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/goods/dto/GoodsDTO.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/goods/dto/GoodsDTO.java deleted file mode 100644 index 069e31e9f..000000000 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/goods/dto/GoodsDTO.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.cf.imes.module.executor.api.goods.dto; - - -import lombok.Data; - -import java.math.BigDecimal; - -@Data -public class GoodsDTO { - - /** - * 主键 - */ - private Long id; - - // 组织 ID - private Long organId; - - /** - * 生产单号 - */ - private Long orderId; - /** - * 设计端商品ID - */ - private String rawGoodsId; - /** - * 商品 ID - */ - private String goodsId; - /** - * 商品名称 - */ - private String goodsName; - /** - * 材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板 - */ - private String material; - /** - * 纹路 0 正纹 1 可翻转 2 反纹 - */ - private Boolean texture; - /** - * 颜色 - */ - private String color; - /** - * 宽度 - */ - private BigDecimal width; - /** - * 高度 - */ - private BigDecimal height; - /** - * 厚度 - */ - private BigDecimal thickness; - /** - * 价格 - */ - private BigDecimal price; - /** - * 品牌 - */ - private String brand; - /** - * 规格 - */ - private String spec; - /** - * 备注 - */ - private String remark; - /** - * 是否删除 - */ - private Boolean deleted; - - -} diff --git a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApi.java b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApi.java index 743ec360b..e7cda9bbf 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApi.java +++ b/cf-module-prod-executor/cf-module-prod-executor-api/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApi.java @@ -10,6 +10,8 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + @FeignClient(name = ApiConstants.NAME) // TODO 晨丰:fallbackFactory = @Tag(name = "RPC 服务 - 多组织") public interface OrderPlanApi { @@ -22,4 +24,102 @@ public interface OrderPlanApi { @Parameter(name = "machineId", description = "机台ID", required = true, example = "1024") CommonResult getOrderPlan(@RequestParam("machineId") Long id); + + + + /* + * 机台数据源数据查询 + * + * */ + + @GetMapping(PREFIX +"/apiDataGetPlan") + @Operation(summary = "获取当前排单对应的生产单信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiDataGetPlan(@RequestParam("planId") Long planId,@RequestParam("filed") String filed); + + + + + @GetMapping(PREFIX +"/apiGetGoods") + @Operation(summary = "查询当前排单对应的大板信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String getGoods(@RequestParam("planId") Long planId,@RequestParam("filed") String filed); + + + + + @GetMapping(PREFIX +"/apiGetOrders") + @Operation(summary = "查询当前排单对应的业务员和拆单员信息") +// @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + List apiGetOrders(@RequestParam("planId") Long planId ,@RequestParam("isSale") Boolean isSale); + + + + + @GetMapping(PREFIX +"/apiGetPlan") + @Operation(summary = "查询当前排单的信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String getPlan(@RequestParam("planId") Long planId,@RequestParam("filed") String filed); + + + + + @GetMapping(PREFIX +"/apiGetESPlan") + @Operation(summary = "查询ES中的排单优化生产信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetEsPlan(@RequestParam("planId") Long planId,@RequestParam("fields") List fields); + + + + + @GetMapping(PREFIX +"/apiGetPlanRemainPlate") + @Operation(summary = "查询排单中的余料板信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetPlanRemainPlate(@RequestParam("planId") Long planId,@RequestParam("field") String field); + + + + + @GetMapping(PREFIX +"/apiGetPlanPlate") + @Operation(summary = "查询排单中的板材信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetPlanPlate(@RequestParam("planId") Long planId,@RequestParam("field") String field); + + + + + @GetMapping(PREFIX +"/apiGetESPlate") + @Operation(summary = "查询ES中的板材信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetEsPlate(@RequestParam("planId") Long planId,@RequestParam("fields") List fields); + + + + + @GetMapping(PREFIX +"/apiGetPlanBodyOrRoom") + @Operation(summary = "查询排单中的板材房间信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetPlanBodyOrRoom(@RequestParam("planId") Long planId,@RequestParam("field") String field); + + + + + @GetMapping(PREFIX +"/apiGetPlanGroup") + @Operation(summary = "查询排单中的板材加工组信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetPlanGroup(@RequestParam("planId") Long planId,@RequestParam("field") String field); + + + + @GetMapping(PREFIX +"/apiGetPlanParts") + @Operation(summary = "查询排单中的配件信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetPlanParts(@RequestParam("planId") Long planId,@RequestParam("field") String field); + + + @GetMapping(PREFIX +"/apiGetESParts") + @Operation(summary = "查询ES中的配件备注信息") + @Parameter(name = "planId", description = "排单ID", required = true, example = "1024") + String apiGetEsParts(@RequestParam("planId") Long planId,@RequestParam("fields") List fields); + } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java index 92dc3c9b8..d6631a96d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/api/plan/OrderPlanApiImpl.java @@ -1,20 +1,57 @@ package com.cf.imes.module.executor.api.plan; +import cn.hutool.core.collection.CollectionUtil; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch._types.FieldValue; +import co.elastic.clients.elasticsearch.core.SearchRequest; +import co.elastic.clients.elasticsearch.core.SearchResponse; +import co.elastic.clients.elasticsearch.core.search.Hit; +import com.alibaba.fastjson.JSON; +import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.util.json.JsonUtils; +import com.cf.imes.module.executor.api.plan.vo.OrderGroupRespVO; +import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark; +import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; +import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; +import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO; +import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; +import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; +import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; +import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; +import com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO; +import com.cf.imes.module.executor.dal.mysql.goods.GoodsMapper; +import com.cf.imes.module.executor.dal.mysql.order.OrderMapper; +import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; +import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; +import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; +import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper; import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper; +import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; +import com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; - +import java.io.IOException; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; +import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; +import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; @RestController // 提供 RESTful API 接口,给 Feign 调用 @Validated +@Slf4j public class OrderPlanApiImpl implements OrderPlanApi{ @@ -22,6 +59,52 @@ public class OrderPlanApiImpl implements OrderPlanApi{ private PlanMapper planMapper; + @Resource + private GoodsMapper goodsMapper; + + + @Resource + private OrderMapper orderMapper; + + + @Resource + private RemainPlateMapper remainPlateMapper; + + + @Resource + private PlateMapper plateMapper; + + + @Resource + private OrderItemMapper orderItemMapper; + + + @Resource + private OrderBodyMapper orderBodyMapper; + + @Resource + private OrderGroupMapper orderGroupMapper; + + @Resource + private OrderPartsMapper orderPartsMapper; + + + @Resource + private ElasticsearchClient elasticsearchClient; + + + public static final String SEPARATE = "select"; + + + public static final String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model"; + + + public static final String ORDER_PLATE_MODEL = "imes_order_plate_model"; + + + public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model"; + + @Override public CommonResult getOrderPlan(Long machineId) { @@ -36,4 +119,487 @@ public class OrderPlanApiImpl implements OrderPlanApi{ } + + + /* + * 机台数据源数据查询 + * + * */ + + @Override + public String apiDataGetPlan(Long planId,String filed) { + + PlanDO planDOS = planMapper.selectById(planId); + + List orderIds = JSON.parseArray(planDOS.getOrderNos()).toJavaList(Long.class); + + + return toJsonString(orderMapper.selectOrderDataSource(conversion(filed),orderIds,getUserOrganId())); + } + + + + @Override + public String getGoods(Long planId,String filed) { + + + List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); + + List goodsIds = optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getGoodsId).toList(); + + + JsonNode jsonNode = JsonUtils.parseTree(JsonUtils.toJsonString(optimizeBoardModelDOS)); + + + filed = filed.replace("place_block_number",""); + + + String filed2 = "place_block_number".equals(filed) ? ",{placeBlockNumber:"+jsonNode.get("placeBlockNumber").asLong()+"}]" : ""; + + +// String sql = " select from order_goods where organ_id = #{organId} and deleted = false"; +// +// sql = sql.replace("#{organId}", getUserOrganId() + ""); + + + List goodsDO = goodsMapper.selectPlanGoodsDataSource(conversion(filed),planId,getUserOrganId()); + + + + return "".equals(filed2) ? toJsonString(goodsDO) : toJsonString(goodsDO).replace("]", "") + filed2; + + } + + + + + @Override + public List apiGetOrders(Long planId,Boolean isSale) { + + PlanDO planDOS = planMapper.selectById(planId); + + List orderIds = JSON.parseArray(planDOS.getOrderNos()).toJavaList(Long.class); + + + return isSale ? orderMapper.selectBatchIds(orderIds).stream().map(OrderDO::getSalesman).distinct().toList() + : orderMapper.selectBatchIds(orderIds).stream().map(OrderDO::getCreator).distinct().toList(); + + + } + + + + @Override + public String getPlan(Long planId,String filed) { + + +// String sql = " select from order_plan where id =#{planId} and organ_id = #{organId} and deleted = false"; +// +// sql = sql.replace("#{organId}", getUserOrganId() + "").replace("#{planId}", planId + ""); +// +// String toInsert = filed.replaceAll("\\[|\\]", ""); + +// List planDOS = planMapper.seleTestSQL(conversion(sql, filed)); + + + List planDOS = planMapper.selectPlanDataSource(conversion(filed),planId,getUserOrganId()); + + return toJsonString(planDOS); + + + + } + + @Override + public String apiGetEsPlan(Long planId, List fields) { + + + List esData = new ArrayList<>(); + + + List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 99); + + for (OptimizeBoardModelDO optimizeBoardModelDO : optimizeBoardModelDOS) { + List filedData = new ArrayList<>() ; + + JsonNode jsonNode = JsonUtils.parseTree(JsonUtils.toJsonString(optimizeBoardModelDO)); + + for (String field : fields) { + filedData.add(field+":"+ (jsonNode.get(field) == null ?"" : jsonNode.get(field).asText())); + } + + esData.add(filedData.toString()); + + } + + + return esData.toString(); + + + } + + @Override + public String apiGetPlanRemainPlate(Long planId, String field) { + + +// String sql = " select from order_remain_plate where organ_id = #{organId} and plan_id = #{planId} and deleted = false"; +// +// sql = sql.replace("#{organId}", getUserOrganId() + "").replace("#{planId}", planId + ""); + + + List remainPlateDOS = remainPlateMapper.selectPlanRemainDataSource(conversion(field),planId,getUserOrganId()); + + + return toJsonString(remainPlateDOS); + + + } + + + @Override + public String apiGetPlanPlate(Long planId, String field) { + + +// List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 99); +// +// +// List goodsIds = optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getGoodsId).toList(); +// +// +// List orderIds = BeanUtils.toBean(optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getOrderId).toList(), Long.class); +// +// +// List goodsIdList = goodsMapper.selectListByGoodsIdList(goodsIds,orderIds, getUserOrganId()) +// .stream().map(GoodsDO::getId).toList(); + + List goodsDOS = goodsMapper.selectPlanGoods(planId, getUserOrganId()); + + List goodsIds = goodsDOS.stream().map(GoodsDO::getId).distinct().toList(); + + List orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).distinct().toList(); + + + field = field + .replace("sculpt_num", "sum(front_model_count+back_model_count) as sculptNum" + "") + .replace("hole_num", "sum(unregular_point_count+front_hole_count+back_hole_count+side_hole_count) as holeNum" + ""); + + + String field2 = "sculpt_num".equals(field) || "hole_num".equals(field) ? "group by " + conversion(field) + .replace("sum(front_model_count+back_model_count) as sculptNum", "") + .replace("sum(unregular_point_count+front_hole_count+back_hole_count+side_hole_count) as holeNum", "") : ""; + + + field2 = field2.replaceFirst(",\\s*$", ""); + + + List plateDOS = plateMapper.selectPlanPlateListDataSource(conversion(field),field2,goodsIds,orderIds,getUserOrganId()); + + + return toJsonString(plateDOS); + + } + + + + @Override + public String apiGetEsPlate(Long planId, List fields) { + + List esData = new ArrayList<>(); + + // todo 目前只考虑非混单的情况,混单的情况待解决 + List plateIds = getPlateIds(planId); + + + List orderModelDOS = buildBoardByPlateIds(plateIds, ORDER_PLATE_MODEL, plateIds.size()); + + + for (OrderModelDO orderModelDO : orderModelDOS) { + List filedData = new ArrayList<>() ; + + JsonNode jsonNode = JsonUtils.parseTree(JsonUtils.toJsonString(orderModelDO)); + + for (String field : fields) { + + BigDecimal splitLength = BigDecimal.valueOf(jsonNode.get("splitLength").asDouble()); + BigDecimal splitWidth = BigDecimal.valueOf(jsonNode.get("splitWidth").asDouble()); + + filedData.add( "splitArea".equals(field)? "splitArea:"+ splitLength.multiply(splitWidth) : field+":"+jsonNode.get(field).asText() ); + +// filedData.add(field+":"+jsonNode.get(field).asText()); + } + + + esData.add(filedData.toString()); + + } + + + return esData.toString(); + + } + + + + + @Override + public String apiGetPlanBodyOrRoom(Long planId, String field) { + +// List plateIds = getPlateIds(planId); +// +// +// List orderItemDOS = orderItemMapper.selectPlateIdList(plateIds, getUserOrganId()); +// +// List bodyIds = orderItemDOS.stream().map(OrderItemDO::getBodyId).distinct().toList(); + + + List bodyIds = goodsMapper.selectPlanBodyIds(planId, getUserOrganId()); + + List orderBodyDOS = orderBodyMapper.selectPlanBodyRoomDataSource(conversion(field), bodyIds, getUserOrganId()); + + + return toJsonString(orderBodyDOS); + + } + + + + + @Override + public String apiGetPlanGroup(Long planId, String field) { + + +// List plateIds = getPlateIds(planId); +// +//// List plateIds = Arrays.asList(1825367895442456579L, 1825367895308238851L, 1824334800400416772L); +// +// List orderItemDOS = orderItemMapper.selectPlateIdList(plateIds, getUserOrganId()); +// +// List groupIds = orderItemDOS.stream().map(OrderItemDO::getGroupId).distinct().toList(); + + + List groupIds = goodsMapper.selectPlanGroupListDataSource(planId, getUserOrganId()); + + if(groupIds.isEmpty()){ + return null; + } + + field = field.replace("group_num", "count(id) as groupNum" + ""); + + + String field2 = ("group by " + conversion(field).replace("count(id) as groupNum", "")).replaceFirst(",\\s*$", ""); + + + List orderGroupDOS = orderGroupMapper.selectPlanGroupDataSource(conversion(field),field2, groupIds, getUserOrganId()); + + + return toJsonString(orderGroupDOS); + + } + + + + + + @Override + public String apiGetPlanParts(Long planId, String field) { + + +// List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); +// +// +// String orderNos = optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getOrderId).toList().toString(); +// +// +// List orderIds = JSON.parseArray(orderNos).toJavaList(Long.class); + + + List orderIds = goodsMapper.selectPlanGoods(planId, getUserOrganId()).stream().map(GoodsDO::getOrderId).distinct().toList(); + + + List partIds = orderPartsMapper.selectPartIds(orderIds, getUserOrganId()).stream().map(OrderPartsDO::getId).toList(); + + + String filed2 = "parts_num" .equals(field) ? + ",{partsNum:"+orderItemMapper.selectPartsList(partIds,orderIds, getUserOrganId()).stream().mapToDouble(OrderItemDO::getNum).sum()+"}]" : ""; + + + List orderPartsDOS = orderPartsMapper.selectPlanPartsDataSource(conversion(field), partIds, getUserOrganId()); + + + return "".equals(filed2) ? toJsonString(orderPartsDOS) : toJsonString(orderPartsDOS).replace("]", "") + filed2; + + + + } + + + + + + @Override + public String apiGetEsParts(Long planId, List fields) { + + +// List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); +// +// +// String orderNos = optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getOrderId).toList().toString(); +// +// +// List orderIds = JSON.parseArray(orderNos).toJavaList(Long.class); + + + List orderIds = goodsMapper.selectPlanGoods(planId, getUserOrganId()).stream().map(GoodsDO::getOrderId).distinct().toList(); + + List esData = new ArrayList<>(); + + List orderPartsRemarks = buildOrderPartsByOrderId(orderIds, ORDER_PARTS_REMARK_MODEL, 999); + + + for (OrderPartsRemark orderPartsRemark : orderPartsRemarks) { + + List filedData = new ArrayList<>(); + + JsonNode jsonNode = JsonUtils.parseTree(JsonUtils.toJsonString(orderPartsRemark)); + + for (String field : fields) { + filedData.add(field+":" + (jsonNode.get(field) == null ? "" : jsonNode.get(field).asText())); + } + + esData.add(filedData.toString()); + + } + + + return esData.toString(); + + + } + + + // 字符串处理 + private String conversion(String filed) { + + // 去除字段中的 【 】 + return filed.replaceAll("\\[|\\]", ""); + + // 使用正则表达式在单词后插入字符串 +// return sql.replaceAll(SEPARATE + "(\\b)", SEPARATE + " " + toInsert); + + } + + + + + // 根据排单ID获取对应的板材ID + private List getPlateIds(Long planId) { + + +// List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); +// +// List goodsIds = optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getGoodsId).toList(); +// +// +// List orderIds = BeanUtils.toBean(optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getOrderId).toList(), Long.class); +// +// List ids = goodsMapper.selectListByGoodsIdList(goodsIds, orderIds, getUserOrganId()).stream().map(GoodsDO::getId).toList(); +// +// plateMapper.selectGoodsPlateList(ids, getUserOrganId()).stream().map(PlateDO::getId).toList(); + + return goodsMapper.selectPlanPlateList(planId, getUserOrganId()); + + } + + + private List buildOrderPartsByOrderId(List orderIds, String index, Integer size) { + + List fieldValues = orderIds.stream().map(FieldValue::of).toList(); + SearchRequest.Builder builder = new SearchRequest.Builder(); + builder.index(index); + builder.size(size); + builder.query(q -> q.terms(b -> b.field("orderId").terms(e -> e.value(fieldValues)))); + try { + SearchResponse search = elasticsearchClient.search(builder.build(), OrderPartsRemark.class); + List> hits = search.hits().hits(); + if (CollectionUtil.isNotEmpty(hits)) { + return hits.stream().map(Hit::source).collect(Collectors.toList()); + } + return new ArrayList<>(); + } catch (IOException e) { + log.error(e.getMessage()); + throw new ServiceException(INTERNAL_SERVER_ERROR); + } + + } + + + + + private List buildBoardByPlanId(Long planId, String index, Integer size) { + SearchRequest.Builder builder = new SearchRequest.Builder(); + builder.index(index); + builder.size(size); + builder.query(q -> q.term(b -> b.field("planId").value(planId))); + try { + SearchResponse search = elasticsearchClient.search(builder.build(), OptimizeBoardModelDO.class); + List> hits = search.hits().hits(); + if (CollectionUtil.isNotEmpty(hits)) { + return hits.stream().map(Hit::source).collect(Collectors.toList()); + } + return new ArrayList<>(); + } catch (IOException e) { + log.error(e.getMessage()); + throw new ServiceException(INTERNAL_SERVER_ERROR); + } + } + + + + + private List buildBoardByPlateIds(Collection plateIds, String index, Integer size) { + List fieldValues = plateIds.stream().map(FieldValue::of).toList(); + SearchRequest.Builder builder = new SearchRequest.Builder(); + builder.index(index); + builder.size(size); + builder.query(q -> q.terms(b -> b.field("plateId").terms(e -> e.value(fieldValues)))); + try { + SearchResponse search = elasticsearchClient.search(builder.build(), OrderModelDO.class); + List> hits = search.hits().hits(); + if (CollectionUtil.isNotEmpty(hits)) { + return hits.stream().map(Hit::source).collect(Collectors.toList()); + } + return new ArrayList<>(); + } catch (IOException e) { + log.error(e.getMessage()); + throw new ServiceException(INTERNAL_SERVER_ERROR); + } + } + + + public static String toCamelCase(String fieldName) { + if (fieldName == null || fieldName.isEmpty()) { + return fieldName; + } + + StringBuilder camelCase = new StringBuilder(); + boolean nextIsUpperCase = false; + + for (char c : fieldName.toCharArray()) { + if (c == '_' || c == '-') { + nextIsUpperCase = true; + } else { + if (nextIsUpperCase) { + camelCase.append(Character.toUpperCase(c)); + nextIsUpperCase = false; + } else { + camelCase.append(c); + } + } + } + + return camelCase.toString(); + } + + + } 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 8c0ad0166..ddbcf7cdd 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 @@ -2,15 +2,20 @@ package com.cf.imes.module.executor.controller.admin.order; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.object.BeanUtils; +import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.executor.controller.admin.order.vo.order.*; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; +import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.enums.OrderDeletedEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; -import com.cf.imes.module.executor.enums.OrderTypeEnum; +import com.cf.imes.module.executor.service.order.OrderService; import com.cf.imes.module.executor.util.ExcelWriterUtil; import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataAchieve; import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize; @@ -19,49 +24,32 @@ import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.OrderPl import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO.OrderXmlVO; import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XMLUtil; import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XmlBuilder; -import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XmlTypeRealize; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; 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.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.io.File; -import java.util.*; - -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 java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.pojo.CommonResult.success; - -import com.cf.imes.framework.operatelog.core.annotations.OperateLog; - -import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.IMPORT; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; -import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; -import com.cf.imes.module.executor.service.order.OrderService; - - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.util.concurrent.ExecutionException; - @Tag(name = "管理后台 - 生产单管理") @RestController @@ -459,7 +447,7 @@ public class OrderController { @Operation(summary = "删除柜体") @PreAuthorize("@ss.hasPermission('production:manager-list:deleteCabinet')") public CommonResult deleteBody(@Valid @RequestBody OrderModuleParameterRespVO orderModuleParameterRespVO) { - orderService.updateBodyDeletedByOrderId(orderModuleParameterRespVO.getOrderId(), orderModuleParameterRespVO.getRoomIds(), + orderService.updateDeleteBody(orderModuleParameterRespVO.getOrderId(), orderModuleParameterRespVO.getRoomIds(), orderModuleParameterRespVO.getBodyId(), OrderDeletedEnum.DELETED.getStatus()); return success(true); } @@ -468,7 +456,7 @@ public class OrderController { @Operation(summary = "还原柜体") @PreAuthorize("@ss.hasPermission('production:manager-list:restoreCabinet')") public CommonResult restoreBody(@Valid @RequestBody OrderModuleParameterRespVO orderModuleParameterRespVO) { - orderService.updateBodyDeletedByOrderId(orderModuleParameterRespVO.getOrderId(), orderModuleParameterRespVO.getRoomIds(), + orderService.updateRestoreBody(orderModuleParameterRespVO.getOrderId(), orderModuleParameterRespVO.getRoomIds(), orderModuleParameterRespVO.getBodyId(), OrderDeletedEnum.NOT_DELETED.getStatus()); return success(true); } 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/OrderGoodsIds.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/vo/order/OrderGoodsIds.java new file mode 100644 index 000000000..a93db39c8 --- /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/OrderGoodsIds.java @@ -0,0 +1,28 @@ +package com.cf.imes.module.executor.controller.admin.order.vo.order; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +/** + * @author Administrator + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString(callSuper = true) +public class OrderGoodsIds { + + @Schema(description = "大板的实际ID") + private String goodsId; + + + @Schema(description = "大板的旧分类ID") + private Long oldId; + + + @Schema(description = "大板的新分类ID") + private Long id; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java index eb856c56a..4571a5440 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/plan/PlanController.java @@ -110,6 +110,8 @@ public class PlanController { return success(planService.getOrderPage(pageReqVO)); } + + // 目前因为这个接口没有使用,所以这个接口里代码没有进行更改 @GetMapping("getNotPlanOrderPlateList") @Operation(summary = "获取未排单的板材分页列表") @PreAuthorize("@ss.hasPermission('placeorder:query')") @@ -135,9 +137,9 @@ public class PlanController { } - @GetMapping("getNotPlanGoodsListPageByOrderId") - @Operation(summary = "根据生产单id获取未排单的商品分页列表") - @PreAuthorize("@ss.hasPermission('executor:plan:query')") +// @GetMapping("getNotPlanGoodsListPageByOrderId") +// @Operation(summary = "根据生产单id获取未排单的商品分页列表") +// @PreAuthorize("@ss.hasPermission('executor:plan:query')") public CommonResult> getNotPlanGoodsListPageByOrderId(@Valid NotPlanGoodsListPageVO pageVO) { return success(planService.getNotPlanGoodsListPageByOrderId(pageVO)); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPackageDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPackageDO.java new file mode 100644 index 000000000..87310592c --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPackageDO.java @@ -0,0 +1,51 @@ +package com.cf.imes.module.executor.dal.dataobject.pack; + + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +@TableName("order_package") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderPackageDO extends BaseDO { + + + // 包裹ID + @TableId + private Long id; + + // 组织 ID + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long organId; + + // 生产单号 + private Long orderId; + + // 包裹编号 + private String packageNo; + + // 包裹类型,-1未定义,0板材,1配件,2其他配件 + private Integer type; + + // 包裹名 + private String name; + + // 包裹状态,0未封包,1已封包,2已入库,3已出库 + private Integer status; + + + // 备注 + private String remark; + + + +} + diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPrepackagedDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPrepackagedDO.java new file mode 100644 index 000000000..bc4b35a21 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/pack/OrderPrepackagedDO.java @@ -0,0 +1,33 @@ +package com.cf.imes.module.executor.dal.dataobject.pack; + + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +@TableName("order_prepackaged") +@Data +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderPrepackagedDO { + + + @TableId + // 生产单号-主键 + private Long orderId; + + + // 预打包优化信息 + private String result; + + + // 组织 ID + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long organId; + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java index c3c94a531..1f0cc2d2e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/goods/GoodsMapper.java @@ -86,6 +86,7 @@ public interface GoodsMapper extends BaseMapperX { return selectList(new LambdaQueryWrapperX() .eq(GoodsDO::getOrganId, organId) .eq(GoodsDO::getDeleted, false) + .eq(GoodsDO::getPlanId ,0) .eq(GoodsDO::getGoodsId, goodsId)); } @@ -117,7 +118,7 @@ public interface GoodsMapper extends BaseMapperX { } - List seleTestSQL(@Param("filed") String filed,@Param("goodsIds") List goodsIds ,@Param("organId") Long organId); + List selectPlanGoodsDataSource(@Param("filed") String filed,@Param("planId") Long planId ,@Param("organId") Long organId); default GoodsDO selectGoodsId(Long orderId, String goodsId, Long organId) { @@ -199,4 +200,25 @@ public interface GoodsMapper extends BaseMapperX { List selectPlanOrderList(@Param("orderId") Long orderId,@Param("roomIds") Set roomIds, @Param("bodyId") Long bodyId,@Param("organId") Long organId); + List selectPlanPlateList(@Param("planId") Long planId,@Param("organId") Long organId); + + List selectPlanBodyIds(@Param("planId") Long planId,@Param("organId") Long organId); + + List selectPlanGroupListDataSource(@Param("planId") Long planId,@Param("organId") Long organId); + + + + default List selectGoodsListByStatus(Long orderId, List goodsIds, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(GoodsDO::getOrganId, organId) + .eq(GoodsDO::getDeleted, true) + .eqIfPresent(GoodsDO::getOrderId,orderId) + .inIfPresent(GoodsDO::getId,goodsIds)); + + } + + + List selectNoPlanGoodsList(@Param("orderId") Long orderId,@Param("goodsIds") List goodsIds,@Param("organId") Long organId); + + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java index b4fab3faa..f6dccec08 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/order/OrderMapper.java @@ -227,7 +227,7 @@ public interface OrderMapper extends BaseMapperX { - List selectTestSQL(@Param("filed") String filed,@Param("orderIds") List orderIds,@Param("organId") Long organId); + List selectOrderDataSource(@Param("filed") String filed,@Param("orderIds") List orderIds,@Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java index 4223189fe..a2be28bad 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderBody/OrderBodyMapper.java @@ -127,7 +127,7 @@ public interface OrderBodyMapper extends BaseMapperX { } - List selectTestSQL(@Param("filed") String filed,@Param("bodyIds") List bodyIds,@Param("organId") Long organId); + List selectPlanBodyRoomDataSource(@Param("filed") String filed,@Param("bodyIds") List bodyIds,@Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java index 4c1a32a65..d2c3a6abb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderGroup/OrderGroupMapper.java @@ -108,6 +108,6 @@ public interface OrderGroupMapper extends BaseMapperX { } - List selectTestSQL(@Param("filed") String filed, @Param("field2") String field2 ,@Param("groupIds") List groupIds, @Param("organId") Long organId); + List selectPlanGroupDataSource(@Param("filed") String filed, @Param("field2") String field2 ,@Param("groupIds") List groupIds, @Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/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 d28854a03..5228abcd9 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 @@ -5,7 +5,6 @@ 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.OrderPlatesDetailRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; -import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailRespVO; @@ -59,8 +58,6 @@ public interface OrderItemMapper extends BaseMapperX { void deleteByPlateId(@Param("deletePlateIds") List deletePlateIds); - List selectPackList(@Param("ids") List ids, @Param("organId") Long organId); - default int deleteByBodyId(Long bodyId, Long organId) { return delete(new LambdaQueryWrapperX() @@ -94,9 +91,10 @@ public interface OrderItemMapper extends BaseMapperX { - default List selectPartsList(List partIds, Long organId) { + default List selectPartsList(List partIds,List orderIds, Long organId) { return selectList(new LambdaQueryWrapperX() .eq(OrderItemDO::getOrganId,organId) + .inIfPresent(OrderItemDO::getOrderId,orderIds) .inIfPresent(OrderItemDO::getPartsId, partIds) .select(OrderItemDO::getNum)); @@ -105,6 +103,14 @@ public interface OrderItemMapper extends BaseMapperX { IPage selectTestNum(@Param("page") IPage page,@Param("organId") Long organId); - List selectOrderPlateList(@Param("orderId") Long orderId,@Param("organId") Long organId); + default List selectPackId(List bodyIds, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(OrderItemDO::getOrganId,organId) + .inIfPresent(OrderItemDO::getBodyId,bodyIds) + .select(OrderItemDO::getPackageId)); + } + + + void deletePackList(@Param("orderId") Long orderId,@Param("packIds") List packIds,@Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java index 935a55495..9eab930fe 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderParts/OrderPartsMapper.java @@ -6,7 +6,6 @@ import com.cf.imes.framework.common.pojo.PageResult; 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.orderParts.vo.OrderPartsPageReqVO; -import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.PartGoodsRespVO; import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO; import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; @@ -87,7 +86,7 @@ public interface OrderPartsMapper extends BaseMapperX { } - List selectTestSql(@Param("filed") String filed,@Param("partIds") List partIds,@Param("organId") Long organId); + List selectPlanPartsDataSource(@Param("filed") String filed,@Param("partIds") List partIds,@Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageMapper.java new file mode 100644 index 000000000..13c465783 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPackageMapper.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.dal.mysql.pack; + + +import com.cf.imes.framework.common.enums.OrderPackageStatusEnum; +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface OrderPackageMapper extends BaseMapperX { + + + void updatePackList(@Param("orderId") Long orderId, @Param("packIds") List packIds, @Param("organId") Long organId); + + default List selectPackStatusList(Long orderId,Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(OrderPackageDO::getOrganId,organId) + .eq(OrderPackageDO::getDeleted,false) + .eq(OrderPackageDO::getStatus, OrderPackageStatusEnum.PACKAGED.getStatus()) + .eqIfPresent(OrderPackageDO::getOrderId, orderId)); + } + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPrepackagedMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPrepackagedMapper.java new file mode 100644 index 000000000..bc616afbd --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/pack/OrderPrepackagedMapper.java @@ -0,0 +1,17 @@ +package com.cf.imes.module.executor.dal.mysql.pack; + +import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; +import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.dal.dataobject.pack.OrderPrepackagedDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OrderPrepackagedMapper extends BaseMapperX { + + default int deletePacked(Long orderId, Long organId) { + return delete(new LambdaQueryWrapperX() + .eq(OrderPrepackagedDO::getOrganId, organId) + .eqIfPresent(OrderPrepackagedDO::getOrderId, orderId)); + } + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java index 2f9cb36ab..d512fb682 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plan/PlanMapper.java @@ -103,7 +103,7 @@ public interface PlanMapper extends BaseMapperX { List selectPlanAreaGroupByCreateTime(@Param("req") OrderStatisticsReqVO reqVO); - List seleTestSQL(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId); + List selectPlanDataSource(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java index 8a827cf52..ce04622e3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/plate/PlateMapper.java @@ -10,6 +10,7 @@ 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.plan.bo.GoodsNum; import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds; +import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO; import com.cf.imes.module.executor.controller.admin.plan.vo.*; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsIdVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsRespVO; @@ -143,13 +144,24 @@ public interface PlateMapper extends BaseMapperX { default List selectPlateNum(Long orderId, Long organId) { return selectList(new LambdaQueryWrapperX() .eq(PlateDO::getOrganId,organId) + .eq(PlateDO::getDeleted,false) .eqIfPresent(PlateDO::getOrderId, orderId)); } -// 房间id查小板的开料状态 - List selectPlateTypeByRoomId(@Param("orderId") Long orderId, @Param("bodyIds") Collection bodyIds, + default List selectPlateDeletedStatus(Long orderId,List goodsIds, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(PlateDO::getOrganId,organId) + .eq(PlateDO::getDeleted,false) + .in(PlateDO::getGoodsId,goodsIds) + .eqIfPresent(PlateDO::getOrderId, orderId)); + } + + + + // 房间id查小板的开料状态 + List selectPlateTypeByRoomId(@Param("orderId") Long orderId, @Param("bodyIds") Collection bodyIds, @Param("organId") Long organId, @Param("deleted") Integer deleted); // 根据生产单id删除 @@ -180,6 +192,7 @@ public interface PlateMapper extends BaseMapperX { default List selectPlateByPlateNo(List plateNo, Long organId) { return selectList(new LambdaQueryWrapperX() .eq(PlateDO::getOrganId,organId) + .eq(PlateDO::getDeleted,false) .inIfPresent(PlateDO::getPlateNo, plateNo) .select(PlateDO::getOrderId)); @@ -197,7 +210,7 @@ public interface PlateMapper extends BaseMapperX { } - List selectTestSQL(@Param("filed") String filed, @Param("field2") String field2,@Param("goodsIdList") List goodsIdList,@Param("organId") Long organId); + List selectPlanPlateListDataSource(@Param("filed") String filed, @Param("field2") String field2,@Param("goodsIdList") List goodsIdList,@Param("orderIds") List orderIds,@Param("organId") Long organId); @@ -233,6 +246,24 @@ public interface PlateMapper extends BaseMapperX { void updateNoPlateOptimized(@Param("orderIdList") List orderIdList,@Param("ids") List ids,@Param("organId") Long organId); + List selectPlanPackList(@Param("ids") List ids,@Param("organId") Long organId); + + List selectOrderPackList(@Param("orderId") Long orderId,@Param("organId") Long organId); + + void updatePlateOptimizedStatus(@Param("plateDOList")List plateDOList,@Param("organId") Long organId,@Param("orderId") Long orderId); + + + + default List selectNoPlanPlate(Long orderId, List goodsIds, Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(PlateDO::getOrganId,organId) + .eqIfPresent(PlateDO::getOrderId,orderId) + .inIfPresent(PlateDO::getGoodsId,goodsIds) + .eq(PlateDO::getIsOptimized,false)); + + } + + // List selectTestSQL(@Param("sql") String sql); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java index 9c16c2d76..f8aa96bde 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/remainplaten/RemainPlateMapper.java @@ -41,9 +41,10 @@ public interface RemainPlateMapper extends BaseMapperX { } - default List selectByPlanId(Long planId, Long userOrganId) { + default List selectByPlanId(Long planId, Long organId) { return selectList( new LambdaQueryWrapperX() - .eq(RemainPlateDO::getOrganId, userOrganId) + .eq(RemainPlateDO::getOrganId, organId) + .eq(RemainPlateDO::getDeleted,false) .eq(RemainPlateDO::getPlanId, planId)); @@ -59,7 +60,7 @@ public interface RemainPlateMapper extends BaseMapperX { .eq(RemainPlateDO::getOrganId, organId)); } - List selectTestSQL(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId); + List selectPlanRemainDataSource(@Param("filed") String filed,@Param("planId") Long planId,@Param("organId") Long organId); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java index b87f360f5..bee00fa0e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java @@ -12,6 +12,7 @@ import com.alibaba.fastjson.JSON; import com.cf.imes.framework.common.enums.OrderStatusEnum; import com.cf.imes.framework.common.enums.PlanStatusEnum; import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.es.core.service.ESDocumentService; import com.cf.imes.framework.security.core.LoginUser; @@ -66,6 +67,7 @@ import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.ge import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.ORDER_NOT_EXISTS; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_EXISTS; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** * @author there @@ -160,14 +162,15 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { public Boolean commit(Long planId, List goodsNo) { PlanDO planDO = planMapper.selectById(planId); - if (Objects.isNull(planDO)) { - throw exception(PLAN_NOT_EXISTS); - } + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); // todo 目前只解决了非混单的情况,混单情况待解决 List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); + AssertUtils.notEmpty(optimizeBoardModelDOS,ORDER_PLAN_OPTIMIZE_ERROR); + OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0); List plateNo = new ArrayList<>(); @@ -190,7 +193,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } } } catch (JsonProcessingException e) { - e.printStackTrace(); + throw exception(ORDER_PLAN_OPTIMIZE_ERROR); } for (Long goods : goodsNo) { @@ -275,22 +278,14 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { Long planId = respVO.getPlanId(); List goodsNo = respVO.getGoodsNo(); -// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); -// assert loginUser != null; -// -// if(!loginUser.getIsSupAdmin()){ -// -// throw exception(INSUFFICIENT_PERMISSIONS); -// -// } - PlanDO planDO = planMapper.selectById(planId); - if (planDO == null) { - throw exception(PLAN_NOT_EXISTS); - } + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); // todo 目前只解决了非混单的情况,混单情况待解决 - List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 99); + List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, 10); + + AssertUtils.notEmpty(optimizeBoardModelDOS,ORDER_PLAN_OPTIMIZE_ERROR); OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0); @@ -459,10 +454,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override public OrderSource getOrderSourceByOrderId(Long orderId) { OrderDO orderDO = orderMapper.selectById(orderId); - if (Objects.isNull(orderDO)) { - throw exception(ORDER_NOT_EXISTS); - } - OrderSource orderSource = new OrderSource(); +// if (Objects.isNull(orderDO)) { +// throw exception(ORDER_NOT_EXISTS); +// } + + AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS); List goodsDOS = goodsMapper.selectGoodsList(orderId,getUserOrganId()); @@ -470,6 +466,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDOS = plateMapper.selectPlateDetialList(orderId,getUserOrganId()); + AssertUtils.notEmpty(plateDOS,ORDER_PLATE_ERROR); for (PlateDetialRespVO plateDetailsRespVO : plateDOS) { String name = ""; @@ -489,11 +486,14 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { Integer orderModelSize = plateDOS.size(); - List orderModelDOS = buildRespByOrderId(orderId, ORDER_PLATE_MODEL, orderModelSize); + List orderModelDOS = buildRespByOrderId(orderId, orderModelSize); + + + AssertUtils.notEmpty(orderModelDOS,ORDER_PLATE_MODEL_DATE_ERROR); // 大板数据的尺寸长度 - Integer boardSize = goodsDOS.stream().map(GoodsReqVO::getId).toList().size(); + Integer boardSize = goodsDOS.size(); List optimizeBoardModelDOS = buildBoardByOrderId(orderId, ORDER_REMAIN_PLATE_MODEL, boardSize); @@ -504,8 +504,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // 查询生产单对应的包裹信息 - List printOrderPackReqVOS = orderItemMapper.selectOrderPlateList(orderId, getUserOrganId()); - + List printOrderPackReqVOS = plateMapper.selectOrderPackList(orderId,getUserOrganId()); // 统计每个订单的包装数量 printOrderPackReqVOS @@ -515,14 +514,24 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { .forEach(f->f.setPackNum(printOrderPackReqVOS.stream().filter(e -> e.getOrderId().equals(orderId)).map(PrintOrderPackReqVO::getPackId).toList().size())); - orderSource.setOrderList(Collections.singletonList(orderDO)); - orderSource.setPlateList(plateDOS); - orderSource.setGoodsList(goodsDOS); - orderSource.setPlateModels(orderModelDOS); - orderSource.setOptimizeBoardModelDOS(optimizeBoardModelDOS); - orderSource.setOrderPartsRespVOS(printOrderPartsRespVOS); - orderSource.setOrderPackReqVOS(printOrderPackReqVOS); - return orderSource; +// orderSource.setOrderList(Collections.singletonList(orderDO)); +// orderSource.setPlateList(plateDOS); +// orderSource.setGoodsList(goodsDOS); +// orderSource.setPlateModels(orderModelDOS); +// orderSource.setOptimizeBoardModelDOS(optimizeBoardModelDOS); +// orderSource.setOrderPartsRespVOS(printOrderPartsRespVOS); +// orderSource.setOrderPackReqVOS(printOrderPackReqVOS); + + return OrderSource.builder() + .orderList(Collections.singletonList(orderDO)) + .goodsList(goodsDOS) + .plateList(plateDOS) + .plateModels(orderModelDOS) + .optimizeBoardModelDOS(optimizeBoardModelDOS) + .orderPartsRespVOS(printOrderPartsRespVOS) + .orderPackReqVOS(printOrderPackReqVOS) + .build(); + } @@ -530,15 +539,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { @Override public OrderSource getOrderSourceByPlanId(Long planId) { PlanDO planDO = planMapper.selectById(planId); - if (Objects.isNull(planDO)) { - throw exception(PLAN_NOT_EXISTS); - } +// if (Objects.isNull(planDO)) { +// throw exception(PLAN_NOT_EXISTS); +// } + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); // 查询排单对应的大板信息 List goodsDOS = goodsMapper.selectGoodsListByOrderIds(planId,getUserOrganId()); - List orderIds = goodsDOS.stream().map(GoodsReqVO::getOrderId).toList(); + List orderIds = goodsDOS.stream().map(GoodsReqVO::getOrderId).distinct().toList(); List ids = goodsDOS.stream().map(GoodsReqVO::getId).toList(); @@ -546,26 +557,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDetialRespVOS = plateMapper.selectPlateListByGoodsIds(ids, getUserOrganId()); - -// List bodyIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getBodyId).distinct().toList(); -// -// -// List orderBodyDOS = orderBodyMapper.selectOrderBodyList(bodyIds,orderIds, getUserOrganId()); -// -// -//// List detialRespVOS = new ArrayList<>(); -// -// -// for (OrderBodyDO orderBodyDO : orderBodyDOS) { -// -// plateDetialRespVOS.stream().filter(f -> f.getBodyId().equals(orderBodyDO.getId())).forEach(m -> { -// m.setBodyName(orderBodyDO.getName()); -// m.setRoomName(orderBodyDO.getRoomName()); -// }); -// -// } - - + AssertUtils.notEmpty(plateDetialRespVOS,ORDER_PLAN_PLATE_ERROR); for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) { String name = ""; @@ -579,23 +571,15 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } plateDetailsRespVO.setProcessGroupName(name); -// plateDetailsRespVO.setGoodsId(goodsDOS -// .stream() -// .filter(f->f.getId().equals(plateDetailsRespVO.getId())) -// .map(GoodsReqVO::getGoodsId) -// .findAny().orElse(null)); - -// plateDetailsRespVO.setGoodsName(goodsDOS -// .stream() -// .filter(f->f.getId().equals(plateDetailsRespVO.getId())) -// .map(GoodsReqVO::getGoodsName) -// .findAny().orElse(null)); } List orderDOS = orderMapper.selectBatchIds(orderIds); + AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR); + + // 造型数据的尺寸长度 Integer orderModelSize = plateDetialRespVOS.size(); @@ -605,14 +589,18 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List orderModelDOS = buildRespByPlateIds(plateIds, orderModelSize); + AssertUtils.notEmpty(orderModelDOS,ORDER_PLAN_PLATE_MODEL_DATE_ERROR); + + // 大板数据的尺寸长度 - Integer boardSize = goodsDOS.stream().map(GoodsReqVO::getId).toList().size(); + Integer boardSize = goodsDOS.size(); List optimizeBoardModelDOS = buildBoardByPlanId(planId, ORDER_REMAIN_PLATE_MODEL, boardSize); List remainPlateDOS = remainPlateMapper.selectByPlanId(planId,getUserOrganId()); + List optimizeRemainPlates = BeanUtils.toBean(remainPlateDOS, OptimizeRemainPlate.class); @@ -620,19 +608,20 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId()); // 查询生产单对应的包裹信息 - List printOrderPackReqVOS = orderItemMapper.selectPackList(ids, getUserOrganId()); + List printOrderPackReqVOS = plateMapper.selectPlanPackList(ids,getUserOrganId()); - for (Long orderId : orderIds) { + if(!printOrderPackReqVOS.isEmpty()) { + for (Long orderId : orderIds) { - // 统计每个订单的包装数量 - printOrderPackReqVOS - .stream() - .filter(f->f.getOrderId().equals(orderId)) - .forEach(f->f.setPackNum(printOrderPackReqVOS.stream().filter(e -> e.getOrderId().equals(orderId)).map(PrintOrderPackReqVO::getPackId).toList().size())); + // 统计每个订单的包装数量 + printOrderPackReqVOS + .stream() + .filter(f -> f.getOrderId().equals(orderId)) + .forEach(f -> f.setPackNum(printOrderPackReqVOS.stream().filter(e -> e.getOrderId().equals(orderId)).map(PrintOrderPackReqVO::getPackId).toList().size())); + } } - return OrderSource.builder() .orderList(orderDOS) .plan(planDO) @@ -652,6 +641,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List goodsReqVOS = goodsMapper.selectGoodsAndRemainPlate(ids, getUserOrganId()); + AssertUtils.notEmpty(goodsReqVOS,ORDER_GOODS_DATA_ERROR); + + List orderIds = goodsReqVOS.stream().map(GoodsReqVO::getOrderId).distinct().toList(); List orderDOS = orderMapper.selectBatchIds(orderIds); @@ -660,22 +652,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDetialRespVOS = plateMapper.selectPlateListByGoodsIds(ids, getUserOrganId()); -// List bodyIds = plateDetialRespVOS.stream().map(PlateDetialRespVO::getBodyId).distinct().toList(); -// -// -// List orderBodyDOS = orderBodyMapper.selectOrderBodyList(bodyIds,orderIds, getUserOrganId()); -// -// -// for (OrderBodyDO orderBodyDO : orderBodyDOS) { -// -// plateDetialRespVOS.stream().filter(f -> f.getBodyId().equals(orderBodyDO.getId())).forEach(m -> { -// m.setBodyName(orderBodyDO.getName()); -// m.setRoomName(orderBodyDO.getRoomName()); -// }); -// -// } - - for (PlateDetialRespVO plateDetailsRespVO : plateDetialRespVOS) { String name = ""; if(!plateDetailsRespVO.getProcessGroupLists().isEmpty()) { @@ -688,13 +664,6 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } plateDetailsRespVO.setProcessGroupName(name); - -// // todo 这样写混单时同样适用,后面加混单后这里不用修改 -// plateDetailsRespVO.setGoodsId(goodsReqVOS -// .stream() -// .filter(f->f.getId().equals(plateDetailsRespVO.getId())) -// .map(GoodsReqVO::getGoodsId) -// .findAny().orElse(null)); } @@ -729,16 +698,23 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { // todo 目前只解决非混单的情况下, List optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, planIds.size()); + if(!optimizeBoardModelDOS.isEmpty()){ - deleteByPlanId(planIds,ORDER_REMAIN_PLATE_MODEL); - } // 保存优化后的大板数据 batchSaveBoardModel(req.getOptimizeBoardModelDOS()); + List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId()); + + List ids = goodsDOS.stream().map(GoodsDO::getId).distinct().toList(); + + List orderIds = goodsDOS.stream().map(GoodsDO::getOrderId).distinct().toList(); + + plateMapper.updatePlateOptimized(orderIds,ids,getUserOrganId()); + // // 保存余料板的数据 // if (CollectionUtil.isNotEmpty(req.getOptimizeRemainPlates())) { @@ -818,8 +794,11 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { List plateDOS = plateMapper.selectPlateNum(orderId, getUserOrganId()); + if(plateDOS.isEmpty()){ + return null; + } - return buildRespByOrderId(orderId, ORDER_PLATE_MODEL,plateDOS.size()); + return buildRespByOrderId(orderId, plateDOS.size()); } @@ -843,9 +822,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { } } - private List buildRespByOrderId(Long orderId, String index,Integer size) { + private List buildRespByOrderId(Long orderId, Integer size) { SearchRequest.Builder builder = new SearchRequest.Builder(); - builder.index(index); + builder.index(OptimizePlanService.ORDER_PLATE_MODEL); builder.size(size); builder.query(q -> q.term(b -> b.field("orderId").value(orderId))); try { @@ -874,12 +853,12 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { boolean errors = bulkResponse.errors(); if (errors) { log.error(bulkResponse.items().toString()); - throw new ServiceException(500, "未知异常"); + throw new ServiceException(INTERNAL_SERVER_ERROR); } } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); - throw new RuntimeException(e); + throw new ServiceException(INTERNAL_SERVER_ERROR); } } 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 25398f97b..4a2cb3393 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 @@ -1,20 +1,19 @@ package com.cf.imes.module.executor.service.order; -import javax.servlet.http.HttpServletResponse; -import javax.validation.*; - import com.alibaba.fastjson.JSONObject; import com.cf.imes.framework.common.pojo.PageParam; +import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.controller.admin.order.vo.order.*; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; -import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.OrderPlateImportExcelVO; import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO.OrderXmlVO; import org.springframework.boot.system.ApplicationHome; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.io.File; import java.util.List; import java.util.Map; @@ -91,7 +90,9 @@ public interface OrderService { * @param roomId: 房间id * @param bodyId: 柜体id */ - void updateBodyDeletedByOrderId(Long orderId , Set roomId, Long bodyId, Integer status); + void updateDeleteBody(Long orderId , Set roomId, Long bodyId, Integer status); + + void updateRestoreBody(Long orderId , Set roomId, Long bodyId, Integer status); /** * @param 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 aa37817c4..ff86d0e47 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 @@ -30,6 +30,7 @@ import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; +import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO; import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO; @@ -40,6 +41,8 @@ import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper; import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper; import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper; import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper; +import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageMapper; +import com.cf.imes.module.executor.dal.mysql.pack.OrderPrepackagedMapper; import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper; import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper; @@ -63,12 +66,14 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; @@ -113,6 +118,12 @@ public class OrderServiceImpl implements OrderService { @Resource private OrderItemMapper orderItemMapper; + @Resource + private OrderPackageMapper orderPackageMapper; + + @Resource + private OrderPrepackagedMapper orderPrepackagedMapper; + @Resource private OrderInputProcessor orderInputProcessor; @@ -242,7 +253,7 @@ public class OrderServiceImpl implements OrderService { @Override @Transactional(rollbackFor = Exception.class) - public void updateBodyDeletedByOrderId(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 + public void updateDeleteBody(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 // 判断生产单的状态和生产单柜体对应的板擦是否已开料 List planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()); @@ -257,43 +268,52 @@ public class OrderServiceImpl implements OrderService { } if (bodyIds.size() != 0){ - List plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index); + + List plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index); + List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); + + List goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList(); // List groupIds = orderGroupMapper.selectListByBodyId(bodyIds, orderId, getUserOrganId(), index); orderBodyMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 柜体 orderGroupMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 加工组 - if (plateDOList != null && plateDOList.size() != 0) { - plateMapper.updateDeletedById(plateDOList, status, getUserOrganId(), orderId);// 删小板 + + if (!plateDOList.isEmpty()) { + plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);// 删小板 } + + + // 删除包裹,只需删除,无需还原 + List packIds = orderItemMapper.selectPackId(bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); + + orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId()); + + orderItemMapper.deletePackList(orderId, packIds, getUserOrganId()); + + orderPrepackagedMapper.deletePacked(orderId,getUserOrganId()); + + List orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId()); + + if(orderPackageDOS.isEmpty()){ + + OrderDO orderDO = orderMapper.selectById(orderId); + + orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); + + orderMapper.updateById(orderDO); + + } + + // 删除大板 - List goodsIdList = plateMapper.selectPlateNum(orderId, getUserOrganId()); - Map> goodsIdMap = goodsIdList.stream() - .collect(Collectors.groupingBy(PlateDO::getGoodsId)); + List goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId()); - List goodsIdDeleted = new ArrayList<>(); + List goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList(); - goodsIdMap.forEach((goodsId, plates) -> { - if (plates.isEmpty()) { - goodsIdDeleted.add(goodsId); - return; - } - boolean allDeleted = true; - for (PlateDO plateDO : plates) { - if (status == 1) { - if (!plateDO.getDeleted()) { - allDeleted = false; - break; - } - } else { - if (plateDO.getDeleted()) { - break; - } - } - } - if (allDeleted) { - goodsIdDeleted.add(goodsId); - } - }); + List goodsIdDeleted = Stream.concat( + goodsIds.stream().filter(str -> !goodsIdList.contains(str)), + goodsIdList.stream().filter(str -> !goodsIds.contains(str))) + .toList(); if (goodsIdDeleted.size() > 0) { @@ -301,18 +321,20 @@ public class OrderServiceImpl implements OrderService { } - if(planIds != null) { + + if(!planIds.isEmpty()) { // 判断删除的柜体对应的板材是否和排单板材一样 List goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId()); // 一样,同时删除排单的信息 - if(goodsDOS.isEmpty()){ + if(goodsDOS.isEmpty() && status.equals(1)){ planService.deletePlan(planIds); - }else { - // 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到) - planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL); } + // 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到) + planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL); + + } List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件 @@ -331,6 +353,123 @@ public class OrderServiceImpl implements OrderService { } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateRestoreBody(Long orderId, Set roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0 + + // 校验存在 + OrderDO orderDO = orderMapper.selectOrderOne(orderId, getUserOrganId()); + if (orderDO == null) + throw exception(ORDER_NOT_EXISTS); + + List bodyIds = new ArrayList<>(); + Integer index = status == 1 ? 0 : 1; + + if (roomIds != null && roomIds.size() != 0) { + bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index); + } else if (bodyId != null && bodyId != 0) { + validateOrderBodyExists(orderId, bodyId, getUserOrganId(), index); + bodyIds.add(bodyId); + } + + + if (bodyIds.size() != 0){ + + List plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index); + List plateIds = plateDOList.stream().map(PlateDO::getId).toList(); + + List goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList(); + + orderBodyMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 柜体 + orderGroupMapper.updateDeletedById(bodyIds, status, getUserOrganId(), orderId);// 加工组 + + // 小板还原 + if (!plateDOList.isEmpty()) { + plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId); + } + + // 还原大板 + List goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId()); + if(!goodsDOS.isEmpty()){ + goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList()); + } + + + // 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID + List goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId()); + + List goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class); + + if(!goodsDOList.isEmpty()){ + + // 新增的大板信息 + List list = goodsDOList.stream() + .peek(m -> { + m.setId(null); + m.setPlanId(0L); + m.setCreateTime(LocalDateTime.now()); + m.setUpdateTime(LocalDateTime.now()); + }) + .toList(); + + goodsMapper.insertBatch(list); + + // 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息 + List orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class); + + List orderGoodsIdsList = new ArrayList<>(); + + for (GoodsDO goodsDO : goodsList) { + orderGoodsIdsList.addAll(orderGoodsIds.stream() + .filter(f -> f.getGoodsId().equals(goodsDO.getGoodsId())) +// .filter(a -> a.getOldId() == null) + .map(m -> m.setOldId(goodsDO.getId())).toList()); + + } + + // 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改 + List plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId()); + + List plateList = new ArrayList<>(); + + for (OrderGoodsIds ids : orderGoodsIdsList) { + + plateList.addAll(plateDOS.stream() + .filter(f->f.getGoodsId().equals(ids.getOldId())) + .peek(m->{ + m.setGoodsId(ids.getId()); + }) + .toList()); + } + + plateMapper.updateBatch(plateList); + + } + + + List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件 + if (partsList != null && partsList.size() != 0){ + orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId()); + } + + } + + // 生产单柜体数量判断 + if (orderBodyMapper.selectCountByOrderId(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0) { + orderMapper.updateOrderStatus(orderId, OrderStatusEnum.EMPTY.getStatus(), getUserOrganId()); + }else { + orderMapper.updateOrderStatus(orderId, OrderStatusEnum.NEW_ORDER.getStatus(), getUserOrganId()); + } + + + } + + + + + + @Override @Transactional(rollbackFor = Exception.class) public Long importApiData(Map> listMap) { @@ -848,7 +987,7 @@ public class OrderServiceImpl implements OrderService { // 判断小板是否已开料,已开料不允许删除 List planIds = goodsMapper.selectPlanOrderList(orderId, roomIds, bodyId, organId); - if(!planIds.isEmpty()) { + if(!planIds.isEmpty() && status.equals(1)) { List planDOS = planMapper.selectPlanStatus(planIds, organId); @@ -856,11 +995,9 @@ public class OrderServiceImpl implements OrderService { // planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL); - return planIds; - - } - return null; + + return planIds; } } \ 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/plan/PlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java index 227dca556..ad3c44871 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/plan/PlanServiceImpl.java @@ -16,6 +16,7 @@ import com.cf.imes.framework.common.enums.PlanFilterTypeEnum; import com.cf.imes.framework.common.enums.PlanStatusEnum; import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX; @@ -57,6 +58,7 @@ import java.io.IOException; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_ERROR_DELETE; import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; @@ -64,7 +66,7 @@ import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.e import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.NO_PRODUCTION_ORDER_INFORMATION_AVAILABLE; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; /** * 生产单开料排单 Service 实现类 @@ -124,6 +126,8 @@ public class PlanServiceImpl implements PlanService { // todo 目前只考虑了非混单的情况,混单的情况待考虑 List itemList = createReqVO.getItemList(); + AssertUtils.notEmpty(itemList,INSERT_PLATE_DATE_ERROR); + ArrayList planDOS = new ArrayList<>(); List goodsDOS = new ArrayList<>(); @@ -187,7 +191,7 @@ public class PlanServiceImpl implements PlanService { public void updatePlan(PlanSaveReqVO updateReqVO) { // 校验排单是否存在,是否开料 - validatePlanExists(updateReqVO.getId(),updateReqVO.getMachineId()); + validatePlanExists(updateReqVO.getId()); // 更新 PlanDO plan = BeanUtils.toBean(updateReqVO, PlanDO.class); @@ -374,7 +378,11 @@ public class PlanServiceImpl implements PlanService { optimizeBoardModelDOS.forEach(f -> orderIdList.addAll(f.getOrderId())); // 已经删除的排单的生产单号和新查找的生生产单号对比,找出不同的部分 - diff = orderIds.stream().filter(f -> !orderIdList.contains(f)).toList(); +// diff = orderIds.stream().filter(f -> !orderIdList.contains(f)).toList(); + diff = Stream.concat( + orderIds.stream().filter(str -> !orderIdList.contains(str)), + orderIdList.stream().filter(str -> !orderIds.contains(str))) + .toList(); } if(!diff.isEmpty()){ @@ -391,42 +399,14 @@ public class PlanServiceImpl implements PlanService { - private void validatePlanExists(Long id, Long machineId) { - PlanDO planDO = planMapper.selectById(id); - if ( planDO== null) { - throw exception(PLAN_NOT_EXISTS); - } - if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ - throw exception(LIST_CHANGES_ARE_PROHIBITED); - } - } - - private void validatePlan(List ids) { - - List planDOS = planMapper.selectBatchIds(ids); - - for (PlanDO planDO : planDOS) { - if ( planDO== null) { - throw exception(PLAN_NOT_EXISTS); - } - - if ( planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) { - throw exception(PLAN_NOT_ALLOW_DELETE,planDO.getId()); - } - - } - - } @Override public PlanRespVO getPlan(Long id) { PlanDO planDO = planMapper.selectById(id); - if ( planDO== null) { - throw exception(PLAN_NOT_EXISTS); - } + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); return BeanUtils.toBean(planDO, PlanRespVO.class); @@ -445,6 +425,7 @@ public class PlanServiceImpl implements PlanService { PlanDO planDO = planMapper.selectById(pageReqVO.getId()); + AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); List plan = pageReqVO.getIsUp() ? planMapper.selectPlanIds(planDO.getCreateTime().toString(),planDO.getSort(), getUserOrganId(), planDO.getId()) : @@ -519,8 +500,6 @@ public class PlanServiceImpl implements PlanService { // 根据排单ID查询ES中的优化数据 todo 目前只解决无混单的情况,混单情况待解决 List optimizeBoardModelDOS = buildBoardByPlanIds(planIds, ORDER_REMAIN_PLATE_MODEL, infoVOList.size()); -// for (OptimizeBoardModelDO optimizeBoardModelDO : optimizeBoardModelDOS) { -// } // 获取排单对应的生产单的信息 List planOrderRespVOS = planItemMapper.selectOrderList(planIds, getUserOrganId()); @@ -549,7 +528,7 @@ public class PlanServiceImpl implements PlanService { e.setOptimizeGoodsCount(optimizeBoardModelDOS.stream() .filter(f -> Objects.equals(f.getPlanId(), e.getId())) // todo 目前兼容修改,新的需求不需要这个校验 - .mapToLong(m -> m.getBoardCount() == null ?0 : m.getBoardCount()) + .mapToLong(m -> m.getBoardCount() == null ? 0 : m.getBoardCount()) .sum()); // 大板开料数 e.setCutGoodsCount(optimizeBoardModelDOS.stream() @@ -652,7 +631,7 @@ public class PlanServiceImpl implements PlanService { .in("order_id",orderIds) .eq("is_optimized",false) .inIfPresent("goods_id",goodsIds) - .inIfPresent("goods_id",pageReqVO.getIds()) + .inIfPresent("id",pageReqVO.getIds()) .eqIfPresent("is_special_shaped", pageReqVO.getRectangle() != null ? false: null) .eqIfPresent("is_special_shaped", pageReqVO.getSpecialShaped()) .eqIfPresent("is_sculpt", pageReqVO.getSculpt()) @@ -817,13 +796,10 @@ public class PlanServiceImpl implements PlanService { // .eq("og.organ_id",getUserOrganId()) // .eq("og.plan_id",0) // .eq("og.deleted",false) - .inIfPresent("og.order_id", pageReqVO.getOrderIds()) .inIfPresent("og.id", pageReqVO.getIds()) - // todo 修改排单数据筛选,目前只解决了非混单的情况,混单情况待解决 .eqIfPresent("og.goods_id",pageReqVO.getGoodsId()) - .likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId().toString() : null) .likeIfPresent("o.customer", pageReqVO.getConsignee()) .likeIfPresent("o.custom_order_no", pageReqVO.getDefaultId()) @@ -935,7 +911,7 @@ public class PlanServiceImpl implements PlanService { return null; } for (Long planId : vo.getPlanIds()) { - validatePlanExists(planId,null); + validatePlan(planId); } QueryWrapperX queryWrapperX = new QueryWrapperX<>(); @@ -967,6 +943,10 @@ public class PlanServiceImpl implements PlanService { IPage pageResult = goodsMapper.selectPlanGoodsListByPlanId(page, queryWrapperX); + if (CollectionUtil.isEmpty(pageResult.getRecords())) { + return new PageResult<>(); + } + Set bodyIds = pageResult.getRecords().stream().map(PlateResList::getBodyId).collect(Collectors.toSet()); if (CollectionUtil.isNotEmpty(bodyIds)) { @@ -981,6 +961,9 @@ public class PlanServiceImpl implements PlanService { @Override public PageResult getOrderByPlanId(PlanOrderPageReqVO pageReqVO) { + + validatePlan(pageReqVO.getPlanId()); + MPJLambdaWrapperX lambdaWrapperX = new MPJLambdaWrapperX<>(); lambdaWrapperX.leftJoin(GoodsDO.class, GoodsDO::getOrderId, OrderDO::getId) .eq(GoodsDO::getOrganId,getUserOrganId()) @@ -988,8 +971,12 @@ public class PlanServiceImpl implements PlanService { .eq(GoodsDO::getPlanId, pageReqVO.getPlanId()) .distinct(); - PageResult pageResult = orderMapper.selectJoinPage(pageReqVO, OrderDO.class, lambdaWrapperX); + + if (CollectionUtil.isEmpty(pageResult.getList())) { + return new PageResult<>(); + } + return BeanUtils.toBean(pageResult, OrderRespVO.class); } @@ -1028,18 +1015,30 @@ public class PlanServiceImpl implements PlanService { @Override public List getPlateList(List planIds) { + for (Long planId : planIds) { + validatePlan(planId); + } List plateResLists = goodsMapper.selectPlateListByPlanId(planIds, getUserOrganId()); - Set bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet()); - if (CollectionUtil.isNotEmpty(bodyIds)) { - List orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds); - for (PlateResList resList :plateResLists) { - resList.setBodyName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getId(), resList.getBodyId())).map(OrderBodyDO::getName).findAny().orElse(null)); - resList.setRoomName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getRoomId(), resList.getRoomId())).map(OrderBodyDO::getRoomName).findAny().orElse(null)); - } + if(plateResLists.isEmpty()){ + return null; } + Set bodyIds = plateResLists.stream().map(PlateResList::getBodyId).collect(Collectors.toSet()); + + List orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds); + + if(orderBodyDOS.isEmpty()){ + return plateResLists; + } + + for (PlateResList resList :plateResLists) { + resList.setBodyName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getId(), resList.getBodyId())).map(OrderBodyDO::getName).findAny().orElse(null)); + resList.setRoomName(orderBodyDOS.stream().filter(e -> Objects.equals(e.getRoomId(), resList.getRoomId())).map(OrderBodyDO::getRoomName).findAny().orElse(null)); + } + + return plateResLists; } @@ -1113,4 +1112,46 @@ public class PlanServiceImpl implements PlanService { } } + + private void validatePlan(Long id) { + + PlanDO planDO = planMapper.selectById(id); + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); + } + + + + + private void validatePlanExists(Long id) { + PlanDO planDO = planMapper.selectById(id); +// if ( planDO== null) { +// throw exception(PLAN_NOT_EXISTS); +// } + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); + + if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ + throw exception(LIST_CHANGES_ARE_PROHIBITED); + } + } + + + private void validatePlan(List ids) { + + List planDOS = planMapper.selectBatchIds(ids); + + for (PlanDO planDO : planDOS) { + + AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); + + if ( planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) { + throw exception(PLAN_NOT_ALLOW_DELETE,planDO.getId()); + } + + } + + } + + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml index 96a6d2156..73c00cb3a 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/goods/GoodsMapper.xml @@ -17,8 +17,8 @@ og.*, orp.id as remainId from order_goods og - left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id - where og.order_id = #{orderId} and og.organ_id = #{organId} and og.deleted = false + left join order_remain_plate orp on og.organ_id = orp.organ_id and og.id = orp.goods_id + where og.organ_id = #{organId} and og.deleted = false and og.order_id = #{orderId} @@ -31,8 +31,8 @@ og.*, orp.id as remainId from order_goods og - left join order_remain_plate orp on og.id = orp.goods_id and og.organ_id = orp.organ_id - where og.organ_id =#{organId} and og.deleted = false and og.plan_id = #{planId} + left join order_remain_plate orp on og.organ_id = orp.organ_id and og.id = orp.goods_id + where og.organ_id = #{organId} and og.deleted = false and og.plan_id = #{planId} @@ -59,16 +59,12 @@ - select ${filed} from order_goods where organ_id = #{organId} and deleted = false - and goods_id in - - - #{goodsIds} - + and plan_id = #{planId} @@ -177,12 +173,12 @@ left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id and og.deleted = op.deleted where og.organ_id = #{organId} - + and og.deleted = false and og.plan_id in #{ids} - +-- and op.is_optimized = true @@ -396,7 +392,7 @@ og.organ_id = #{organId} and og.deleted = false and og.order_id = #{orderId} - + and og.plan_id != 0 and oi.body_id = #{bodyId} @@ -412,4 +408,72 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml index b78cee4cf..737fda190 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/order/OrderMapper.xml @@ -194,7 +194,7 @@ - select ${filed} from orders diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderBody/OrderBodyMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderBody/OrderBodyMapper.xml index a409533a4..2d4be93c8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderBody/OrderBodyMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderBody/OrderBodyMapper.xml @@ -58,7 +58,7 @@ - select distinct ${filed} from order_body diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderGroup/OrderGroupMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderGroup/OrderGroupMapper.xml index 94a7b211b..115b9c448 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderGroup/OrderGroupMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderGroup/OrderGroupMapper.xml @@ -13,17 +13,18 @@ - select ${filed} from order_group - where id in - - #{groupIds} - - and organ_id = #{organId} + where + organ_id = #{organId} and deleted = false - ${field2} + and id in + + #{groupIds} + + ${field2} \ No newline at end of file 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 37c1f5ad3..5e7e0037f 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 @@ -169,45 +169,21 @@ + - + UPDATE order_item - - - - + SET package_id = 0 - - - - - - - + - - - select distinct op.id as plateId, - op.order_id as orderId, - o.id as packId, - o.package_no as packNo - from order_plate op - left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id - left join order_package o on oi.organ_id = o.organ_id and oi.order_id = o.order_id and oi.package_id = o.id - - where op.organ_id = #{organId} - and op.deleted = false - and op.order_id = #{orderId} - and oi.parts_id = 0 - and oi.package_id !=0 - - - - - \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml index faf6a1d0a..f1497a40c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/orderParts/OrderPartsMapper.xml @@ -132,7 +132,7 @@ - select distinct ${filed} from order_parts where diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml new file mode 100644 index 000000000..795ca3b16 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/pack/OrderPackageMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + UPDATE order_package + + SET deleted = true + + WHERE organ_id = #{organId} + and order_id = #{orderId} + and id in + + #{packIds} + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml index 3bd3e1de8..1caa4916e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plan/PlanMapper.xml @@ -168,10 +168,10 @@ group by date; - - select ${filed} from order_plan where id = #{planId} and organ_id = #{organId} and deleted = false + select ${filed} from order_plan where organ_id = #{organId} and deleted = false and id = #{planId} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml index 3c43384c9..b55b697af 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/plate/PlateMapper.xml @@ -665,18 +665,20 @@ - + + SELECT distinct p.* + FROM order_plate p LEFT JOIN order_item i ON p.id = i.plate_id - WHERE i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted} - - AND i.body_id IN - - #{roomIdItem} - - - + WHERE i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted} + + AND i.body_id IN + + #{roomIdItem} + + + + @@ -892,6 +896,7 @@ + update order_plate @@ -937,4 +942,79 @@ + + + + + + + + + + + + + + + + + + + + + update order_plate + + set is_optimized = true + + where organ_id = #{organId} + and deleted = false + and order_id = #{orderId} + and id in + + #{plateDOList} + + + + + \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/remainplaten/RemainPlateMapper.xml b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/remainplaten/RemainPlateMapper.xml index 16f5967c0..968d56ad6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/remainplaten/RemainPlateMapper.xml +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/resources/mapper/remainplaten/RemainPlateMapper.xml @@ -3,10 +3,10 @@ - - select ${filed} from order_remain_plate where organ_id = #{organId} and plan_id = #{planId} and deleted = false + select ${filed} from order_remain_plate where organ_id = #{organId} and deleted = false and plan_id = #{planId} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/PackRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/PackRespVO.java index 18beabbc5..df566783d 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/PackRespVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/pack/vo/PackRespVO.java @@ -3,6 +3,7 @@ package com.cf.imes.module.manage.controller.admin.pack.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.Setter; import java.time.LocalDateTime; import java.util.List; @@ -10,6 +11,7 @@ import java.util.List; @Schema(description = "管理后台 - 生产单表 order_{N} Response VO") @Data +@Setter public class PackRespVO { @@ -86,8 +88,11 @@ public class PackRespVO { private Long pendingNum; - @Schema(description = "生产单对应的板材ID") - private List plateId; + @Schema(description = "生产单对应的板材ID集") + private List plateIdList; + + @Schema(description = "生产单对应的包裹ID集") + private List packIdList; // @Schema(description = "生产单对应的板件信息", requiredMode = Schema.RequiredMode.REQUIRED) // List plateDetailsRespVO; diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.java index 5aa4081b6..ba45e6d7d 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.java @@ -51,10 +51,11 @@ public interface OrderPackageMapper extends BaseMapperX { - default OrderPackageDO selectByPackId(Long packId,Long organId) { + default OrderPackageDO selectByPackId(Long packId,Long orderId,Long organId) { return selectOne(new LambdaQueryWrapperX() .eq(OrderPackageDO::getOrganId, organId) .eq(OrderPackageDO::getDeleted,false) + .eqIfPresent(OrderPackageDO::getOrderId,orderId) .eqIfPresent(OrderPackageDO::getId, packId)); } @@ -99,4 +100,13 @@ public interface OrderPackageMapper extends BaseMapperX { List selectPackListByOrderId(@Param("orderId") Long orderId,@Param("organId") Long organId); + + default List selectPackStatusList(Long orderId,Long organId) { + return selectList(new LambdaQueryWrapperX() + .eq(OrderPackageDO::getOrganId,organId) + .eq(OrderPackageDO::getDeleted,false) + .eq(OrderPackageDO::getStatus,OrderPackageStatusEnum.PACKAGED.getStatus()) + .eqIfPresent(OrderPackageDO::getOrderId, orderId)); + } + } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPrepackagedMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPrepackagedMapper.java index 806c888f3..c945a2c3c 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPrepackagedMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/pack/OrderPrepackagedMapper.java @@ -27,4 +27,11 @@ public interface OrderPrepackagedMapper extends BaseMapperX .eqIfPresent(OrderPrepackagedDO::getOrderId, orderId)); } + + default int deletePacked(Long orderId, Long organId) { + return delete(new LambdaQueryWrapperX() + .eq(OrderPrepackagedDO::getOrganId, organId) + .eqIfPresent(OrderPrepackagedDO::getOrderId, orderId)); + } + } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.java index c8e47bfb1..42c7c1a36 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.java @@ -45,6 +45,7 @@ public interface OrderPlateMapper extends BaseMapperX { default List selectplateByPlateNo(Long plateNo, Long orderId, Long organId) { return selectList(new LambdaQueryWrapperX() .eq(OrderPlateDO::getOrganId, organId) + .eq(OrderPlateDO::getDeleted,false) .eq(OrderPlateDO::getOrderId, orderId) .likeIfPresent(OrderPlateDO::getPlateNo, plateNo.toString()) .select(OrderPlateDO::getId)); diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.java index ba7156913..0d6ddea53 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.java @@ -91,9 +91,10 @@ public interface OrderItemMapper extends BaseMapperX { } - default List selectPackByPlateId(List plateId, Long organId) { + default List selectPackByPlateId(List plateId,Long orderId ,Long organId) { return selectList(new LambdaQueryWrapperX() .eq(OrderItemDO::getOrganId, organId) + .eqIfPresent(OrderItemDO::getOrderId,orderId) .inIfPresent(OrderItemDO::getPlateId, plateId) .select(OrderItemDO::getPackageId)); } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java index 77f220215..32f2c7d3b 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/pack/PackServiceImpl.java @@ -136,6 +136,10 @@ public class PackServiceImpl implements PackService { // 查询查询分页 packRespVOS = ordersMapper.selectOrderIdList(page, pageReqVO, getUserOrganId()); + if (CollectionUtil.isEmpty(packRespVOS.getRecords())) { + return new PageResult<>(); + } + orderIds.addAll(packRespVOS.getRecords().stream().map(PackRespVO::getId).toList()); if (orderIds.isEmpty()) { @@ -150,8 +154,8 @@ public class PackServiceImpl implements PackService { AssertUtils.notEmpty(packRespVOList, ErrorCodeConstants.ORDER_PLATE_ERROR); for (PackRespVO packRespVO : packRespVOList) { - packRespVO.setTotalPieceCount((long) packRespVO.getPlateId().size()); - packRespVO.setPlateId(null); + packRespVO.setTotalPieceCount((long) packRespVO.getPlateIdList().size()); + packRespVO.setPlateIdList(null); } @@ -159,15 +163,21 @@ public class PackServiceImpl implements PackService { List respVOS = orderPackageMapper.selectPackPage(orderIds, getUserOrganId()); + for (PackRespVO packRespVO : respVOS) { + packRespVO.setPackCount((long) packRespVO.getPackIdList().size()); + packRespVO.setPackIdList(null); + } + + // 查询当前生产单已经打包的板材数量 List plateNum = orderPackageMapper.selectPackPieceCount(orderIds, getUserOrganId()); - for (PackRespVO packRespVO : plateNum) { - packRespVO.setPackPieceCount((long) packRespVO.getPlateId().size()); - packRespVO.setPlateId(null); + packRespVO.setPackPieceCount((long) packRespVO.getPlateIdList().size()); + packRespVO.setPlateIdList(null); } + for (PackRespVO record : packRespVOS.getRecords()) { // 板材总数 @@ -181,9 +191,6 @@ public class PackServiceImpl implements PackService { } - if (CollectionUtil.isEmpty(packRespVOS.getRecords())) { - return new PageResult<>(); - } return new PageResult<>(packRespVOS.getRecords(), packRespVOS.getTotal()); @@ -270,6 +277,10 @@ public class PackServiceImpl implements PackService { List orderPackageVOS = orderPackageMapper.selectPackListByOrderId(reqVO.getOrderId(), getUserOrganId()); + if(orderPackageVOS.isEmpty()){ + return new ArrayList<>(); + } + OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId()); // AssertUtils.notEmpty(orderPackageVOS,orderDO,ORDER_PLATE_ERROR); @@ -297,7 +308,6 @@ public class PackServiceImpl implements PackService { if (reqVO.getPlateNo() != null) { - List plateId = orderPlateMapper.selectplateByPlateNo(reqVO.getPlateNo(), reqVO.getOrderId(), getUserOrganId()) .stream().map(OrderPlateDO::getId).toList(); @@ -305,7 +315,7 @@ public class PackServiceImpl implements PackService { return null; } - packId = orderItemMapper.selectPackByPlateId(plateId, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); + packId = orderItemMapper.selectPackByPlateId(plateId,reqVO.getOrderId() ,getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList(); } @@ -314,8 +324,8 @@ public class PackServiceImpl implements PackService { queryWrapperX .eq("o.organ_id", getUserOrganId()) .eq("o.deleted", false) - .eq("op.deleted", false) .eq("o.id", reqVO.getOrderId()) + .eq("op.deleted", false) .likeIfPresent("op.package_no", reqVO.getPackageNo()) .inIfPresent("op.id", packId) .eqIfPresent("op.status", reqVO.getPackStatus()) @@ -391,10 +401,10 @@ public class PackServiceImpl implements PackService { } - OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(reqVO.getPackId(), getUserOrganId()); + OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(reqVO.getPackId(),reqVO.getOrderId(), getUserOrganId()); List orderItemDOS = orderItemMapper.selectPackList(reqVO.getPackId(), reqVO.getOrderId(), getUserOrganId()); - List partsList = orderItemDOS.stream().map(OrderItemDO::getPartsId).toList(); + List partsList = orderItemDOS.stream().map(OrderItemDO::getPartsId).distinct().toList(); // 如果此时删除的包裹配件数量等于查询出来的配件数量,且新增的板材数量不为0,更改包裹的类型 @@ -447,6 +457,9 @@ public class PackServiceImpl implements PackService { public OrderPackRespVO unpacking(Long packageID) { OrderPackageDO packageDO = orderPackageMapper.selectById(packageID); + + AssertUtils.notEmpty(packageDO,ORDER_PACK_DATA_ERROR ); + packageDO.setStatus(OrderPackageStatusEnum.UNPACKED.getStatus()); orderPackageMapper.updateById(packageDO); return typeConversion(packageDO); @@ -484,9 +497,9 @@ public class PackServiceImpl implements PackService { } - OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(packageVO.getPackId(), getUserOrganId()); + OrderPackageDO orderPackageDO = orderPackageMapper.selectByPackId(packageVO.getPackId(),packageVO.getOrderId(), getUserOrganId()); List orderItemDOS = orderItemMapper.selectPackList(packageVO.getPackId(), packageVO.getOrderId(), getUserOrganId()); - List plateList = orderItemDOS.stream().map(OrderItemDO::getPlateId).toList(); + List plateList = orderItemDOS.stream().map(OrderItemDO::getPlateId).distinct().toList(); // 如果此时删除的包裹板材数量等于查询出来的板材数量,且新增的配件数量不为0,更改包裹的类型 @@ -560,11 +573,8 @@ public class PackServiceImpl implements PackService { OrderDO orderDO = ordersMapper.selectById(orderId); -// if(orderDO.getFinishTime() != null){ -// return; -// } - // 修改生产单的打包状态未已打包 + // 修改生产单的打包状态为已打包 orderDO.setPackaged(OrderPackageStatusEnum.PACKAGED.getStatus()); ordersMapper.updateById(orderDO); @@ -579,7 +589,7 @@ public class PackServiceImpl implements PackService { List orderPackageDOS = orderPackageMapper.selectPackStatus(orderId, getUserOrganId()); - return orderPackageDOS.stream().map(m -> typeConversion(m)).collect(Collectors.toList()); + return orderPackageDOS.stream().map(this::typeConversion).collect(Collectors.toList()); } @@ -608,20 +618,52 @@ public class PackServiceImpl implements PackService { .stream().map(OrderItemDO::getPartsId) .distinct() .toList(); + if(partsIds.isEmpty()){ + return; + } orderPartsMapper.deleteOrderParts(partsIds, reqVO.getOrderId(), getUserOrganId()); orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()); - orderItemMapper.deleteParts(reqVO.getPackageId(), reqVO.getOrderId(), partsIds, getUserOrganId()); + + List orderPackageDOS = orderPackageMapper.selectPackStatusList(reqVO.getOrderId(), getUserOrganId()); + + if(orderPackageDOS.isEmpty()){ + + OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId()); + + orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); + + ordersMapper.updateById(orderDO); + + } + return; } + + orderPackageMapper.updateParts(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()); orderItemMapper.deleteOrderPack(reqVO.getPackageId(), reqVO.getOrderId(), getUserOrganId()); + orderPrepackagedMapper.deletePacked(reqVO.getOrderId(),getUserOrganId()); + + + List orderPackageDOS = orderPackageMapper.selectPackStatusList(reqVO.getOrderId(), getUserOrganId()); + + if(orderPackageDOS.isEmpty()){ + + OrderDO orderDO = ordersMapper.selectById(reqVO.getOrderId()); + + orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus()); + + ordersMapper.updateById(orderDO); + + } + } @@ -660,7 +702,6 @@ public class PackServiceImpl implements PackService { orderItemMapper.insert(orderItemDO); // 查看新增的包裹信息 - /* return orderPackageMapper.selectByPackId(orderPackageDO.getId());*/ return typeConversion(orderPackageDO); @@ -684,7 +725,7 @@ public class PackServiceImpl implements PackService { orderParts.setType("外部配件"); orderPartsMapper.insert(orderParts); - // 在生产单明细表中添加数据(生产单号,配件ID,包裹ID,部件数量(目前一直为1)) + // 在生产单明细表中添加数据(生产单号,配件ID,包裹ID,部件数量) OrderItemDO orderItemDO = new OrderItemDO(); orderItemDO.setOrderId(reqVO.getOrderId()); orderItemDO.setPartsId(orderParts.getId()); diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/query/ProductionStatusServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/query/ProductionStatusServiceImpl.java index f1f6a6aaa..750b68bbc 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/query/ProductionStatusServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/query/ProductionStatusServiceImpl.java @@ -219,8 +219,6 @@ public class ProductionStatusServiceImpl implements ProductionStatusService { plateDetailsRespVO.setProcessGroup(name); } -// Page packageDetailsRespVOPage = page.setRecords(packageDetailsRespVOS); - return new PageResult<>(packageDetailsRespVOS.getRecords(), packageDetailsRespVOS.getTotal()); diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.xml b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.xml index 101529d03..612528ec4 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.xml +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/pack/OrderPackageMapper.xml @@ -5,10 +5,12 @@ - - + + - + + + @@ -19,7 +21,7 @@ select order_id as orderId, - count(id) as packCount + id as packId from order_package @@ -35,8 +37,6 @@ #{id} - group by order_id - @@ -50,7 +50,7 @@ oi.plate_id as plateId from order_package op - left join order_item oi on op.organ_id = oi.organ_id and op.id = oi.package_id + left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.package_id where diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.xml b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.xml index 858b45ead..f4a983ea2 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.xml +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/plate/OrderPlateMapper.xml @@ -178,7 +178,7 @@ - + diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/process/OrdersMapper.xml b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/process/OrdersMapper.xml index fafb23ab3..e2367ba45 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/process/OrdersMapper.xml +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/process/OrdersMapper.xml @@ -172,7 +172,7 @@ organ_id =#{organId} and deleted = false - and status != 0 + and status in (1,2,3,4) and id like concat('%', #{pageReqVO.orderId},'%') @@ -200,7 +200,7 @@ - order by create_time desc + order by order_date desc diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.xml b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.xml index 3123e4d65..d64a2cf6f 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.xml +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/com/cf/imes/module/manage/dal/mysql/query/OrderItemMapper.xml @@ -156,7 +156,7 @@ - update order_item oi + update order_item set package_id = #{packId} 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 0a94a4c62..7ea78c920 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 @@ -211,11 +211,12 @@ public interface ErrorCodeConstants { ErrorCode THE_CURRENT_BRAND_OF_THE_MACHINE_EXISTS = new ErrorCode(1_002_029_008, "当前机台配置的模板中,该品牌已存在,请重新输入品牌名称"); ErrorCode THE_MODEL_OF_THE_MACHINE_DOES_NOT_EXIST = new ErrorCode(1_002_029_009, "该型号的机台不存在,请进行配置"); ErrorCode THE_CURRENT_BRAND = new ErrorCode(1_002_029_010, "品牌ID错误,或品牌不存在"); - ErrorCode MACHINE_NUM_ERROR = new ErrorCode(1_002_029_011, "当前模板创建的机台数量已达到最大值,无法继续创建"); + ErrorCode MACHINE_NUM_ERROR = new ErrorCode(1_002_029_011, "当前组织该类型的机台创建已达到最大值,无法继续创建"); ErrorCode MACHINE_NAME_ERROR = new ErrorCode(1_002_029_012, "当前机台名称已存在,请重新输入机台名称"); ErrorCode MACHINETEMPLATE_NAME_ERROR = new ErrorCode(1_002_029_013, "当前机台模板的名称已存在,请重新输入机台模板名称"); ErrorCode LABELINGMACHINE_RELATED_DATA_ERROR = new ErrorCode(1_002_029_014, "当前机台关联的贴标机数据有误,请在高级配置中重新配置贴标机或选择其他模板"); ErrorCode DRILLMACHINE_RELATED_DATA_ERROR = new ErrorCode(1_002_029_015, "当前机台关联的钻孔机数据有误,请在钻孔模块中重新配置钻孔机或选择其他模板"); + ErrorCode MACHINE_DATA_ERROR = new ErrorCode(1_002_029_016, "当前组织还未进行机台授权,请联系组织管理员在基础管理里对当前组织进行机台授权,或联系客服进行授权"); // ========== 标签模板 1-002-300-000 ========== @@ -287,6 +288,16 @@ public interface ErrorCodeConstants { //=========== 断言提示信息 1-002-041-000 ============ ErrorCode ORDER_DATE_ERROR = new ErrorCode(1_002_041_001, "生产单信息不存在,请重新进入或切换生产单"); ErrorCode ORDER_PLATE_ERROR = new ErrorCode(1_002_041_002, "生产单对应的板材数据有异常,请查看板材信息或联系客服"); + ErrorCode INSERT_PLATE_DATE_ERROR = new ErrorCode(1_002_041_003, "新增排单的板材数据有误,请重新新增"); + ErrorCode ORDER_PLAN_DATE_ERROR = new ErrorCode(1_002_041_004, "排单信息不存在,请重新进入或切换排单"); + ErrorCode ORDER_PLAN_OPTIMIZE_ERROR = new ErrorCode(1_002_041_005, "排单的优化数据异常,请将该排单重新优化"); + ErrorCode ORDER_PLATE_MODEL_DATE_ERROR = new ErrorCode(1_002_041_006, "生产单对应的板材造型数据为空,请检查板材信息或者联系客服"); + ErrorCode ORDER_PLAN_PLATE_ERROR = new ErrorCode(1_002_041_007, "当前排单对应的板材数据有异常,请查看板材信息或联系客服"); + ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_002_041_008, "当前排单对应的生产单数据有异常,请查看生产单信息或联系客服"); + ErrorCode ORDER_PLAN_PLATE_MODEL_DATE_ERROR = new ErrorCode(1_002_041_009, "当前排单对应的板材造型数据为空,请检查板材信息或者联系客服"); + ErrorCode ORDER_GOODS_DATA_ERROR = new ErrorCode(1_002_041_010, "当前大板数据异常,请检查大板信息或者联系客服"); + ErrorCode ORDER_PACK_DATA_ERROR = new ErrorCode(1_002_041_011, "当前包裹数据为空,请重新查看包裹数据或联系客服"); + diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/DataSourceController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/DataSourceController.java index 338b3cd06..6910d4dce 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/DataSourceController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/DataSourceController.java @@ -1,33 +1,29 @@ package com.cf.imes.module.system.controller.admin.datasource; -import com.cf.imes.framework.es.core.valid.CreateGroup; -import org.springframework.web.bind.annotation.*; -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 java.util.*; -import java.io.IOException; - -import com.cf.imes.framework.common.pojo.PageParam; import com.cf.imes.framework.common.pojo.CommonResult; +import com.cf.imes.framework.common.pojo.PageParam; 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 static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*; - import com.cf.imes.module.system.controller.admin.datasource.vo.*; import com.cf.imes.module.system.dal.dataobject.datasource.DataSourceDO; import com.cf.imes.module.system.service.datasource.DataSourceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static com.cf.imes.framework.common.pojo.CommonResult.success; +import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 系统数据源") @RestController @@ -90,9 +86,9 @@ public class DataSourceController { } - @PostMapping("/create") - @Operation(summary = "新增数据源字段") - @PreAuthorize("@ss.hasPermission('system:data-source:create')") +// @PostMapping("/create") +// @Operation(summary = "新增数据源字段") +// @PreAuthorize("@ss.hasPermission('system:data-source:create')") public CommonResult createDataSource(@Validated @RequestBody List createReqVO) { dataSourceService.createDataSource(createReqVO); @@ -111,6 +107,36 @@ public class DataSourceController { } + + @GetMapping("/getKeyNameData") + @Operation(summary = "数据源对应字段数据查询") + @Parameters({ + @Parameter(name = "machineId", description = "机台ID", required = true), + @Parameter(name = "planId", description = "排单ID", required = true) + }) + //@PreAuthorize("@ss.hasPermission('system:data-source:query')") + public CommonResult getKeyNameData(@RequestParam("machineId") Long machineId,@RequestParam("planId") Long planId) { + + String keyNameData = dataSourceService.getKeyNameData(machineId,planId); + + return success(keyNameData); + } + + + + @PutMapping("/insertKeyNameData") + @Operation(summary = "保存机台数据源对应的数据源字段") + //@PreAuthorize("@ss.hasPermission('system:data-source:query')") + public CommonResult saveMachineKeyName(@RequestBody List machineDataSourceDOS ) { + + return success(dataSourceService.saveMachineKeyName(machineDataSourceDOS)); + + + } + + + + @GetMapping("/export-excel") @Operation(summary = "导出系统数据源 Excel") @PreAuthorize("@ss.hasPermission('system:data-source:export')") diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/dataQuery/DataQuery.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/dataQuery/DataQuery.java new file mode 100644 index 000000000..7a1498b0a --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/dataQuery/DataQuery.java @@ -0,0 +1,87 @@ +package com.cf.imes.module.system.controller.admin.datasource.dataQuery; + + +import com.cf.imes.module.system.dal.mysql.machine.MachineMapper; +import com.cf.imes.module.system.dal.mysql.organ.OrganMapper; +import com.cf.imes.module.system.dal.mysql.user.AdminUserMapper; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; +import java.util.List; + +import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; + + + +/** + * @author Administrator + */ +@Configuration +public class DataQuery { + + String SEPARATE = "select"; + + @Resource + private OrganMapper organMapper; + + + @Resource + private AdminUserMapper userMapper; + + @Resource + private MachineMapper machineMapper; + + + + public String dataGetOrgan(String filed) { + +// String sql = "select from system_organization where id = #{id} and deleted = false"; +// +// sql = sql.replace("#{id}", String.valueOf(getUserOrganId())); + + + return toJsonString(organMapper.selectOrganDataSource(conversion(filed),getUserOrganId())); + + } + + + + + + public String dataGetUser(String filed, List nameList) { + + +// String sql = "select from system_users where nickname in (#{nameList}) and deleted = false and organ_id = #{organId}"; +// +// sql = sql.replace("#{organId}", getUserOrganId() + "").replace("#{orderIds}", nameList.toString().replaceAll("\\[|\\]", "")); + + + return toJsonString(userMapper.selectUserDataSource(conversion(filed),getUserOrganId(),nameList)); + + + + } + + + public String dataGetMachine(String filed,Long machineId) { + + + return toJsonString(machineMapper.selectMachineDataSource(conversion(filed),machineId,getUserOrganId())); + + } + + + // 字符串处理 + private String conversion(String filed) { + + // 去除字段中的 【 】 + return filed.replaceAll("\\[|\\]", ""); + + // 使用正则表达式在单词后插入字符串 +// return sql.replaceAll(SEPARATE + "(\\b)", SEPARATE + " " + toInsert); + + } + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/vo/DataSource.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/vo/DataSource.java new file mode 100644 index 000000000..d125934e2 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/vo/DataSource.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.system.controller.admin.datasource.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Schema(description = "数据源字段信息") +public class DataSource { + + @Schema(description = "父级ID") + private Integer parentSourceId; + + @Schema(description = "数据源ID") + private Long sourceId; + + @Schema(description = "数据源字段名称") + private String keyName; + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/vo/MachineDataSourceDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/vo/MachineDataSourceDO.java new file mode 100644 index 000000000..1ac5ac007 --- /dev/null +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/datasource/vo/MachineDataSourceDO.java @@ -0,0 +1,28 @@ +package com.cf.imes.module.system.controller.admin.datasource.vo; + + +import com.cf.imes.framework.es.core.dal.ESDocument; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MachineDataSourceDO extends ESDocument { + + + @Schema(description = "机台ID") + private Long machineId; + + + @Schema(description = "数据源对象") + private List dataSource; + + +} diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/MachineAuthController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/MachineAuthController.java index c2c8f6ad3..4d57ea989 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/MachineAuthController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/MachineAuthController.java @@ -29,7 +29,7 @@ public class MachineAuthController { @PutMapping("insert-organ-auth") - @Operation(summary = "组织机台授权信息更新") + @Operation(summary = "组织机台授权信息新增") @PreAuthorize("@ss.hasPermission('machine-auth::update')") public CommonResult authInsert(@RequestBody MachineOrgAuthReq vo) { return success(machineService.authInsert(vo)); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/MachineOrgAuthReq.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/MachineOrgAuthReq.java index 11ac6ed2e..bda650983 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/MachineOrgAuthReq.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/MachineOrgAuthReq.java @@ -3,9 +3,6 @@ package com.cf.imes.module.system.controller.admin.machine.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; - -import java.util.List; - /** * @author Beal */ @@ -36,8 +33,8 @@ public class MachineOrgAuthReq { private Integer sealedgeLimit; - @Schema(description = "授权的机台ID") - private List machineAuthIds; +// @Schema(description = "授权的机台ID") +// private List machineAuthIds; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachinePage.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachinePage.java index 0c46c5c5f..bdb5fc381 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachinePage.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachinePage.java @@ -11,8 +11,9 @@ import lombok.Data; public class OrganMachinePage extends PageParam { @Schema(description = "组织名称") - private String organName; + private Long organId; + + @Schema(description = "组织状态(0正常 1停用)") + private Integer status; - @Schema(description = "机台名称") - private String machineName; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachineResp.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachineResp.java index 15ab134ba..cc30b681b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachineResp.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/machine/vo/OrganMachineResp.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + /** * @author Beal */ @@ -18,6 +20,9 @@ public class OrganMachineResp { @Schema(description = "组织id") private Long organId; + @Schema(description = "组织状态(0正常 1停用)") + private Integer status; + @Schema(description = "组织名称") private String organName; @@ -41,4 +46,13 @@ public class OrganMachineResp { @Schema(description = "封边机授权数量") private Integer sealedgeLimit; + + @Schema(description = "操作人") + private String updater; + + + @Schema(description = "修改时间") + private LocalDateTime updateTime; + + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/machine/MachineMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/machine/MachineMapper.java index bda6c58ce..f17529cea 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/machine/MachineMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/machine/MachineMapper.java @@ -74,5 +74,5 @@ public interface MachineMapper extends BaseMapperX { } - + List selectMachineDataSource(@Param("filed") String filed,@Param("machineId") Long machineId,@Param("organId") Long organId); } \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/organ/OrganMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/organ/OrganMapper.java index b6240f93d..f6d366761 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/organ/OrganMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/organ/OrganMapper.java @@ -90,7 +90,7 @@ public interface OrganMapper extends BaseMapperX { } - List selectTestSQL(@Param("sql") String sql); + List selectOrganDataSource(@Param("filed") String filed,@Param("organId") Long organId); /** diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java index 93fb6eeb2..0cb6d3e8e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/setting/SettingMapper.java @@ -1,15 +1,10 @@ package com.cf.imes.module.system.dal.mysql.setting; -import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.module.system.controller.admin.machine.vo.MachinePageReqVO; -import com.cf.imes.module.system.dal.dataobject.machinetemplate.MachineTemplateDO; import com.cf.imes.module.system.dal.dataobject.setting.PackageConfigDO; import org.apache.ibatis.annotations.Mapper; -import java.util.Collection; - @Mapper public interface SettingMapper extends BaseMapperX { @@ -23,4 +18,11 @@ public interface SettingMapper extends BaseMapperX { .eqIfPresent(PackageConfigDO::getType,type)); } + + default int deleteSetting(Integer type,Long userId, Long organId) { + return delete(new LambdaQueryWrapperX() + .eq(PackageConfigDO::getOrganId, organId) + .eq(PackageConfigDO::getUserId, userId) + .eq(PackageConfigDO::getType,type)); + } } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java index 754c573d7..bfee9b928 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/user/AdminUserMapper.java @@ -182,4 +182,8 @@ public interface AdminUserMapper extends BaseMapperX { */ @Delete("DELETE FROM system_users WHERE id = #{id}") int physicalDeleteById(@Param("id") Long id); + + + List selectUserDataSource(@Param("filed") String filed,@Param("organId") Long organId,@Param("nameList") List nameList); + } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceService.java index 4fb081507..d0efa70cc 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceService.java @@ -1,13 +1,11 @@ package com.cf.imes.module.system.service.datasource; -import java.util.*; +import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.system.controller.admin.datasource.vo.*; import com.cf.imes.module.system.dal.dataobject.datasource.DataSourceDO; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.common.pojo.PageParam; -import com.cf.imes.module.system.dal.dataobject.datasource.DataSourceFiledDO; import javax.validation.Valid; +import java.util.List; /** * 系统数据源 Service 接口 @@ -59,4 +57,9 @@ public interface DataSourceService { List list(); List getList(Integer type); + + String getKeyNameData(Long machineId,Long planId); + + Boolean saveMachineKeyName(List machineDataSourceDOS); + } \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceServiceImpl.java index 5175af7c4..86558e733 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/datasource/DataSourceServiceImpl.java @@ -1,28 +1,37 @@ package com.cf.imes.module.system.service.datasource; -import com.alibaba.fastjson.JSON; +import cn.hutool.core.collection.CollectionUtil; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch.core.*; +import co.elastic.clients.elasticsearch.core.search.Hit; +import com.cf.imes.framework.common.enums.MachineTypeEnum; +import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.pojo.PageResult; +import com.cf.imes.framework.es.core.service.ESDocumentService; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.cf.imes.module.executor.api.plan.OrderPlanApi; +import com.cf.imes.module.system.controller.admin.datasource.dataQuery.DataQuery; +import com.cf.imes.module.system.controller.admin.datasource.vo.*; +import com.cf.imes.module.system.dal.dataobject.datasource.DataSourceDO; import com.cf.imes.module.system.dal.dataobject.datasource.DataSourceFiledDO; import com.cf.imes.module.system.dal.mysql.datasource.DataSourceFiledMapper; +import com.cf.imes.module.system.dal.mysql.datasource.DataSourceMapper; +import com.cf.imes.module.system.dal.mysql.machine.MachineMapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; +import javax.annotation.Resource; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; -import com.cf.imes.module.system.controller.admin.datasource.vo.*; -import com.cf.imes.module.system.dal.dataobject.datasource.DataSourceDO; -import com.cf.imes.framework.common.pojo.PageResult; -import com.cf.imes.framework.common.pojo.PageParam; -import com.cf.imes.framework.common.util.object.BeanUtils; -import com.cf.imes.module.system.dal.mysql.datasource.DataSourceMapper; - -import javax.annotation.Resource; - +import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_ERROR_DELETE; +import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLAN_NOT_ALLOW_DELETE; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; +import static com.cf.imes.framework.common.util.object.BeanUtils.toBean; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.DATA_SOURCE_NOT_EXISTS; /** * 系统数据源 Service 实现类 @@ -31,6 +40,7 @@ import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; */ @Service @Validated +@Slf4j public class DataSourceServiceImpl implements DataSourceService { @Resource @@ -39,6 +49,24 @@ public class DataSourceServiceImpl implements DataSourceService { @Resource private DataSourceFiledMapper dataSourceFiledMapper; + @Resource + private MachineMapper machineMapper; + + @Resource + private ESDocumentService esDocumentService; + + @Resource + private ElasticsearchClient elasticsearchClient; + + @Resource + private OrderPlanApi orderPlanApi; + + @Resource + private DataQuery dataQuery; + + + String MACHINE_DATA_SOURCE = "imes_machine_data_source"; + @Override public void createDataSource(List createReqVO) { @@ -252,7 +280,7 @@ public class DataSourceServiceImpl implements DataSourceService { // 校验存在 validateDataSourceExists(updateReqVO.getId()); // 更新 - DataSourceDO updateObj = BeanUtils.toBean(updateReqVO, DataSourceDO.class); + DataSourceDO updateObj = toBean(updateReqVO, DataSourceDO.class); dataSourceMapper.updateById(updateObj); } @@ -388,7 +416,7 @@ public class DataSourceServiceImpl implements DataSourceService { List dataSourceDOS = dataSourceMapper.selectByType(); - List dataSourceFiledReqVOS = BeanUtils.toBean(dataSourceDOS, DataSourceFiledReqVO.class); + List dataSourceFiledReqVOS = toBean(dataSourceDOS, DataSourceFiledReqVO.class); List ids = dataSourceDOS.stream().map(DataSourceDO::getId).toList(); @@ -422,7 +450,7 @@ public class DataSourceServiceImpl implements DataSourceService { // 获取没有key的节点ID List ids = parentList.stream() - .filter(f -> f.getKeyName() == null) +// .filter(f -> f.getKeyName() == null) .map(DataSourceFiledReqVO::getId) .distinct() .toList(); @@ -450,6 +478,319 @@ public class DataSourceServiceImpl implements DataSourceService { } + + + @Override + public String getKeyNameData(Long machineId,Long planId) { + + + StringBuilder data = new StringBuilder(); + + List parentSourceId = new ArrayList<>(); + + List dataSourceDOS = buildMachineDataSourceByMachineId(machineId, MACHINE_DATA_SOURCE); + + + for (MachineDataSourceDO dataSourceDO : dataSourceDOS) { + + parentSourceId.addAll(dataSourceDO.getDataSource().stream().map(DataSource::getParentSourceId).toList()); + + } + + parentSourceId = parentSourceId.stream().distinct().toList(); + + + for (Integer aLong : parentSourceId) { + + switch (aLong) { + + // 生产单基础信息 + // 生产单经销商信息 + // 生产单终端客户信息 + case 1543, 68, 80 -> { + String machineDataSourceKeyName = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.apiDataGetPlan(planId, machineDataSourceKeyName)); + } + + + // 生产单组织信息 + case 61 -> { + String machineDataSourceKeyName1 = getMachineDataSourceKeyName(machineId, aLong); + data.append(dataQuery.dataGetOrgan(machineDataSourceKeyName1)); + } + + + // 生产单业务员信息 + // 生产单拆单员信息 + case 74, 92 -> { + String machineDataSourceKeyName2 = getMachineDataSourceKeyName(machineId, aLong); + List nameList = orderPlanApi.apiGetOrders(planId, aLong == 74); + data.append(dataQuery.dataGetUser(machineDataSourceKeyName2, nameList)); + } + + + // 排单基础信息 + case 98 -> { + String machineDataSourceKeyName3 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.getPlan(planId, machineDataSourceKeyName3)); + } + + + // 排单板材的大板用量信息 + case 110 -> { + List machineDataSourceKeyName4 = buildMachineDataSourceByParentSourceId(machineId, aLong, MACHINE_DATA_SOURCE) + .get(0) + .getDataSource() + .stream().map(DataSource::getKeyName).toList(); + data.append(orderPlanApi.apiGetEsPlan(planId, machineDataSourceKeyName4)); + } + + + // 排单板材的余料板用量信息 + // 物料(商品)板材信息的余料信息 + case 119, 822 -> { + String machineDataSourceKeyName5 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.apiGetPlanRemainPlate(planId, machineDataSourceKeyName5)); + } + + + // 排单板件的基础信息 + // 排单板件的规格尺寸的成品尺寸信息 + // 排单板件的规格尺寸的拆单尺寸信息 + // 雕刻机加工概要信息 + // 排单钻孔机(大板上下钻)加工信息概要 + // 排单钻孔机(小板)加工信息概要 + // 板件中板材基础信息 + // 板件中的基础信息的成品尺寸 + case 140, 204, 209, 446, 552, 657, 846, 907 -> { + String machineDataSourceKeyName6 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.apiGetPlanPlate(planId, machineDataSourceKeyName6)); + } + + + // 排单板件的备注信息 + // 排单板件的规格尺寸的开料尺寸信息 + // 板件中板材基础信息的备注信息 + // 板件中基础信息的开料尺寸 + case 141, 213, 853, 908 -> { + List machineDataSourceKeyName7 = buildMachineDataSourceByParentSourceId(machineId, aLong, MACHINE_DATA_SOURCE) + .get(0) + .getDataSource() + .stream().map(DataSource::getKeyName).toList(); + data.append(orderPlanApi.apiGetEsPlate(planId, machineDataSourceKeyName7)); + } + + + // 生产单中的房间信息 + // 生产单中的柜体信息 + // 板件中的基础信息的房间信息 + // 板件中的基础信息的柜体信息 + case 1544,1545, 881, 889 -> { + String machineDataSourceKeyName8 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.apiGetPlanBodyOrRoom(planId, machineDataSourceKeyName8)); + } + + + + // 板件信息的加工组信息 + case 897 -> { + String machineDataSourceKeyName9 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.apiGetPlanGroup(planId, machineDataSourceKeyName9)); + } + + + // 物料(商品)的板材信息 + // 排单排版信息-大板信息 + case 808, 416 -> { + String machineDataSourceKeyName10 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.getGoods(planId, machineDataSourceKeyName10)); + } + + + // 物料(商品)的配件信息 + case 809 -> { + String machineDataSourceKeyName11 = getMachineDataSourceKeyName(machineId, aLong); + data.append(orderPlanApi.apiGetPlanParts(planId, machineDataSourceKeyName11)); + } + + + // 物料(商品)的配件备注信息 + case 840 -> { + List machineDataSourceKeyName12 = buildMachineDataSourceByParentSourceId(machineId, aLong, MACHINE_DATA_SOURCE) + .get(0) + .getDataSource() + .stream().map(DataSource::getKeyName).toList(); + data.append(orderPlanApi.apiGetEsParts(planId, machineDataSourceKeyName12)); + } + + // 排单信息的生产线信息 + case 1483 -> { + Integer machineType = machineMapper.selectById(machineId).getMachineType(); + if (machineType.equals(MachineTypeEnum.CUTTING.getType())){ + String machineDataSourceKeyName13 = getMachineDataSourceKeyName(machineId, aLong); + data.append(dataQuery.dataGetMachine(machineDataSourceKeyName13,machineId)); + } + } + + // 排单信息的机台信息 + case 1487 -> { + + String machineDataSourceKeyName14 = getMachineDataSourceKeyName(machineId, aLong); + data.append(dataQuery.dataGetMachine(machineDataSourceKeyName14,machineId)); + } + + + } + } + + return data.toString(); + + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean saveMachineKeyName(List machineDataSourceDOS) { + + Long machineId = machineDataSourceDOS.stream().map(MachineDataSourceDO::getMachineId).distinct().toList().get(0); + /* + * 目前数据源保存有两种方式: + * 1. 每回保存全都传过来,先将机台的原数据源删除,再重新保存 + * 2. 传过来的时候将新增的和删除的区分开来,我这边做数据处理 + * + * */ + // todo 目前先实现第一种:每回保存时传入全部数据,先删除原机台字段信息,再保存 + deleteByMachineId(machineId,MACHINE_DATA_SOURCE); + batchSaveMachineDataSource(machineDataSourceDOS); + + return Boolean.TRUE; + + } + + + public static List convertToSnakeCase(List camelCaseList) { + List snakeCaseList = new ArrayList<>(); + + // 字段ID改成数据库的形式 + camelCaseList = camelCaseList.stream().map(key -> key.replace("_", "")).toList(); + + + for (String camelCaseStr : camelCaseList) { + StringBuilder snakeCaseStr = new StringBuilder(); + + for (int i = 0; i < camelCaseStr.length(); i++) { + char c = camelCaseStr.charAt(i); + // 如果字符是大写字母,并且不是第一个字符,则添加下划线 + if (Character.isUpperCase(c) && i != 0) { + snakeCaseStr.append('_'); + } + // 转换字符为小写 + snakeCaseStr.append(Character.toLowerCase(c)); + } + + snakeCaseList.add(snakeCaseStr.toString()); + } + + return snakeCaseList; + } + + + public void batchSaveMachineDataSource(List machineDataSourceDOS) { + try { + BulkResponse bulkResponse = esDocumentService.bulkCreate(MACHINE_DATA_SOURCE, machineDataSourceDOS); + boolean errors = bulkResponse.errors(); + if (errors) { + log.error(bulkResponse.items().toString()); + throw new ServiceException(500, "未知异常"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage()); + throw new RuntimeException(e); + } + + } + + + + + + + private String getMachineDataSourceKeyName(Long machineId, Integer parentSourceId) { + + return convertToSnakeCase(buildMachineDataSourceByParentSourceId(machineId, parentSourceId, MACHINE_DATA_SOURCE) + .get(0) + .getDataSource() + .stream().map(DataSource::getKeyName).toList()) + .toString(); + + } + + + + // 根据机台ID和父级ID,查询对应的数据源字段 + private List buildMachineDataSourceByParentSourceId(Long machineId,Integer parentSourceId, String index) { + + SearchRequest.Builder builder = new SearchRequest.Builder(); + builder.index(index); + + builder.query(q -> q.bool(b -> b + .must(m->m.term(t->t.field("machineId").value(machineId))) + .must(m->m.match(t->t.field("dataSource.parentSourceId").query(parentSourceId))))); + + try { + SearchResponse search = elasticsearchClient.search(builder.build(), MachineDataSourceDO.class); + List> hits = search.hits().hits(); + if (CollectionUtil.isNotEmpty(hits)) { + return hits.stream().map(Hit::source).collect(Collectors.toList()); + } + return new ArrayList<>(); + } catch (IOException e) { + log.error(e.getMessage()); + throw new ServiceException(INTERNAL_SERVER_ERROR); + } + } + + + + // 根据机台ID查询机台对应的数据源字段信息 + private List buildMachineDataSourceByMachineId(Long machineId, String index) { + + SearchRequest.Builder builder = new SearchRequest.Builder(); + builder.index(index); + builder.query(q -> q.term(b -> b.field("machineId").value(machineId))); + + try { + SearchResponse search = elasticsearchClient.search(builder.build(), MachineDataSourceDO.class); + List> hits = search.hits().hits(); + if (CollectionUtil.isNotEmpty(hits)) { + return hits.stream().map(Hit::source).collect(Collectors.toList()); + } + return new ArrayList<>(); + } catch (IOException e) { + log.error(e.getMessage()); + throw new ServiceException(INTERNAL_SERVER_ERROR); + } + } + + + + // 根据机台ID删除对应的数据源ES信息 + public void deleteByMachineId(Long machineId, String index) { + DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder(); + builder.index(index); + builder.query(q -> q.term(t -> t.field("machineId").value(machineId))); + try { + DeleteByQueryResponse response = elasticsearchClient.deleteByQuery(builder.build()); + log.info("Deleted {} documents with planId {}", response.deleted(), machineId); + } catch (IOException e) { + log.error("Error deleting documents with planId {}: {}", machineId, e.getMessage()); + throw new ServiceException(ES_ERROR_DELETE); + } + } + + + private List conversion(String sourceId) { return Arrays.stream(sourceId.split(",")) diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/machine/MachineServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/machine/MachineServiceImpl.java index 0aea03f47..72d56a515 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/machine/MachineServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/machine/MachineServiceImpl.java @@ -42,6 +42,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.io.IOException; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -99,13 +100,19 @@ public class MachineServiceImpl implements MachineService { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); assert loginUser != null; + MachineLimitDO machineLimitDO = machineLimitMapper.selectById(loginUser.getOrganId()); + + if(machineLimitDO == null){ + throw exception(MACHINE_DATA_ERROR); + } + // 校验机台名称是否重复 MachineDO machine = machineMapper.selectMachineName(createReqVO.getName(), createReqVO.getMachineType(), getUserOrganId()); if (machine != null) { throw exception(MACHINE_NAME_ERROR); } -// validateMachineNum(createReqVO.getMachineType(), loginUser.getOrganId()); + validateMachineNum(createReqVO.getMachineType(), loginUser.getOrganId()); MachineDO machineDO; MachineTemplateDO machineTemplateDO; @@ -435,9 +442,9 @@ public class MachineServiceImpl implements MachineService { @Override public Boolean authInsert(MachineOrgAuthReq vo) { - OrganizationDO tenant = organMapper.selectById(vo.getOrganId()); + MachineLimitDO machineLimit = machineLimitMapper.selectById(vo.getOrganId()); - if (tenant != null) { + if (machineLimit != null) { throw exception(ORGAN_ALREADY_EXISTS); } @@ -448,7 +455,7 @@ public class MachineServiceImpl implements MachineService { .labelLimit(vo.getLabelLimit()) .sawLimit(vo.getSawLimit()) .sealedgeLimit(vo.getSealedgeLimit()) - .setting(vo.getMachineAuthIds().toString()) +// .setting(vo.getMachineAuthIds().toString()) .build(); machineLimitMapper.insert(machineLimitDO); @@ -465,6 +472,9 @@ public class MachineServiceImpl implements MachineService { throw exception(ORGAN_NOT_EXISTS); } + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + assert loginUser != null; + MachineLimitDO machineLimitDO = MachineLimitDO.builder() .organId(vo.getOrganId()) .cutLimit(vo.getCutLimit()) @@ -472,9 +482,12 @@ public class MachineServiceImpl implements MachineService { .labelLimit(vo.getLabelLimit()) .sawLimit(vo.getSawLimit()) .sealedgeLimit(vo.getSealedgeLimit()) - .setting(vo.getMachineAuthIds().toString()) + +// .setting(vo.getMachineAuthIds().toString()) .build(); + machineLimitDO.setUpdateTime(LocalDateTime.now()); + machineLimitDO.setUpdater(loginUser.getNickname()); machineLimitMapper.updateById(machineLimitDO); @@ -571,30 +584,18 @@ public class MachineServiceImpl implements MachineService { // 校验当前组织当前类型的机台是否达到最大创建数量 private void validateMachineNum(Integer machineType, Long organId) { - Integer machineNum = machineMapper.selectByOrganId(machineType, organId).size() + 1; + int machineNum = machineMapper.selectByOrganId(machineType, organId).size() ; MachineLimitDO machineLimitDO = machineLimitMapper.selectById(organId); - Integer authMachineNum = 0; - switch (machineType) { - - case 1: - authMachineNum = machineLimitDO.getCutLimit(); - break; - case 2: - authMachineNum = machineLimitDO.getDrillLimit(); - break; - case 3: - authMachineNum = machineLimitDO.getSawLimit(); - break; - case 4: - authMachineNum = machineLimitDO.getLabelLimit(); - break; - case 5: - authMachineNum = machineLimitDO.getSealedgeLimit(); - break; - - } + Integer authMachineNum = switch (machineType) { + case 1 -> machineLimitDO.getCutLimit(); + case 2 -> machineLimitDO.getDrillLimit(); + case 3 -> machineLimitDO.getSawLimit(); + case 4 -> machineLimitDO.getLabelLimit(); + case 5 -> machineLimitDO.getSealedgeLimit(); + default -> 0; + }; if (machineNum >= authMachineNum) { throw exception(MACHINE_NUM_ERROR); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java index c77f8cd79..f498ca65b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/setting/SettingServiceImpl.java @@ -3,7 +3,6 @@ package com.cf.imes.module.system.service.setting; import com.cf.imes.framework.common.enums.UserSettingTypeEnum; import com.cf.imes.framework.common.util.json.JsonUtils; -import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.module.system.controller.admin.setting.vo.PackageConfigReqVO; import com.cf.imes.module.system.dal.dataobject.setting.PackageConfigDO; @@ -16,7 +15,7 @@ import javax.annotation.Resource; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.util.json.JsonUtils.unzipString; import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; -import static com.cf.imes.module.system.enums.ErrorCodeConstants.*; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.CURRENTLY_NO_CONFIGURATION_AVAILABLE; @Service @@ -32,6 +31,9 @@ public class SettingServiceImpl implements SettingService{ public Long insertSetting(PackageConfigReqVO reqVO) { LoginUser loginUser = getLoginUser(); + + settingMapper.deleteSetting(reqVO.getType(),loginUser.getId(),loginUser.getOrganId()); + PackageConfigDO packageConfigDO = PackageConfigDO.builder() .userId(loginUser.getId()) .organId(loginUser.getOrganId()) diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/machine/MachineLimitMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/machine/MachineLimitMapper.xml index 485132725..462baab2f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/machine/MachineLimitMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/machine/MachineLimitMapper.xml @@ -7,24 +7,28 @@ - select sml.* + select distinct + sml.organ_id, + sml.cut_limit, + sml.drill_limit, + sml.label_limit, + sml.saw_limit, + sml.sealedge_limit, + sml.updater, + sml.update_time, + so.name as organName, + so.status from system_machine_limit sml - - left join system_organization so on sml.organ_id = so.id - left join system_machine_template smt on sml.setting like concat(smt.id, '%') + join system_organization so on sml.organ_id = so.id sml.deleted = false - and smt.deleted = false - and smt.is_enabled = true - and smt.is_default = false - and so.status = 0 - - and so.name like concat('%', #{machinePage.organName},'%') + + and sml.organ_id = #{machinePage.organId} - - and smt.name like concat('%', #{machinePage.machineName},'%') + + and so.status = #{machinePage.status} diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml index 848369dbc..f52671131 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml @@ -21,9 +21,9 @@ - - ${sql} + select ${filed} from system_organization where id = #{organId} and deleted = false diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml index 3f201c5fa..dac5339ba 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/AdminUserMapper.xml @@ -38,4 +38,19 @@ ORDER BY id DESC + + + \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/MachineMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/MachineMapper.xml index c34712671..f1ea5c8a5 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/MachineMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/process/MachineMapper.xml @@ -16,4 +16,10 @@ + + \ No newline at end of file