新增cad三维看图能力相关

This commit is contained in:
gaoqr
2025-12-24 17:24:10 +08:00
parent a78ddf464c
commit dd431650ba
27 changed files with 529 additions and 149 deletions
@@ -50,6 +50,21 @@ public class ServletUtils {
IoUtil.write(response.getOutputStream(), false, content); IoUtil.write(response.getOutputStream(), false, content);
} }
/**
* 返回附件文本
*
* @param response 响应
* @param filename 文件名
* @param content 附件内容
*/
public static void writeAttachmentText(HttpServletResponse response, String filename, byte[] content) throws IOException {
// 设置 header 和 contentType
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
response.setContentType(MediaType.TEXT_PLAIN_VALUE);
// 输出附件
IoUtil.write(response.getOutputStream(), false, content);
}
/** /**
* @param request 请求 * @param request 请求
* @return ua * @return ua
@@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -75,6 +76,11 @@ public interface FileApi {
@Parameter(name = "path", description = "文件地址", example = "url", required = true) @Parameter(name = "path", description = "文件地址", example = "url", required = true)
CommonResult<Boolean> deleteFileByPath(String path); CommonResult<Boolean> deleteFileByPath(String path);
@DeleteMapping(PREFIX + "/{id}")
@Operation(summary = "根据文件id删除文件")
@Parameter(name = "id", description = "文件id", example = "123L", required = true)
CommonResult<Boolean> deleteFileById(@PathVariable Long id);
@PostMapping(PREFIX + "/create/id") @PostMapping(PREFIX + "/create/id")
@Operation(summary = "保存文件,并返回文件id") @Operation(summary = "保存文件,并返回文件id")
CommonResult<Long> createFileAndReturnId(@Valid @RequestBody FileCreateReqDTO createReqDTO); CommonResult<Long> createFileAndReturnId(@Valid @RequestBody FileCreateReqDTO createReqDTO);
@@ -28,6 +28,12 @@ public class FileApiImpl implements FileApi {
return success(fileService.deleteFileByPath(path)); return success(fileService.deleteFileByPath(path));
} }
@Override
public CommonResult<Boolean> deleteFileById(Long id) {
fileService.deleteFile(id);
return success(true);
}
@Override @Override
public CommonResult<Long> createFileAndReturnId(FileCreateReqDTO createReqDTO) { public CommonResult<Long> createFileAndReturnId(FileCreateReqDTO createReqDTO) {
return success(fileService.createFileDO(createReqDTO.getName(), createReqDTO.getPath(), return success(fileService.createFileDO(createReqDTO.getName(), createReqDTO.getPath(),
@@ -50,6 +50,14 @@ public class FileController {
return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream()))); return success(fileService.createFile(file.getOriginalFilename(), path, IoUtil.readBytes(file.getInputStream())));
} }
@PostMapping("/cadview")
@Operation(summary = "上传CAD图纸数据")
@OperateLog(logArgs = false) // 上传文件,没有记录操作日志的必要
public CommonResult<Long> uploadCadViewFile(@RequestPart("file") MultipartFile file) throws Exception {
return success(fileService.createFileDO("cadViewFile", null, file.getBytes()));
}
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除文件") @Operation(summary = "删除文件")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@@ -101,6 +109,22 @@ public class FileController {
ServletUtils.writeAttachment(response, String.valueOf(id), content); ServletUtils.writeAttachment(response, String.valueOf(id), content);
} }
@GetMapping("/txt/{id}")
@Operation(summary = "根据文件编号下载文本文件")
@Parameter(name = "id", description = "文件编号", required = true)
@OperateLog(enable = false)
@PermitAll
public void getTxtFileContentById(HttpServletResponse response,
@PathVariable("id") Long id) throws Exception {
byte[] content = fileService.getFileById(id);
if (content == null) {
log.warn("[getFileContent][id({}) 文件不存在]", id);
response.setStatus(HttpStatus.NOT_FOUND.value());
return;
}
ServletUtils.writeAttachmentText(response, String.valueOf(id), content);
}
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得文件分页") @Operation(summary = "获得文件分页")
@PreAuthorize("@ss.hasPermission('infra:file:query')") @PreAuthorize("@ss.hasPermission('infra:file:query')")
@@ -44,7 +44,7 @@ public interface FileService {
* *
* @param id 编号 * @param id 编号
*/ */
void deleteFile(Long id) throws Exception; void deleteFile(Long id);
/** /**
* 获得文件内容 * 获得文件内容
@@ -105,14 +105,18 @@ public class FileServiceImpl implements FileService {
} }
@Override @Override
public void deleteFile(Long id) throws Exception { public void deleteFile(Long id) {
// 校验存在 // 校验存在
FileDO file = validateFileExists(id); FileDO file = validateFileExists(id);
// 从文件存储器中删除 // 从文件存储器中删除
FileClient client = fileConfigService.getFileClient(file.getConfigId()); FileClient client = fileConfigService.getFileClient(file.getConfigId());
Assert.notNull(client, CLIENT_ERR_NOTIFICATION, file.getConfigId()); Assert.notNull(client, CLIENT_ERR_NOTIFICATION, file.getConfigId());
client.delete(file.getPath()); try {
client.delete(file.getPath());
} catch (Exception e) {
throw new ServiceException(FILE_REMOVE_FAIL);
}
// 删除记录 // 删除记录
fileMapper.deleteById(id); fileMapper.deleteById(id);
@@ -0,0 +1,27 @@
package com.cf.imes.module.executor.controller.admin.order.vo.order;
import com.cf.imes.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Schema(description = "管理后台 - 柜体视图板材分组条件")
@Data
@ToString(callSuper = true)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderBodyViewPlatePageReqVO extends PageParam {
@Schema(description = "生产单号", example = "1024")
private Long orderId;
@Schema(description = "房间编号", example = "1024")
private Long roomId;
@Schema(description = "柜体编号", example = "1024")
private Long bodyId;
}
@@ -88,7 +88,4 @@ public class OrderRespVO {
private LocalDateTime createTime; private LocalDateTime createTime;
private Boolean deleted; private Boolean deleted;
@Schema(description = "cad图纸路径")
private String cadViewPath;
} }
@@ -1,10 +1,8 @@
package com.cf.imes.module.executor.controller.admin.order.vo.product; package com.cf.imes.module.executor.controller.admin.order.vo.product;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import com.alibaba.excel.annotation.*; import com.alibaba.excel.annotation.*;
@@ -6,6 +6,7 @@ import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.excel.core.util.ExcelUtils; import com.cf.imes.framework.excel.core.util.ExcelUtils;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderBodyViewPlatePageReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList;
import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
@@ -138,5 +139,16 @@ public class PlateController {
return success(plateService.createNewPlate(reqVO)); return success(plateService.createNewPlate(reqVO));
} }
@GetMapping("/body/view/page")
@Operation(summary = "获取柜体下的板件视图分页列表数据")
public CommonResult<PageResult<OrderBodyViewPlatePageRespVO>> getBodyViewPlatesPage(@Valid OrderBodyViewPlatePageReqVO orderBodyPageRespVO) {
return success(plateService.getBodyViewPlatesPage(orderBodyPageRespVO));
}
@GetMapping("/body/view/cadinfo")
@Operation(summary = "获取板件对应柜体下的所有板件视图列表数据")
@Parameter(name = "plateNo", description = "板件id", required = true)
public CommonResult<List<OrderBodyViewPlatePageRespVO>> getBodyViewPlatesCadInfo(@RequestParam(value = "plateNo") Long plateNo) {
return success(plateService.getBodyViewPlatesCadInfo(plateNo));
}
} }
@@ -0,0 +1,66 @@
package com.cf.imes.module.executor.controller.admin.plate.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
*
*
* @author Gqr
* @since 2025/12/23 13:40
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "管理后台 - 柜体对应的板件视图信息")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderBodyViewPlatePageRespVO {
@Schema(description = "板件编号")
private Long id;
@Schema(description = "板件名称")
private String name;
@Schema(description = "板件宽度")
private BigDecimal width;
@Schema(description = "板件高度")
private BigDecimal height;
@Schema(description = "板件厚度")
private BigDecimal thickness;
@Schema(description = "板件CAD图纸ID")
private Integer cadViewId;
@Schema(description = "左封边厚度")
private BigDecimal sealLeft;
@Schema(description = "右封边厚度")
private BigDecimal sealRight;
@Schema(description = "上封边厚度")
private BigDecimal sealUp;
@Schema(description = "下封边厚度")
private BigDecimal sealDown;
@Schema(description = "材质")
private String material;
@Schema(description = "颜色")
private String color;
@Schema(description = "CAD图纸文件ID")
private Long cadViewFileId;
@Schema(description = "CAD设计板编号")
private String customNumber;
}
@@ -146,9 +146,4 @@ public class OrderDO extends BaseDO {
private Double plannedPlateArea; private Double plannedPlateArea;
private int version; private int version;
/**
* cad图纸路径
*/
private String cadViewPath;
} }
@@ -1,6 +1,5 @@
package com.cf.imes.module.executor.dal.dataobject.orderBody; package com.cf.imes.module.executor.dal.dataobject.orderBody;
import com.cf.imes.framework.organ.core.db.OrganBaseDO;
import lombok.*; import lombok.*;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
@@ -82,4 +81,9 @@ public class OrderBodyDO extends BaseDO {
* 是否删除 * 是否删除
*/ */
private Boolean deleted; private Boolean deleted;
/**
* cad图纸数据文件id
*/
private Long cadViewFileId;
} }
@@ -0,0 +1,79 @@
package com.cf.imes.module.executor.dal.dataobject.orderItem;
import lombok.Data;
import java.math.BigDecimal;
/**
* 柜体板件视图数据DO
*
* @author Gqr
* @since 2025/12/23 11:54
*/
@Data
public class OrderBodyViewPlatesPageDO {
/**
* 主键
*/
private Long id;
/**
* 板件名称
*/
private String name;
/**
* 板件宽度
*/
private BigDecimal width;
/**
* 板件高度
*/
private BigDecimal height;
/**
* 板件厚度
*/
private BigDecimal thickness;
/**
* 板件CAD图纸ID
*/
private Integer cadViewId;
/**
* 左封边厚度
*/
private BigDecimal sealLeft;
/**
* 右封边厚度
*/
private BigDecimal sealRight;
/**
* 上封边厚度
*/
private BigDecimal sealUp;
/**
* 下封边厚度
*/
private BigDecimal sealDown;
/**
* 材质
*/
private String material;
/**
* 颜色
*/
private String color;
/**
* cad设计板编号
*/
private String customNumber;
}
@@ -222,4 +222,9 @@ public class PlateDO extends BaseDO {
* cad图纸数据 * cad图纸数据
*/ */
private String cadData; private String cadData;
/**
* cad自定义板编号
*/
private String cadPlateNo;
} }
@@ -10,6 +10,7 @@ import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsRes
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlatesDetailRespVO; 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.orderParts.vo.OrderPartsRespVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderBodyViewPlatesPageDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -186,4 +187,19 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
List<PlateAndPartIdList> selectOrderPackPlateIds(@Param("orderId") Long orderId,@Param("organId") Long organId); List<PlateAndPartIdList> selectOrderPackPlateIds(@Param("orderId") Long orderId,@Param("organId") Long organId);
/**
* 分页查询柜体板件视图数据
*
* @param page
* @param orderId
* @param roomId
* @param bodyId
* @return
*/
IPage<OrderBodyViewPlatesPageDO> selectBodyViewPlatesPage(@Param("page") IPage page,
@Param("orderId") Long orderId,
@Param("roomId") Long roomId,
@Param("bodyId") Long bodyId,
@Param("organId") Long organId,
@Param("cadView") boolean cadView);
} }
@@ -2,6 +2,7 @@ package com.cf.imes.module.executor.service.plate;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderBodyViewPlatePageReqVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList;
import com.cf.imes.module.executor.controller.admin.plate.vo.*; import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
@@ -94,4 +95,19 @@ public interface PlateService {
List<InsertPlateRespVO> createNewPlate(List<OptimizationSavePlateReqVO> reqVO); List<InsertPlateRespVO> createNewPlate(List<OptimizationSavePlateReqVO> reqVO);
/**
* 获取柜体板件视图分页列表
*
* @param orderBodyPageRespVO
* @return
*/
PageResult<OrderBodyViewPlatePageRespVO> getBodyViewPlatesPage(OrderBodyViewPlatePageReqVO orderBodyPageRespVO);
/**
* 根据板件id获取柜体下的所有板件cad视图所需信息
*
* @param plateId
* @return
*/
List<OrderBodyViewPlatePageRespVO> getBodyViewPlatesCadInfo(Long plateId);
} }
@@ -1,5 +1,6 @@
package com.cf.imes.module.executor.service.plate; package com.cf.imes.module.executor.service.plate;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.*; import com.cf.imes.framework.common.enums.*;
import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.pojo.PageParam;
import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.Assert.AssertUtils; import com.cf.imes.framework.common.util.Assert.AssertUtils;
import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.common.util.object.BeanUtils;
@@ -21,6 +23,7 @@ import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX; import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX; import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO; import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsSaveReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderBodyViewPlatePageReqVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlateNumAndAreaRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlateNumAndAreaRespVO;
import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp; import com.cf.imes.module.executor.controller.admin.plan.vo.OrderGoodsResp;
import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList; import com.cf.imes.module.executor.controller.admin.plan.vo.PlateResList;
@@ -28,6 +31,7 @@ import com.cf.imes.module.executor.controller.admin.plate.vo.*;
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderBodyViewPlatesPageDO;
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO; 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.plan.PlanDO;
@@ -136,28 +140,28 @@ public class PlateServiceImpl implements PlateService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deletePlate(List<Long> plateIds, Long planId) { public void deletePlate(List<Long> plateIds, Long planId) {
if(CollUtil.isEmpty(plateIds)){ if (CollUtil.isEmpty(plateIds)) {
return; return;
} }
PlanDO planDO = planMapper.selectById(planId); PlanDO planDO = planMapper.selectById(planId);
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); AssertUtils.notEmpty(planDO, ORDER_PLAN_DATE_ERROR);
List<PlateDO> plateDOS = plateMapper.selectBatchIds(plateIds); List<PlateDO> plateDOS = plateMapper.selectBatchIds(plateIds);
AssertUtils.notEmpty(plateDOS,REMAIN_PLATE_NOT_EXISTS); AssertUtils.notEmpty(plateDOS, REMAIN_PLATE_NOT_EXISTS);
for (PlateDO plateDO : plateDOS) { for (PlateDO plateDO : plateDOS) {
if(!plateDO.getType().equals(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())){ if (!plateDO.getType().equals(OrderPlateTypeEnum.SELFINCREASINGBOARD.getType())) {
throw new ServiceException(PLATE_IS_SOURCE,plateDO.getPlateNo()); throw new ServiceException(PLATE_IS_SOURCE, plateDO.getPlateNo());
} }
if(!plateDO.getIsCutted().equals(OrderPlateCutStatusEnum.NOCUTTING.getStatus())){ if (!plateDO.getIsCutted().equals(OrderPlateCutStatusEnum.NOCUTTING.getStatus())) {
throw new ServiceException(THIS_PLATE_IS_OPTIMIZE,plateDO.getPlateNo()); throw new ServiceException(THIS_PLATE_IS_OPTIMIZE, plateDO.getPlateNo());
} }
} }
@@ -175,7 +179,7 @@ public class PlateServiceImpl implements PlateService {
List<OrderBodyDO> orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds); List<OrderBodyDO> orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds);
orderBodyDOS.forEach(f->{ orderBodyDOS.forEach(f -> {
int plateNum = orderItemDOS.stream().filter(o -> f.getId().equals(o.getBodyId())).toList().size(); int plateNum = orderItemDOS.stream().filter(o -> f.getId().equals(o.getBodyId())).toList().size();
f.setPlateNum(f.getPlateNum() - plateNum); f.setPlateNum(f.getPlateNum() - plateNum);
@@ -191,7 +195,7 @@ public class PlateServiceImpl implements PlateService {
// 删除添加自增板时新增的大板ID // 删除添加自增板时新增的大板ID
List<Long> orderGoodsIdList = goodsMapper.selectInsertGoodsIds(orderIds, goodsIds, getUserOrganId()); List<Long> orderGoodsIdList = goodsMapper.selectInsertGoodsIds(orderIds, goodsIds, getUserOrganId());
if(CollUtil.isNotEmpty(orderGoodsIdList)){ if (CollUtil.isNotEmpty(orderGoodsIdList)) {
goodsMapper.deleteBatchIds(orderGoodsIdList); goodsMapper.deleteBatchIds(orderGoodsIdList);
} }
@@ -301,8 +305,6 @@ public class PlateServiceImpl implements PlateService {
} }
@Override @Override
public PageResult<PlateDO> getPlatePage(PlatePageReqVO pageReqVO) { public PageResult<PlateDO> getPlatePage(PlatePageReqVO pageReqVO) {
return plateMapper.selectPage(pageReqVO); return plateMapper.selectPage(pageReqVO);
@@ -317,8 +319,6 @@ public class PlateServiceImpl implements PlateService {
} }
@Override @Override
public PageResult<PlateResList> getOrderPlatePage(NoPlanPlatePageReqVO pageReqVO) { public PageResult<PlateResList> getOrderPlatePage(NoPlanPlatePageReqVO pageReqVO) {
@@ -331,14 +331,14 @@ public class PlateServiceImpl implements PlateService {
QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>(); QueryWrapperX<OrderDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX queryWrapperX
.eq("o.organ_id",organId) .eq("o.organ_id", organId)
.eq("o.deleted",false) .eq("o.deleted", false)
.in("o.status",statusList) .in("o.status", statusList)
.isNotNull("op.id") .isNotNull("op.id")
.eq("op.deleted",false); .eq("op.deleted", false);
if(pageReqVO.getPlanId() != null){ if (pageReqVO.getPlanId() != null) {
Long planId = pageReqVO.getPlanId(); Long planId = pageReqVO.getPlanId();
@@ -348,7 +348,7 @@ public class PlateServiceImpl implements PlateService {
List<OrderGoodsResp> goodsRespVOS = planMapper.selectPlanGoodsList(planId, organId); List<OrderGoodsResp> goodsRespVOS = planMapper.selectPlanGoodsList(planId, organId);
AssertUtils.notEmpty(goodsRespVOS,PLAN_NOT_EXISTS); AssertUtils.notEmpty(goodsRespVOS, PLAN_NOT_EXISTS);
List<String> material = goodsRespVOS.stream().map(OrderGoodsResp::getMaterial).distinct().toList(); List<String> material = goodsRespVOS.stream().map(OrderGoodsResp::getMaterial).distinct().toList();
@@ -362,7 +362,7 @@ public class PlateServiceImpl implements PlateService {
// 混单 // 混单
if(planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())){ if (planDO.getType().equals(PlanTypeEnum.MIXEDORDERPLAN.getType())) {
// 混单添加查询条件 // 混单添加查询条件
mixedInsertQuery(pageReqVO, planDO, material, thickness, queryWrapperX); mixedInsertQuery(pageReqVO, planDO, material, thickness, queryWrapperX);
@@ -381,37 +381,37 @@ public class PlateServiceImpl implements PlateService {
else { else {
queryWrapperX queryWrapperX
.likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial()) .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial())
.likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand())
.likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor())
.eqIfPresent(FIELD_OP_THICKNESS,pageReqVO.getThickness()); .eqIfPresent(FIELD_OP_THICKNESS, pageReqVO.getThickness());
} }
queryWrapperX queryWrapperX
.inIfPresent("op.goods_id",pageReqVO.getGoodsIdList()) .inIfPresent("op.goods_id", pageReqVO.getGoodsIdList())
.likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null) .likeIfPresent("o.id", pageReqVO.getOrderId() != null ? pageReqVO.getOrderId() : null)
.likeIfPresent("op.id",pageReqVO.getPlateId()) .likeIfPresent("op.id", pageReqVO.getPlateId())
.likeIfPresent("op.name",pageReqVO.getPlateName()) .likeIfPresent("op.name", pageReqVO.getPlateName())
.likeIfPresent("op.plate_no",pageReqVO.getPlateNo()) .likeIfPresent("op.plate_no", pageReqVO.getPlateNo())
.likeIfPresent("op.custom_plate_no",pageReqVO.getCustomPlateNo()) .likeIfPresent("op.custom_plate_no", pageReqVO.getCustomPlateNo())
.betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()}) .betweenIfPresent("op.height", new BigDecimal[]{pageReqVO.getLongMinRang(), pageReqVO.getLongMaxRang()})
.betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()}) .betweenIfPresent("op.width", new BigDecimal[]{pageReqVO.getWidthMinRang(), pageReqVO.getWidthMaxRang()})
.betweenIfPresent(FIELD_OP_THICKNESS, new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()}) .betweenIfPresent(FIELD_OP_THICKNESS, new BigDecimal[]{pageReqVO.getThicknessMinRang(), pageReqVO.getThicknessMaxRang()})
.eqIfPresent("op.texture",pageReqVO.getTexture()) .eqIfPresent("op.texture", pageReqVO.getTexture())
.eqIfPresent("op.is_special_shaped",pageReqVO.getIsSpecialShaped()) .eqIfPresent("op.is_special_shaped", pageReqVO.getIsSpecialShaped())
.eqIfPresent("op.is_sculpt",pageReqVO.getIsSculpt()) .eqIfPresent("op.is_sculpt", pageReqVO.getIsSculpt())
.eqIfPresent("op.is_row_hole",pageReqVO.getIsRowHole()) .eqIfPresent("op.is_row_hole", pageReqVO.getIsRowHole())
.likeIfPresent("op.remark",pageReqVO.getRemark()) .likeIfPresent("op.remark", pageReqVO.getRemark())
.orderByDesc("o.id, op.id"); .orderByDesc("o.id, op.id");
Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(); Integer pageNo = (pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize();
List<PlateResList> plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX,pageNo,pageReqVO.getPageSize(),organId); List<PlateResList> plateResLists = orderMapper.selectNoPlanOrderPlateList(queryWrapperX, pageNo, pageReqVO.getPageSize(), organId);
if(CollUtil.isEmpty(plateResLists)){ if (CollUtil.isEmpty(plateResLists)) {
return new PageResult<>(); return new PageResult<>();
@@ -420,7 +420,7 @@ public class PlateServiceImpl implements PlateService {
queryWrapperX queryWrapperX
.groupBy("o.id"); .groupBy("o.id");
List<Long> plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX,organId); List<Long> plateCount = orderMapper.selectNoPlanOrderPlateCount(queryWrapperX, organId);
long sum = plateCount.stream().mapToLong(Long::longValue).sum(); long sum = plateCount.stream().mapToLong(Long::longValue).sum();
@@ -465,7 +465,7 @@ public class PlateServiceImpl implements PlateService {
@Override @Override
public PageResult<PlateRespVO> getPlatePageByTerms(PlateTermsPageReqVO pageReqVO) { public PageResult<PlateRespVO> getPlatePageByTerms(PlateTermsPageReqVO pageReqVO) {
PageDTO<PlateRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); PageDTO<PlateRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<PlateRespVO> pageRes = plateMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(),getUserOrganId()); IPage<PlateRespVO> pageRes = plateMapper.selectProductList(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(), getUserOrganId());
return new PageResult<PlateRespVO>(pageRes.getRecords(), pageRes.getTotal()); return new PageResult<PlateRespVO>(pageRes.getRecords(), pageRes.getTotal());
} }
@@ -487,11 +487,11 @@ public class PlateServiceImpl implements PlateService {
@SneakyThrows @SneakyThrows
@Override @Override
public List<BodyPlateDetailVO> getPlateModelByPlateId(List<Long> bodyIds) { public List<BodyPlateDetailVO> getPlateModelByPlateId(List<Long> bodyIds) {
List<BodyPlateIdDTO> list = plateMapper.selectJoinList(BodyPlateIdDTO.class, new MPJLambdaWrapperX<PlateDO>() List<BodyPlateIdDTO> list = plateMapper.selectJoinList(BodyPlateIdDTO.class, new MPJLambdaWrapperX<PlateDO>()
.selectAs(PlateDO::getId, FIELD_PLATE_ID) .selectAs(PlateDO::getId, FIELD_PLATE_ID)
.leftJoin(OrderItemDO.class, OrderItemDO::getPlateId, PlateDO::getId) .leftJoin(OrderItemDO.class, OrderItemDO::getPlateId, PlateDO::getId)
.eq(OrderItemDO::getOrganId,getUserOrganId()) .eq(OrderItemDO::getOrganId, getUserOrganId())
.in(OrderItemDO::getBodyId, bodyIds) .in(OrderItemDO::getBodyId, bodyIds)
.select(OrderItemDO::getBodyId) .select(OrderItemDO::getBodyId)
); );
@@ -503,18 +503,17 @@ public class PlateServiceImpl implements PlateService {
List<BodyPlateDetailVO> bodyPlateDetailVOS = new ArrayList<>(); List<BodyPlateDetailVO> bodyPlateDetailVOS = new ArrayList<>();
List<List<List<Object>>> data = new ArrayList<>(); List<List<List<Object>>> data = new ArrayList<>();
map.entrySet().forEach(e->{ map.entrySet().forEach(e -> {
bodyPlateDetailVOS.add(BodyPlateDetailVO.builder() bodyPlateDetailVOS.add(BodyPlateDetailVO.builder()
.orderModelList(e.getValue()) .orderModelList(e.getValue())
.bodyId(e.getKey()) .bodyId(e.getKey())
.build() .build()
); );
}); });
return bodyPlateDetailVOS; return bodyPlateDetailVOS;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public List<InsertPlateRespVO> createNewPlate(List<OptimizationSavePlateReqVO> reqVO) { public List<InsertPlateRespVO> createNewPlate(List<OptimizationSavePlateReqVO> reqVO) {
@@ -529,15 +528,15 @@ public class PlateServiceImpl implements PlateService {
List<OrderModelDO> orderPlateModelDOS = new ArrayList<>(); List<OrderModelDO> orderPlateModelDOS = new ArrayList<>();
Long planId = Optional.ofNullable(reqVO.get(0).getPlanId()).orElseThrow(()-> new ServiceException(ORDER_PLAN_PLATE_ERROR)); Long planId = Optional.ofNullable(reqVO.get(0).getPlanId()).orElseThrow(() -> new ServiceException(ORDER_PLAN_PLATE_ERROR));
PlanDO planDO = planMapper.selectById(planId); PlanDO planDO = planMapper.selectById(planId);
AssertUtils.notEmpty(planDO,ORDER_PLAN_DATE_ERROR); AssertUtils.notEmpty(planDO, ORDER_PLAN_DATE_ERROR);
List<Long> orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList(); List<Long> orderIds = reqVO.stream().map(OptimizationSavePlateReqVO::getOrderId).distinct().toList();
// 查询排单下的orderGoodsId列表 // 查询排单下的orderGoodsId列表
List<Long> goodsId = planMapper.selectPlanOrderGoodsId(planId,orderIds, getUserOrganId()); List<Long> goodsId = planMapper.selectPlanOrderGoodsId(planId, orderIds, getUserOrganId());
List<GoodsDO> goodsDOS = goodsMapper.selectBatchIds(goodsId); List<GoodsDO> goodsDOS = goodsMapper.selectBatchIds(goodsId);
@@ -546,9 +545,9 @@ public class PlateServiceImpl implements PlateService {
Map<Long, OrderPlanPlateNumAndAreaRespVO> orderGoodsPlanPlateNumAndAreaRespVOMap = new HashMap<>(); Map<Long, OrderPlanPlateNumAndAreaRespVO> orderGoodsPlanPlateNumAndAreaRespVOMap = new HashMap<>();
// 组装新增数据 // 组装新增数据
reqVO.forEach(f->{ reqVO.forEach(f -> {
Map<String,String> plateIdAndNo = new HashMap<>(); Map<String, String> plateIdAndNo = new HashMap<>();
Long orderId = f.getOrderId(); Long orderId = f.getOrderId();
@@ -571,7 +570,7 @@ public class PlateServiceImpl implements PlateService {
// 小板ID // 小板ID
Long plateId = (Long) identifierGenerator.nextId(null); Long plateId = (Long) identifierGenerator.nextId(null);
plateIdAndNo.put(plateId.toString(),plateNo); plateIdAndNo.put(plateId.toString(), plateNo);
// 计算面积 // 计算面积
BigDecimal area = f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros(); BigDecimal area = f.getWidth().multiply(f.getHeight()).movePointLeft(6).stripTrailingZeros();
@@ -644,7 +643,7 @@ public class PlateServiceImpl implements PlateService {
List<OrderBodyDO> orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds); List<OrderBodyDO> orderBodyDOS = orderBodyMapper.selectBatchIds(bodyIds);
orderBodyDOS.forEach(f->{ orderBodyDOS.forEach(f -> {
Integer plateNum = numVOS.stream() Integer plateNum = numVOS.stream()
.filter(n -> n.getBodyId().equals(f.getId())) .filter(n -> n.getBodyId().equals(f.getId()))
@@ -724,7 +723,6 @@ public class PlateServiceImpl implements PlateService {
} }
public static List<OrderBodyNumVO> mergeOrderBody(List<OrderBodyNumVO> dataList) { public static List<OrderBodyNumVO> mergeOrderBody(List<OrderBodyNumVO> dataList) {
if (dataList == null || dataList.isEmpty()) { if (dataList == null || dataList.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
@@ -744,16 +742,12 @@ public class PlateServiceImpl implements PlateService {
} }
private List<OrderModelDO> buildRespByPlateIds(Collection<Long> plateIds, String index) { private List<OrderModelDO> buildRespByPlateIds(Collection<Long> plateIds, String index) {
List<FieldValue> fieldValues = plateIds.stream().map(FieldValue::of).toList(); List<FieldValue> fieldValues = plateIds.stream().map(FieldValue::of).toList();
SearchRequest.Builder builder = new SearchRequest.Builder(); SearchRequest.Builder builder = new SearchRequest.Builder();
builder.index(index); builder.index(index);
builder.query(q -> q.terms(b -> b.field(FIELD_PLATE_ID).terms(e->e.value(fieldValues)))); builder.query(q -> q.terms(b -> b.field(FIELD_PLATE_ID).terms(e -> e.value(fieldValues))));
builder.size(plateIds.size()); builder.size(plateIds.size());
try { try {
SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class); SearchResponse<OrderModelDO> search = elasticsearchClient.search(builder.build(), OrderModelDO.class);
@@ -776,29 +770,28 @@ public class PlateServiceImpl implements PlateService {
QueryWrapperX<OrderDO> queryWrapperX) { QueryWrapperX<OrderDO> queryWrapperX) {
if (Boolean.TRUE.equals(pageReqVO.getIsMixed())) {
if(Boolean.TRUE.equals(pageReqVO.getIsMixed())){
throw new ServiceException(PLAN_IS_MIXED_ERROR); throw new ServiceException(PLAN_IS_MIXED_ERROR);
} }
// 相同材质和厚度 // 相同材质和厚度
if(planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ if (planDO.getFilter().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())) {
queryWrapperX queryWrapperX
.inIfPresent(FIELD_OG_MATERIAL,material) .inIfPresent(FIELD_OG_MATERIAL, material)
.likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand())
.likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor())
.inIfPresent(FIELD_OP_THICKNESS,thickness); .inIfPresent(FIELD_OP_THICKNESS, thickness);
} }
// 相同厚度 // 相同厚度
else { else {
queryWrapperX queryWrapperX
.likeIfPresent(FIELD_OG_MATERIAL,pageReqVO.getMaterial()) .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial())
.likeIfPresent(FIELD_OG_BRAND,pageReqVO.getBrand()) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand())
.likeIfPresent(FIELD_OG_COLOR,pageReqVO.getColor()) .likeIfPresent(FIELD_OG_COLOR, pageReqVO.getColor())
.inIfPresent(FIELD_OP_THICKNESS,thickness); .inIfPresent(FIELD_OP_THICKNESS, thickness);
} }
@@ -816,14 +809,14 @@ public class PlateServiceImpl implements PlateService {
QueryWrapperX<OrderDO> queryWrapperX) { QueryWrapperX<OrderDO> queryWrapperX) {
// 是否开启混单 // 是否开启混单
if(Boolean.TRUE.equals(pageReqVO.getIsMixed())){ if (Boolean.TRUE.equals(pageReqVO.getIsMixed())) {
if(!planDO.getStatus().equals(PlanStatusEnum.NOCUTTING.getStatus())){ if (!planDO.getStatus().equals(PlanStatusEnum.NOCUTTING.getStatus())) {
throw new ServiceException(PLAN_PLATE_IS_CUTTING); throw new ServiceException(PLAN_PLATE_IS_CUTTING);
} }
// 相同材质和厚度 混单 // 相同材质和厚度 混单
if(pageReqVO.getMixedType().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())){ if (pageReqVO.getMixedType().equals(MixConfigTypeEnum.SAMEMATERIALANDTHICKNESS.getType())) {
queryWrapperX queryWrapperX
.inIfPresent(FIELD_OG_MATERIAL, material) .inIfPresent(FIELD_OG_MATERIAL, material)
.likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand())
@@ -832,7 +825,7 @@ public class PlateServiceImpl implements PlateService {
} }
// 相同厚度 混单 // 相同厚度 混单
else{ else {
queryWrapperX queryWrapperX
.likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial()) .likeIfPresent(FIELD_OG_MATERIAL, pageReqVO.getMaterial())
.likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand()) .likeIfPresent(FIELD_OG_BRAND, pageReqVO.getBrand())
@@ -840,7 +833,7 @@ public class PlateServiceImpl implements PlateService {
.inIfPresent(FIELD_OP_THICKNESS, thickness); .inIfPresent(FIELD_OP_THICKNESS, thickness);
} }
}else { } else {
queryWrapperX queryWrapperX
.inIfPresent(FIELD_OG_MATERIAL, material) .inIfPresent(FIELD_OG_MATERIAL, material)
.inIfPresent(FIELD_OG_BRAND, brand) .inIfPresent(FIELD_OG_BRAND, brand)
@@ -852,5 +845,53 @@ public class PlateServiceImpl implements PlateService {
} }
@Override
public PageResult<OrderBodyViewPlatePageRespVO> getBodyViewPlatesPage(OrderBodyViewPlatePageReqVO pageReqVO) {
PageDTO<PlateRespVO> page = new PageDTO<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<OrderBodyViewPlatesPageDO> pageRes = orderItemMapper.selectBodyViewPlatesPage(page, pageReqVO.getOrderId(), pageReqVO.getRoomId(), pageReqVO.getBodyId(), getUserOrganId(), false);
return new PageResult(BeanUtil.copyToList(pageRes.getRecords(), OrderBodyViewPlatePageRespVO.class), pageRes.getTotal());
}
@Override
public List<OrderBodyViewPlatePageRespVO> getBodyViewPlatesCadInfo(Long plateId) {
// 匹配板材
PlateDO plateDO = plateMapper.selectById(plateId);
if (ObjectUtil.isNull(plateDO)) {
throw new ServiceException(PLATE_NOT_EXISTS);
}
// 匹配orderItem
OrderItemDO orderItemDO = orderItemMapper.selectOne(new LambdaUpdateWrapper<OrderItemDO>()
.eq(OrderItemDO::getPlateId, plateId)
.eq(OrderItemDO::getOrderId, plateDO.getOrderId())
.eq(OrderItemDO::getOrganId, plateDO.getOrganId()));
if (ObjectUtil.isNull(orderItemDO)) {
throw new ServiceException(PLATE_NOT_EXISTS);
}
// 匹配柜体
OrderBodyDO orderBodyDO = orderBodyMapper.selectById(orderItemDO.getBodyId());
if (ObjectUtil.isNull(orderBodyDO)) {
throw new ServiceException(ORDER_BODY_NOT_EXISTS);
}
Long cadViewFileId = orderBodyDO.getCadViewFileId();
// 查询所有板件的视图所需信息
PageDTO<PlateRespVO> page = new PageDTO<>(1, PageParam.PAGE_SIZE_NONE);
IPage<OrderBodyViewPlatesPageDO> viewPlatesPage = orderItemMapper.selectBodyViewPlatesPage(page, orderItemDO.getOrderId(), orderItemDO.getRoomId(), orderItemDO.getBodyId(), orderItemDO.getOrganId(), true);
List<OrderBodyViewPlatesPageDO> records = viewPlatesPage.getRecords();
List<OrderBodyViewPlatePageRespVO> resultList = new ArrayList<>();
if (CollUtil.isNotEmpty(records)) {
resultList = records.stream().map(item -> {
OrderBodyViewPlatePageRespVO vo = new OrderBodyViewPlatePageRespVO();
BeanUtil.copyProperties(item, vo);
vo.setCadViewFileId(cadViewFileId);
return vo;
}).collect(Collectors.toList());
}
return resultList;
}
} }
@@ -533,4 +533,21 @@
and plate_id !=0 and plate_id !=0
</select> </select>
<select id="selectBodyViewPlatesPage" resultType="com.cf.imes.module.executor.dal.dataobject.orderItem.OrderBodyViewPlatesPageDO">
SELECT p.id, p.name, p.width, p.height, p.thickness, p.cad_view_id, g.material, g.color
<if test="cadView">
, p.cad_plate_no as customNumber, p.seal_left, p.seal_down, p.seal_right, p.seal_up
</if>
FROM order_item i
LEFT JOIN `order_plate` p ON i.plate_id = p.id
LEFT JOIN `order_goods` g ON g.id = p.goods_id
WHERE i.order_id = #{orderId} AND i.organ_id = #{organId} AND p.deleted = false and i.plate_id != 0
<if test="roomId != null">
AND i.room_id = #{roomId}
</if>
<if test="bodyId != null">
AND i.body_id = #{bodyId}
</if>
</select>
</mapper> </mapper>
@@ -18,6 +18,9 @@ public class WebCadDataReqVO {
@JsonProperty(value = "OrderNo") @JsonProperty(value = "OrderNo")
private String orderNo; private String orderNo;
@JsonProperty(value = "CadViewFileId")
private Long cadViewFileId;
@JsonProperty(value = "Materials") @JsonProperty(value = "Materials")
private List<WebCadDataMaterialReqVO> Materials; private List<WebCadDataMaterialReqVO> Materials;
@@ -33,6 +36,4 @@ public class WebCadDataReqVO {
@JsonProperty(value = "Blocks") @JsonProperty(value = "Blocks")
private List<WebCadDataDoubleRoomTreeReqVO> blocks; private List<WebCadDataDoubleRoomTreeReqVO> blocks;
private String cadViewPath;
} }
@@ -157,9 +157,4 @@ public class OrderDO extends BaseDO {
* 版本号:乐观锁用 * 版本号:乐观锁用
*/ */
private int version; private int version;
/**
* cad图纸路径
*/
private String cadViewPath;
} }
@@ -301,4 +301,9 @@ public class PlateDO extends BaseDO {
* cad图纸数据 * cad图纸数据
*/ */
private String cadData; private String cadData;
/**
* cad自定义板编号
*/
private String cadPlateNo;
} }
@@ -1,5 +1,6 @@
package com.cf.imes.module.plan.framework.rpc.config; package com.cf.imes.module.plan.framework.rpc.config;
import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.system.api.customplateno.CustomPlateNoSeqApi; import com.cf.imes.module.system.api.customplateno.CustomPlateNoSeqApi;
import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.dict.DictDataApi;
import com.cf.imes.module.system.api.systemconfig.SystemConfigApi; import com.cf.imes.module.system.api.systemconfig.SystemConfigApi;
@@ -11,6 +12,6 @@ import org.springframework.context.annotation.Configuration;
* @author there * @author there
*/ */
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@EnableFeignClients(clients = {AdminUserApi.class, DictDataApi.class, SystemConfigApi.class, CustomPlateNoSeqApi.class,}) @EnableFeignClients(clients = {AdminUserApi.class, DictDataApi.class, SystemConfigApi.class, CustomPlateNoSeqApi.class, FileApi.class})
public class RpcConfiguration { public class RpcConfiguration {
} }
@@ -21,6 +21,7 @@ import com.cf.imes.module.executor.enums.OrderImportStatusEnum;
import com.cf.imes.module.executor.enums.OrderImportTaskStatusEnum; import com.cf.imes.module.executor.enums.OrderImportTaskStatusEnum;
import com.cf.imes.module.executor.enums.OrderImportTypeEnum; import com.cf.imes.module.executor.enums.OrderImportTypeEnum;
import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum;
import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataReqVO; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataReqVO;
import com.cf.imes.module.plan.dal.dataobject.order.OrderDO; import com.cf.imes.module.plan.dal.dataobject.order.OrderDO;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO; import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO;
@@ -118,6 +119,9 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
@Resource @Resource
private RabbitTemplate rabbitTemplate; private RabbitTemplate rabbitTemplate;
@Resource
private FileApi fileApi;
private static final String REDIS_UNIQUEKEY = "webcad"; private static final String REDIS_UNIQUEKEY = "webcad";
@Resource @Resource
@@ -134,6 +138,8 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
Long taskId = null; Long taskId = null;
OrderDO orderDO = null; OrderDO orderDO = null;
JsonFactory factory = new JsonFactory(); JsonFactory factory = new JsonFactory();
Long cadViewFileId = null;
try (GZIPInputStream gzipInputStream = new GZIPInputStream(file.getInputStream()); try (GZIPInputStream gzipInputStream = new GZIPInputStream(file.getInputStream());
JsonParser parser = factory.createParser(gzipInputStream)) { JsonParser parser = factory.createParser(gzipInputStream)) {
factory.disable(JsonParser.Feature.AUTO_CLOSE_SOURCE); factory.disable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
@@ -165,6 +171,9 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
WebCadDataReqVO webCadDataReqVO = mapper.readValue(parser, WebCadDataReqVO.class); WebCadDataReqVO webCadDataReqVO = mapper.readValue(parser, WebCadDataReqVO.class);
WebCadOrderImportFactory webCadOrderImportFactory = new WebCadOrderImportFactory(organId, orderDO, snowFlakeGenerator, orderMapper, orderBodyMapper, plateMapper, WebCadOrderImportFactory webCadOrderImportFactory = new WebCadOrderImportFactory(organId, orderDO, snowFlakeGenerator, orderMapper, orderBodyMapper, plateMapper,
idWorker, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, webCadImportProperties.getCadImportPlateNumThreshold(), jdbcTemplate); idWorker, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, webCadImportProperties.getCadImportPlateNumThreshold(), jdbcTemplate);
// cad图纸文件id
cadViewFileId = webCadDataReqVO.getCadViewFileId();
webCadOrderImportFactory.analyzeTempData(webCadDataReqVO); webCadOrderImportFactory.analyzeTempData(webCadDataReqVO);
} else { } else {
sync = false; sync = false;
@@ -190,11 +199,15 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
} }
} }
} catch (ServiceException se) { } catch (ServiceException se) {
// 删除cad图纸数据
removeCadFileWhenException(cadViewFileId);
// 移除临时文件 // 移除临时文件
removeCacheFileWhenException(sync, taskId); removeCacheFileWhenException(sync, taskId);
throw se; throw se;
} catch (Exception e) { } catch (Exception e) {
// 删除cad图纸数据
removeCadFileWhenException(cadViewFileId);
// 移除临时文件 // 移除临时文件
removeCacheFileWhenException(sync, taskId); removeCacheFileWhenException(sync, taskId);
@@ -333,4 +346,19 @@ public class WebCadOrderImportServiceImpl implements WebCadOrderImportService {
} }
} }
} }
/**
* 删除cad图纸文件数据
*
* @param cadViewFileId
*/
private void removeCadFileWhenException(Long cadViewFileId) {
try {
if (ObjectUtil.isNotNull(cadViewFileId)) {
fileApi.deleteFileById(cadViewFileId);
}
} catch (IORuntimeException e) {
log.error("删除cad图纸数据文件失败: {}", cadViewFileId, e);
}
}
} }
@@ -5,17 +5,16 @@ import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd; import com.cf.imes.framework.id.core.util.SnowflakeIdWorker3rd;
import com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants;
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.redis.config.ChenfengCacheProperties; import com.cf.imes.framework.redis.config.ChenfengCacheProperties;
import com.cf.imes.framework.redis.constants.RedisKeyConstants; import com.cf.imes.framework.redis.constants.RedisKeyConstants;
import com.cf.imes.framework.redis.util.RedisLockUtil; import com.cf.imes.framework.redis.util.RedisLockUtil;
import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO; import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTaskDO;
import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.plan.dal.mysql.order.OrderMapper; import com.cf.imes.module.plan.dal.mysql.order.OrderMapper;
import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper; import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper;
import com.cf.imes.module.plan.dal.mysql.orderGroup.OrderGroupMapper;
import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper;
import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper; import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper;
@@ -65,9 +64,6 @@ public class WebCadOrderImportConsumer {
@Resource @Resource
private PlateMapper plateMapper; private PlateMapper plateMapper;
@Resource
private OrderGroupMapper orderGroupMapper;
@Resource @Resource
private SnowflakeIdWorker3rd idWorker; private SnowflakeIdWorker3rd idWorker;
@@ -107,6 +103,9 @@ public class WebCadOrderImportConsumer {
@Resource @Resource
private ChenfengCacheProperties chenfengCacheProperties; private ChenfengCacheProperties chenfengCacheProperties;
@Resource
private FileApi fileApi;
@RabbitListener(queues = "#{@orderImportWebCadQueueName}") @RabbitListener(queues = "#{@orderImportWebCadQueueName}")
@DS("imes_prod") @DS("imes_prod")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@@ -150,8 +149,9 @@ public class WebCadOrderImportConsumer {
log.info("====================【webcad异步拆单处理临时数据开始】===================="); log.info("====================【webcad异步拆单处理临时数据开始】====================");
WebCadOrderImportAsyncFactory webCadOrderImportAsyncFactory = WebCadOrderImportAsyncFactory webCadOrderImportAsyncFactory =
new WebCadOrderImportAsyncFactory(organId, orderMapper, snowFlakeGenerator, orderBodyMapper, plateMapper, orderGroupMapper, idWorker, new WebCadOrderImportAsyncFactory(organId, orderMapper, snowFlakeGenerator, orderBodyMapper, plateMapper, idWorker,
orderImportTaskMapper, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, orderImportTaskDO.getCreator(), cadImportPlateNumThreshold, jdbcTemplate); orderImportTaskMapper, orderInputProcessor, goodsMapper, rawGoodsMapper, customPlateNoGenerateService, systemConfigApi, orderImportTaskDO.getCreator(),
cadImportPlateNumThreshold, jdbcTemplate, fileApi);
webCadOrderImportAsyncFactory.analyzeTempData(taskId, webCadImportProperties.getTempFilePath()); webCadOrderImportAsyncFactory.analyzeTempData(taskId, webCadImportProperties.getTempFilePath());
log.info("====================【webcad异步拆单处理临时数据结束】===================="); log.info("====================【webcad异步拆单处理临时数据结束】====================");
@@ -1,6 +1,7 @@
package com.cf.imes.module.plan.service.orderImport.factory; package com.cf.imes.module.plan.service.orderImport.factory;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
@@ -23,6 +24,7 @@ import com.cf.imes.module.executor.enums.DataTypeEnum;
import com.cf.imes.module.executor.enums.OrderImportStatusEnum; import com.cf.imes.module.executor.enums.OrderImportStatusEnum;
import com.cf.imes.module.executor.enums.OrderItemTypeEnum; import com.cf.imes.module.executor.enums.OrderItemTypeEnum;
import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum;
import com.cf.imes.module.infra.api.file.FileApi;
import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataBlockRemarkVO; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataBlockRemarkVO;
import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataBlockReqVO; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataBlockReqVO;
import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataDoubleRoomTreeReqVO; import com.cf.imes.module.plan.controller.admin.orderimport.webcad.vo.WebCadDataDoubleRoomTreeReqVO;
@@ -51,7 +53,6 @@ import com.cf.imes.module.plan.dal.elasticsearch.PointList;
import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper; import com.cf.imes.module.plan.dal.mysql.goods.GoodsMapper;
import com.cf.imes.module.plan.dal.mysql.order.OrderMapper; import com.cf.imes.module.plan.dal.mysql.order.OrderMapper;
import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper; import com.cf.imes.module.plan.dal.mysql.orderBody.OrderBodyMapper;
import com.cf.imes.module.plan.dal.mysql.orderGroup.OrderGroupMapper;
import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper; import com.cf.imes.module.plan.dal.mysql.orderImport.OrderImportTaskMapper;
import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper; import com.cf.imes.module.plan.dal.mysql.plate.PlateMapper;
import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper; import com.cf.imes.module.plan.dal.mysql.rawgoods.RawGoodsMapper;
@@ -113,8 +114,6 @@ public class WebCadOrderImportAsyncFactory {
private PlateMapper plateMapper; private PlateMapper plateMapper;
private OrderGroupMapper orderGroupMapper;
private SnowflakeIdWorker3rd idWorker; private SnowflakeIdWorker3rd idWorker;
private OrderImportTaskMapper orderImportTaskMapper; private OrderImportTaskMapper orderImportTaskMapper;
@@ -131,6 +130,8 @@ public class WebCadOrderImportAsyncFactory {
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
private FileApi fileApi;
private Long organId; private Long organId;
// 批次id // 批次id
@@ -202,15 +203,14 @@ public class WebCadOrderImportAsyncFactory {
private String tempFilePath; private String tempFilePath;
// cad图纸路径 // cad图纸文件id
private String cadViewPath; private Long cadViewFileId;
public WebCadOrderImportAsyncFactory(Long organId, public WebCadOrderImportAsyncFactory(Long organId,
OrderMapper orderMapper, OrderMapper orderMapper,
SnowFlakeGenerator snowFlakeGenerator, SnowFlakeGenerator snowFlakeGenerator,
OrderBodyMapper orderBodyMapper, OrderBodyMapper orderBodyMapper,
PlateMapper plateMapper, PlateMapper plateMapper,
OrderGroupMapper orderGroupMapper,
SnowflakeIdWorker3rd idWorker, SnowflakeIdWorker3rd idWorker,
OrderImportTaskMapper orderImportTaskMapper, OrderImportTaskMapper orderImportTaskMapper,
OrderInputProcessor orderInputProcessor, OrderInputProcessor orderInputProcessor,
@@ -220,13 +220,13 @@ public class WebCadOrderImportAsyncFactory {
SystemConfigApi systemConfigApi, SystemConfigApi systemConfigApi,
String operatorName, String operatorName,
int cadImportPlateNumThreshold, int cadImportPlateNumThreshold,
JdbcTemplate jdbcTemplate) { JdbcTemplate jdbcTemplate,
FileApi fileApi) {
this.organId = organId; this.organId = organId;
this.orderMapper = orderMapper; this.orderMapper = orderMapper;
this.snowFlakeGenerator = snowFlakeGenerator; this.snowFlakeGenerator = snowFlakeGenerator;
this.orderBodyMapper = orderBodyMapper; this.orderBodyMapper = orderBodyMapper;
this.plateMapper = plateMapper; this.plateMapper = plateMapper;
this.orderGroupMapper = orderGroupMapper;
this.idWorker = idWorker; this.idWorker = idWorker;
this.orderImportTaskMapper = orderImportTaskMapper; this.orderImportTaskMapper = orderImportTaskMapper;
this.orderInputProcessor = orderInputProcessor; this.orderInputProcessor = orderInputProcessor;
@@ -240,6 +240,7 @@ public class WebCadOrderImportAsyncFactory {
sealEdgeConfigList = new ArrayList<>(); sealEdgeConfigList = new ArrayList<>();
this.cadImportPlateNumThreshold = cadImportPlateNumThreshold; this.cadImportPlateNumThreshold = cadImportPlateNumThreshold;
this.jdbcTemplate = jdbcTemplate; this.jdbcTemplate = jdbcTemplate;
this.fileApi = fileApi;
} }
public void analyzeTempData(Long taskId, String webcadJsonCachePath) throws FileNotFoundException { public void analyzeTempData(Long taskId, String webcadJsonCachePath) throws FileNotFoundException {
@@ -254,6 +255,9 @@ public class WebCadOrderImportAsyncFactory {
performPostProcessing(taskId); performPostProcessing(taskId);
} catch (Exception e) { } catch (Exception e) {
// 删除cad图纸数据
removeCadFileWhenException(cadViewFileId);
handleProcessingException(e); handleProcessingException(e);
throw e; throw e;
} finally { } finally {
@@ -272,9 +276,6 @@ public class WebCadOrderImportAsyncFactory {
analyzeOrder(reader.readString()); analyzeOrder(reader.readString());
log.debug("====================【cad拆单解析生产单结束】===================="); log.debug("====================【cad拆单解析生产单结束】====================");
break; break;
case "cadViewPath":
cadViewPath = reader.readString();
break;
case "Materials": case "Materials":
log.debug("====================【cad拆单解析板材开始】===================="); log.debug("====================【cad拆单解析板材开始】====================");
analyzeMaterials(reader); analyzeMaterials(reader);
@@ -296,6 +297,9 @@ public class WebCadOrderImportAsyncFactory {
case "Parts": case "Parts":
processParts(reader); processParts(reader);
break; break;
case "CadViewFileId":
cadViewFileId = reader.readLong();
break;
default: default:
// 跳过未知字段 // 跳过未知字段
reader.readObject(); reader.readObject();
@@ -434,7 +438,7 @@ public class WebCadOrderImportAsyncFactory {
.eq("deleted", false)); .eq("deleted", false));
if (CollUtil.isNotEmpty(orderPlateSumResult)) { if (CollUtil.isNotEmpty(orderPlateSumResult)) {
Map<String, Object> resultMap = orderPlateSumResult.get(0); Map<String, Object> resultMap = orderPlateSumResult.get(0);
if(ObjectUtil.isNotNull(resultMap)) { if (ObjectUtil.isNotNull(resultMap)) {
currentPlateArea = (BigDecimal) resultMap.get("area"); currentPlateArea = (BigDecimal) resultMap.get("area");
} }
} }
@@ -623,7 +627,7 @@ public class WebCadOrderImportAsyncFactory {
reader.startObject(); reader.startObject();
String roomName = null; String roomName = null;
Long roomId = null; Long roomId = null;
while (reader.hasNext()) { while (reader.hasNext()) {
String key = reader.readString(); String key = reader.readString();
if ("name".equals(key)) { if ("name".equals(key)) {
@@ -646,7 +650,7 @@ public class WebCadOrderImportAsyncFactory {
if (existRoomId != null) { if (existRoomId != null) {
return existRoomId; return existRoomId;
} }
Long roomId = queryExistingRoomId(roomName); Long roomId = queryExistingRoomId(roomName);
if (roomId == null) { if (roomId == null) {
roomId = (Long) snowFlakeGenerator.nextId(null); roomId = (Long) snowFlakeGenerator.nextId(null);
@@ -660,15 +664,15 @@ public class WebCadOrderImportAsyncFactory {
*/ */
private Long queryExistingRoomId(String roomName) { private Long queryExistingRoomId(String roomName) {
List<Long> existRoomIds = orderBodyMapper.selectList(new LambdaQueryWrapper<OrderBodyDO>() List<Long> existRoomIds = orderBodyMapper.selectList(new LambdaQueryWrapper<OrderBodyDO>()
.select(OrderBodyDO::getRoomId) .select(OrderBodyDO::getRoomId)
.eq(OrderBodyDO::getOrderId, orderId) .eq(OrderBodyDO::getOrderId, orderId)
.eq(OrderBodyDO::getOrganId, organId) .eq(OrderBodyDO::getOrganId, organId)
.eq(OrderBodyDO::getDeleted, false) .eq(OrderBodyDO::getDeleted, false)
.eq(OrderBodyDO::getRoomName, roomName)) .eq(OrderBodyDO::getRoomName, roomName))
.stream() .stream()
.map(OrderBodyDO::getRoomId) .map(OrderBodyDO::getRoomId)
.toList(); .toList();
return CollUtil.isNotEmpty(existRoomIds) ? existRoomIds.get(0) : null; return CollUtil.isNotEmpty(existRoomIds) ? existRoomIds.get(0) : null;
} }
@@ -1390,11 +1394,10 @@ public class WebCadOrderImportAsyncFactory {
// 配置不为空时,生成自定义板编号 // 配置不为空时,生成自定义板编号
if (ObjectUtil.isNotNull(plateNoGenerateConfigVO)) { if (ObjectUtil.isNotNull(plateNoGenerateConfigVO)) {
customPlateNoGenerateService.generateCustomPlateNo(orderId, plateDO, plateNoGenerateConfigVO, isFirstPlate); customPlateNoGenerateService.generateCustomPlateNo(orderId, plateDO, plateNoGenerateConfigVO, isFirstPlate);
} else { }
// 配置为空的时候,使用cad的板编号 // cad的板编号
if (ObjectUtil.isNotNull(cadCustBlockNo)) { if (ObjectUtil.isNotNull(cadCustBlockNo)) {
plateDO.setCustomPlateNo(String.valueOf(cadCustBlockNo)); plateDO.setCadPlateNo(String.valueOf(cadCustBlockNo));
}
} }
} }
@@ -1419,7 +1422,7 @@ public class WebCadOrderImportAsyncFactory {
reader.startObject(); reader.startObject();
String roomName = null; String roomName = null;
Long roomId = null; Long roomId = null;
while (reader.hasNext()) { while (reader.hasNext()) {
String key = reader.readString(); String key = reader.readString();
if ("name".equals(key)) { if ("name".equals(key)) {
@@ -1849,7 +1852,7 @@ public class WebCadOrderImportAsyncFactory {
private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) { private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) {
// 达到批量的阈值就做一次插入 // 达到批量的阈值就做一次插入
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) { if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data, cad_plate_no) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override @Override
public void setValues(PreparedStatement ps, int index) throws SQLException { public void setValues(PreparedStatement ps, int index) throws SQLException {
@@ -1922,8 +1925,8 @@ public class WebCadOrderImportAsyncFactory {
} }
} }
private void clearPlate(){ private void clearPlate() {
plateDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); plateDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
} }
private void orderItemBatchInsertWithinThreshold(List<OrderItemDO> list, boolean isLast) { private void orderItemBatchInsertWithinThreshold(List<OrderItemDO> list, boolean isLast) {
@@ -1966,8 +1969,8 @@ public class WebCadOrderImportAsyncFactory {
} }
} }
private void clearItem(){ private void clearItem() {
orderItemDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); orderItemDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
} }
private void orderPartBatchInsertWithinThreshold(List<OrderPartsDO> list, boolean isLast) { private void orderPartBatchInsertWithinThreshold(List<OrderPartsDO> list, boolean isLast) {
@@ -2021,8 +2024,8 @@ public class WebCadOrderImportAsyncFactory {
} }
} }
private void clearPart(){ private void clearPart() {
orderPartsDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER); orderPartsDOS = ListUtils.newArrayListWithExpectedSize(BATCH_THRESHOLD_NUMBER);
} }
/** /**
@@ -2215,7 +2218,6 @@ public class WebCadOrderImportAsyncFactory {
.eq(OrderDO::getVersion, version) .eq(OrderDO::getVersion, version)
.set(OrderDO::getPlateNum, currentPlateNum) .set(OrderDO::getPlateNum, currentPlateNum)
.set(OrderDO::getArea, currentPlateArea) .set(OrderDO::getArea, currentPlateArea)
.set(OrderDO::getCadViewPath, cadViewPath)
.set(OrderDO::getVersion, version + 1)); .set(OrderDO::getVersion, version + 1));
if (updated == 0) { if (updated == 0) {
throw new ServiceException(ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR, orderId); throw new ServiceException(ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR, orderId);
@@ -2255,4 +2257,19 @@ public class WebCadOrderImportAsyncFactory {
} }
} }
} }
/**
* 删除cad图纸文件数据
*
* @param cadViewFileId
*/
private void removeCadFileWhenException(Long cadViewFileId) {
try {
if (ObjectUtil.isNotNull(cadViewFileId)) {
fileApi.deleteFileById(cadViewFileId);
}
} catch (IORuntimeException e) {
log.error("删除cad图纸数据文件失败: {}", cadViewFileId, e);
}
}
} }
@@ -189,6 +189,9 @@ public class WebCadOrderImportFactory {
// 板件数量是否已达到阈值 // 板件数量是否已达到阈值
private boolean plateNumReachThreshold = false; private boolean plateNumReachThreshold = false;
// cad图纸文件id
private Long cadViewFileId;
public WebCadOrderImportFactory(Long organId, public WebCadOrderImportFactory(Long organId,
OrderDO orderDO, OrderDO orderDO,
SnowFlakeGenerator snowFlakeGenerator, SnowFlakeGenerator snowFlakeGenerator,
@@ -258,7 +261,9 @@ public class WebCadOrderImportFactory {
orderItemBatchInsertWithinThreshold(orderItemDOS, true); orderItemBatchInsertWithinThreshold(orderItemDOS, true);
log.debug("====================【cad拆单全局保存开始】===================="); log.debug("====================【cad拆单全局保存开始】====================");
// 保存数据柜体、加工组 // 保存数据柜体、加工组
cadViewFileId = webCadDataReqVO.getCadViewFileId();
saveData(); saveData();
log.debug("====================【cad拆单全局保存结束】===================="); log.debug("====================【cad拆单全局保存结束】====================");
@@ -266,7 +271,7 @@ public class WebCadOrderImportFactory {
insertOrUpdatePlateNumGoods(); insertOrUpdatePlateNumGoods();
// 更新生产单板件数量 // 更新生产单板件数量
updateOrderPlateNum(webCadDataReqVO.getCadViewPath()); updateOrderPlateNum();
// 所有自定义板编号生成完成后更新配置到生产单 // 所有自定义板编号生成完成后更新配置到生产单
customPlateNoGenerateService.updateCustomPlateNoGenerateConfig(plateNoGenerateConfigVO, orderDO); customPlateNoGenerateService.updateCustomPlateNoGenerateConfig(plateNoGenerateConfigVO, orderDO);
@@ -1158,11 +1163,10 @@ public class WebCadOrderImportFactory {
// 配置不为空时,生成自定义板编号 // 配置不为空时,生成自定义板编号
if (ObjectUtil.isNotNull(plateNoGenerateConfigVO)) { if (ObjectUtil.isNotNull(plateNoGenerateConfigVO)) {
customPlateNoGenerateService.generateCustomPlateNo(orderId, plateDO, plateNoGenerateConfigVO, isFirstPlate); customPlateNoGenerateService.generateCustomPlateNo(orderId, plateDO, plateNoGenerateConfigVO, isFirstPlate);
} else { }
// 配置为空的时候,使用cad的板编号 // cad的板编号
if (ObjectUtil.isNotNull(cadCustBlockNo)) { if (ObjectUtil.isNotNull(cadCustBlockNo)) {
plateDO.setCustomPlateNo(String.valueOf(cadCustBlockNo)); plateDO.setCadPlateNo(String.valueOf(cadCustBlockNo));
}
} }
} }
@@ -1700,7 +1704,7 @@ public class WebCadOrderImportFactory {
private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) { private void orderPlateBatchInsertWithinThreshold(List<PlateDO> list, boolean isLast) {
// 达到批量的阈值就做一次插入 // 达到批量的阈值就做一次插入
if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) { if (CollUtil.isNotEmpty(list) && (list.size() >= BATCH_THRESHOLD_NUMBER || isLast)) {
String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; String sql = "INSERT INTO order_plate (id,organ_id,order_id,name,plate_no,type,goods_id,width,height,thickness,split_width,split_height,split_thickness,seal_left,seal_right,seal_up,seal_down,area,texture,hole_face,hole_arrange,unregular_point_count,front_hole_count,back_hole_count,side_hole_count,front_model_count,back_model_count,is_door,open_door_type,offset_x,offset_y,is_arc_across,module_type_id,is_special_shaped,is_sculpt,is_side_sculpt,is_2v,is_side_2v,is_row_hole,is_optimized,is_cutted,filter_type,remark,is_cancel,deleted,custom_plate_no,create_time,update_time,creator,updater, cad_view_id, cad_data, cad_plate_no) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override @Override
public void setValues(PreparedStatement ps, int index) throws SQLException { public void setValues(PreparedStatement ps, int index) throws SQLException {
@@ -1757,6 +1761,7 @@ public class WebCadOrderImportFactory {
ps.setString(50, item.getUpdater()); ps.setString(50, item.getUpdater());
ps.setInt(51, item.getCadViewId()); ps.setInt(51, item.getCadViewId());
ps.setString(52, item.getCadData()); ps.setString(52, item.getCadData());
ps.setString(53, item.getCadPlateNo());
} }
@Override @Override
@@ -1914,7 +1919,7 @@ public class WebCadOrderImportFactory {
*/ */
private void saveBody(List<List<OrderBodyDO>> bodyList) { private void saveBody(List<List<OrderBodyDO>> bodyList) {
for (List<OrderBodyDO> bodys : bodyList) { for (List<OrderBodyDO> bodys : bodyList) {
String sql = "INSERT INTO order_body (id, organ_id, order_id, room_id, room_name, name, width, height, depth, multi_num, plate_num, unregular_num, filename, remark, deleted,create_time,update_time,creator,updater) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; String sql = "INSERT INTO order_body (id, organ_id, order_id, room_id, room_name, name, width, height, depth, multi_num, plate_num, unregular_num, filename, remark, deleted,create_time,update_time,creator,updater, cad_view_file_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override @Override
public void setValues(PreparedStatement ps, int index) throws SQLException { public void setValues(PreparedStatement ps, int index) throws SQLException {
@@ -1938,6 +1943,7 @@ public class WebCadOrderImportFactory {
ps.setTimestamp(17, Timestamp.valueOf(orderBodyDO.getUpdateTime())); ps.setTimestamp(17, Timestamp.valueOf(orderBodyDO.getUpdateTime()));
ps.setString(18, orderBodyDO.getCreator()); ps.setString(18, orderBodyDO.getCreator());
ps.setString(19, orderBodyDO.getUpdater()); ps.setString(19, orderBodyDO.getUpdater());
ps.setLong(20, cadViewFileId);
} }
@Override @Override
@@ -2016,7 +2022,7 @@ public class WebCadOrderImportFactory {
/** /**
* 更新生产单的板件总数 * 更新生产单的板件总数
*/ */
private void updateOrderPlateNum(String cadViewPath) { private void updateOrderPlateNum() {
int version = orderDO.getVersion(); int version = orderDO.getVersion();
Long orderId = orderDO.getId(); Long orderId = orderDO.getId();
int updated = orderMapper.update(new LambdaUpdateWrapper<OrderDO>() int updated = orderMapper.update(new LambdaUpdateWrapper<OrderDO>()
@@ -2025,7 +2031,6 @@ public class WebCadOrderImportFactory {
.eq(OrderDO::getVersion, version) .eq(OrderDO::getVersion, version)
.set(OrderDO::getPlateNum, currentPlateNum) .set(OrderDO::getPlateNum, currentPlateNum)
.set(OrderDO::getArea, currentPlateArea) .set(OrderDO::getArea, currentPlateArea)
.set(OrderDO::getCadViewPath, cadViewPath)
.set(OrderDO::getVersion, version + 1)); .set(OrderDO::getVersion, version + 1));
if (updated == 0) { if (updated == 0) {
throw new ServiceException(ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR, orderId); throw new ServiceException(ErrorCodeConstants.WEBCAD_ORDER_IMPORT_ORDER_UPDATE_CONCURRENCY_ERROR, orderId);