Merge branch 'main' of ssh://192.168.1.205:9922/cf_devdept2/cf_imes_server

This commit is contained in:
lym
2024-10-08 17:03:15 +08:00
136 changed files with 898 additions and 7257 deletions
@@ -33,6 +33,7 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_NOT_CANCEL = new ErrorCode(1_001_109_000, "生产单已排单,小板操作无效");
ErrorCode ORDER_CANCEL = new ErrorCode(1_001_109_000, "生产单未作废,还原无效");
ErrorCode ORDER_PLAN_ERROR = new ErrorCode(1_001_109_001, "选中删除对象有已开料板件,请联系管理员修改开料状态后再删除!");
ErrorCode ORDER_ERROR = new ErrorCode(1_001_109_002, "当前生产单柜体,房间已全部删除!");
// ========== 生产单 TODO 补充编号 ==========
ErrorCode MODULE_NOT_EXISTS = new ErrorCode(1_001_110_000, "模块不存在");
@@ -1,5 +1,6 @@
package com.cf.imes.module.executor.controller.admin.plan.bo;
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.OptimizeRemainPlate;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPackReqVO;
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO;
@@ -16,8 +17,6 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
@@ -61,6 +60,11 @@ public class OrderSource {
private List<PrintOrderPartsRespVO> orderPartsRespVOS;
@Schema(description = "生产单配件的备注信息")
private List<OrderPartsRemark> orderPartsRemarks;
@Schema(description = "生产单包裹信息")
private List<PrintOrderPackReqVO> orderPackReqVOS;
@@ -1,25 +1,37 @@
package com.cf.imes.module.executor.controller.admin.plan.saveOptimize;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 标签对应的生产单配件信息")
@Data
public class PrintOrderPartsRespVO {
@Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long roomId;
@Schema(description = "房间名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String roomName;
@Schema(description = "柜体ID", requiredMode = Schema.RequiredMode.REQUIRED)
private Long bodyId;
@Schema(description = "柜体名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bodyName;
@Schema(description = "加工组ID", requiredMode = Schema.RequiredMode.REQUIRED)
private List<Long> groupId;
@Schema(description = "配件 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29347")
@ExcelProperty("配件 ID")
private Long id;
@@ -27,6 +39,7 @@ public class PrintOrderPartsRespVO {
private Long orderId;
@Schema(description = "配件数量", requiredMode = Schema.RequiredMode.REQUIRED)
private Long partsNum;
@@ -51,4 +64,8 @@ public class PrintOrderPartsRespVO {
private String factory;
@Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED)
private String type;
}
@@ -45,7 +45,7 @@ public class RemainBoardList {
@Schema(description = "纹路 纹路(0正纹1可翻转2反纹)")
private Integer texture;
private Boolean texture;
@@ -53,4 +53,17 @@ public class RemainBoardList {
private Boolean isHandAdd;
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
private String brand;
@Schema(description = "仓库", requiredMode = Schema.RequiredMode.REQUIRED)
private String store;
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
private String remark;
}
@@ -42,6 +42,8 @@ public class OrderGoodsResp {
@Schema(description = "板件数量")
private int num;
@Schema(description = "备注")
private String remark;
@Schema(description = "生产单信息")
private List<OrderRespVOCopy> orderList;
@@ -1,14 +1,10 @@
package com.cf.imes.module.executor.dal.dataobject.plan;
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.time.LocalDateTime;
/**
* 生产单开料排单 DO
@@ -1,12 +1,8 @@
package com.cf.imes.module.executor.dal.dataobject.rawgoods;
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
/**
* 生产单设计商品表 order_raw_goods_{N} DO
@@ -75,7 +75,7 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
}
// 删板材,批量
void updateDeletedById(@Param("ids") List<Long> ids, @Param("deleted") Integer deleted, @Param("organId") Long organId);
void updateDeletedById(@Param("orderId") Long orderId,@Param("ids") List<Long> ids, @Param("deleted") Integer deleted, @Param("organId") Long organId);
void deletedById(@Param("ids") List<Long> ids, @Param("organId") Long organId);
@@ -108,15 +108,6 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
default List<GoodsDO> selectListByGoodsIdList(List<String> goodsIds,List<Long> orderIds, Long organId) {
return selectList(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId)
.eq(GoodsDO::getDeleted, false)
.in(GoodsDO::getGoodsId, goodsIds)
.in(GoodsDO::getOrderId, orderIds));
}
List<GoodsDO> selectPlanGoodsDataSource(@Param("filed") String filed,@Param("planId") Long planId ,@Param("organId") Long organId);
@@ -133,9 +124,6 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
IPage<OrderGoodsResp> selectOrderGoodsList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<GoodsDO> wrapper);
List<PlateInfoVO> selectOrderGoodsPlateList(@Param("planIds") List<Long> planIds, @Param("organId") Long organId);
@@ -160,7 +148,6 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
}
List<OrderGoodsResp> selectGoodsListByGoodsId(@Param(Constants.WRAPPER) Wrapper<GoodsDO> wrapper);
IPage<PlateResList> selectPlanGoodsListByPlanId(@Param("page") IPage<PlateResList> page, @Param(Constants.WRAPPER) Wrapper<GoodsDO> wrapper);
@@ -168,23 +155,23 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
List<GoodsReqVO> selectGoodsAndRemainPlate(@Param("ids") List<Long> ids,@Param("organId") Long organId);
IPage<OrderRespVOCopy> selectNoPlanOrderList(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper<GoodsDO> wrapper);
default int deletePlanGoods(List<Long> ids, Long organId) {
default int deletePlanGoods(List<Long> orderIds,List<Long> ids, Long organId) {
return update(new LambdaUpdateWrapper<GoodsDO>()
.set(GoodsDO::getPlanId, 0)
.eq(GoodsDO::getOrganId, organId)
.in(GoodsDO::getOrderId, orderIds)
.in(GoodsDO::getPlanId, ids));
}
default List<GoodsDO> selectPlanGoodsListByPlanIdList(List<Long> planIds, Long organId) {
default List<GoodsDO> selectPlanGoodsListByPlanIdList(List<Long> orderIds,List<Long> planIds, Long organId) {
return selectList(new LambdaQueryWrapperX<GoodsDO>()
.eq(GoodsDO::getOrganId, organId)
.eq(GoodsDO::getDeleted, false)
.inIfPresent(GoodsDO::getOrderId,orderIds)
.in(GoodsDO::getPlanId,planIds)
.select(GoodsDO::getGoodsId,GoodsDO::getId,GoodsDO::getOrderId));
@@ -196,7 +183,6 @@ public interface GoodsMapper extends BaseMapperX<GoodsDO> {
List<OrderRoomBodyList> selectNoPlanRoomBody(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
IPage<OrderRespVOCopy> selectOrderPlate(@Param("page") IPage page,@Param("organId") Long organId);
List<Long> selectPlanOrderList(@Param("orderId") Long orderId,@Param("roomIds") Set<Long> roomIds, @Param("bodyId") Long bodyId,@Param("organId") Long organId);
@@ -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.vo.OrderRespVOCopy;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailRespVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO;
@@ -79,17 +78,6 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
default List<OrderItemDO> selectPlateIdList(List<Long> plateIds, Long organId) {
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
.eq(OrderItemDO::getOrganId,organId)
.inIfPresent(OrderItemDO::getPlateId, plateIds)
.select(OrderItemDO::getBodyId,OrderItemDO::getRoomId,OrderItemDO::getGroupId));
}
default List<OrderItemDO> selectPartsList(List<Long> partIds,List<Long> orderIds, Long organId) {
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
@@ -100,12 +88,11 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
}
IPage<OrderRespVOCopy> selectTestNum(@Param("page") IPage page,@Param("organId") Long organId);
default List<OrderItemDO> selectPackId(List<Long> bodyIds, Long organId) {
default List<OrderItemDO> selectPackId(Long orderId,List<Long> bodyIds, Long organId) {
return selectList(new LambdaQueryWrapperX<OrderItemDO>()
.eq(OrderItemDO::getOrganId,organId)
.eq(OrderItemDO::getOrderId,orderId)
.inIfPresent(OrderItemDO::getBodyId,bodyIds)
.select(OrderItemDO::getPackageId));
@@ -74,9 +74,6 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
List<PlateOptimize> selectPlateListByPlanId(@Param("planId") Long planId, @Param("organId") Long organId);
OptimizeParamRespVO getOptimizePlanParam(Long planId);
PlanDO selectPlanByOrderIds(@Param("ids") List<Long> ids);
@@ -116,6 +113,8 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
List<PlanDO> selectPlanStatus(@Param("planIds") List<Long> planIds,@Param("organId") Long organId);
void updatePlanStatus(@Param("planId") Long planId,@Param("status") Integer status,@Param("organId") Long organId);
// List<PlanDO> seleTestSQL(@Param("sql") String sql);
@@ -8,8 +8,6 @@ import com.cf.imes.framework.common.enums.OrderPlateTypeEnum;
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.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;
@@ -75,11 +73,7 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
}
// IPage<PlatePage> selectPlatePage(@Param("page") IPage<PlatePage> page, @Param("orderId")Long organId, @Param("goodsId") String goodsId);
List<PlatePage> selectPlatePage( @Param("orderId") Long orderId,@Param("organId") Long organId/*, @Param("goodsId") String goodsId*/);
IPage<PlateResList> selectPlateByPlanId(@Param("page") IPage<PlateResList> page, @Param(Constants.WRAPPER) Wrapper<PlateDO> wrapper);
List<PlateParam> selectPlateList(Long planId);
IPage<PlateRespVO> selectProductList(@Param("page") IPage<PlateRespVO> page , @Param("orderId")Long orderId, @Param("roomId")Long roomId , @Param("bodyId")Long bodyId,@Param("organId") Long organId);
@@ -92,9 +86,6 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
List<PlateDetialRespVO> selectPlateDetialList(@Param("orderId") Long orderId,@Param("organId") Long organId);
List<PlateDetialRespVO> selectPlateDetialListByIds(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
List<PlateGoodsRespVO> selectPlateGoodsList(@Param("orderId") Long orderId, @Param("organId") Long organId, @Param("deleted") Integer deleted); // 明细
List<PlateGoodsRespVO> selectPlateGoodsListSummary(@Param("orderId") Long orderId, @Param("organId") Long organId, @Param("deleted") Integer deleted); // 汇总
@@ -131,15 +122,9 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
List<NotPlanOrderPlateRespVO> selectGoodsPage( @Param(Constants.WRAPPER) Wrapper<PlateDO> wrapper);
IPage<OrderGoodsResp> selectGoodsList(@Param("page") IPage<OrderGoodsResp> page,@Param("goodsIds") List<Long> goodsIds,@Param("organId") Long organId);
List<OrderIds> selectOrderIds(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
void deletedById(@Param("plateIds") List<Long> plateIds, @Param("organId") Long organId);
List<GoodsNum> selectGoodsNum(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
default List<PlateDO> selectPlateNum(Long orderId, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
@@ -173,18 +158,6 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
default List<PlateDO> selectGoodsPlateList(List<Long> goodIds, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.inIfPresent(PlateDO::getGoodsId, goodIds));
}
List<PlateDetialRespVO> selectPlateListByGoodIds(@Param("goodIds") List<Long> goodIds,@Param("organId") Long organId);
// List<PlateInfoVO> selectPlateArea(@Param("orderIdsList") List<OrderIds> orderIdsList,@Param("organId") Long organId);
@@ -227,16 +200,6 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
default List<PlateDO> selectPlateIds(OrderPageReqVOCopy pageReqVO, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.eq(PlateDO::getDeleted,false)
.eqIfPresent(PlateDO::getIsSpecialShaped,pageReqVO.getSpecialShaped())
.eqIfPresent(PlateDO::getIsDoor,pageReqVO.getIsDoor())
.select(PlateDO::getGoodsId));
}
List<PlatePage> selectNoPlanPlateList(@Param(Constants.WRAPPER) Wrapper<PlateDO> queryWrapperX2);
@@ -264,6 +227,16 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
}
default List<PlateDO> selectPlateIsOptimized(Long orderId, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.eq(PlateDO::getDeleted,false)
.eqIfPresent(PlateDO::getOrderId,orderId)
.eq(PlateDO::getIsOptimized,true));
}
// List<PlateDO> selectTestSQL(@Param("sql") String sql);
@@ -19,6 +19,10 @@ public interface OptimizePlanService {
String ORDER_REMAIN_PLATE_MODEL = "imes_order_optimize_plate_model";
String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model";
List<PlateOptimize> getPlateListByPlanId(Long planId);
Boolean addRemain(AddRemainReqVO vo);
@@ -8,14 +8,13 @@ import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Hit;
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;
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark;
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList;
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessStepAreaIds;
@@ -29,7 +28,6 @@ import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
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.plate.PlateDO;
import com.cf.imes.module.executor.dal.dataobject.processStep.ProcessStepDO;
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;
@@ -47,7 +45,6 @@ import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
import com.cf.imes.module.system.api.machine.MachineApi;
import com.cf.imes.module.system.api.process.ProcessApi;
import com.cf.imes.module.system.api.process.dto.ProcessDTO;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -60,10 +57,10 @@ import java.io.IOException;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.*;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.cf.imes.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;
@@ -173,6 +170,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
if(!optimizeBoardModelDO.getIsOptimized()){
throw exception(ORDER_PLAN_NO_OPTIMIZE_ERROR);
}
List<Long> plateNo = new ArrayList<>();
// 创建一个列表存储 BlockPlaceInfo 对象,将优化的小板信息拿出,获取到小板编号,查询生产单,修改生产单的状态
@@ -220,16 +224,18 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
long cutedBoardNumber = cutedBoardInfo.getCutedBoardNumber() == null ? 0 : cutedBoardInfo.getCutedBoardNumber();
cutedBoardNumber += goodsNo.size();
// 获取原排单的已开料的大板编号
List<Long> cutedBoardList = cutedBoardInfo.getCutedBoardList() == null ? new ArrayList<>() : cutedBoardInfo.getCutedBoardList();
goodsNo.addAll(cutedBoardList);
// 将新开料的大板编号添加到已开料的大板编号中
cutedBoardList.addAll(goodsNo);
cutedBoardList.addAll(Stream.concat(
cutedBoardList.stream().filter(str -> !goodsNo.contains(str)),
goodsNo.stream().filter(str -> !cutedBoardList.contains(str)))
.toList());
cutedBoardNumber = cutedBoardList.size();
// 将需要更新更新的数据更新到原数据中
cutedBoardInfo.setCutedBoardNumber(cutedBoardNumber);
@@ -289,6 +295,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
if(!optimizeBoardModelDO.getIsOptimized()){
throw exception(ORDER_PLAN_NO_OPTIMIZE_UPDATE_ERROR);
}
CutedBoardInfo cutedBoardInfo = optimizeBoardModelDO.getCutedBoardInfo() == null ? new CutedBoardInfo() : optimizeBoardModelDO.getCutedBoardInfo();
@@ -324,16 +337,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
if(cutedBoardInfo.getCutedBoardNumber() == 0){
planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus());
planDO.setProduceTime(null);
planMapper.updateById(planDO);
// planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus());
// planDO.setProduceTime(null);
planMapper.updatePlanStatus(planId,PlanStatusEnum.NOCUTTING.getStatus(),getUserOrganId());
}
if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) && cutedBoardInfo.getCutedBoardNumber() > 0 && cutedBoardInfo.getCutedBoardNumber() < optimizeBoardModelDO.getBoardCount() ){
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
planDO.setProduceTime(null);
planMapper.updateById(planDO);
// planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
// planDO.setProduceTime(null);
planMapper.updatePlanStatus(planId,PlanStatusEnum.OPENING.getStatus(),getUserOrganId());
}
}
@@ -349,46 +362,48 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean endCutting(Long planId) {
PlanDO planDO = planMapper.selectById(planId);
if (Objects.isNull(planDO)) {
throw exception(PLAN_NOT_EXISTS);
}
planMapper.updateById(PlanDO.builder()
.id(planId)
.status(PlanStatusEnum.OPENED.getStatus())
.produceTime(LocalDateTime.now())
.build());
LoginUser loginUser = getLoginUser();
List<ProcessDTO> userProcess = processApi.getUserProcess(loginUser.getId());
if(!userProcess.isEmpty()) {
List<Long> processStepIds = new ArrayList<>();
List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
List<ProcessStepDO> processStepDOS = processStepMapper.selectOrderList(orderIds, getUserOrganId());
for (ProcessDTO process : userProcess) {
processStepIds.addAll(processStepDOS.stream().filter(f -> Objects.equals(f.getProcessinfoId(), process.getId()))
.map(ProcessStepDO::getId).toList());
}
if(!processStepIds.isEmpty()) {
List<ProcessStepSalaryIds> processStepSalaryIds = calculateSalary(processStepIds);
// 修改生产明细表和步骤表的工序状态
processStepMapper.updateStatus(processStepSalaryIds, loginUser.getNickname());
processStepItemMapper.updateStatus(processStepIds);
}
}
// 目前结束开料已去掉,所以这些代码先注释,后面如果加再修改逻辑
//
// PlanDO planDO = planMapper.selectById(planId);
// if (Objects.isNull(planDO)) {
// throw exception(PLAN_NOT_EXISTS);
// }
// planMapper.updateById(PlanDO.builder()
// .id(planId)
// .status(PlanStatusEnum.OPENED.getStatus())
// .produceTime(LocalDateTime.now())
// .build());
//
// LoginUser loginUser = getLoginUser();
// List<ProcessDTO> userProcess = processApi.getUserProcess(loginUser.getId());
//
// if(!userProcess.isEmpty()) {
//
// List<Long> processStepIds = new ArrayList<>();
//
// List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class);
//
// List<ProcessStepDO> processStepDOS = processStepMapper.selectOrderList(orderIds, getUserOrganId());
//
//
// for (ProcessDTO process : userProcess) {
// processStepIds.addAll(processStepDOS.stream().filter(f -> Objects.equals(f.getProcessinfoId(), process.getId()))
// .map(ProcessStepDO::getId).toList());
// }
//
//
// if(!processStepIds.isEmpty()) {
//
// List<ProcessStepSalaryIds> processStepSalaryIds = calculateSalary(processStepIds);
//
// // 修改生产明细表和步骤表的工序状态
// processStepMapper.updateStatus(processStepSalaryIds, loginUser.getNickname());
//
// processStepItemMapper.updateStatus(processStepIds);
//
// }
//
// }
return Boolean.TRUE;
@@ -503,6 +518,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<PrintOrderPartsRespVO> printOrderPartsRespVOS = orderPartsMapper.selectPartList(Collections.singletonList(orderId), getUserOrganId());
// 查询生产单对应的配件的ES信息
List<OrderPartsRemark> orderPartsRemarks = buildOrderPartsByOrderId(Collections.singletonList(orderId), ORDER_PARTS_REMARK_MODEL, printOrderPartsRespVOS.size());
// 查询生产单对应的包裹信息
List<PrintOrderPackReqVO> printOrderPackReqVOS = plateMapper.selectOrderPackList(orderId,getUserOrganId());
@@ -514,14 +533,6 @@ 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.builder()
.orderList(Collections.singletonList(orderDO))
.goodsList(goodsDOS)
@@ -529,6 +540,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.plateModels(orderModelDOS)
.optimizeBoardModelDOS(optimizeBoardModelDOS)
.orderPartsRespVOS(printOrderPartsRespVOS)
.orderPartsRemarks(orderPartsRemarks)
.orderPackReqVOS(printOrderPackReqVOS)
.build();
@@ -607,6 +619,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 查询生产单对应的配件信息
List<PrintOrderPartsRespVO> printOrderPartsRespVOS = orderPartsMapper.selectPartList(orderIds, getUserOrganId());
// 查询生产单对应的配件的ES信息
List<OrderPartsRemark> orderPartsRemarks = buildOrderPartsByOrderId(orderIds, ORDER_PARTS_REMARK_MODEL, printOrderPartsRespVOS.size());
// 查询生产单对应的包裹信息
List<PrintOrderPackReqVO> printOrderPackReqVOS = plateMapper.selectPlanPackList(ids,getUserOrganId());
@@ -631,6 +646,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.optimizeBoardModelDOS(optimizeBoardModelDOS)
.optimizeRemainPlates(optimizeRemainPlates)
.orderPartsRespVOS(printOrderPartsRespVOS)
.orderPartsRemarks(orderPartsRemarks)
.orderPackReqVOS(printOrderPackReqVOS)
.build();
}
@@ -707,7 +723,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 保存优化后的大板数据
batchSaveBoardModel(req.getOptimizeBoardModelDOS());
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId());
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId());
List<Long> ids = goodsDOS.stream().map(GoodsDO::getId).distinct().toList();
@@ -943,6 +959,30 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
}
public List<OrderPartsRemark> buildOrderPartsByOrderId(List<Long> orderIds, String index, Integer size) {
List<FieldValue> 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<OrderPartsRemark> search = elasticsearchClient.search(builder.build(), OrderPartsRemark.class);
List<Hit<OrderPartsRemark>> 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 void deleteByPlanId(List<Long> planIds, String index) {
List<FieldValue> fieldValues = planIds.stream().map(FieldValue::of).toList();
@@ -58,8 +58,10 @@ import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.ExcelTy
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 com.cf.imes.module.executor.util.fileConversion.admin.files.xml.XmlTypeRealize;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
@@ -259,7 +261,7 @@ public class OrderServiceImpl implements OrderService {
@Transactional(rollbackFor = Exception.class)
public void updateDeleteBody(Long orderId, Set<Long> roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0
// 判断生产单的状态和生产单柜体对应的板擦是否已开料
List<Long> planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus());
List<Long> planIds = validateOrderStatus(orderId, roomIds, bodyId, getUserOrganId());
List<Long> bodyIds = new ArrayList<>();
Integer index = status == 1 ? 0 : 1;
@@ -274,6 +276,8 @@ public class OrderServiceImpl implements OrderService {
if (bodyIds.size() != 0){
List<PlateDO> plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, bodyIds, getUserOrganId(), index);
List<Long> plateIds = plateDOList.stream().map(PlateDO::getId).toList();
List<Long> goodsIds = plateDOList.stream().map(PlateDO::getGoodsId).distinct().toList();
@@ -284,63 +288,60 @@ public class OrderServiceImpl implements OrderService {
if (!plateDOList.isEmpty()) {
plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);// 删小板
}
// 删除包裹,只需删除,无需还原
List<Long> packIds = orderItemMapper.selectPackId(orderId,bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
// 删除包裹,只需删除,无需还原
List<Long> packIds = orderItemMapper.selectPackId(bodyIds, getUserOrganId()).stream().map(OrderItemDO::getPackageId).distinct().toList();
orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId());
orderPackageMapper.updatePackList(orderId, packIds, getUserOrganId());
orderItemMapper.deletePackList(orderId, packIds, getUserOrganId());
orderItemMapper.deletePackList(orderId, packIds, getUserOrganId());
orderPrepackagedMapper.deletePacked(orderId, getUserOrganId());
orderPrepackagedMapper.deletePacked(orderId,getUserOrganId());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId());
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackStatusList(orderId, getUserOrganId());
if (orderPackageDOS.isEmpty()) {
if(orderPackageDOS.isEmpty()){
OrderDO orderDO = orderMapper.selectById(orderId);
OrderDO orderDO = orderMapper.selectById(orderId);
orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus());
orderDO.setPackaged(OrderPackageStatusEnum.UNPACKED.getStatus());
orderMapper.updateById(orderDO);
orderMapper.updateById(orderDO);
}
// 删除大板
List<PlateDO> goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId());
List<Long> goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList();
List<Long> goodsIdDeleted = Stream.concat(
goodsIds.stream().filter(str -> !goodsIdList.contains(str)),
goodsIdList.stream().filter(str -> !goodsIds.contains(str)))
.toList();
if (goodsIdDeleted.size() > 0) {
goodsMapper.updateDeletedById(goodsIdDeleted, status, getUserOrganId());
}
if(!planIds.isEmpty()) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(planIds, getUserOrganId());
// 一样,同时删除排单的信息
if(goodsDOS.isEmpty() && status.equals(1)){
planService.deletePlan(planIds);
}
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
// 删除大板
List<PlateDO> goodsList = plateMapper.selectPlateDeletedStatus(orderId, goodsIds, getUserOrganId());
List<Long> goodsIdList = goodsList.stream().map(PlateDO::getGoodsId).distinct().toList();
List<Long> goodsIdDeleted = Stream.concat(
goodsIds.stream().filter(str -> !goodsIdList.contains(str)),
goodsIdList.stream().filter(str -> !goodsIds.contains(str)))
.toList();
if (goodsIdDeleted.size() > 0) {
goodsMapper.updateDeletedById(orderId,goodsIdDeleted, status, getUserOrganId());
}
if (!planIds.isEmpty()) {
// 判断删除的柜体对应的板材是否和排单板材一样
List<GoodsDO> goodsDOS = goodsMapper.selectPlanGoodsListByPlanIdList(null,planIds, getUserOrganId());
// 一样,同时删除排单的信息
if (goodsDOS.isEmpty()) {
planService.deletePlan(planIds);
} else {
// 只要有排单,不管删除的柜体的板材数和排单数一样,都要删除排单对应的优化数据(不用这种写法进行删除时,有时会报错,原因目前还没找到)
planService.deleteByPlanId(planIds, ORDER_REMAIN_PLATE_MODEL);
}
}
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
if (partsList != null && partsList.size() != 0){
orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId());
@@ -349,7 +350,7 @@ public class OrderServiceImpl implements OrderService {
// 生产单柜体数量判断
if (orderBodyMapper.selectCountByOrderId(orderId, getUserOrganId(), OrderDeletedEnum.NOT_DELETED.getStatus()) == 0) {
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());
@@ -391,67 +392,67 @@ public class OrderServiceImpl implements OrderService {
// 小板还原
if (!plateDOList.isEmpty()) {
plateMapper.updateDeletedById(plateIds, status, getUserOrganId(), orderId);
}
// 还原大板
List<GoodsDO> goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId());
if(!goodsDOS.isEmpty()){
goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList());
}
// 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID
List<GoodsDO> goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId());
List<GoodsDO> goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class);
if(!goodsDOList.isEmpty()){
// 新增的大板信息
List<GoodsDO> 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> orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class);
List<OrderGoodsIds> 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());
// 还原大板
List<GoodsDO> goodsDOS = goodsMapper.selectGoodsListByStatus(orderId, goodsIds, getUserOrganId());
if (!goodsDOS.isEmpty()) {
goodsMapper.updateBatch(goodsDOS.stream().map(m -> m.setDeleted(false)).toList());
}
// 需要修改的小板为未排单的部分,无论其是否删除,都需要修改,但只需修改大板ID即可,其他信息无需修改
List<PlateDO> plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId());
List<PlateDO> plateList = new ArrayList<>();
// 当大板对应的小板已经排单时,新建相同类型的大板,并将其他未排单的小板对应的大板ID修改为新的大板ID
List<GoodsDO> goodsDOList = goodsMapper.selectNoPlanGoodsList(orderId, goodsIds, getUserOrganId());
for (OrderGoodsIds ids : orderGoodsIdsList) {
List<GoodsDO> goodsList = BeanUtils.toBean(goodsDOList, GoodsDO.class);
plateList.addAll(plateDOS.stream()
.filter(f->f.getGoodsId().equals(ids.getOldId()))
.peek(m->{
m.setGoodsId(ids.getId());
if (!goodsDOList.isEmpty()) {
// 新增的大板信息
List<GoodsDO> list = goodsDOList.stream()
.peek(m -> {
m.setId(null);
m.setPlanId(0L);
m.setCreateTime(LocalDateTime.now());
m.setUpdateTime(LocalDateTime.now());
})
.toList());
.toList();
goodsMapper.insertBatch(list);
// 构建新的数据集,保存新的大板ID和旧的大板ID,大板的实际ID关联这两个信息
List<OrderGoodsIds> orderGoodsIds = BeanUtils.toBean(list, OrderGoodsIds.class);
List<OrderGoodsIds> 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<PlateDO> plateDOS = plateMapper.selectNoPlanPlate(orderId, goodsIds, getUserOrganId());
List<PlateDO> 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);
}
plateMapper.updateBatch(plateList);
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件
if (partsList != null && partsList.size() != 0){
orderPartsMapper.updateDeletedById(partsList, status, getUserOrganId());
@@ -586,6 +587,7 @@ public class OrderServiceImpl implements OrderService {
@Override
public void exportTemplate(HttpServletResponse response, String value) {
// 根据type获取文件名称
InputStream fis = null;
try {
// path是指想要下载的文件的路径
File file = new File(getSavePath() + File.separator + value);
@@ -596,7 +598,7 @@ public class OrderServiceImpl implements OrderService {
// 将文件写入输入流
FileInputStream fileInputStream = new FileInputStream(file);
InputStream fis = new BufferedInputStream(fileInputStream);
fis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
@@ -611,6 +613,8 @@ public class OrderServiceImpl implements OrderService {
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
IOUtils.closeQuietly(fis);
}
}
@@ -917,15 +921,20 @@ public class OrderServiceImpl implements OrderService {
}
// 判断生产单状态是否符合(如果已开料,不允许删除)
private List<Long> validateOrderStatus(Long orderId,Set<Long> roomIds, Long bodyId, Long organId, Integer status) {
private List<Long> validateOrderStatus(Long orderId,Set<Long> roomIds, Long bodyId, Long organId) {
// 校验存在
OrderDO orderDO = orderMapper.selectOrderOne(orderId, organId);
if (orderDO == null)
throw exception(ORDER_NOT_EXISTS);
if (ObjectUtils.isEmpty(roomIds) && ObjectUtils.isEmpty(bodyId)) {
throw exception(ORDER_ERROR);
}
// 判断小板是否已开料,已开料不允许删除
List<Long> planIds = goodsMapper.selectPlanOrderList(orderId, roomIds, bodyId, organId);
if(!planIds.isEmpty() && status.equals(1)) {
if(!planIds.isEmpty()) {
List<PlanDO> planDOS = planMapper.selectPlanStatus(planIds, organId);
@@ -11,7 +11,6 @@ import co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval;
import co.elastic.clients.elasticsearch._types.aggregations.DateHistogramAggregation;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.json.JsonData;
import co.elastic.clients.util.NamedValue;
import com.cf.imes.framework.common.enums.OrderStatusEnum;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -86,6 +85,7 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
private static final String ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME = "createTime";
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME = "goods_group";
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME = "goods_count";
private static final String ORDER_REMAIN_PLATE_MODEL_DATE_GROUP_NAME = "date_group";
private static final String DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH = "yyyy-M";
private static final String DATE_TIME_FORMATTER_PATTERN_YEAR_MONTH_DAY = "yyyy-M-d";
private static final String ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME = "goodsId";
@@ -427,10 +427,12 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
SearchRequest searchRequest = new SearchRequest.Builder()
.size(0)
.index(OptimizePlanService.ORDER_REMAIN_PLATE_MODEL)
.query(q -> q.range(r -> r.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.gte(JsonData.of(reqVO.getCreateTime()[0].format(dateTimeFormatter)))
.lte(JsonData.of(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
)
.query(q ->
q.bool(b -> b
.must(m -> m.range(m1 -> m1.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.from(reqVO.getCreateTime()[0].format(dateTimeFormatter))
.to(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
.must(m -> m.match(m2 -> m2.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME,
agg -> agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).size(10).order(new NamedValue<>(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, SortOrder.Desc)))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
@@ -456,16 +458,20 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
SearchRequest dateGroupRequest = new SearchRequest.Builder()
.size(0)
.index(OptimizePlanService.ORDER_REMAIN_PLATE_MODEL)
.query(q -> q.range(r -> r.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.gte(JsonData.of(reqVO.getCreateTime()[0].format(dateTimeFormatter)))
.lte(JsonData.of(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
.query(q ->
q.bool(b -> b
.must(m -> m.range(m1 -> m1.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)
.from(reqVO.getCreateTime()[0].format(dateTimeFormatter))
.to(reqVO.getCreateTime()[1].format(dateTimeFormatter))))
.must(m -> m.match(m2 -> m2.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))
.must(m -> m.bool(m3 -> m3.must(t -> t.terms(gi -> gi.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).terms(tv -> tv.value(goodsIdFieldValueList))))))
)
)
.query(q -> q.bool(b -> b.must(m -> m.terms(t -> t.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).terms(tv -> tv.value(goodsIdFieldValueList))))))
.query(q -> q.match(m -> m.field("organId").query(SecurityFrameworkUtils.getUserOrganId())))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME,
agg -> agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME).order(new NamedValue<>(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, SortOrder.Desc)))
.aggregations("date_group", dateAgg -> dateAgg.dateHistogram(date -> getDateHistogram(unit, date.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME))))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_GROUP_NAME, agg ->
agg.terms(terms -> terms.field(ORDER_REMAIN_PLATE_MODEL_GOODS_ID_NAME))
.aggregations(ORDER_REMAIN_PLATE_MODEL_DATE_GROUP_NAME, dateAgg -> dateAgg.dateHistogram(date -> getDateHistogram(unit, date.field(ORDER_REMAIN_PLATE_MODEL_CREATE_TIME_FIELDNAME)))
.aggregations(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME, sumAgg -> sumAgg.sum(sum -> sum.field("boardCount")))
)
)
.build();
response = client.search(dateGroupRequest, Map.class);
@@ -475,17 +481,22 @@ public class OrderStatisticsServiceImpl implements OrderStatisticsService {
goodsDateAgg.sterms().buckets().array().forEach(goodsDateAggBucket -> {
// todo 目前没有发现好的es统计月周的方式,先把年月日查出来转周,后续优化
String dateStr = dateToWeekMonth(goodsDateAggBucket.aggregations().get("date_group").dateHistogram().buckets().array().get(0).keyAsString(), unit);
double goodsCount = goodsDateAggBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME).sum().value();
OrderGoodsPlateRespVO vo = OrderGoodsPlateRespVO.builder().goodsId(goodsDateAggBucket.key().stringValue()).orderDate(dateStr).orderCount((int) goodsCount).build();
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) {
orderGoodsPlateRespVOS.add(vo);
} else {
ArrayList<OrderGoodsPlateRespVO> goodsPlateRespVOS = new ArrayList<>();
goodsPlateRespVOS.add(vo);
goodsDateGroupMap.put(dateStr, goodsPlateRespVOS);
}
goodsDateAggBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_DATE_GROUP_NAME).dateHistogram().buckets().array().forEach(dateHistogramBucket -> {
// 时间轴
String dateStr = dateToWeekMonth(dateHistogramBucket.keyAsString(), unit);
// 时间轴下的boardCount
double goodsCount = dateHistogramBucket.aggregations().get(ORDER_REMAIN_PLATE_MODEL_GOODS_COUNT_NAME).sum().value();
// goodsid+数量存入mapkey:时间轴
List<OrderGoodsPlateRespVO> orderGoodsPlateRespVOS = goodsDateGroupMap.get(dateStr);
OrderGoodsPlateRespVO vo = OrderGoodsPlateRespVO.builder().goodsId(goodsDateAggBucket.key().stringValue()).orderDate(dateStr).orderCount((int) goodsCount).build();
if (ObjectUtil.isNotNull(orderGoodsPlateRespVOS)) {
orderGoodsPlateRespVOS.add(vo);
} else {
ArrayList<OrderGoodsPlateRespVO> goodsPlateRespVOS = new ArrayList<>();
goodsPlateRespVOS.add(vo);
goodsDateGroupMap.put(dateStr, goodsPlateRespVOS);
}
});
});
}
@@ -61,7 +61,6 @@ public interface PlanService {
PageResult<OrderGoodsResp> getOrderGoodsPage(OrderPageReqVOCopy pageReqVO);
List<PlatePage> getNotPlanPlateListPage(PlateReqPageVO pageVO);
Boolean addPlate(AddPlateReq req);
@@ -151,7 +151,7 @@ public class PlanServiceImpl implements PlanService {
orderIdList.addAll(orderIds);
// 创建计划
// 创建排单
PlanDO plan = BeanUtils.toBean(createReqVO, PlanDO.class);
plan.setId(identifierGenerator.nextId(plan).longValue());
plan.setSort(0L);
@@ -191,7 +191,7 @@ public class PlanServiceImpl implements PlanService {
public void updatePlan(PlanSaveReqVO updateReqVO) {
// 校验排单是否存在,是否开料
validatePlanExists(updateReqVO.getId());
Long machineId = validatePlanExists(updateReqVO.getId());
// 更新
PlanDO plan = BeanUtils.toBean(updateReqVO, PlanDO.class);
@@ -243,6 +243,12 @@ public class PlanServiceImpl implements PlanService {
}
if(!machineId.equals(plan.getMachineId())){
deleteByPlanId(Collections.singletonList(plan.getId()),ORDER_REMAIN_PLATE_MODEL);
}
planMapper.updateById(plan);
@@ -322,7 +328,7 @@ public class PlanServiceImpl implements PlanService {
List<Long> orderIds = new ArrayList<>();
for (PlanDO planDO : planDOS) {
orderIds.addAll(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class));
orderIds.addAll(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class).stream().distinct().toList());
}
@@ -331,44 +337,45 @@ public class PlanServiceImpl implements PlanService {
remainPlateMapper.deletePlanRemainPlate(ids,getUserOrganId());
List<Long> goodsIdList = goodsMapper.selectPlanGoodsListByPlanIdList(orderIds,ids, getUserOrganId()).stream().map(GoodsDO::getId).toList();
// 排单对应的自增板的删除 todo 目前值解决了非混单的情况
List<OptimizeBoardModelDO> boardModelDOS = buildBoardByPlanIds(ids, ORDER_REMAIN_PLATE_MODEL, ids.size());
if(!boardModelDOS.isEmpty()) {
if(!goodsIdList.isEmpty()) {
// 修改删除的大板对应的小板为未优化
plateMapper.updateNoPlateOptimized(orderIds, goodsIdList, getUserOrganId());
List<Long> goodsIdList = goodsMapper.selectPlanGoodsListByPlanIdList(ids, getUserOrganId()).stream().map(GoodsDO::getId).toList();
if(!goodsIdList.isEmpty()) {
// 修改删除的大板对应的小板为未优化
plateMapper.updateNoPlateOptimized(orderIds, goodsIdList, getUserOrganId());
}
List<PlateDO> plateDOS = plateMapper.selectPlateIdList(orderIds,goodsIdList, getUserOrganId());
if(!plateDOS.isEmpty()) {
List<PlateDO> plateDOS = plateMapper.selectPlateIdList(orderIds, goodsIdList, getUserOrganId());
if (!plateDOS.isEmpty()) {
List<Long> plateIds = plateDOS.stream().map(PlateDO::getId).toList();
plateMapper.deleteBatchIds(plateIds);
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>().in(OrderItemDO::getPlateId, plateIds));
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>()
.eq(OrderItemDO::getOrganId, getUserOrganId())
.in(OrderItemDO::getOrderId, orderIds)
.in(OrderItemDO::getPlateId, plateIds));
}
}
// 排单对应的自增板的删除 todo 目前值解决了非混单的情况
List<OptimizeBoardModelDO> boardModelDOS = buildBoardByPlanIds(ids, ORDER_REMAIN_PLATE_MODEL, ids.size());
if(!boardModelDOS.isEmpty()) {
// 删除排单对应的优化生产数据
deleteByPlanId(ids, ORDER_REMAIN_PLATE_MODEL);
}
// 删除商品表里的 planId
goodsMapper.deletePlanGoods(ids,getUserOrganId());
goodsMapper.deletePlanGoods(orderIds,ids,getUserOrganId());
List<Long> orderIdList = new ArrayList<>();
List<Long> diff;
// 根据生产单ID查询ES的优化数据
List<OptimizeBoardModelDO> optimizeBoardModelDOS = optimizePlanService.buildBoardByOrderIds(orderIds, ORDER_REMAIN_PLATE_MODEL, 999);
List<OptimizeBoardModelDO> optimizeBoardModelDOS = optimizePlanService.buildBoardByOrderIds(orderIds, ORDER_REMAIN_PLATE_MODEL, 100);
if(optimizeBoardModelDOS.isEmpty()){
@@ -594,9 +601,7 @@ public class PlanServiceImpl implements PlanService {
.eqIfPresent("op.is_door", pageReqVO.getIsDoor())
.betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
.betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()})
// .groupBy("o.id", " o.order_date", "o.delivery_date", "o.customer", "o.address", "o.custom_order_no","o.status")
// .having("count(op.id) != 0")
.orderByDesc("o.order_date");
.orderByDesc("o.id");
String filterTypes = "";
if (Objects.nonNull(pageReqVO.getHoleThrough()) && pageReqVO.getHoleThrough()) {
@@ -631,7 +636,7 @@ public class PlanServiceImpl implements PlanService {
.in("order_id",orderIds)
.eq("is_optimized",false)
.inIfPresent("goods_id",goodsIds)
.inIfPresent("id",pageReqVO.getIds())
.inIfPresent("goods_id",pageReqVO.getIds())
.eqIfPresent("is_special_shaped", pageReqVO.getRectangle() != null ? false: null)
.eqIfPresent("is_special_shaped", pageReqVO.getSpecialShaped())
.eqIfPresent("is_sculpt", pageReqVO.getSculpt())
@@ -872,15 +877,6 @@ public class PlanServiceImpl implements PlanService {
@Override
public List<PlatePage> getNotPlanPlateListPage(PlateReqPageVO pageVO) {
List<PlatePage> pageRes = plateMapper.selectPlatePage(/*page, */pageVO.getOrderId(),getUserOrganId()/*, pageVO.getGoodsId()*/);
return pageRes;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addPlate(AddPlateReq req) {
@@ -1123,17 +1119,16 @@ public class PlanServiceImpl implements PlanService {
private void validatePlanExists(Long id) {
private Long 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);
}
return planDO.getMachineId();
}
@@ -42,11 +42,12 @@
<update id="updateDeletedById">
UPDATE order_goods
SET deleted = #{deleted},plan_id = 0
WHERE id IN
WHERE organ_id = #{organId}
and order_id = #{orderId}
and id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
AND organ_id = #{organId}
</update>
<delete id="deletedById">
DELETE FROM order_goods
@@ -87,29 +88,6 @@
<select id="selectOrderGoodsList" resultMap="OrderGoodsMap">
select distinct
og.goods_name as goodsName,
og.material as material,
og.color as color,
og.width as width,
og.height as height,
og.thickness as thickness,
og.texture as texture,
og.goods_id as goodsId
-- og.order_id as orderId,
-- og.id as id
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted
${ew.customSqlSegment}
</select>
<resultMap id="GoodsListMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.PlateInfoVO">
@@ -187,23 +165,6 @@
<select id="selectGoodsListByGoodsId" resultMap="OrderGoodsMap">
select distinct
og.goods_id as goodsId,
og.order_id as orderId,
og.id as id
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plate op on og.organ_id = op.organ_id and og.id = op.goods_id and og.deleted = op.deleted
${ew.customSqlSegment}
</select>
<select id="selectPlanGoodsListByPlanId"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList">
@@ -256,18 +217,6 @@
</select>
<select id="selectNoPlanOrderList"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy">
select distinct og.order_id as orderId,og.create_time as updateTime
from order_goods og
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
${ew.customSqlSegment}
</select>
<select id="selectPlateListByPlanId"
@@ -361,21 +310,6 @@
</select>
<select id="selectOrderPlate"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy">
select distinct order_id,
create_time as updateTime
from order_goods
where organ_id = #{organId}
and deleted = false
and plan_id = 0
order by create_time;
</select>
@@ -45,7 +45,7 @@
from orders o
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false and og.id = op.goods_id
${ew.customSqlSegment}
@@ -219,6 +219,7 @@
<result property="texture" column="texture"/>
<result property="brand" column="brand"/>
<result property="spec" column="spec"/>
<result property="remark" column="remark"/>
<result property="goodsId" column="goodsId"/>
<collection property="orderIds" ofType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds" resultMap="OrderIdMap"/>
@@ -239,8 +240,6 @@
select distinct
-- og.order_id as orderId,
-- og.id as id,
og.goods_id as goodsId,
og.goods_name,
@@ -251,13 +250,14 @@
og.width,
og.height,
og.brand,
og.remark,
og.spec
from orders o
join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id and og.plan_id = 0 and o.deleted = og.deleted
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false
join order_plate op on o.organ_id = op.organ_id and o.deleted = op.deleted and o.id = op.order_id and op.is_optimized = false and og.id = op.goods_id
${ew.customSqlSegment}
@@ -186,18 +186,6 @@
</update>
<select id="selectTestNum"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderRespVOCopy">
select distinct
oi.order_id as orderId
from order_item oi
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
where oi.organ_id = #{organId} and opi.item_id is null and oi.plate_id !=0;
</select>
</mapper>
@@ -87,19 +87,47 @@
AND organ_id = #{organId}
</delete>
<select id="selectPartList"
resultType="com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO">
<resultMap id="OrderPartsMap" type="com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PrintOrderPartsRespVO">
select distinct oi.num as partsNum,
<result property="partsNum" column="partsNum"/>
<result property="bodyId" column="bodyId"/>
<result property="roomId" column="roomId"/>
<result property="bodyName" column="bodyName"/>
<result property="roomName" column="roomName"/>
<result property="id" column="id"/>
<result property="spec" column="spec"/>
<result property="brand" column="brand"/>
<result property="factory" column="factory"/>
<result property="model" column="model"/>
<result property="name" column="name"/>
<result property="orderId" column="orderId"/>
<result property="type" column="type"/>
<collection property="groupId" ofType="java.lang.Long" column="groupId"/>
</resultMap>
<select id="selectPartList"
parameterType="java.lang.Long"
resultMap="OrderPartsMap">
select distinct oi.group_id as groupId,
oi.num as partsNum,
oi.body_id as bodyId,
oi.room_id as roomId,
ob.name as bodyName,
ob.room_name as roomName,
op.id,
op.spec,
op.brand,
op.factory,
op.model,
op.name,
op.order_id
op.id as id,
op.spec as spec,
op.brand as brand,
op.factory as factory,
op.model as model ,
op.name as name,
op.order_id as orderId,
op.type as type
from order_parts op
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.parts_id
left join order_body ob on oi.organ_id = ob.organ_id and oi.order_id = ob.order_id and oi.body_id = ob.id
@@ -9,103 +9,6 @@
文档可见:https://www.cf.com/MyBatis/x-plugins/
-->
<resultMap id="map" type="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize">
<result column="goods_name" property="goodsName"/>
<result column="material" property="material"/>
<result column="color" property="color"/>
<result column="width" property="width"/>
<result column="height" property="height"/>
<result column="plateNum" property="plateNum"/>
<collection property="plateDOList" javaType="java.util.List" ofType="com.cf.imes.module.executor.dal.dataobject.remainplaten.RemainPlateDO"/>
</resultMap>
<resultMap id="optimizeMap" type="com.cf.imes.module.executor.controller.admin.plan.vo.OptimizeParamRespVO">
<result column="plan_id" property="planId"/>
<result column="plan_no" property="planNo"/>
<result column="sort" property="sort"/>
<result column="op_type" property="type"/>
<result column="op_status" property="status"/>
<result column="machine_id" property="machineId"/>
<result column="plan_time" property="planTime"/>
<result column="op_remark" property="remark"/>
<result column="produce_time" property="produceTime" />
<result column="operator" property="operator"/>
<collection property="plateList" javaType="java.util.List" ofType="com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO" >
<result column="plateId" property="id"/>
<result column="plan_no" property="plateNo"/>
<result column="opl_order_id" property="orderId"/>
<result column="opl_type" property="type"/>
<result column="opl_name" property="name"/>
<result column="opl_goods_id" property="goodsId"/>
<result column="opl_width" property="width"/>
<result column="opl_height" property="height"/>
<result column="opl_thickness" property="thickness"/>
<result column="split_width" property="splitWidth"/>
<result column="split_height" property="splitHeight"/>
<result column="split_thickness" property="splitThickness"/>
<result property="sealLeft" column="seal_left"/>
<result property="sealRight" column="seal_right"/>
<result property="sealUp" column="seal_up"/>
<result property="sealDown" column="seal_down"/>
<result property="area" column="area"/>
<result property="texture" column="texture"/>
<result property="holeFace" column="hole_face"/>
<result property="holeArrange" column="hole_arrange"/>
<result property="unregularPointCount" column="unregular_point_count"/>
<result property="frontHoleCount" column="front_hole_count"/>
<result property="backHoleCount" column="back_hole_count"/>
<result property="sideHoleCount" column="side_hole_count"/>
<result property="frontModelCount" column="front_model_count"/>
<result property="backModelCount" column="back_model_count"/>
<result property="isDoor" column="is_door"/>
<result property="openDoorType" column="open_door_type"/>
<result property="offsetX" column="offset_x"/>
<result property="offsetY" column="offset_y"/>
<result property="isArcAcross" column="is_arc_across"/>
<result property="moduleTypeId" column="module_type_id"/>
<result property="filterType" column="filter_type"/>
<result property="isCancel" column="is_cancel"/>
<result property="remark" column="opl_remark"/>
<result property="createTime" column="opl_create_time"/>
</collection>
<collection property="orderList" javaType="java.util.List" ofType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderResp">
<result property="orderId" column="o_id"/>
<result property="type" column="o_type"/>
<result property="status" column="o_status"/>
<result property="dataType" column="data_type"/>
<result property="customOrderNo" column="custom_order_no"/>
<result column="customer" property="customer"/>
<result column="address" property="address"/>
<result column="phone_number" property="phoneNumber"/>
<result column="dealer" property="dealer"/>
<result column="dealer_phone_number" property="dealerPhoneNumber"/>
<result column="salesman" property="salesman"/>
<result column="splitter" property="splitter"/>
<result column="o_status" property="status"/>
<result column="delivery_date" property="deliveryDate"/>
<result column="o_remark" property="remark"/>
</collection>
</resultMap>
<select id="getOptimizePlanParam" resultMap="optimizeMap">
select distinct op.id as plan_id, op.plan_no, op.type as op_type, op.status as op_status, op.machine_id, op.plan_time, op.produce_time, op.remark as op_remark, op.operator,
oi.order_id, opl.id as plateId, opl.order_id opl_order_id, opl.name opl_name, opl.plate_no, opl.type as opl_type, opl.goods_id as opl_goods_id, opl.width opl_width,
opl.height opl_height, opl.thickness as opl_thickness, opl.split_width, opl.split_height, opl.split_thickness, opl.seal_left, opl.seal_right,
opl.seal_up, opl.seal_down, opl.area, opl.texture, opl.hole_face, opl.hole_arrange, opl.unregular_point_count, opl.front_hole_count,
opl.back_hole_count, opl.side_hole_count, opl.front_model_count, opl.back_model_count, opl.is_door, opl.open_door_type, opl.offset_x, opl.offset_y,
opl.is_arc_across, opl.module_type_id, opl.filter_type, opl.remark opl_remark, opl.is_cancel, opl.create_time as opl_create_time,
o.id as o_id, o.type as o_type, o.data_type, o.status o_status, o.custom_order_no, o.customer,
o.address, o.phone_number, o.dealer, o.dealer_phone_number, o.salesman, o.splitter, o.remark as o_remark, o.delivery_date
from order_plan op
left JOIN order_plan_item opi on op.id = opi.plan_id
left join order_item oi on opi.item_id = oi.id
left join order_plate opl on oi.plate_id = opl.id
left join `orders` o on oi.order_id = o.id
where op.id = #{planId}
</select>
<select id="selectPlateListByPlanId"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateOptimize"
@@ -121,8 +24,6 @@
</select>
<select id="selectPlanByOrderIds" resultType="com.cf.imes.module.executor.dal.dataobject.plan.PlanDO"></select>
<select id="selectPlanCountGroupByCreateTime"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.OrderPlanStatisticsCountRespVO">
select
@@ -224,4 +125,19 @@
</select>
<update id="updatePlanStatus">
UPDATE order_plan
SET status = #{status}, produce_time = null
WHERE organ_id = #{organId}
and deleted = false
and id = #{planId}
</update>
</mapper>
@@ -60,7 +60,7 @@
where g.deleted = 0
and o.order_date between #{req.createTime[0]} and #{req.createTime[1]}
group by g.goods_id
order by orderArea
order by orderArea desc
limit 10;
</select>
@@ -3,57 +3,6 @@
<mapper namespace="com.cf.imes.module.executor.dal.mysql.plate.PlateMapper">
<select id="selectPlatePage" resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlatePage">
select distinct a.id as plateId, a.name, a.width, a.height, a.thickness, a.area,
b.custom_order_no, b.customer, b.address, b.remark, b.id as orderId,
c.goods_name, c.material, c.color, a.goods_id,oi.num,a.is_special_shaped as specialShaped,a.is_sculpt as profiling
from order_plate a
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
<where>
a.organ_id = #{organId}
and a.is_cancel = 0
and opi.item_id is null
<if test="orderId !=null">
and a.order_id = #{orderId}
</if>
</where>
</select>
<select id="selectPlateByPlanId"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList">
select distinct a.id as plateId,a.order_id, a.plate_no , a.name as plateName,a.is_special_shaped,a.is_sculpt,a.area,a.seal_left,a.seal_right,a.seal_up,a.seal_down, e.material, e.color, a.width, a.height, a.thickness, b.room_id, b.body_id
from order_plate a
LEFT JOIN order_item b ON a.id = b.plate_id AND a.order_id = b.order_id and a.organ_id = b.organ_id
LEFT JOIN order_goods e ON e.id = a.goods_id AND e.order_id = a.order_id and e.organ_id = a.organ_id
LEFT JOIN order_plan_item p ON b.id = p.item_id and b.organ_id = p.organ_id
${ew.customSqlSegment}
</select>
<select id="selectPlateList"
resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateParam">
select distinct a.id,
a.plate_no,
a.height length,
a.width,
a.texture,
a.hole_arrange,
a.hole_face,
if((count(a.unregular_point_count) = 0), 1, 0) as isRect
from order_plate a
left join order_item b on a.id = b.plate_id
where b.plan_id = #{planId}
group by a.id
</select>
<select id="selectProductList"
resultType="com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO">
@@ -241,74 +190,6 @@
</select>
<select id="selectPlateDetialListByIds"
resultMap="PlateDetialMap"
resultType="java.lang.Long">
select distinct
oi.group_id as groupId,
og.name as groupName,
op.id as plateId,
op.order_id as orderId,
op.name as name,
op.plate_no as plateNo,
op.type as type,
op.goods_id as goodsId,
ogs.goods_id as plateGoodsId,
op.width as width,
op.height as height,
op.thickness as thickness,
op.split_width as splitWidth,
op.split_height as splitHeight,
op.split_thickness as splitThickness,
op.seal_left as sealLeft,
op.seal_right as sealRight,
op.seal_up as sealUp,
op.seal_down as sealDown,
op.area as area,
op.texture as texture,
op.hole_face as holeFace,
op.hole_arrange as holeArrange,
op.unregular_point_count as unregularPointCount,
op.front_hole_count as frontHoleCount,
op.back_hole_count as backHoleCount,
op.side_hole_count as sideHoleCount,
op.front_model_count as frontModelCount,
op.back_model_count as backModelCount,
op.is_door as isDoor,
op.open_door_type as openDoorType,
op.offset_x as offsetX,
op.offset_y as offsetY,
op.is_arc_across as isArcAcross,
op.module_type_id as moduleTypeId,
op.is_special_shaped as isSpecialShaped,
op.is_sculpt as isSculpt,
op.is_row_hole as hasHole,
op.remark as remark,
op.filter_type as filterType,
op.is_cancel as isCancel,
ogs.goods_name as goodsName,
ob.id as bodyId,
ob.room_id as roomId,
ob.name as bodyName,
ob.room_name as roomName,
op.is_row_hole as hasHole
from order_plate op
join order_goods ogs on op.goods_id = ogs.id and op.organ_id = ogs.organ_id
join order_item oi on op.id = oi.plate_id and op.organ_id = oi.organ_id
join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id
where op.organ_id = #{organId} and op.deleted = false and op.id in
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
#{orderIds}
</foreach>
</select>
<select id="selectPlateGoodsList" resultType="com.cf.imes.module.executor.controller.admin.plate.vo.PlateGoodsRespVO">
@@ -401,13 +282,12 @@
<update id="updateDeletedById">
UPDATE order_plate
SET deleted = #{deleted},is_optimized = false
WHERE id IN
<if test="plateIds != null and plateIds.size() > 0">
<foreach item="plateId" collection="plateIds" open="(" separator="," close=")">
#{plateId}
</foreach>
</if>
AND organ_id = #{organId} and order_id = #{orderId}
WHERE organ_id = #{organId}
and order_id = #{orderId}
and id IN
<foreach item="plateId" collection="plateIds" open="(" separator="," close=")">
#{plateId}
</foreach>
</update>
@@ -540,130 +420,6 @@
<resultMap id="GoodsList" type="com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp">
<result property="goodsId" column="goodsId"/>
<result property="goodsName" column="goodsName"/>
<result property="width" column="width"/>
<result property="height" column="height"/>
<result property="thickness" column="thickness"/>
<result property="material" column="material"/>
<result property="color" column="color"/>
<result property="num" column="num"/>
</resultMap>
<select id="selectGoodsList"
resultMap="GoodsList"
parameterType="map">
select distinct
c.goods_id as goodsId,
c.width as width,
c.height as height,
c.thickness as thickness,
c.goods_name as goodsName,
c.material as material,
c.color as color,
count(distinct a.id)
from order_plate a
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
-- LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
where
c.organ_id = #{organId}
and a.is_cancel = 0
and b.status = 2
and a.deleted = false
and opi.item_id is null
and c.goods_id in
<foreach item="goodsIds" collection="goodsIds" open="(" separator="," close=")">
#{goodsIds}
</foreach>
group by c.goods_id,c.id,b.id ,c.goods_name,c.width,c.height,c.thickness, c.material, c.color;
</select>
<select id="selectOrderIds" resultType="com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds" parameterType="map">
select distinct
a.order_id as orderId,
c.id as id,
c.goods_id as goodsId
from order_plate a
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
where
c.organ_id = #{organId}
and a.deleted = false
and opi.item_id is null
and c.order_id in
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
#{orderIds}
</foreach>
order by a.order_id
</select>
<!-- select distinct
a.order_id as orderId,
c.id as id,
c.goods_id as goodsId
from order_plate a
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
where
c.organ_id = #{organId}
and a.is_cancel = 0
and b.status = 2
and a.deleted = false
and opi.item_id is null
and c.order_id in
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
#{orderIds}
</foreach>
order by a.order_id-->
<select id="selectGoodsNum" resultType="com.cf.imes.module.executor.controller.admin.plan.bo.GoodsNum">
select distinct
a.order_id as orderId,
count(distinct c.id) as goodsNum
from order_plate a
LEFT JOIN order_item oi on a.id = oi.plate_id and a.order_id = oi.order_id and a.organ_id = oi.organ_id
LEFT JOIN `orders` b on a.order_id = b.id and a.organ_id = b.organ_id
LEFT JOIN order_goods c on a.goods_id = c.id and a.organ_id = c.organ_id
left join order_plan_item opi on oi.id = opi.item_id and oi.organ_id = opi.organ_id
where
c.organ_id = #{organId}
and a.is_cancel = 0
and b.status = 2
and a.deleted = false
and opi.item_id is null
and c.order_id in
<foreach collection="orderIds" item="orderIds" open="(" close=")" separator=",">
#{orderIds}
</foreach>
group by orderId
</select>
<select id="selectPlateTypeByRoomId"
resultType="com.cf.imes.module.executor.dal.dataobject.plate.PlateDO" parameterType="java.lang.Long">
@@ -681,103 +437,6 @@
</select>
<select id="selectPlateListByGoodIds"
resultMap="PlateDetialMap"
resultType="java.lang.Long">
select distinct
oi.group_id as groupId,
og.name as groupName,
op.id as plateId,
op.order_id as orderId,
op.name as name,
op.plate_no as plateNo,
op.type as type,
op.goods_id as goodsId,
op.width as width,
op.height as height,
op.thickness as thickness,
op.split_width as splitWidth,
op.split_height as splitHeight,
op.split_thickness as splitThickness,
op.seal_left as sealLeft,
op.seal_right as sealRight,
op.seal_up as sealUp,
op.seal_down as sealDown,
op.area as area,
op.texture as texture,
op.hole_face as holeFace,
op.hole_arrange as holeArrange,
op.unregular_point_count as unregularPointCount,
op.front_hole_count as frontHoleCount,
op.back_hole_count as backHoleCount,
op.side_hole_count as sideHoleCount,
op.front_model_count as frontModelCount,
op.back_model_count as backModelCount,
op.is_door as isDoor,
op.open_door_type as openDoorType,
op.offset_x as offsetX,
op.offset_y as offsetY,
op.is_arc_across as isArcAcross,
op.module_type_id as moduleTypeId,
op.is_special_shaped as isSpecialShaped,
op.is_sculpt as isSculpt,
op.is_row_hole as hasHole,
op.remark as remark,
op.filter_type as filterType,
op.is_cancel as isCancel,
ob.id as bodyId,
ob.room_id as roomId,
ob.name as bodyName,
ob.room_name as roomName,
op.is_row_hole as hasHole
from order_plate op
left join order_item oi on op.id = oi.plate_id and op.organ_id = oi.organ_id
left join order_body ob on oi.body_id = ob.id and oi.organ_id = ob.organ_id
left join order_group og on oi.group_id = og.id and oi.organ_id = og.organ_id
where op.organ_id = #{organId} and op.deleted = false and op.goods_id in
<foreach collection="goodIds" item="goodIds" open="(" close=")" separator=",">
#{goodIds}
</foreach>
</select>
<!-- <select id="selectPlateArea"-->
<!-- resultType="com.cf.imes.module.executor.controller.admin.plan.vo.PlateInfoVO">-->
<!-- select-->
<!-- og.goods_id as goodsId,-->
<!--&#45;&#45; count(distinct og.id) as optimizeGoodsCount,-->
<!-- sum(op.area) as area-->
<!-- from order_plate op-->
<!-- left join order_goods og on op.goods_id = og.id-->
<!-- where og.organ_id = #{organId} and og.goods_id in-->
<!-- <foreach collection="orderIdsList" item="orderIdsList" open="(" close=")" separator=",">-->
<!-- (#{orderIdsList.goodsId})-->
<!-- </foreach>-->
<!-- and og.order_id in-->
<!-- <foreach collection="orderIdsList" item="orderIdsList" open="(" close=")" separator=",">-->
<!-- (#{orderIdsList.orderId})-->
<!-- </foreach>-->
<!-- group by goodsId;-->
<!-- </select>-->
<select id="selectPlanPlateListDataSource" resultType="java.util.Map">
@@ -42,20 +42,6 @@ public class GoodsServiceImplTest extends BaseDbUnitTest {
@Resource
private GoodsMapper goodsMapper;
@Test
public void testCreateGoods_success() {
// // 准备参数
// GoodsSaveReqVO createReqVO = randomPojo(GoodsSaveReqVO.class).setId(null);
//
// // 调用
// Long goodsId = goodsService.createCorrespondsGoods(createReqVO);
// // 断言
// assertNotNull(goodsId);
// // 校验记录的属性是否正确
// GoodsDO goods = goodsMapper.selectById(goodsId);
// assertPojoEquals(createReqVO, goods, "id");
}
@Test
public void testUpdateGoods_success() {
// mock 数据
@@ -105,74 +91,4 @@ public class GoodsServiceImplTest extends BaseDbUnitTest {
assertServiceException(() -> goodsService.deleteGoods(id), GOODS_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetGoodsPage() {
/* // mock 数据
GoodsDO dbGoods = randomPojo(GoodsDO.class, o -> { // 等会查询到
o.setOrderId(null);
o.setGoodsId(null);
o.setGoodsName(null);
o.setMaterial(null);
o.setColor(null);
o.setWidth(null);
o.setHeight(null);
o.setThickness(null);
o.setPrice(null);
o.setBrand(null);
o.setSpec(null);
o.setRemark(null);
o.setCreateTime(null);
});
goodsMapper.insert(dbGoods);
// 测试 orderNo 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setOrderId(null)));
// 测试 goodsId 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setGoodsId(null)));
// 测试 goodsName 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setGoodsName(null)));
// 测试 material 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setMaterial(null)));
// 测试 color 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setColor(null)));
// 测试 width 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setWidth(null)));
// 测试 height 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setHeight(null)));
// 测试 thickness 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setThickness(null)));
// 测试 price 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setPrice(null)));
// 测试 brand 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setBrand(null)));
// 测试 spec 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setSpec(null)));
// 测试 remark 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setRemark(null)));
// 测试 createTime 不匹配
goodsMapper.insert(cloneIgnoreId(dbGoods, o -> o.setCreateTime(null)));
// 准备参数
GoodsPageReqVO reqVO = new GoodsPageReqVO();
reqVO.setOrderId(null);
reqVO.setGoodsId(null);
reqVO.setGoodsName(null);
reqVO.setMaterial(null);
reqVO.setColor(null);
reqVO.setWidth(null);
reqVO.setHeight(null);
reqVO.setThickness(null);
reqVO.setPrice(null);
reqVO.setBrand(null);
reqVO.setSpec(null);
reqVO.setRemark(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<GoodsDO> pageResult = goodsService.getGoodsPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbGoods, pageResult.getList().get(0));*/
}
}
@@ -1,8 +1,6 @@
package com.cf.imes.module.executor.service.plan;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
@@ -11,23 +9,12 @@ import com.cf.imes.framework.test.core.ut.BaseDbUnitTest;
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
import com.cf.imes.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
import static com.cf.imes.framework.test.core.util.AssertUtils.*;
import static com.cf.imes.framework.test.core.util.RandomUtils.*;
import static com.cf.imes.framework.common.util.date.LocalDateTimeUtils.*;
import static com.cf.imes.framework.common.util.object.ObjectUtils.*;
import static com.cf.imes.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link PlanServiceImpl} 的单元测试类
*
@@ -42,20 +29,6 @@ public class PlanServiceImplTest extends BaseDbUnitTest {
@Resource
private PlanMapper planMapper;
// @Test
// public void testCreatePlan_success() {
// // 准备参数
// PlanSaveReqVO createReqVO = randomPojo(PlanSaveReqVO.class).setId(null);
//
// // 调用
// Long planId = planService.createPlan(createReqVO);
// // 断言
// assertNotNull(planId);
// // 校验记录的属性是否正确
// PlanDO plan = planMapper.selectById(planId);
// assertPojoEquals(createReqVO, plan, "id");
// }
@Test
public void testUpdatePlan_success() {
// mock 数据
@@ -82,93 +55,4 @@ public class PlanServiceImplTest extends BaseDbUnitTest {
assertServiceException(() -> planService.updatePlan(updateReqVO), PLAN_NOT_EXISTS);
}
// @Test
// public void testDeletePlan_success() {
// // mock 数据
// PlanDO dbPlan = randomPojo(PlanDO.class);
// planMapper.insert(dbPlan);// @Sql: 先插入出一条存在的数据
// // 准备参数
// Long id = dbPlan.getId();
//
// // 调用
// planService.deletePlan(id);
// // 校验数据不存在了
// assertNull(planMapper.selectById(id));
// }
// @Test
// public void testDeletePlan_notExists() {
// // 准备参数
// Long id = randomLongId();
//
// // 调用, 并断言异常
// assertServiceException(() -> planService.deletePlan(id), PLAN_NOT_EXISTS);
// }
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetPlanPage() {
// // mock 数据
// PlanDO dbPlan = randomPojo(PlanDO.class, o -> { // 等会查询到
// o.setPlanNo(null);
// o.setSort(null);
// o.setType(null);
// o.setStatus(null);
// o.setIsPay(null);
// o.setMachineId(null);
// o.setPlanTime(null);
// o.setOrderNos(null);
// o.setRemark(null);
// o.setCreateTime(null);
// o.setOperator(null);
// o.setProduceTime(null);
// });
// planMapper.insert(dbPlan);
// // 测试 planNo 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setPlanNo(null)));
// // 测试 sort 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setSort(null)));
// // 测试 type 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setType(null)));
// // 测试 status 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setStatus(null)));
// // 测试 isPay 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setIsPay(null)));
// // 测试 machineId 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setMachineId(null)));
// // 测试 planTime 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setPlanTime(null)));
// // 测试 orderNos 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setOrderNos(null)));
// // 测试 remark 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setRemark(null)));
// // 测试 createTime 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setCreateTime(null)));
// // 测试 operator 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setOperator(null)));
// // 测试 produceTime 不匹配
// planMapper.insert(cloneIgnoreId(dbPlan, o -> o.setProduceTime(null)));
// // 准备参数
// PlanPageReqVO reqVO = new PlanPageReqVO();
// reqVO.setPlanNo(null);
// reqVO.setSort(null);
// reqVO.setType(null);
// reqVO.setStatus(null);
// reqVO.setIsPay(null);
// reqVO.setMachineId(null);
// reqVO.setPlanTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// reqVO.setOrderNos(null);
// reqVO.setRemark(null);
// reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// reqVO.setOperator(null);
// reqVO.setProduceTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// // 调用
// PageResult<PlanRespVO> pageResult = planService.getPlanPage(reqVO);
// // 断言
// assertEquals(1, pageResult.getTotal());
// assertEquals(1, pageResult.getList().size());
// assertPojoEquals(dbPlan, pageResult.getList().get(0));
}
}
@@ -1,160 +0,0 @@
package com.cf.imes.module.executor.service.zlib;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.json.JSONObject;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.handler.codec.compression.JdkZlibDecoder;
import com.alibaba.nacos.shaded.io.grpc.netty.shaded.io.netty.handler.codec.compression.ZlibDecoder;
import com.cf.imes.module.executor.util.CompressTest;
import com.cf.imes.module.executor.util.ZLibUtils;
import lombok.Data;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.Resource;
import org.springframework.http.*;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.io.*;
import java.net.URI;
import java.sql.PreparedStatement;
import java.time.LocalDateTime;
import java.util.*;
import java.util.zip.Inflater;
public class ZlibTest {
private JdbcTemplate jdbcTemplate;
@BeforeEach
public void init() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
druidDataSource.setUrl("jdbc:mysql://192.168.1.245:3306/cferp_test_1");
druidDataSource.setUsername("mes_visitor");
druidDataSource.setPassword("cf123456");
//创建jdbc模板对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(druidDataSource);
this.jdbcTemplate = jdbcTemplate;
}
@Test
void getOrderBoxBlock() throws IOException {
List<OrderBoxBlock> list = jdbcTemplate.query("select * from order_box_block limit 10", new BeanPropertyRowMapper<OrderBoxBlock>(OrderBoxBlock.class));
for (OrderBoxBlock bean : list) {
if (!Objects.isNull(bean.Data)) {
byte[] bytes = Arrays.copyOfRange(bean.Data, 2, bean.Data.length - 1);
System.out.println( new String(bean.Data));
System.out.println( CompressTest.uncompress(new String(bytes)));
//System.out.println(new String(ZLibUtils.decompress(bean.Data)));
System.err.println("------------------------------------------");
}
}
}
@Test
void getOrderBlockPlanResult() throws UnsupportedEncodingException {
List<OrderBlockPlanResult> list = jdbcTemplate.query("select * from order_block_plan_result limit 1", new BeanPropertyRowMapper<OrderBlockPlanResult>(OrderBlockPlanResult.class));
for (OrderBlockPlanResult bean : list) {
if (!Objects.isNull(bean.PlaceData)) {
System.out.println(new String(ZLibUtils.decompress(bean.PlaceData)));
System.err.println("------------------------------------------");
}
}
}
@Test
void test() {
String source = "xxxxxxxxxxaassad";
//压缩
byte[] compress = ZLibUtils.compress(source.getBytes());
String str = new String(compress);
System.out.println(str);
//解压
System.out.println(new String(ZLibUtils.decompress(new ByteArrayInputStream(compress))));
}
public void insertByteArray(String tableName, byte[] data, String columnName) {
final String sql = "INSERT INTO " + tableName + " (" + columnName + ") VALUES (?)";
jdbcTemplate.update(
conn -> {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setBinaryStream(1, new ByteArrayInputStream(data), data.length);
return ps;
}
);
}
public static String uncompress(byte[] input) throws IOException {
Inflater inflater = new Inflater();
inflater.setInput(input);
ByteArrayOutputStream baos = new ByteArrayOutputStream(input.length);
try {
byte[] buff = new byte[1024];
while (!inflater.finished()) {
int count = inflater.inflate(buff);
baos.write(buff, 0, count);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
baos.close();
}
inflater.end();
byte[] output = baos.toByteArray();
return new String(output, "UTF-8");
}
@Data
public static class OrderBoxBlock {
long BoxID;
long ShardKey;
long OrderNo;
byte[] Data;
long CompanyID;
}
@Data
public static class OrderBlockPlanResult {
long ID;
LocalDateTime SaveTime;
byte[] PlaceData;
long CompanyID;
}
@Test
void getRes() throws IOException {
//创建url路径
String url = "https://chenfeng.tech:777/api/v1/OrderBlockPlan/GetPlanOrderData";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
//接口参数
map.add("id",1306667105);
//头部类型
headers.set("Cookie", ".AspNetCore.Cookies=CfDJ8CGzP7BhamtAnTFO8HhkPcxGBkdd4sCOIjQMV-nb37GAFKr4y6C0JA0B3JzRsDAckabiUgBXQaWyDNjCqVTvBNYwbHwVbI5b-eKdXwkIFqsJZObZA-RoLdsu1d9yy1LwBLQwJxDGKTSQzFtrs_eHDeDEuG8CWEF1Iq96X0goR_cFMn0EHWVeRnOlThmDzLkmTMhysVSludR6qV0HrD54GOv5MQvBzzcE-WlsrKTo5Uf0hT8z1fGMY8Hofa6UDh8yyJsz2LFTQTy4NpmklvyXIkwv0fw9bOynHLllUh5ToF0wgrxYFU3Rzgf863uAdtfRP1DY2Rqvf-51uvQHip-SIT_b5p7TaSRiG-M7pZTlI0oOVPZRhng7k-NeIJRdYQmj0h3G3WJHCTH7g1-YQjAGbYQkJFcZdAsZpR-kjOlp3sHpNCDUe0NucYrLNp4tTXesCL_-t8X5GsXMYGlX-oKU10I");
//构造实体对象
HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);
//发起请求,服务地址,请求参数,返回消息体的数据类型
ResponseEntity<Resource> response = restTemplate.postForEntity(url, param, Resource.class);
//body
InputStream inputStream = response.getBody().getInputStream();
BufferedOutputStream out = FileUtil.getOutputStream("C:\\Users\\Beal\\Desktop\\新建文件夹\\xx.txt");
long copySize = IoUtil.copy(inputStream, out, IoUtil.DEFAULT_BUFFER_SIZE);
IoUtil.close(inputStream);
IoUtil.close(out);
}
}