diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java index a40f54801..856ccc214 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/order/OrderController.java @@ -1,7 +1,9 @@ package com.cf.imes.module.executor.controller.admin.order; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import com.cf.imes.framework.web.config.WebProperties; import com.cf.imes.module.executor.controller.admin.order.vo.order.*; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO; @@ -14,8 +16,11 @@ import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataA import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize; import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.ExcelReadUtil; 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.XMLReadUtil; import io.swagger.v3.oas.annotations.Parameters; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -41,6 +46,7 @@ import static com.cf.imes.framework.common.pojo.CommonResult.success; import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*; +import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId; import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; @@ -50,9 +56,12 @@ import com.cf.imes.module.executor.service.order.OrderService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -75,6 +84,12 @@ public class OrderController { @Resource private ApiTypeRealize apiTypeRealize; + @Resource + private IdentifierGenerator identifierGenerator; + + @Resource + private ThreadPoolTaskExecutor asyncExecutor; + @PutMapping("/update") @Operation(summary = "更新生产单") @@ -177,7 +192,25 @@ public class OrderController { public CommonResult test(@RequestParam(value = "orderNo", required = false, defaultValue = "20230809027818") String orderNo) throws InterruptedException, ExecutionException { - Long organId = SecurityFrameworkUtils.getLoginUser().getOrganId(); + Long orderId = (Long) identifierGenerator.nextId(null); + Long organId = getUserOrganId(); +// final RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); +//// 从HttpServletRequest中提取servletPath +// String servletPath = request.getServletPath(); +// System.out.println("servletPath = " + servletPath.startsWith(properties.getAdminApi().getPrefix())); +// CompletableFuture.runAsync(() -> { +//// System.out.println(String.join("-", Thread.currentThread().getName(), " i = " + i.getAndIncrement())); +// RequestContextHolder.setRequestAttributes(requestAttributes); +// try { +// orderService.importApiData(orderNo, orderId, organId); +// } catch (Exception e) { +// log.error(" 1: ", e); +// } +// }, asyncExecutor).exceptionally(e -> { +// log.error("error", e); +// return null; +// }); +// Long organId = SecurityFrameworkUtils.getLoginUser().getOrganId(); JSONObject oauth = apiDataAchieve.getApiToken(organId).get(); String token = oauth.getJSONObject("info").getString("access_token"); String shopId = oauth.getJSONObject("info").getString("shop_id"); @@ -204,8 +237,12 @@ public class OrderController { plate, // 板件明细 dataModule,// 加工组信息 block,// 板材数据 - orderNo); // 原始板编号 + orderNo,// 原始板编号 + orderId, + organId); return success(orderService.importApiData(listMap)); + +// return success(orderId); } @PostMapping("/importFile") @@ -263,12 +300,16 @@ public class OrderController { } else if (type == 2) { // xml + OrderXmlVO orderXmlVO = (OrderXmlVO) XMLReadUtil.read(file, OrderXmlVO.class); + + System.out.println("orderXmlVO = " + orderXmlVO); } - orderService.importExcelData(orderDO, list, index); +// orderService.importExcelData(orderDO, list, index); } catch (Exception e) { ExcelWriterUtil.writeErr(response, "系统出现未知错误,请下载模板,按照模板重新上传文件", orderService.getSavePath() + File.separator + "order_err.xlsx"); + log.error("导入文件出现异常", e); } } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/OrderPartsController.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/OrderPartsController.java index 52f8b9e93..9469f2c94 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/OrderPartsController.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/controller/admin/orderParts/OrderPartsController.java @@ -100,4 +100,11 @@ public class OrderPartsController { return success(orderPartsService.getPartsPageByTerms(pageVO)); } + @GetMapping("/getWithRoomAndBody") + @Operation(summary = "获得房间柜体下的生产单配件") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('executor:order-parts:query')") + public CommonResult> getWithRoomAndBody(@RequestParam("id") Long id) { + return success(orderPartsService.getWithRoomAndBody(id)); + } } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/goods/GoodsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/goods/GoodsDO.java index a1ee9cb97..c8bdcffcf 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/goods/GoodsDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/goods/GoodsDO.java @@ -61,6 +61,10 @@ public class GoodsDO extends BaseDO { * 颜色 */ private String color; + /** + * 背面颜色 + */ + private String colorBlack; /** * 宽度 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/managePlate/ManagePlateDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/managePlate/ManagePlateDO.java index d9b884fe7..c20f3739f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/managePlate/ManagePlateDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/managePlate/ManagePlateDO.java @@ -43,6 +43,10 @@ public class ManagePlateDO extends BaseDO { * 颜色 */ private String color; + /** + * 背面颜色 + */ + private String colorBlack; /** * 宽度 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateGoodDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateGoodDO.java index 97a9df0fc..33aa7078f 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateGoodDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateGoodDO.java @@ -40,6 +40,10 @@ public class PlateGoodDO extends BaseDO { * 颜色 */ private String color; + /** + * 背面颜色 + */ + private String colorBlack; /** * 纹路 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java index f45aa14ad..c59a9fcfb 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java @@ -51,6 +51,10 @@ public class RawGoodsDO extends BaseDO { * 颜色 */ private String color; + /** + * 背面颜色 + */ + private String colorBlack; /** * 纹路 0 正纹 1 可翻转 2 反纹 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/remainplaten/RemainPlateDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/remainplaten/RemainPlateDO.java index 1c07fd590..48e025cb9 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/remainplaten/RemainPlateDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/remainplaten/RemainPlateDO.java @@ -54,6 +54,10 @@ public class RemainPlateDO extends BaseDO { * 颜色 */ private String color; + /** + * 背面颜色 + */ + private String colorBlack; /** * 宽度 */ diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java index 12fb3c9d1..d80108b66 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderService.java @@ -13,6 +13,7 @@ import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; import org.springframework.boot.system.ApplicationHome; +import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.multipart.MultipartFile; import java.io.File; @@ -21,6 +22,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; /** * 生产单表 order_{N} Service 接口 @@ -102,6 +104,7 @@ public interface OrderService { * @date 2024/3/30 */ Long importApiData(Map> listMap); + void importApiData(String orderNo, Long orderId, Long organId) throws InterruptedException, ExecutionException; /** * 文件数据导入 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index 513cc5acd..4b18fecf5 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -1,29 +1,23 @@ package com.cf.imes.module.executor.service.order; -import cn.hutool.core.collection.CollectionUtil; import cn.smallbun.screw.core.util.CollectionUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; -import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.cf.imes.framework.organ.core.aop.OrganIgnore; import com.cf.imes.framework.organ.core.context.OrganContextHolder; -import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.module.executor.controller.admin.order.vo.order.*; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO; import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderRoomBodyRespVO; import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark; 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.PlateGoodsIdVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; @@ -48,6 +42,8 @@ import com.cf.imes.module.executor.enums.OrderDeletedEnum; import com.cf.imes.module.executor.enums.OrderStatusEnum; import com.cf.imes.framework.common.enums.OrderPackageStatusEnum; import com.cf.imes.module.executor.util.deviseData.dataTwo.PlateDetail; +import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiDataAchieve; +import com.cf.imes.module.executor.util.fileConversion.admin.api.webcad.ApiTypeRealize; import com.cf.imes.module.executor.util.fileConversion.admin.files.excel.ExcelTypeRealize; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -69,7 +65,7 @@ import java.net.URLEncoder; import java.time.*; import java.time.temporal.ChronoUnit; import java.util.*; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -79,6 +75,7 @@ import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.ge import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; +import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; /** @@ -129,6 +126,12 @@ public class OrderServiceImpl implements OrderService { @Resource private SnowFlakeGenerator snowFlakeGenerator; + @Resource + private ApiDataAchieve apiDataAchieve; + + @Resource + private ApiTypeRealize apiTypeRealize; + @Resource private ExcelTypeRealize excelTypeRealize; @@ -148,6 +151,8 @@ public class OrderServiceImpl implements OrderService { //验证自定义单号是否存在, 生产单未删除 validateCustomOrderNoExists(updateReqVO.getCustomOrderNo(), updateReqVO.getId()); + + // 发货日期校验 // 更新 OrderDO updateObj = BeanUtils.toBean(updateReqVO, OrderDO.class); if (updateReqVO.getCustomOrderNo() == null || updateReqVO.getCustomOrderNo().equals("")) { @@ -236,7 +241,7 @@ public class OrderServiceImpl implements OrderService { // 查询当前房间下的所有板材 plateDOList = plateMapper.selectPlateTypeByRoomId(orderId, roomIds, null, getUserOrganId(), index); bodyIds = orderBodyMapper.selectBodyIdByRoomId(orderId, roomIds, getUserOrganId(), index); - } else if (bodyId != 0) { + } else if (bodyId != null && bodyId != 0) { // 校验柜体存在 validateOrderBodyExists(orderId, bodyId, getUserOrganId(), index); // 查询当前房间下的所有板材 @@ -339,6 +344,83 @@ public class OrderServiceImpl implements OrderService { return order.get(0).getId(); } + @Override +// @Async + @Transactional(rollbackFor = Exception.class) + public void importApiData(String orderNo, Long orderId, Long organId) throws InterruptedException, ExecutionException { +// RequestContextHolder.setRequestAttributes(requestAttributes); + + JSONObject oauth = apiDataAchieve.getApiToken(organId).get(); + String token = oauth.getJSONObject("info").getString("access_token"); + String shopId = oauth.getJSONObject("info").getString("shop_id"); + JSONObject order = apiDataAchieve.getApiOrder(token, shopId, orderNo).get(); + if (!order.getString("err_code").equals("0")) { + throw exception(PLATE_PLAN_DATA_ERROR); + } + if (order.getJSONArray("data") == null) { + throw exception(PLATE_PLAN_DATA_NULL); + } + JSONObject dataPlates = apiDataAchieve.getApiPlateProData(token, orderNo).get(); + JSONObject dataParts = apiDataAchieve.getApiPartsMessage(token, orderNo).get(); + JSONObject dataBody = apiDataAchieve.getApiBodyMessage(token, orderNo).get(); + JSONObject dataGoods = apiDataAchieve.getApiGoodsMessage(token, orderNo).get(); + JSONObject plate = apiDataAchieve.getApiPlateDetailMessage(token, orderNo).get(); + JSONObject dataModule = apiDataAchieve.getApiGroupMessage(token, orderNo).get(); + JSONObject block = apiDataAchieve.getApiBlocksMessage(token, orderNo).get(); + Map> listMap = apiTypeRealize.apiPlateDataChange( + order, + dataPlates,//板件生产信息 + dataParts,// 配件信息 + dataBody, // 柜体信息 + dataGoods, // 商品信息 + plate, // 板件明细 + dataModule,// 加工组信息 + block,// 板材数据 + orderNo,// 原始板编号 + orderId, + organId); + + List orderDOS = (List) listMap.get("orderDO"); + if (orderDOS != null && orderDOS.size() > 0) { + OrderDO orderDO = orderDOS.get(0); + validateCustomOrderNoExists(orderDO.getCustomOrderNo()); + String nickName = SecurityFrameworkUtils.getLoginUser().getNickname(); + if (orderDO.getSalesman() == null || orderDO.getSalesman().equals("")) { + orderDO.setSalesman(nickName); + } + if (orderDO.getSplitter() == null || orderDO.getSplitter().equals("")) { + orderDO.setSplitter(nickName); + } + orderMapper.insert(orderDO); + } + List goodsDO = (List) listMap.get("goodsDO"); + List rawGoodsDO = (List) listMap.get("rawGoodsDO"); + List bodyDO = (List) listMap.get("bodyDO"); + List groupDO = (List) listMap.get("groupDO"); + List partsDO = (List) listMap.get("partsDO"); + List plateDO = (List) listMap.get("platesDO"); + List plateDetail = (List) listMap.get("plateDetail"); + List itemDO = (List) listMap.get("itemDO"); + List partsRemark = (List) listMap.get("partsRemark"); + + Map> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 + goodsDO = (List) map.get("goodsDO"); + List plateGoodDOS = (List) map.get("plateGoodDOLists"); + + + orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS); + List orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class); + + if (orderModelDOs.size() > 0) { + orderModelDOs.forEach(orderModelDO -> orderModelDO.setOrderId(orderDOS.get(0).getId())); + orderInputProcessor.batchSaveModel(orderModelDOs); + } + if (partsRemark.size() > 0) { + orderInputProcessor.batchSaveOrderPartsModel(partsRemark); + } + + } + @Override @Transactional(rollbackFor = Exception.class) public void importExcelData(OrderDO orderDO, List list, Integer index) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsService.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsService.java index 95d770a7f..17b4a15f6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsService.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsService.java @@ -69,4 +69,8 @@ public interface OrderPartsService { */ PageResult getPartsPageByTerms(PlateTermsPageReqVO pageReqVO); + /** + * 分组查询 + */ + List getWithRoomAndBody(Long orderId); } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsServiceImpl.java index e8239292f..addad678e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/orderParts/OrderPartsServiceImpl.java @@ -9,6 +9,7 @@ import com.cf.imes.framework.datapermission.core.util.DataPermissionUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateRespVO; import com.cf.imes.module.executor.controller.admin.plate.vo.PlateTermsPageReqVO; +import com.cf.imes.module.executor.enums.OrderDeletedEnum; import com.cf.imes.module.system.enums.ErrorCodeConstants; import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Service; @@ -113,4 +114,11 @@ public class OrderPartsServiceImpl implements OrderPartsService { return new PageResult(pageRes.getRecords(), pageRes.getTotal()); } + @Override + public List getWithRoomAndBody(Long orderId) { + Integer notDeletedStatus = OrderDeletedEnum.NOT_DELETED.getStatus(); + // 查询明细列表 + return orderPartsMapper.selectPartDetail(orderId, SecurityFrameworkUtils.getLoginUser().getOrganId(), notDeletedStatus); + } + } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/ThreadPoolConfig.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/ThreadPoolConfig.java new file mode 100644 index 000000000..6c511e92d --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/ThreadPoolConfig.java @@ -0,0 +1,207 @@ +package com.cf.imes.module.executor.util; + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.TaskDecorator; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.LinkedBlockingQueue; +import cn.hutool.core.thread.ThreadFactoryBuilder; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import javax.annotation.Nonnull; + + +/** + * SpringBoot 装配线程池 + * @author FengJinSong + */ +@Slf4j +@EnableAsync +@Configuration +public class ThreadPoolConfig implements AsyncConfigurer { + + private static final String EXECUTOR_NAME = "asyncExecutor"; + + @Value("${thread-pool.config.corePoolSize:26}") + private Integer corePoolSize; + @Value("${thread-pool.config.maxPoolSize:100}") + private Integer maxPoolSize; + @Value("${thread-pool.config.queueCapacity:200}") + private Integer queueCapacity; + @Value("${thread-pool.config.threadNamePrefix:AsyncThread-}") + private String threadNamePrefix; + @Value("${thread-pool.config.rejectedExecutionHandler:CallerRunsPolicy}") + private String rejectedExecutionHandler; + + @Bean(name = EXECUTOR_NAME) + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); + // 核心线程数 + threadPoolTaskExecutor.setCorePoolSize(corePoolSize); + // 最大线程数 + threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize); + // 阻塞队列容量 + threadPoolTaskExecutor.setQueueCapacity(queueCapacity); + // 待任务在关机时完成--表明等待所有线程执行完 + threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); + // 线程名称前缀 + threadPoolTaskExecutor.setThreadNamePrefix(threadNamePrefix); + +// threadPoolTaskExecutor.setTaskDecorator(new ContextCopyingDecorator()); + + + + // 设置拒绝策略 + threadPoolTaskExecutor.setRejectedExecutionHandler(getRejectedExecutionHandler(rejectedExecutionHandler)); + + + + + threadPoolTaskExecutor.initialize(); + return threadPoolTaskExecutor; + } + + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return (throwable, method, obj) -> { + log.error("[ThreadPool Exception]:Message [{}], Method [{}]", throwable.getMessage(), method.getName()); + for (Object param : obj) { + log.error("Parameter value [{}] ", param); + } + }; + } + + /** + * 根据传入的参数获取拒绝策略 + * + * @param rejectedName 拒绝策略名,比如 CallerRunsPolicy + * @return RejectedExecutionHandler 实例对象,没有匹配的策略时,默认取 CallerRunsPolicy 实例 + */ + public RejectedExecutionHandler getRejectedExecutionHandler(String rejectedName) { + Map rejectedExecutionHandlerMap = new HashMap<>(16); + rejectedExecutionHandlerMap.put("CallerRunsPolicy", new ThreadPoolExecutor.CallerRunsPolicy()); + rejectedExecutionHandlerMap.put("AbortPolicy", new ThreadPoolExecutor.AbortPolicy()); + rejectedExecutionHandlerMap.put("DiscardPolicy", new ThreadPoolExecutor.DiscardPolicy()); + rejectedExecutionHandlerMap.put("DiscardOldestPolicy", new ThreadPoolExecutor.DiscardOldestPolicy()); + return rejectedExecutionHandlerMap.getOrDefault(rejectedName, new ThreadPoolExecutor.CallerRunsPolicy()); + } + +// @Slf4j +// static class ContextCopyingDecorator implements TaskDecorator { +// @Nonnull +// @Override +// public Runnable decorate(@Nonnull Runnable runnable) { +// try { +// RequestAttributes context = RequestContextHolder.currentRequestAttributes(); //1 +// Map previous = MDC.getCopyOfContextMap(); //2 +// SecurityContext securityContext = SecurityContextHolder.getContext(); //3 +// return () -> { +// try { +// RequestContextHolder.setRequestAttributes(context); //1 +// MDC.setContextMap(previous); //2 +// SecurityContextHolder.setContext(securityContext); //3 +// runnable.run(); +// } finally { +// RequestContextHolder.resetRequestAttributes(); // 1 +// MDC.clear(); // 2 +// SecurityContextHolder.clearContext(); // 3 +// } +// }; +// } catch (IllegalStateException e) { +// return runnable; +// } +// +// +// } +// } + +} +//public class ThreadPoolConfig { +// //自定义使用参数 +// @Value("${async.executor.thread.core_pool_size}") +// private int corePoolSize; //配置核心线程数 +// @Value("${async.executor.thread.max_pool_size}") +// private int maxPoolSize; //配置最大线程数 +// @Value("${async.executor.thread.queue_capacity}") +// private int queueCapacity; +// @Value("${async.executor.thread.name.prefix}") +// private String namePrefix; +// @Value("${async.executor.thread.keep_alive_seconds}") +// private int keepAliveSeconds; +// +// //1、自定义asyncServiceExecutor线程池 +// @Bean(name = "asyncServiceExecutor") +// public ThreadPoolTaskExecutor asyncServiceExecutor() { +// log.info("start asyncServiceExecutor......"); +// //在这里修改 +// ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); +// //配置核心线程数 +// executor.setCorePoolSize(corePoolSize); +// //配置最大线程数 +// executor.setMaxPoolSize(maxPoolSize); +// //设置线程空闲等待时间 s +// executor.setKeepAliveSeconds(keepAliveSeconds); +// //配置队列大小 设置任务等待队列的大小 +// executor.setQueueCapacity(queueCapacity); +// //配置线程池中的线程的名称前缀 +// //设置线程池内线程名称的前缀-------阿里编码规约推荐--方便出错后进行调试 +// executor.setThreadNamePrefix(namePrefix); +// // rejection-policy:当pool已经达到max size的时候,如何处理新任务 +// // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 +// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy()); +// //执行初始化 +// executor.initialize(); +// return executor; +// } +// /** +// * 2、公共线程池,利用系统availableProcessors线程数量进行计算 +// */ +// @Bean(name = "commonThreadPoolTaskExecutor") +// public ThreadPoolTaskExecutor commonThreadPoolTaskExecutor() { +// ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor(); +// int processNum = Runtime.getRuntime().availableProcessors(); // 返回可用处理器的Java虚拟机的数量 +// int corePoolSize = (int) (processNum / (1 - 0.2)); +// int maxPoolSize = (int) (processNum / (1 - 0.5)); +// pool.setCorePoolSize(corePoolSize); // 核心池大小 +// pool.setMaxPoolSize(maxPoolSize); // 最大线程数 +// pool.setQueueCapacity(maxPoolSize * 1000); // 队列程度 +// pool.setThreadPriority(Thread.MAX_PRIORITY); +// pool.setDaemon(false); +// pool.setKeepAliveSeconds(300);// 线程空闲时间 +// return pool; +// } +// //3自定义defaultThreadPoolExecutor线程池 +// @Bean(name = "defaultThreadPoolExecutor", destroyMethod = "shutdown") +// public ThreadPoolExecutor systemCheckPoolExecutorService() { +// int maxNumPool=Runtime.getRuntime().availableProcessors(); +// return new ThreadPoolExecutor(3, +// maxNumPool, +// 60, +// TimeUnit.SECONDS, +// new LinkedBlockingQueue(10000), +// //置线程名前缀,例如设置前缀为hutool-thread-,则线程名为hutool-thread-1之类。 +// new ThreadFactoryBuilder().setNamePrefix("default-executor-thread-%d").build(), +// (r, executor) -> log.error("system pool is full! ")); +// } + +//} + + diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/IOriginModelingData.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/IOriginModelingData.java index 52e92633c..8a0fd5db2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/IOriginModelingData.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/IOriginModelingData.java @@ -20,10 +20,10 @@ import java.util.List; public class IOriginModelingData { @Schema(description = "刀半径") - private float knifeRadius; + private Double knifeRadius; @Schema(description = "厚度") - private float thickness; + private Double thickness; @Schema(description = "方向") private Integer dir; @@ -34,9 +34,9 @@ public class IOriginModelingData { @Schema(description = "槽加长") - private float addLen; + private Double addLen; @Schema(description = "槽加宽") - private float addWidth; + private Double addWidth; @Schema(description = "槽加深") - private float addDepth; + private Double addDepth; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/ModelDetail.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/ModelDetail.java index ec5c9e293..1e9cdc607 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/ModelDetail.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/ModelDetail.java @@ -19,6 +19,9 @@ import java.util.List; @Schema(description = "管理后台 - 造型信息") public class ModelDetail { + @Schema(description = "类型——矩形槽Rectangle、路径槽Path、内铣槽internalMilling、折返路径槽turnbackPath") + private String type; + @Schema(description = "使用字典进行解析 造型排版面 0正面, 1反面, 2侧面") private Integer faceType; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/OffSetList.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/OffSetList.java index 7a3798f0d..62f7e8142 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/OffSetList.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/OffSetList.java @@ -19,6 +19,9 @@ import lombok.experimental.Accessors; @Accessors(chain = false) // 设置 chain = false,避免生产单导入有问 public class OffSetList { + @Schema(description = "偏移刀路ID") + private String id; + // 刀路的偏移值 @Schema(description = "刀路的偏倚值") private Double value; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointDetail.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointDetail.java index 99aefcbd6..98a61e452 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointDetail.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointDetail.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.math.BigDecimal; + /** * 点明细 , 表示小板外围轮廓的几个转折点 */ @@ -17,14 +19,18 @@ import lombok.experimental.Accessors; @Accessors(chain = false) // 设置 chain = false,避免生产单导入有问 public class PointDetail { + @Schema(description = "点id") + private String id; // 点的位置信息 @Schema(description = "点的位置信息") private Double pointX; private Double pointY; @Schema(description = "曲线-凸度") private Double curve; + @Schema(description = "边圆弧半径(直线段为0)") + private Double radius; // 点的封边尺寸 @Schema(description = "点的封边尺寸,封边尺寸,封边的厚度,长同边长") - private Double sealSize; + private BigDecimal sealSize; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointList.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointList.java index 774a45e50..98d5cf929 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointList.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/dataTwo/PointList.java @@ -33,5 +33,7 @@ public class PointList { private Double curve; @Schema(description = "曲线深度") private Double depth; + @Schema(description = "起点圆弧半径(直线段为0)") + private Double holeRadius; } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/ToolUtil.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/ToolUtil.java new file mode 100644 index 000000000..7894fde22 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/ToolUtil.java @@ -0,0 +1,69 @@ +package com.cf.imes.module.executor.util.fileConversion.admin; + +import java.lang.reflect.Method; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 数据转换工具类 + */ +public class ToolUtil { + + // 手机号验证 + public static Boolean validatePhoneNumber(String phoneNumber) { + // 定义手机号正则表达式 + String regex = "^1[3-9]\\d{9}$"; + + // 编译正则表达式 + Pattern pattern = Pattern.compile(regex); + + // 创建 Matcher 对象 + Matcher matcher = pattern.matcher(phoneNumber); + + // 判断手机号是否匹配正则表达式 + if (!matcher.matches()) { + return false; + } + return true; + } + + // 日期格式转换 + public static Map changeDate(String date, DateTimeFormatter formatter) { + Map map = new HashMap<>(); + LocalDate localDate; + if (date == null){ + localDate = LocalDate.now(); + map.put("date", localDate); + map.put("error", 0); + }else { + try { + localDate = LocalDate.parse(date, formatter); + map.put("date", localDate); + map.put("error", 1); + } catch (DateTimeParseException e) { + map.put("date", date); + map.put("error", -1); + + } + } + return map; + } + + // 数据类型转换 + public static boolean convertToType(String str, Class targetType) { + try { + Method method = targetType.getMethod("parse" + targetType.getSimpleName(), String.class); + method.invoke(null, str); + return true; + } catch (Exception e) { + return false; + } + } + + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java index 8a0710f7f..abe36ab26 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiTypeRealize.java @@ -44,7 +44,7 @@ public class ApiTypeRealize { private DictDataApi dictDataApi; @Resource - SnowflakeIdWorker3rd idWorker; + private SnowflakeIdWorker3rd idWorker; // private Integer num = 0; @@ -70,39 +70,39 @@ public class ApiTypeRealize { public Map> apiPlateDataChange(JSONObject order, JSONObject dataPlates, JSONObject dataParts , JSONObject dataBody, JSONObject dataGoods , JSONObject plates, JSONObject dataModule - , JSONObject dataBlocks, String orderNo) { + , JSONObject dataBlocks, String orderNo,Long orderId, Long organId) { Map> map = new HashMap<>(); // 生产单id - Long orderId = (Long) identifierGenerator.nextId(null); +// Long orderId = (Long) identifierGenerator.nextId(null); // 获取组织id 之后删除 // Long orgId = 325L; // 生产单数据 - OrderDO orderDO = orderInfoChange(order, orderId, orderNo); + OrderDO orderDO = orderInfoChange(order, orderId, orderNo, organId); List orderList = new ArrayList<>(); orderList.add(orderDO); // 商品信息数据 信息以全 - Map> goodsInfoChange = rawGoodsInfoChange(dataGoods, orderId, dataBlocks); + Map> goodsInfoChange = rawGoodsInfoChange(dataGoods, orderId, dataBlocks, organId); List goodsDO = (List) goodsInfoChange.get("goodsDOS").values().stream().collect(Collectors.toList()); map.put("goodsDO", goodsDO); List rawGoodsDO = (List) goodsInfoChange.get("rawGoodsDOS").values().stream().collect(Collectors.toList()); map.put("rawGoodsDO", rawGoodsDO); // 柜体信息 少异形数量、板材数量 - Map bodyInfoChange = bodyInfoChange(dataBody, orderId); + Map bodyInfoChange = bodyInfoChange(dataBody, orderId, organId); // 加工组 少异形数量、板材数量 Map> group = - groupInfoChange(dataModule, orderId, bodyInfoChange); + groupInfoChange(dataModule, orderId, bodyInfoChange, organId); Map orderGroupDO = (Map) group.get("orderGroup"); Map> groupLists = (Map>) group.get("lists"); // 加工组中包含的板件、配件id // 配件 Map> partsDO = partsInfoChange(dataParts, orderId, - (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange); + (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange, organId); Map partsRemark = (Map) partsDO.get("remarks"); // 配件备注 map.put("partsRemark", partsRemark.values().stream().collect(Collectors.toList())); @@ -117,7 +117,7 @@ public class ApiTypeRealize { itemsList.addAll(partsItems.values()); // 板材 写库 Map> platesDO = platesInfoChange(dataPlates, plates, orderId, - (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange, dataBlocks); + (Map) goodsInfoChange.get("goodsDOS"), bodyInfoChange, dataBlocks, organId); Map orderPlatesDO = (Map) platesDO.get("platesInfos"); map.put("platesDO", orderPlatesDO.values().stream().collect(Collectors.toList())); map.put("plateDetail", platesDO.get("plateDetail").values().stream().collect(Collectors.toList())); @@ -221,7 +221,7 @@ public class ApiTypeRealize { /** * 加工组 信息转换 */ - private Map> groupInfoChange(JSONObject dataModule, Long orderId, Map bodyInfoChange) { + private Map> groupInfoChange(JSONObject dataModule, Long orderId, Map bodyInfoChange, Long organId) { Map> map = new HashMap<>(); Map orderGroupDOs = new HashMap<>();// 加工组id 和 加工组信息 Map> groupLists = new HashMap<>();// 加工组id 和 详细信息 @@ -248,6 +248,7 @@ public class ApiTypeRealize { .unregularNum(0) .filename("无") .remark("无") + .organId(organId) .build(); groupLists.put(group.getLong("ModuleID"), jsonArrayToList(group.getJSONArray("ItemIDList"))); orderGroupDOs.put(group.getLong("ModuleID"), bodyInfo); @@ -267,7 +268,7 @@ public class ApiTypeRealize { * @author Administrator * @date 2024/4/30 */ - public OrderDO orderInfoChange(JSONObject orderJson, Long orderId, String orderNo) { + public OrderDO orderInfoChange(JSONObject orderJson, Long orderId, String orderNo, Long organId) { // 获取 Orders 字段对应的数组 JSONObject order = orderJson.getJSONArray("data").getJSONObject(0); @@ -305,6 +306,7 @@ public class ApiTypeRealize { // .splitter("") .splitter(order.getString("cd_nick_name")) .remark(orderRemark + order.getString("comments")) + .organId(organId) .build(); Integer submitState = order.getInteger("submit_state"); @@ -344,7 +346,7 @@ public class ApiTypeRealize { * @author Administrator * @date 2024/4/30 */ - public Map> rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId, JSONObject dataBlocks) { + public Map> rawGoodsInfoChange(JSONObject dataRawGoods, Long orderId, JSONObject dataBlocks, Long organId) { Map> map = new HashMap<>(); Map rawGoodsDOS = new HashMap<>(); Map goodsDOS = new HashMap<>(); @@ -367,6 +369,7 @@ public class ApiTypeRealize { .price(goods.getDouble("Price")) .brand(goods.getString("Brand")) .spec(goods.getString("Spec")) + .organId(organId) .build(); rawGoodsDOS.put(goods.getLong("GoodsID"), rawGoodsDO); @@ -385,6 +388,7 @@ public class ApiTypeRealize { .price(BigDecimal.valueOf(goods.getDouble("Price"))) .brand(goods.getString("Brand")) .spec(goods.getString("Spec")) + .organId(organId) .build(); goodsDOS.put(goods.getLong("GoodsID"), goodsDO); @@ -404,7 +408,7 @@ public class ApiTypeRealize { * @author Administrator * @date 2024/4/30 */ - private Map bodyInfoChange(JSONObject dataBody, Long orderId) { + private Map bodyInfoChange(JSONObject dataBody, Long orderId, Long organId) { Map bodyInfos = new HashMap<>(); if (dataBody.getJSONArray("List") != null && @@ -424,8 +428,9 @@ public class ApiTypeRealize { .multiNum(0) .plateNum(0) .unregularNum(0) - .filename("无") - .remark("无") + .filename("") + .remark("") + .organId(organId) .build(); bodyInfos.put(body.getLong("BoxID"), bodyInfo); @@ -456,7 +461,7 @@ public class ApiTypeRealize { * @author Administrator * @date 2024/4/30 */ - public Map> partsInfoChange(JSONObject value, Long orderId, Map goodsDOMap, Map bodyInfos) { + public Map> partsInfoChange(JSONObject value, Long orderId, Map goodsDOMap, Map bodyInfos, Long organId) { Map> map = new HashMap<>(); Map partsInfos = new HashMap<>(); Map partsItem = new HashMap<>(); @@ -484,6 +489,7 @@ public class ApiTypeRealize { .price(parts.getDouble("Price")) .isComposite(parts.getBoolean("IsComposite")) .remark(parts.getString("Remark")) + .organId(organId) .build(); remarks.put(parts.getLong("ItemID"), partsRemarkChange(parts, orderId, partsId)); partsInfos.put(parts.getLong("ItemID"), partsInfo); @@ -500,6 +506,7 @@ public class ApiTypeRealize { .groupId(0L) .partsId(partsId) .num(parts.getDouble("Num")) + .organId(organId) .build(); partsItem.put(parts.getLong("ItemID"), item); } @@ -534,7 +541,7 @@ public class ApiTypeRealize { */ private Map> platesInfoChange(JSONObject value, JSONObject dataPlates, Long orderId, Map goodsDOMap, Map bodyInfos, - JSONObject dataBlocks) { + JSONObject dataBlocks, Long organId) { // 板材 写ES Map plateDetail = platesDetailChange(value); @@ -597,6 +604,7 @@ public class ApiTypeRealize { .isCancel(false) .filterType("") .remark(remark) + .organId(organId) .build(); // item 明细 @@ -612,6 +620,7 @@ public class ApiTypeRealize { .partsId(0L) .plateId(plateId) .num(1.0) + .organId(organId) .build(); if (plateDetail != null){ @@ -833,7 +842,7 @@ public class ApiTypeRealize { .pointX(Double.valueOf(rawPoint.getString("X"))) .pointY(Double.valueOf(rawPoint.getString("Y"))) .curve(Double.valueOf(rawPoint.getString("Curve"))) - .sealSize(Double.valueOf(rawPoint.getString("Edge"))) + .sealSize(BigDecimal.valueOf(Double.valueOf(rawPoint.getString("Edge")))) .build()); } diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java index 3b7ad1d20..77a6dbc87 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelReadUtil.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.nacos.common.utils.StringUtils; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; +import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil; import com.cf.imes.module.system.api.dict.DictDataApi; import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO; import com.cf.imes.module.system.enums.DictTypeConstants; @@ -96,24 +97,22 @@ public class ExcelReadUtil { // 文件读取 if (orderMap.get("客户地址") == null) { error += "客户地址不能为空;"; } - if (orderMap.get("出货日期") == null) { - error += "出货日期不能为空;"; - } if (orderMap.get("客户电话") == null) { error += "客户电话不能为空;"; } else { - if (!validatePhoneNumber((String) orderMap.get("客户电话"))) { + if (!ToolUtil.validatePhoneNumber((String) orderMap.get("客户电话"))) { error += orderMap.get("客户电话") + "-客户电话格式错误;"; } } if (orderMap.get("经销商电话") != null) { - if (!validatePhoneNumber((String) orderMap.get("经销商电话"))) { + if (!ToolUtil.validatePhoneNumber((String) orderMap.get("经销商电话"))) { error += orderMap.get("经销商电话") + "-经销商电话格式错误;"; } } OrderDO orderDO = OrderDO.builder() .organId(OrganContextHolder.getOrganId()) .dataType(0) + .orderDate(LocalDateTime.now()) .customer((String) orderMap.get("客户")) // .customOrderNo((String) orderMap.get("自定义单号")) .dealer((String) orderMap.get("经销商")) // @@ -129,16 +128,15 @@ public class ExcelReadUtil { // 文件读取 } else { String s = (String) orderMap.get("出货日期"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - try { - LocalDate orderDate = LocalDate.parse(s, formatter); - LocalDate now = LocalDate.now(); - if (orderDate.isBefore(LocalDate.now())) { - orderDate = now.plus(30, ChronoUnit.DAYS); - } - System.out.println(" orderDate " + orderDate); - orderDO.setDeliveryDate(orderDate.atStartOfDay()); // - } catch (DateTimeParseException e) { + Map mapDate = ToolUtil.changeDate(s, formatter); + if (mapDate.get("error") instanceof Integer && (Integer) mapDate.get("error") == -1) { error += s + "-出货日期格式错误;"; + } else { + LocalDate deliveryDate = (LocalDate) mapDate.get("date"); + if (deliveryDate.isBefore(LocalDate.now())) { + deliveryDate = LocalDate.now().plus(30, ChronoUnit.DAYS); + } + orderDO.setDeliveryDate(deliveryDate.atStartOfDay()); } } map.put("order", orderDO); @@ -146,34 +144,6 @@ public class ExcelReadUtil { // 文件读取 return map; } - private Boolean validatePhoneNumber(String phoneNumber) { - // 定义手机号正则表达式 - String regex = "^1[3-9]\\d{9}$"; - - // 编译正则表达式 - Pattern pattern = Pattern.compile(regex); - - // 创建 Matcher 对象 - Matcher matcher = pattern.matcher(phoneNumber); - - // 判断手机号是否匹配正则表达式 - if (!matcher.matches()) { - return false; - } - return true; - } - - private LocalDateTime changeTime(String dateString) { - - // 使用 DateTimeFormatter 解析字符串为 LocalDateTime 对象 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); - LocalDateTime dateTime = LocalDateTime.parse(dateString, formatter); - - // 打印解析后的 LocalDateTime 对象 - System.out.println("Parsed LocalDateTime: " + dateTime); - return dateTime; - } - // 赋值单元格数据 private OrderPlateImportExcelVO changeValue(Map dataMap) { OrderPlateImportExcelVO vo = new OrderPlateImportExcelVO(); @@ -336,13 +306,16 @@ public class ExcelReadUtil { // 文件读取 if (StringUtils.isEmpty(vo.getGoodsNumber())) { errList.add("数量不能为空"); flag = false; - } else { - - if (!checkNumber(vo.getGoodsNumber())) { + }else { + if (!convertToDouble(vo.getGoodsNumber())) { flag = false; - errList.add("数量不能为0"); + errList.add("数量类型错误"); + }else { + if (!checkNumber(vo.getGoodsNumber())) { + flag = false; + errList.add("数量不能为0"); + } } - } // 检查商品物料编码或是商品名称、规格、材质、颜色不可全为空 if (StringUtils.isEmpty(vo.getGoodsId()) && (StringUtils.isEmpty(vo.getGoodsName()) || StringUtils.isEmpty(vo.getSpec()) @@ -355,7 +328,19 @@ public class ExcelReadUtil { // 文件读取 // 数量类型判断 if (!convertToInteger(vo.getGoodsNumber())) { flag = false; - errList.add("数量类型错误"); + if (errList.contains("数量类型错误")){ + Iterator iterator = errList.iterator(); + while (iterator.hasNext()) { + String element = iterator.next(); + if ("数量类型错误".equals(element)) { + iterator.remove(); + } + } + errList.add("板材数量类型需为整数"); + }else { + errList.add("数量类型错误"); + } + } // 纹理有效性判断 if (StringUtils.isEmpty(vo.getWave())) { diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java index 8f02f2713..8b67fdd92 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/excel/ExcelTypeRealize.java @@ -48,13 +48,11 @@ public class ExcelTypeRealize { @Resource private DictDataApi dictDataApi; - final String NOT_ASSIGNED_ROOM = "未分房间"; - final String NOT_ASSIGNED_BODY = "未分柜体"; + final String NOT_ASSIGNED = "未命名"; // 数据转换 + 错误验证 public Map> changeDate(List list, Long orderId) { if (list.isEmpty()) { -// throw exception(FILE_UPLOAD_ERR); return null; } @@ -96,7 +94,6 @@ public class ExcelTypeRealize { p.getGoodsHeight(), p.getGoodsWidth(), p.getGoodsThickness(), -// p.getModel(), p.getBrand()), Collectors.toList() )); @@ -139,7 +136,7 @@ public class ExcelTypeRealize { // 房间名称为条件进行分组 Map> roomCollect = excelVOS.stream().collect( Collectors.groupingBy( - excelVO -> excelVO.getRoomsName() != null ? excelVO.getRoomsName() : "未命名", + excelVO -> excelVO.getRoomsName() != null ? excelVO.getRoomsName() : NOT_ASSIGNED, Collectors.toList() )); @@ -148,7 +145,7 @@ public class ExcelTypeRealize { // 柜体名称为条件进行分组 Map> bodyCollect = listRoom.stream() .collect(Collectors.groupingBy( - excelVO -> excelVO.getCabinetsName() != null ? excelVO.getCabinetsName() : "未命名", + excelVO -> excelVO.getCabinetsName() != null ? excelVO.getCabinetsName() : NOT_ASSIGNED, Collectors.toList() )); diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AccessoryXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AccessoryXmlVO.java new file mode 100644 index 000000000..32f882221 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AccessoryXmlVO.java @@ -0,0 +1,27 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Accessory") +@XmlAccessorType(XmlAccessType.FIELD) +public class AccessoryXmlVO implements Serializable { + + // 封边条列表 + @XmlElement(name = "Edgings") + private EdgingXmlVOS edgingXmlVOS; + + // 五金列表 + @XmlElement(name = "Hardwares") + private HardwareXmlVOS hardwareXmlVOS; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AssemblieXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AssemblieXmlVOS.java new file mode 100644 index 000000000..8ad89b437 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AssemblieXmlVOS.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Assemblies") +@XmlAccessorType(XmlAccessType.FIELD) +// 组件/部件列表 +public class AssemblieXmlVOS implements Serializable { + + @XmlElement( name = "Assembly") + private List assemblyXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AssemblyXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AssemblyXmlVO.java new file mode 100644 index 000000000..686d1da06 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/AssemblyXmlVO.java @@ -0,0 +1,100 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Assembly") +@XmlAccessorType(XmlAccessType.FIELD) +// 组件/部件信息 +public class AssemblyXmlVO implements Serializable { + + // 五金ID + @XmlAttribute(name = "组件/部件ID") + private String id; + + // 类型——抽屉Drawer、酒格WineGrid、框架/拼框门FrameDoor、线条(顶线、脚线、挡水条等)Line、桌面/台面TableTop、水槽Sink…… + @XmlAttribute(name = "type") + private String type; + + // 物料编码 + @XmlAttribute(name = "itemNo") + private String itemNo; + + // 厂家 + @XmlAttribute(name = "manufacturer") + private String manufacturer; + + // 品牌 + @XmlAttribute(name = "brand") + private String brand; + + // 名称 + @XmlAttribute(name = "name") + private String name; + + // 材质 + @XmlAttribute(name = "material") + private String material; + + // 颜色 + @XmlAttribute(name = "color") + private String color; + + // 规格/类型 + @XmlAttribute(name = "specs") + private String specs; + + // 长度 + @XmlAttribute(name = "length") + private String length; + + // 宽度 + @XmlAttribute(name = "width") + private String width; + + // 高 + @XmlAttribute(name = "height") + private String height; + + // 数量 + @XmlAttribute(name = "count") + private String count; + + // 单位 + @XmlAttribute(name = "unit") + private String unit; + + // 仓库 + @XmlAttribute(name = "warehouse") + private String warehouse; + + // 货架 + @XmlAttribute(name = "shelf") + private String shelf; + + // 房间ID + @XmlAttribute(name = "roomId") + private String roomId; + + // 柜体ID + @XmlAttribute(name = "boxId") + private String boxId; + + // 加工组ID + @XmlAttribute(name = "groupId") + private String groupId; + + // 模块ID + @XmlAttribute(name = "moduleId") + private String moduleId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BlockXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BlockXmlVO.java new file mode 100644 index 000000000..d22663a05 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BlockXmlVO.java @@ -0,0 +1,161 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Block") +@XmlAccessorType(XmlAccessType.FIELD) +// 板件信息 +public class BlockXmlVO implements Serializable { + + // 板件ID + @XmlAttribute(name = "id") + private String id; + + // 设计编号 + @XmlAttribute(name = "designNo") + private String designNo; + + // 生产编号 + @XmlAttribute(name = "productionNo") + private String productionNo; + + // 名称 + @XmlAttribute(name = "name") + private String name; + + // 类型——类型——背板类、层板类、立板类 + @XmlAttribute(name = "type") + private String type; + + // 开向——左开、右开、上开(上翻)、下开(下翻)、非门板 + @XmlAttribute(name = "openDirection") + private String openDirection; + + // 设计纹路——正纹、反纹、可翻转 + @XmlAttribute(name = "texture") + private String texture; + + // 设计饰面——无、单面贴皮/涂装(正面、反面)、双面贴皮/涂装(不同色、同色) + @XmlAttribute(name = "coatingType") + private String coatingType; + + // 成品长 + @XmlAttribute(name = "length") + private String length; + + // 成品宽 + @XmlAttribute(name = "width") + private String width; + + // 成品厚 + @XmlAttribute(name = "thickness") + private String thickness; + + // 坯料长 + @XmlAttribute(name = "rawLength") + private String rawLength; + + // 坯料宽 + @XmlAttribute(name = "rawWidth") + private String rawWidth; + + // 坯料厚 + @XmlAttribute(name = "rawThickness") + private String rawThickness; + + // 开料长 + @XmlAttribute(name = "cuttingLength") + private String cuttingLength; + + // 开料宽 + @XmlAttribute(name = "cuttingWidth") + private String cuttingWidth; + + // 开料厚 + @XmlAttribute(name = "cuttingThickness") + private String cuttingThickness; + + // 成倍数量 + @XmlAttribute(name = "multipleNumber") + private String multipleNumber; + + // 成倍序号 + @XmlAttribute(name = "multipleNo") + private String multipleNo; + + // 异形——是/否 + @XmlAttribute(name = "unregular") + private String unregular; + + // 挖槽——是/否 + @XmlAttribute(name = "slotting") + private String slotting; + + // 排版面——设计正面、设计反面、随意面 + @XmlAttribute(name = "layoutFace") + private String layoutFace; + + // 正面饰面颜色、无 + @XmlAttribute(name = "coatingObverse") + private String coatingObverse; + + // 反面饰面颜色、无 + @XmlAttribute(name = "coatingReverse") + private String coatingReverse; + + // 房间ID + @XmlAttribute(name = "roomId") + private String roomId; + + // 柜体ID + @XmlAttribute(name = "boxId") + private String boxId; + + // 加工组ID + @XmlAttribute(name = "groupId") + private String groupId; + + // 模块ID + @XmlAttribute(name = "moduleId") + private String moduleId; + + // 成品(设计成型/已封边/贴皮或涂装的板件)轮廓信息 + @XmlElement(name = "Outline") + private OutlineXmlVO outlineXmlVO ; + + // 坯料(还需进行精修/铣削/打磨的板材)轮廓信息 + @XmlElement(name = "RawOutline") + private RawOutlineXmlVO rawOutlineXmlVO ; + + // 开料成型(精修/铣削/打磨完成,未封边/贴皮或涂装的板材)轮廓信息 + @XmlElement(name = "CuttingOutline") + private CuttingOutlineXmlVO cuttingOutlineXmlVO ; + + // 孔信息 + @XmlElement(name = "Holes") + private HoleXmlVOS holeXmlVOS; + + // 凹槽信息 + @XmlElement(name = "Grooves") + private GrooveXmlVOS grooveXmlVOS ; + + // 孤岛列表 + @XmlElement(name = "Islets") + private IsletXmlVOS isletXmlVOS ; + + // 关联配件/组件列表 + @XmlElement(name = "correlations") + private CorrelationXmlVOS correlationXmlVOS; + + // 备注 + @XmlElement(name = "Remarks") + private RemarkXmlVOS remarkXmlVOS; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BlockXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BlockXmlVOS.java new file mode 100644 index 000000000..120305468 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BlockXmlVOS.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Blocks") +@XmlAccessorType(XmlAccessType.FIELD) +// 板件列表 +public class BlockXmlVOS implements Serializable { + + // 数量 + @XmlAttribute( name = "count") + private String count; + + // + @XmlElement( name = "Block") + private List blockXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BoxXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BoxXmlVO.java new file mode 100644 index 000000000..520b5d0e8 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/BoxXmlVO.java @@ -0,0 +1,44 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Box") +@XmlAccessorType(XmlAccessType.FIELD) +public class BoxXmlVO implements Serializable { + + // 柜体ID + @XmlAttribute(name = "id") + private String id; + + // 房间名称 + @XmlAttribute(name = "name") + private String name; + + // 房间编号 + @XmlAttribute(name = "code") + private String code; + + // 房间高度 + @XmlAttribute(name = "height") + private String height; + + // 房间宽度 + @XmlAttribute(name = "width") + private String width; + + // 房间深度 + @XmlAttribute(name = "length") + private String length; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CorrelationXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CorrelationXmlVO.java new file mode 100644 index 000000000..f93cb9363 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CorrelationXmlVO.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "correlation") +@XmlAccessorType(XmlAccessType.FIELD) +public class CorrelationXmlVO implements Serializable { + + // [关联五金ID/关联组件ID] + @XmlAttribute(name = "id") + private String id; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CorrelationXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CorrelationXmlVOS.java new file mode 100644 index 000000000..c68736b2d --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CorrelationXmlVOS.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "correlations") +@XmlAccessorType(XmlAccessType.FIELD) +public class CorrelationXmlVOS implements Serializable { + + // 房间 + @XmlElement(name = "correlation") + private List correlationXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CuttingOutlineXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CuttingOutlineXmlVO.java new file mode 100644 index 000000000..955e8ff64 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/CuttingOutlineXmlVO.java @@ -0,0 +1,33 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "CuttingOutline") +@XmlAccessorType(XmlAccessType.FIELD) +// 开料成型(还需进行精修/铣削/打磨的板材,成品尺寸-封边+预留边)轮廓信息 +public class CuttingOutlineXmlVO implements Serializable { + + // 相对于成品轮廓,基准点的X坐标偏移量 + @XmlAttribute(name = "referenceOffsetX") + private String referenceOffsetX; + + // 相对于成品轮廓,基准点的Y坐标偏移量 + @XmlAttribute(name = "referenceOffsetY") + private String referenceOffsetY; + + // 点阵数量 + @XmlAttribute(name = "count") + private String count; + + @XmlElement(name = "Point") + private List pointXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/EdgingXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/EdgingXmlVO.java new file mode 100644 index 000000000..18d5692e6 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/EdgingXmlVO.java @@ -0,0 +1,96 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Edging") +@XmlAccessorType(XmlAccessType.FIELD) +// 封边条信息 +public class EdgingXmlVO implements Serializable { + + // 封边条ID + @XmlAttribute(name = "id") + private String id; + + // 物料编码 + @XmlAttribute(name = "itemNo") + private String itemNo; + + // 厂家 + @XmlAttribute(name = "manufacturer") + private String manufacturer; + + // 品牌 + @XmlAttribute(name = "brand") + private String brand; + + // 名称 + @XmlAttribute(name = "name") + private String name; + + // 材质 + @XmlAttribute(name = "material") + private String material; + + // 颜色 + @XmlAttribute(name = "color") + private String color; + + // 规格 + @XmlAttribute(name = "specs") + private String specs; + + // 长 + @XmlAttribute(name = "length") + private String length; + + // 宽 + @XmlAttribute(name = "width") + private String width; + + // 厚 + @XmlAttribute(name = "thickness") + private String thickness; + + // 长度单位——默认m米 + @XmlAttribute(name = "unit") + private String unit; + + // 仓库 + @XmlAttribute(name = "warehouse") + private String warehouse; + + // 货架 + @XmlAttribute(name = "shelf") + private String shelf; + + // 数量 + @XmlAttribute(name = "count") + private String count; + + // 房间ID + @XmlAttribute(name = "roomId") + private String roomId; + + // 柜体ID + @XmlAttribute(name = "boxId") + private String boxId; + + // 加工组ID + @XmlAttribute(name = "groupId") + private String groupId; + + // 模块ID + @XmlAttribute(name = "moduleId") + private String moduleId; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/EdgingXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/EdgingXmlVOS.java new file mode 100644 index 000000000..f8571dece --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/EdgingXmlVOS.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Edgings") +@XmlAccessorType(XmlAccessType.FIELD) +// 封边条列表 +public class EdgingXmlVOS implements Serializable { + + @XmlElement( name = "Edging") + private List edgingXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java new file mode 100644 index 000000000..49202225a --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVO.java @@ -0,0 +1,94 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Groove") +@XmlAccessorType(XmlAccessType.FIELD) +// 凹槽信息 +public class GrooveXmlVO implements Serializable { + + // 凹槽ID + @XmlAttribute(name = "id") + private String id; + + // 父(孤岛)ID + @XmlAttribute(name = "parentID") + private String parentId; + + // 类型——矩形槽Rectangle、路径槽Path、内铣槽internalMilling、折返路径槽turnbackPath + @XmlAttribute(name = "type") + private String type; + + // 加工面——正面、反面、左侧面、右侧面、上侧面、下侧面、斜面 + @XmlAttribute(name = "face") + private String face; + + // 宽度 + @XmlAttribute(name = "width") + private String width; + + // 长度 + @XmlAttribute(name = "length") + private String length; + + // 深度 + @XmlAttribute(name = "depth") + private String depth; + + // 加宽 + @XmlAttribute(name = "widthExtend") + private String widthExtend; + + // 加长 + @XmlAttribute(name = "lengthExtend") + private String lengthExtend; + + // 加深 + @XmlAttribute(name = "depthExtend") + private String depthExtend; + + // 圆角半径 + @XmlAttribute(name = "round") + private String round; + + // 刀名称 + @XmlAttribute(name = "toolName") + private String toolName; + + // 刀号 + @XmlAttribute(name = "toolNo") + private String toolNo; + + // 刀直径 + @XmlAttribute(name = "toolDiameter") + private String toolDiameter; + + // 刀路冗余量——偏移重叠量 + @XmlAttribute(name = "redundance") + private String redundance; + + // 角度——二维刀路V型刀提角/清角用 + @XmlAttribute(name = "tangentAngle") + private String tangentAngle; + + // 内层(不含内嵌凹槽内的孤岛)孤岛数量 + @XmlAttribute(name = "isletCount") + private String isletCount; + + // 凹槽点信息 + @XmlElement(name = "Points") + private PointXmlVOS pointXmlVOS; + + // 偏移刀路列表 + @XmlElement(name = "offsetLines") + private OffsetLineXmlVOS offsetLineXmlVOS; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVOS.java new file mode 100644 index 000000000..20946770f --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GrooveXmlVOS.java @@ -0,0 +1,50 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Grooves") +@XmlAccessorType(XmlAccessType.FIELD) +// 凹槽列表 +public class GrooveXmlVOS implements Serializable { + + // 凹槽数量 + @XmlAttribute(name = "count") + private String count; + + // 正面垂凹槽数量 + @XmlAttribute(name = "countFaceA") + private String countFaceA; + + // 反面凹槽数量 + @XmlAttribute(name = "countFaceB") + private String countFaceB; + + // 侧凹槽数量 + @XmlAttribute(name = "countSide") + private String countSide; + + // 斜面凹槽数量 + @XmlAttribute(name = "countBevelled") + private String countBevelled; + + // 矩形凹槽数量 + @XmlAttribute(name = "countRectangle") + private String countRectangle; + + // 挖穿造型/槽数量 + @XmlAttribute(name = "countThrough") + private String countThrough; + + // 凹槽信息 + @XmlElement(name = "Groove") + private List grooveXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GroupXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GroupXmlVO.java new file mode 100644 index 000000000..d5fa9790e --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GroupXmlVO.java @@ -0,0 +1,47 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Box") +@XmlAccessorType(XmlAccessType.FIELD) +public class GroupXmlVO implements Serializable { + + // 加工组ID + @XmlAttribute(name = "id") + private String id; + + // 加工组名称 + @XmlAttribute(name = "name") + private String name; + + // 加工组编号 + @XmlAttribute(name = "code") + private String code; + + // 加工组高度 + @XmlAttribute(name = "height") + private String height; + + // 加工组宽度 + @XmlAttribute(name = "width") + private String width; + + // 加工组长度 + @XmlAttribute(name = "length") + private String length; + + // 加工组数量 + @XmlAttribute(name = "count") + private String count; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GroupXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GroupXmlVOS.java new file mode 100644 index 000000000..ee187a82b --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/GroupXmlVOS.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Groups") +@XmlAccessorType(XmlAccessType.FIELD) +// 加工组 +public class GroupXmlVOS implements Serializable { + + // 数量 + @XmlAttribute(name = "count") + private String count; + + // 房间 + @XmlElement(name = "Room") + private List groupXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HardwareXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HardwareXmlVO.java new file mode 100644 index 000000000..ffd7f96a2 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HardwareXmlVO.java @@ -0,0 +1,101 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Hardware") +@XmlAccessorType(XmlAccessType.FIELD) +// 五金信息 +public class HardwareXmlVO implements Serializable { + + // 五金ID + @XmlAttribute(name = "id") + private String id; + + // 类型——拉手Handle、铰链Hinge、导轨Track、衣杆/裤杆Pole、杆托/杆座PoleBase、拉直器Straightener、灯带LightBelt、螺丝(及螺母)Screw(Nut)…… + @XmlAttribute(name = "type") + private String type; + + // 物料编码 + @XmlAttribute(name = "itemNo") + private String itemNo; + + // 厂家 + @XmlAttribute(name = "manufacturer") + private String manufacturer; + + // 品牌 + @XmlAttribute(name = "brand") + private String brand; + + // 名称 + @XmlAttribute(name = "name") + private String name; + + // 材质 + @XmlAttribute(name = "material") + private String material; + + // 颜色 + @XmlAttribute(name = "color") + private String color; + + // 规格/类型 + @XmlAttribute(name = "specs") + private String specs; + + // 长度 + @XmlAttribute(name = "length") + private String length; + + // 宽度 + @XmlAttribute(name = "width") + private String width; + + // 厚 + @XmlAttribute(name = "thickness") + private String thickness; + + // 数量 + @XmlAttribute(name = "count") + private String count; + + // 单位 + @XmlAttribute(name = "unit") + private String unit; + + // 仓库 + @XmlAttribute(name = "warehouse") + private String warehouse; + + // 货架 + @XmlAttribute(name = "shelf") + private String shelf; + + // 房间ID + @XmlAttribute(name = "roomId") + private String roomId; + + // 柜体ID + @XmlAttribute(name = "boxId") + private String boxId; + + // 加工组ID + @XmlAttribute(name = "groupId") + private String groupId; + + // 模块ID + @XmlAttribute(name = "moduleId") + private String moduleId; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HardwareXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HardwareXmlVOS.java new file mode 100644 index 000000000..8524b93f6 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HardwareXmlVOS.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Hardwares") +@XmlAccessorType(XmlAccessType.FIELD) +// 五金列表 +public class HardwareXmlVOS implements Serializable { + + @XmlElement( name = "Hardware") + private List hardwareXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HoleXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HoleXmlVO.java new file mode 100644 index 000000000..e177afd87 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HoleXmlVO.java @@ -0,0 +1,82 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Hole") +@XmlAccessorType(XmlAccessType.FIELD) +public class HoleXmlVO implements Serializable { + + // 孔ID + @XmlAttribute(name = "id") + private String id; + + // 孔类型 + @XmlAttribute(name = "type") + private String type; + + // 拆单名/商品名 + @XmlAttribute(name = "name") + private String name; + + // 加工面——正面、反面、左侧面、右侧面、上侧面、下侧面、斜面 + @XmlAttribute(name = "face") + private String face; + + // 方向——向后Z-、向前Z+、向右X+、向左X-、向下Y-、向上Y+、斜O + @XmlAttribute(name = "direction") + private String direction; + + // 直径/沉头孔外直径 + @XmlAttribute(name = "diameter") + private String diameter; + + // 沉头孔内直径 + @XmlAttribute(name = "diameterInner") + private String diameterInner; + + // 深度/沉头孔浅孔深度 + @XmlAttribute(name = "depth") + private String depth; + + // 沉头孔深孔深度 + @XmlAttribute(name = "depthInner") + private String depthInner; + + // 孔组数量 + @XmlAttribute(name = "groupNumber") + private String groupNumber; + + // 孔组X坐标偏移 + @XmlAttribute(name = "groupXoffset") + private String groupXoffset; + + // 孔组Y坐标偏移 + @XmlAttribute(name = "groupYoffset") + private String groupYoffset; + + // 孔组Z坐标偏移 + @XmlAttribute(name = "groupZoffset") + private String groupZoffset; + + // 刀名称 + @XmlAttribute(name = "toolName") + private String toolName; + + // 刀号 + @XmlAttribute(name = "toolNo") + private String toolNo; + + @XmlElement(name = "Begin") + private PointBeginXmlVO pointBeginXmlVO; + + @XmlElement(name = "End") + private PointEndXmlVO pointEndXmlVO; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HoleXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HoleXmlVOS.java new file mode 100644 index 000000000..fd6fa2d0e --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/HoleXmlVOS.java @@ -0,0 +1,53 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Holes") +@XmlAccessorType(XmlAccessType.FIELD) +// 孔列表 +public class HoleXmlVOS implements Serializable { + + // 孔数量 + @XmlAttribute(name = "count") + private String count; + + // 正面垂直孔数量 + @XmlAttribute(name = "countFaceA") + private String countFaceA; + + // 反面垂直孔数量 + @XmlAttribute(name = "countFaceB") + private String countFaceB; + + // 水平侧孔数量 + @XmlAttribute(name = "countSide") + private String countSide; + + // 斜面孔数量 + @XmlAttribute(name = "countBevelled") + private String countBevelled; + + // 偏心轮/锁定孔数 + @XmlAttribute(name = "countLocking") + private String countLocking; + + // 预埋件孔数量 + @XmlAttribute(name = "countBuildIn") + private String countBuildIn; + + // 挖穿孔数量 + @XmlAttribute(name = "countThrough") + private String countThrough; + + @XmlElement(name = "Hole") + private List holeXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/IsletXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/IsletXmlVO.java new file mode 100644 index 000000000..54a96cf38 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/IsletXmlVO.java @@ -0,0 +1,34 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Islet") +@XmlAccessorType(XmlAccessType.FIELD) +// 孤岛信息 +public class IsletXmlVO implements Serializable { + + // 孤岛ID + @XmlAttribute(name = "id") + private String id; + + // 父(凹槽)ID + @XmlAttribute(name = "parentID") + private String parentId; + + // 内层(不含内嵌孤岛内的凹槽)凹槽数量 + @XmlAttribute(name = "grooveCount") + private String grooveCount; + + // 孤岛点信息 + @XmlElement(name = "Point") + private List pointXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/IsletXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/IsletXmlVOS.java new file mode 100644 index 000000000..bcd177bba --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/IsletXmlVOS.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Islets") +@XmlAccessorType(XmlAccessType.FIELD) +// 孤岛列表 +public class IsletXmlVOS implements Serializable { + + // 房间 + @XmlElement(name = "Islet") + private List isletXmlVOList; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/MaterialXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/MaterialXmlVO.java new file mode 100644 index 000000000..2af12034f --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/MaterialXmlVO.java @@ -0,0 +1,29 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Material") +@XmlAccessorType(XmlAccessType.FIELD) +// 物料信息 +public class MaterialXmlVO implements Serializable { + + // 板材列表 + @XmlElement(name = "Plates") + private PlateXmlVOS plateXmlVOS; + + // 配件列表 + @XmlElement(name = "Accessory") + private AccessoryXmlVO accessoryXmlVO; + + // 组件/部件列表 + @XmlElement(name = "Assemblies") + private AssemblieXmlVOS assemblieXmlVOS; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/ModuleXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/ModuleXmlVO.java new file mode 100644 index 000000000..2d76ee9e8 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/ModuleXmlVO.java @@ -0,0 +1,45 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Module") +@XmlAccessorType(XmlAccessType.FIELD) +public class ModuleXmlVO implements Serializable { + + // 房间ID + @XmlAttribute(name = "id") + private String id; + + // 房间名称 + @XmlAttribute(name = "name") + private String name; + + // 房间编号 + @XmlAttribute(name = "code") + private String code; + + // 房间高度 + @XmlAttribute(name = "height") + private String height; + + // 房间宽度 + @XmlAttribute(name = "width") + private String width; + + // 房间长度 + @XmlAttribute(name = "length") + private String length; + + // 房间数量 + @XmlAttribute(name = "count") + private String count; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/ModuleXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/ModuleXmlVOS.java new file mode 100644 index 000000000..f42153841 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/ModuleXmlVOS.java @@ -0,0 +1,25 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Modules") +@XmlAccessorType(XmlAccessType.FIELD) +public class ModuleXmlVOS implements Serializable { + + // 模块数量 + @XmlAttribute(name = "count") + private String count; + + // 房间 + @XmlElement(name = "Room") + private List moduleXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OffsetLineXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OffsetLineXmlVO.java new file mode 100644 index 000000000..af152f525 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OffsetLineXmlVO.java @@ -0,0 +1,48 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "offsetLine") +@XmlAccessorType(XmlAccessType.FIELD) +// 偏移刀路信息 +public class OffsetLineXmlVO implements Serializable { + + // 偏移刀路ID + @XmlAttribute(name = "id") + private String id; + + // 偏移值——正值外偏/右偏、负值内偏/左偏 + @XmlAttribute(name = "offset") + private String offset; + + // 深度 + @XmlAttribute(name = "depth") + private String depth; + + // 刀名称 + @XmlAttribute(name = "toolName") + private String toolName; + + // 刀号 + @XmlAttribute(name = "toolNo") + private String toolNo; + + // 刀直径 + @XmlAttribute(name = "toolDiameter") + private String toolDiameter; + + // 角度——二维刀路V型刀提角/清角用 + @XmlAttribute(name = "tangentAngle") + private String tangentAngle; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OffsetLineXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OffsetLineXmlVOS.java new file mode 100644 index 000000000..7e215727f --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OffsetLineXmlVOS.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "offsetLines") +@XmlAccessorType(XmlAccessType.FIELD) +// 偏移刀路列表 +public class OffsetLineXmlVOS implements Serializable { + + @XmlElement(name = "offsetLine") + private List offsetLineXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OrderPartsAddVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OrderPartsAddVO.java new file mode 100644 index 000000000..1377f6ffb --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OrderPartsAddVO.java @@ -0,0 +1,123 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + + +import lombok.*; + +import java.math.BigDecimal; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderPartsAddVO { + + /** + * 配件 ID + */ + private Long id; + /** + * 组织 ID + */ + private Long organId; + /** + * 生产单号 + */ + private Long orderId; + /** + * 商品ID + */ + private String goodsId; + /** + * 配件名称 + */ + private String name; + /** + * 材质 + */ + private String material; + /** + * 配件类型 + */ + private String type; + /** + * 颜色 + */ + private String color; + /** + * 长 + */ + private BigDecimal length; + /** + * 宽 + */ + private BigDecimal width; + /** + * 高 + */ + private BigDecimal thickness; + /** + * 型号 + */ + private String model; + /** + * 规格 + */ + private String spec; + /** + * 品牌 + */ + private String brand; + /** + * 厂家 + */ + private String factory; + /** + * 单位 + */ + private String unit; + /** + * 价格 + */ + private Double price; + /** + * 数量 + */ + private Double num; + /** + * 是否复合部件:0 否 1 是 + */ + private Boolean isComposite; + /** + * 仓库 + */ + private String warehouse; + /** + * 货架 + */ + private String shelf; + /** + * 房间ID + */ + private String roomId; + /** + * 柜体ID + */ + private String bodyId; + /** + * 加工组ID + */ + private String groupId; + /** + * 模块ID + */ + private String modelId; + /** + * 备注 + */ + private String remark; + /** + * 是否删除 + */ + private Boolean deleted; + +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OrderXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OrderXmlVO.java new file mode 100644 index 000000000..f87f036cf --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OrderXmlVO.java @@ -0,0 +1,117 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Order") +@XmlAccessorType(XmlAccessType.FIELD) +public class OrderXmlVO implements Serializable { + // 订单ID + @XmlAttribute(name = "id") + private String id; + + // 订单编号 + @XmlAttribute(name = "orderNo") + private String orderNo; + + // 订单自定义编号 + @XmlAttribute(name = "customOrderNo") + private String customOrderNo; + + // 客户 + @XmlAttribute(name = "customer") + private String customer; + + // 客户电话 + @XmlAttribute(name = "customerPhone") + private String customerPhone; + + // 客户地址 + @XmlAttribute(name = "customerAddress") + private String customerAddress; + + // 经销商 + @XmlAttribute(name = "dealer") + private String dealer; + + // 经销商电话 + @XmlAttribute(name = "dealerPhone") + private String dealerPhone; + + // 经销商地址 + @XmlAttribute(name = "dealerAddress") + private String dealerAddress; + + // 业务员 + @XmlAttribute(name = "seller") + private String seller; + + // 业务员电话 + @XmlAttribute(name = "sellerPhone") + private String sellerPhone; + + // 业务员地址 + @XmlAttribute(name = "sellerAddress") + private String sellerAddress; + + // 设计师 + @XmlAttribute(name = "designer") + private String designer; + + // 设计师电话 + @XmlAttribute(name = "designerPhone") + private String designerPhone; + + // 设计师地址 + @XmlAttribute(name = "designerAddress") + private String designerAddress; + + // 解单员 + @XmlAttribute(name = "analyst") + private String analyst; + + // 解单员电话 + @XmlAttribute(name = "analystPhone") + private String analystPhone; + + // 解单员地址 + @XmlAttribute(name = "analystAddress") + private String analystAddress; + + // 订单日期 + @XmlAttribute(name = "orderDate") + private String orderDate; + + // 出货日期 + @XmlAttribute(name = "deliveryDate") + private String deliveryDate; + + // 备注信息 + @XmlAttribute(name = "memo") + private String memo; + + // 房间信息 + @XmlElement(name = "Rooms") + private RoomXmlVOS roomXmlVOS; + + // 模块信息 + @XmlElement( name = "Modules") + private ModuleXmlVOS moduleXmlVOS; + + // 分组信息 + @XmlElement(name = "Groups") + private GroupXmlVOS groupXmlVOS; + + // 材质信息 + @XmlElement(name = "Material") + private MaterialXmlVO materialXmlVO; + +} + diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OutlineXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OutlineXmlVO.java new file mode 100644 index 000000000..93bfa0734 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/OutlineXmlVO.java @@ -0,0 +1,20 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Outline") +@XmlAccessorType(XmlAccessType.FIELD) +public class OutlineXmlVO implements Serializable { + + @XmlElement(name = "Point") + private List pointXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PlateXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PlateXmlVO.java new file mode 100644 index 000000000..fe3851932 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PlateXmlVO.java @@ -0,0 +1,116 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Plate") +@XmlAccessorType(XmlAccessType.FIELD) +// 板材信息 +public class PlateXmlVO implements Serializable { + + // 板材ID + @XmlAttribute(name = "id") + private String id; + + // 物料编码 + @XmlAttribute(name = "itemNo") + private String itemNo; + + // 厂家 + @XmlAttribute(name = "manufacturer") + private String manufacturer; + + // 品牌 + @XmlAttribute(name = "brand") + private String brand; + + // 名称 + @XmlAttribute(name = "name") + private String name; + + // 材质 + @XmlAttribute(name = "material") + private String material; + + // 饰面类型——无、单面贴皮/涂装、双面贴皮/涂装 + @XmlAttribute(name = "coating") + private String coating; + + // 有无纹理 + @XmlAttribute(name = "grained") + private String grained; + + // 正面饰面颜色、无 + @XmlAttribute(name = "coatingObverse") + private String coatingObverse; + + // 反面饰面颜色、无 + @XmlAttribute(name = "coatingReverse") + private String coatingReverse; + + // 规格 + @XmlAttribute(name = "specs") + private String specs; + + // 长 + @XmlAttribute(name = "length") + private String length; + + // 宽 + @XmlAttribute(name = "width") + private String width; + + // 厚 + @XmlAttribute(name = "thickness") + private String thickness; + + // 余料长 + @XmlAttribute(name = "oddmentLength") + private String oddmentLength; + + // 余料宽 + @XmlAttribute(name = "oddmentWidth") + private String oddmentWidth; + + // 余料厚 + @XmlAttribute(name = "oddmentThickness") + private String oddmentThickness; + + // 长度单位——默认mm毫米 + @XmlAttribute(name = "unitLength") + private String unitLength; + + // 面积 + @XmlAttribute(name = "area") + private String area; + + // 面积单位——默认m²平方米 + @XmlAttribute(name = "unitArea") + private String unitArea; + + // 仓库 + @XmlAttribute(name = "warehouse") + private String warehouse; + + // 货架 + @XmlAttribute(name = "shelf") + private String shelf; + + // 余料编号 + @XmlAttribute(name = "oddmentNo") + private String oddmentNo; + + // 备注信息 + @XmlAttribute(name = "memo") + private String memo; + + @XmlElement(name = "Blocks") + private BlockXmlVOS blockXmlVOS; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PlateXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PlateXmlVOS.java new file mode 100644 index 000000000..33b891d03 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PlateXmlVOS.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Plates") +@XmlAccessorType(XmlAccessType.FIELD) +public class PlateXmlVOS implements Serializable { + + @XmlElement( name = "Plate") + private List plateXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointBeginXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointBeginXmlVO.java new file mode 100644 index 000000000..3f2109440 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointBeginXmlVO.java @@ -0,0 +1,43 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Begin") +@XmlAccessorType(XmlAccessType.FIELD) +public class PointBeginXmlVO implements Serializable { + + // 起点坐标X + @XmlAttribute(name = "X") + private String x; + + // 起点坐标Y + @XmlAttribute(name = "Y") + private String y; + + // 起点坐标Z + @XmlAttribute(name = "Z") + private String z; + + // 刀具X轴旋转角度 + @XmlAttribute(name = "toolRotateX") + private String toolRotateX; + + // 刀具Y轴旋转角度 + @XmlAttribute(name = "toolRotateY") + private String toolRotateY; + + // 刀具Z轴旋转角度 + @XmlAttribute(name = "toolRotateZ") + private String toolRotateZ; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointEndXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointEndXmlVO.java new file mode 100644 index 000000000..7dc2b91da --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointEndXmlVO.java @@ -0,0 +1,43 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "End") +@XmlAccessorType(XmlAccessType.FIELD) +public class PointEndXmlVO implements Serializable { + + // 终点坐标X + @XmlAttribute(name = "X") + private String x; + + // 终点坐标Y + @XmlAttribute(name = "Y") + private String y; + + // 终点坐标Z + @XmlAttribute(name = "Z") + private String z; + + // 刀具X轴旋转角度 + @XmlAttribute(name = "toolRotateX") + private String toolRotateX; + + // 刀具Y轴旋转角度 + @XmlAttribute(name = "toolRotateY") + private String toolRotateY; + + // 刀具Z轴旋转角度 + @XmlAttribute(name = "toolRotateZ") + private String toolRotateZ; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointXmlVO.java new file mode 100644 index 000000000..c213ce0bd --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointXmlVO.java @@ -0,0 +1,80 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Point") +@XmlAccessorType(XmlAccessType.FIELD) +// 孤岛点信息 +public class PointXmlVO implements Serializable { + + // 点ID + @XmlAttribute(name = "id") + private String id; + + // 点X坐标 + @XmlAttribute(name = "pointX") + private String pointX; + + // 点Y坐标 + @XmlAttribute(name = "pointY") + private String pointY; + + // 点Z坐标 + @XmlAttribute(name = "pointZ") + private String pointZ; + + // 圆弧凹凸度——直线段为0 + @XmlAttribute(name = "curvature") + private String curvature; + + // 边圆弧半径——直线段为0 + @XmlAttribute(name = "radius") + private String radius; + + // 加工工艺 + @XmlAttribute(name = "process") + private String process; + + // 封边条ID + @XmlAttribute(name = "edgingId") + private String edgingId; + + // 封边条厚度 + @XmlAttribute(name = "edgingThickness") + private String edgingThickness; + + // 封边条颜色 + @XmlAttribute(name = "edgingColor") + private String edgingColor; + + // 封边条材质 + @XmlAttribute(name = "edgingMaterial") + private String edgingMaterial; + + // 封边条余量(两头) + @XmlAttribute(name = "edgingExtend") + private String edgingExtend; + + // 预铣/精修量 + @XmlAttribute(name = "preMilling") + private String preMilling; + + // 延展/收缩量 + @XmlAttribute(name = "scale") + private String scale; + + // 边备注信息 + @XmlAttribute(name = "remark") + private String remark; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointXmlVOS.java new file mode 100644 index 000000000..7fc7d6c58 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/PointXmlVOS.java @@ -0,0 +1,23 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Points") +@XmlAccessorType(XmlAccessType.FIELD) +public class PointXmlVOS implements Serializable { + + @XmlElement(name = "Point") + private List pointXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RawOutlineXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RawOutlineXmlVO.java new file mode 100644 index 000000000..fc652b371 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RawOutlineXmlVO.java @@ -0,0 +1,33 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "RawOutline") +@XmlAccessorType(XmlAccessType.FIELD) +// 坯料(还需进行精修/铣削/打磨的板材)轮廓信息 +public class RawOutlineXmlVO implements Serializable { + + // 相对于成品轮廓,基准点的X坐标偏移量 + @XmlAttribute(name = "referenceOffsetX") + private String referenceOffsetX; + + // 相对于成品轮廓,基准点的Y坐标偏移量 + @XmlAttribute(name = "referenceOffsetY") + private String referenceOffsetY; + + // 点阵数量 + @XmlAttribute(name = "count") + private String count; + + @XmlElement(name = "Point") + private List pointXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RemarkXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RemarkXmlVO.java new file mode 100644 index 000000000..666df5d93 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RemarkXmlVO.java @@ -0,0 +1,31 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Remark") +@XmlAccessorType(XmlAccessType.FIELD) +public class RemarkXmlVO implements Serializable { + + // 备注ID + @XmlAttribute(name = "id") + private String id; + + // 备注名称 + @XmlAttribute(name = "name") + private String name; + + // 备注信息 + @XmlAttribute(name = "info") + private String info; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RemarkXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RemarkXmlVOS.java new file mode 100644 index 000000000..d5be324e9 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RemarkXmlVOS.java @@ -0,0 +1,22 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Remarks") +@XmlAccessorType(XmlAccessType.FIELD) +public class RemarkXmlVOS { + + @XmlElement(name = "Remark") + private List remarkXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomXmlVO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomXmlVO.java new file mode 100644 index 000000000..d00b74640 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomXmlVO.java @@ -0,0 +1,48 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Room") +@XmlAccessorType(XmlAccessType.FIELD) +public class RoomXmlVO implements Serializable { + + // 房间ID + @XmlAttribute(name = "id") + private String id; + + // 房间名称 + @XmlAttribute(name = "name") + private String name; + + // 房间编号 + @XmlAttribute(name = "code") + private String code; + + // 房间高度 + @XmlAttribute(name = "height") + private String height; + + // 房间宽度 + @XmlAttribute(name = "width") + private String width; + + // 房间长度 + @XmlAttribute(name = "length") + private String length; + + // 房间数量 + @XmlAttribute(name = "count") + private String count; + + @XmlElement(name = "Box") + private List boxXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomXmlVOS.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomXmlVOS.java new file mode 100644 index 000000000..b534f3635 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/VO/RoomXmlVOS.java @@ -0,0 +1,26 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.*; +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@XmlRootElement(name = "Rooms") +@XmlAccessorType(XmlAccessType.FIELD) +public class RoomXmlVOS implements Serializable { + + // 数量 + @XmlAttribute(name = "count") + private String count; + + // 房间 + @XmlElement(name = "Room") + private List roomXmlVOList; +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLReadUtil.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLReadUtil.java new file mode 100644 index 000000000..0070392a6 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XMLReadUtil.java @@ -0,0 +1,47 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.nio.charset.StandardCharsets; + +@Slf4j +@Component +public class XMLReadUtil { + public static Object read(MultipartFile file, Class clazz) throws IOException { + + + byte[] firstThreeBytes = new byte[3]; + + // 用字符缓冲流获取XML文件内容 + + InputStream inputStream = file.getInputStream(); + inputStream.read(firstThreeBytes, 0, 3); +// if (firstThreeBytes[0] == (byte) 0xEF && firstThreeBytes[1] == (byte) 0xBB && firstThreeBytes[2] == (byte) 0xBF) { +// // 跳过 BOM +// inputStream.skip(3); +// } + try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { + StringBuffer builder = new StringBuffer(); + String line; + while ((line = br.readLine()) != null) { + builder.append(line); + } + + // XML转为JAVA对象 + Object odfBody = XmlBuilder.xmlStrToOject(clazz, builder.toString()); + System.out.println(" odfBody " + JSON.toJSONString(odfBody)); + + return odfBody; + } catch (IOException e) { + log.error("Error reading the file: " + file.getOriginalFilename(), e); + } catch (Exception e) { + log.error("Error parsing the XML to an OrderXmlVO object", e); + } + + return null; + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlBuilder.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlBuilder.java new file mode 100644 index 000000000..fe2fa57d5 --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlBuilder.java @@ -0,0 +1,44 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml; + + +import java.io.Reader; +import java.io.StringReader; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; + +/** + * @projectName: cf_imes_server + * @author: 晨丰科技 + * @date: 2024/8/21 17:58 + */ +public class XmlBuilder { + + /** + * 将XML转为指定的POJO + * @param clazz + * @param xmlStr + * @return + * @throws Exception + */ + public static Object xmlStrToOject(Class clazz, String xmlStr) throws Exception { + + Object xmlObject = null; + Reader reader = null; + JAXBContext context = JAXBContext.newInstance(clazz); + + // XML 转为对象的接口 + Unmarshaller unmarshaller = context.createUnmarshaller(); + + reader = new StringReader(xmlStr); + xmlObject = unmarshaller.unmarshal(reader); + + if (null != reader) { + reader.close(); + } + + return xmlObject; + } + +} + diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java new file mode 100644 index 000000000..1aa4f558a --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/XmlTypeRealize.java @@ -0,0 +1,747 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; +import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator; +import com.cf.imes.framework.organ.core.context.OrganContextHolder; +import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO; +import com.cf.imes.module.executor.dal.dataobject.order.OrderDO; +import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; +import com.cf.imes.module.executor.dal.dataobject.orderGroup.OrderGroupDO; +import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO; +import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO; +import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO; +import com.cf.imes.module.executor.dal.dataobject.rawgoods.RawGoodsDO; +import com.cf.imes.module.executor.util.deviseData.dataTwo.*; +import com.cf.imes.module.executor.util.fileConversion.admin.SnowflakeIdWorker3rd; +import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil; +import com.cf.imes.module.executor.util.fileConversion.admin.files.xml.VO.*; +import com.cf.imes.module.system.api.dict.DictDataApi; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.cf.imes.module.system.enums.DictTypeConstants.*; + +/** + * 实现数据格式转换 + * 使用自带id + */ +@Slf4j +@Component +public class XmlTypeRealize { + + @Resource + private SnowFlakeGenerator snowFlakeGenerator; + + @Resource + SnowflakeIdWorker3rd idWorker; + + @Resource + private DictDataApi dictDataApi; + + final String NOT_ASSIGNED = "未命名"; + + final String NOT_ROOM = "无房间"; + + final String NOT_BODY = "无柜体"; + + + @Resource + private IdentifierGenerator identifierGenerator; + + // 数据转换 + 错误验证 + public Map> changeDate(OrderXmlVO orderXmlVO, Long orderId, Long organId) { + if (orderXmlVO == null) { + return null; + } + Map> map = new HashMap<>(); + + return null; + } + + // 生产单转换 + public Map changeOrder(OrderXmlVO orderXmlVO, Long orderId, Long organId) { + Map map = new HashMap<>(); + String error = ""; + + if (orderXmlVO.getCustomOrderNo() == null) { + error += "客户不能为空;"; + } + if (orderXmlVO.getDealer() == null) { + error += "经销商不能为空;"; + } + if (orderXmlVO.getCustomerAddress() == null) { + error += "客户地址不能为空;"; + } + if (orderXmlVO.getCustomerPhone() == null) { + error += "客户电话不能为空;"; + } else { + if (!ToolUtil.validatePhoneNumber(orderXmlVO.getCustomerPhone())) { + error += orderXmlVO.getCustomerPhone() + "-客户电话格式错误;"; + } + } + if (orderXmlVO.getDealerPhone() != null) { + if (!ToolUtil.validatePhoneNumber(orderXmlVO.getDealerPhone())) { + error += orderXmlVO.getDealerPhone() + "-经销商电话格式错误;"; + } + } + OrderDO orderDO = OrderDO.builder() + .id(orderId) + .organId(organId) + .dataType(0) + .customer(orderXmlVO.getCustomer()) // + .customOrderNo(orderXmlVO.getCustomOrderNo()) + .dealer(orderXmlVO.getDealer()) // + .dealerPhoneNumber(orderXmlVO.getDealerPhone()) + .address(orderXmlVO.getCustomerAddress()) // + .phoneNumber(orderXmlVO.getCustomerPhone()) // + .salesman(orderXmlVO.getSeller()) + .splitter(orderXmlVO.getAnalyst()) + .remark(orderXmlVO.getMemo()) + .build(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + Map mapDate = ToolUtil.changeDate(orderXmlVO.getOrderDate(), formatter); + if (orderXmlVO.getOrderDate() == null) { + error += "-订单日期不可为空;"; + } else { + if (mapDate.get("error") instanceof Integer && (Integer) mapDate.get("error") == -1) { + error += orderXmlVO.getOrderDate() + "-订单日期格式错误;"; + } else { + orderDO.setOrderDate(((LocalDate) mapDate.get("date")).atStartOfDay()); + } + } + mapDate = ToolUtil.changeDate(orderXmlVO.getDeliveryDate(), formatter); + if (orderXmlVO.getDeliveryDate() == null) { + error += "-出货日期不可为空;"; + } else { + if (mapDate.get("error") instanceof Integer && (Integer) mapDate.get("error") == -1) { + error += orderXmlVO.getDeliveryDate() + "-出货日期格式错误;"; + } else { + orderDO.setDeliveryDate(((LocalDate) mapDate.get("date")).atStartOfDay()); + } + } + + map.put("order", orderDO); + map.put("error", error); + return map; + } + + // 房间柜体信息转换 + public Map> bodyInfoChange(RoomXmlVOS roomXmlVOS, Long orderId, Long organId) { + + Map> roomInfos = new HashMap<>(); + if (roomXmlVOS != null && roomXmlVOS.getRoomXmlVOList() != null && roomXmlVOS.getRoomXmlVOList().size() > 0) { + Map bodyInfos = new HashMap<>(); + for (RoomXmlVO roomXmlVO : roomXmlVOS.getRoomXmlVOList()) { + Long roomId = Long.valueOf(roomXmlVO.getId()); + for (BoxXmlVO boxXmlVO : roomXmlVO.getBoxXmlVOList()) { + bodyInfos.put(boxXmlVO.getId(), OrderBodyDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .roomId(roomId) + .roomName(roomXmlVO.getName()) + .name(boxXmlVO.getName()) + .width(Double.parseDouble(boxXmlVO.getWidth())) + .height(Double.parseDouble(boxXmlVO.getHeight())) + .depth(Double.parseDouble(boxXmlVO.getLength())) + .build()); + } + roomInfos.put(roomXmlVO.getId(), bodyInfos); + } + } + return roomInfos; + } + + // 加工组信息转换 + public Map groupInfoChange(GroupXmlVOS groupXmlVOS, Long orderId, Long organId) { + Map groupInfos = new HashMap<>(); + if (groupXmlVOS != null && groupXmlVOS.getGroupXmlVOList() != null && groupXmlVOS.getGroupXmlVOList().size() > 0) { + for (GroupXmlVO groupXmlVO : groupXmlVOS.getGroupXmlVOList()) { + groupInfos.put(groupXmlVO.getId(), OrderGroupDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .name(groupXmlVO.getName()) + .height(Double.parseDouble(groupXmlVO.getHeight())) + .width(Double.parseDouble(groupXmlVO.getWidth())) + .depth(Double.parseDouble(groupXmlVO.getLength())) + .build()); + } + } + return groupInfos; + } + + // 板材信息转换 + public Map> goodsInfoChange(OrderXmlVO orderXmlVO, Long orderId, Long organId) { + Map> map = new HashMap<>(); + + List rawGoodsDOs = new ArrayList<>(); + List goodsDOs = new ArrayList<>(); + List bodyBOs = new ArrayList<>(); + List groupDOs = new ArrayList<>(); + List plateDOs = new ArrayList<>(); + List itemDOs = new ArrayList<>(); + List partsDOs = new ArrayList<>(); + + Map groupInfos = groupInfoChange(orderXmlVO.getGroupXmlVOS(), orderId, organId); // 加工组 + Map itemInfos = new HashMap<>(); + Map partsInfos = new HashMap<>(); + + + // 房间柜体 + Map> roomInfos = bodyInfoChange(orderXmlVO.getRoomXmlVOS(), orderId, organId); + + if (orderXmlVO.getMaterialXmlVO() != null ){ + MaterialXmlVO materialXmlVO = orderXmlVO.getMaterialXmlVO(); + if (materialXmlVO.getAccessoryXmlVO() != null && materialXmlVO.getAssemblieXmlVOS() != null && materialXmlVO.getPlateXmlVOS() != null) { + PlateXmlVOS plateXmlVOS = materialXmlVO.getPlateXmlVOS(); + AssemblieXmlVOS assemblieXmlVOS = materialXmlVO.getAssemblieXmlVOS(); + AccessoryXmlVO accessoryXmlVO = materialXmlVO.getAccessoryXmlVO(); + // 配件 + Map> partAllInfo = goodsInfoChange(accessoryXmlVO, assemblieXmlVOS, orderId, organId, roomInfos, groupInfos); + itemInfos.putAll(partAllInfo.get("orderItemMap")); + partsInfos.putAll(partAllInfo.get("orderPartsMap")); + + // 板材 小板 + if (plateXmlVOS.getPlateXmlVOList() != null && plateXmlVOS.getPlateXmlVOList().size() > 0) { + for (PlateXmlVO plateXmlVO : plateXmlVOS.getPlateXmlVOList()) { + Long rawGoodsId = (Long) identifierGenerator.nextId(null); + Long goodsId = (Long) identifierGenerator.nextId(null); + rawGoodsDOs.add(RawGoodsDO.builder() + .id(rawGoodsId) + .organId(organId) + .orderId(orderId) + .rawGoodsId(plateXmlVO.getItemNo()) + .goodsName(plateXmlVO.getName()) + .material(plateXmlVO.getMaterial()) + .color(plateXmlVO.getCoatingObverse()) + .colorBlack(plateXmlVO.getCoatingReverse()) + .texture(ToolUtil.convertToType(plateXmlVO.getGrained(), Boolean.class) ? Boolean.valueOf(plateXmlVO.getGrained()) : false) + .thickness(Double.parseDouble(plateXmlVO.getThickness())) + .brand(plateXmlVO.getBrand()) + .spec(plateXmlVO.getSpecs()) + .build()); + + GoodsDO goodsDO = GoodsDO.builder() + .id(goodsId) + .organId(organId) + .orderId(orderId) + .rawGoodsId(String.valueOf(rawGoodsId)) + .goodsId(plateXmlVO.getItemNo()) + .goodsName(plateXmlVO.getName()) + .material(plateXmlVO.getMaterial()) + .color(plateXmlVO.getCoatingObverse()) + .colorBlack(plateXmlVO.getCoatingReverse()) + .texture(ToolUtil.convertToType(plateXmlVO.getGrained(), Boolean.class) ? Boolean.valueOf(plateXmlVO.getGrained()) : false) + .width(BigDecimal.valueOf(Double.parseDouble(plateXmlVO.getWidth()))) + .height(BigDecimal.valueOf(Double.parseDouble(plateXmlVO.getLength()))) + .thickness(BigDecimal.valueOf(Double.parseDouble(plateXmlVO.getThickness()))) + .brand(plateXmlVO.getBrand()) + .spec(plateXmlVO.getSpecs()) + .remark(plateXmlVO.getMemo()) + .build(); + goodsDOs.add(goodsDO); + + // 小板信息 + plateInfoChange(plateXmlVO.getBlockXmlVOS(), orderId, goodsDO.getId(), organId, roomInfos, groupInfos, partsInfos, itemInfos, plateDOs); + } + + } + } + } + + return map; + } + + // id得到 + private Map getId(String roomNo, String BoxNo, Map> roomInfos, + String groupNo, Map groupInfos, + Long orderId, Long organId) { + Map map = new HashMap<>(); + Map bodyMap = roomInfos.get(roomNo); + OrderBodyDO bodyDO; + if (bodyMap.containsKey(BoxNo)) { + bodyDO = (OrderBodyDO) bodyMap.get(BoxNo); + } else { + Long roomId = (Long) identifierGenerator.nextId(null); + bodyDO = OrderBodyDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .roomId(roomId) + .roomName(NOT_ASSIGNED) + .name(NOT_ASSIGNED) + .width(0.0) + .height(0.0) + .depth(0.0) + .build(); + bodyMap.put(NOT_ASSIGNED, bodyDO); + roomInfos.put(NOT_ASSIGNED, bodyMap); + + } + Long roomId = bodyDO.getRoomId(); + Long bodyId = bodyDO.getId(); + // 加工组 + OrderGroupDO orderGroupDO = groupInfos.get(groupNo); + Long groupId = 0L; + if (orderGroupDO != null) { + groupId = orderGroupDO.getId(); + } + map.put("roomId", roomId); + map.put("bodyId", bodyId); + map.put("groupId", groupId); + return map; + } + // 配件信息转换 + public Map> goodsInfoChange(AccessoryXmlVO accessoryXmlVO, AssemblieXmlVOS assemblieXmlVOS, Long orderId, Long organId, + Map> roomInfos, Map groupInfos) { + Map> map = new HashMap<>(); + Map orderPartsMap = new HashMap<>(); + Map orderItemMap = new HashMap<>(); + + if (accessoryXmlVO != null) { + if (accessoryXmlVO.getEdgingXmlVOS() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList().size() > 0) { + EdgingXmlVOS edgingXmlVOS = accessoryXmlVO.getEdgingXmlVOS(); + for (EdgingXmlVO edgingXmlVO : edgingXmlVOS.getEdgingXmlVOList()) { + + Map idMap = getId(edgingXmlVO.getRoomId(), edgingXmlVO.getBoxId(), roomInfos, edgingXmlVO.getGroupId(), groupInfos, orderId, organId); + + Long partsId = (Long) identifierGenerator.nextId(null); + orderPartsMap.put(edgingXmlVO.getId(), OrderPartsAddVO.builder() + .id(partsId) + .organId(organId) + .orderId(orderId) + .goodsId(edgingXmlVO.getItemNo()) + .factory(edgingXmlVO.getManufacturer()) + .brand(edgingXmlVO.getBrand()) + .name(edgingXmlVO.getName()) + .material(edgingXmlVO.getMaterial()) + .spec(edgingXmlVO.getSpecs()) + .unit(edgingXmlVO.getUnit()) + .width(BigDecimal.valueOf(Double.parseDouble(edgingXmlVO.getWidth()))) + .length(BigDecimal.valueOf(Double.parseDouble(edgingXmlVO.getLength()))) + .thickness(BigDecimal.valueOf(Double.parseDouble(edgingXmlVO.getThickness()))) + .warehouse(edgingXmlVO.getWarehouse()) + .shelf(edgingXmlVO.getShelf()) + .color(edgingXmlVO.getColor()) + .isComposite(false) + .num(Double.valueOf(edgingXmlVO.getCount())) + .build()); + + orderItemMap.put(edgingXmlVO.getId(), OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .type(2) + .partsId(partsId) + .groupId(idMap.get("groupId")) + .roomId(idMap.get("roomId")) + .bodyId(idMap.get("bodyId")) + .num(Double.valueOf(edgingXmlVO.getCount())) + .build()); + } + } + if (accessoryXmlVO.getHardwareXmlVOS() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList().size() > 0) { + HardwareXmlVOS hardwareXmlVOS = accessoryXmlVO.getHardwareXmlVOS(); + for (HardwareXmlVO hardwareXmlVO : hardwareXmlVOS.getHardwareXmlVOList()) { + + Map idMap = getId(hardwareXmlVO.getRoomId(), hardwareXmlVO.getBoxId(), roomInfos, hardwareXmlVO.getGroupId(), groupInfos, orderId, organId); + + Long partsId = (Long) identifierGenerator.nextId(null); + orderPartsMap.put(hardwareXmlVO.getId(), OrderPartsAddVO.builder() + .id(partsId) + .organId(organId) + .type(hardwareXmlVO.getType()) + .orderId(orderId) + .goodsId(hardwareXmlVO.getItemNo()) + .factory(hardwareXmlVO.getManufacturer()) + .brand(hardwareXmlVO.getBrand()) + .name(hardwareXmlVO.getName()) + .material(hardwareXmlVO.getMaterial()) + .spec(hardwareXmlVO.getSpecs()) + .unit(hardwareXmlVO.getUnit()) + .width(BigDecimal.valueOf(Double.parseDouble(hardwareXmlVO.getWidth()))) + .length(BigDecimal.valueOf(Double.parseDouble(hardwareXmlVO.getLength()))) + .thickness(BigDecimal.valueOf(Double.parseDouble(hardwareXmlVO.getThickness()))) + .warehouse(hardwareXmlVO.getWarehouse()) + .shelf(hardwareXmlVO.getShelf()) + .color(hardwareXmlVO.getColor()) + .num(Double.valueOf(hardwareXmlVO.getCount())) + .roomId(hardwareXmlVO.getRoomId()) + .bodyId(hardwareXmlVO.getBoxId()) + .isComposite(false) + .build()); + orderItemMap.put(hardwareXmlVO.getId(), OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .type(2) + .partsId(partsId) + .groupId(idMap.get("groupId")) + .roomId(idMap.get("roomId")) + .bodyId(idMap.get("bodyId")) + .num(Double.valueOf(hardwareXmlVO.getCount())) + .build()); + } + } + } + + if (assemblieXmlVOS != null && assemblieXmlVOS.getAssemblyXmlVOList() != null && assemblieXmlVOS.getAssemblyXmlVOList().size() > 0) { + for (AssemblyXmlVO assemblyXmlVO : assemblieXmlVOS.getAssemblyXmlVOList()) { + + Map idMap = getId(assemblyXmlVO.getRoomId(), assemblyXmlVO.getBoxId(), roomInfos, assemblyXmlVO.getGroupId(), groupInfos, orderId, organId); + + Long partsId = (Long) identifierGenerator.nextId(null); + orderPartsMap.put(assemblyXmlVO.getId(), OrderPartsAddVO.builder() + .id(partsId) + .organId(organId) + .orderId(orderId) + .type(assemblyXmlVO.getType()) + .goodsId(assemblyXmlVO.getItemNo()) + .factory(assemblyXmlVO.getManufacturer()) + .brand(assemblyXmlVO.getBrand()) + .name(assemblyXmlVO.getName()) + .material(assemblyXmlVO.getMaterial()) + .spec(assemblyXmlVO.getSpecs()) + .color(assemblyXmlVO.getColor()) + .length(BigDecimal.valueOf(Double.parseDouble(assemblyXmlVO.getLength()))) + .width(BigDecimal.valueOf(Double.parseDouble(assemblyXmlVO.getWidth()))) + .thickness(BigDecimal.valueOf(Double.parseDouble(assemblyXmlVO.getHeight()))) + .num(Double.valueOf(assemblyXmlVO.getCount())) + .unit((assemblyXmlVO.getUnit())) + .warehouse(assemblyXmlVO.getWarehouse()) + .shelf(assemblyXmlVO.getShelf()) + .roomId(assemblyXmlVO.getRoomId()) + .bodyId(assemblyXmlVO.getBoxId()) + .isComposite(true) + .build()); + orderItemMap.put(assemblyXmlVO.getId(), OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .type(2) + .partsId(partsId) + .groupId(idMap.get("groupId")) + .roomId(idMap.get("roomId")) + .bodyId(idMap.get("bodyId")) + .num(Double.valueOf(assemblyXmlVO.getCount())) + .build()); + } + } + map.put("orderItemMap", orderItemMap); + map.put("orderPartsMap", orderPartsMap); + return map; + } + + public List plateInfoChange(BlockXmlVOS blockXmlVOS, Long orderId, Long goodsId, Long organId, + Map> roomInfos, Map groupInfos, + Map partsMap, Map orderItemMap, List plateDOs) { + List plateDetails = new ArrayList<>(); + + if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() != null && blockXmlVOS.getBlockXmlVOList().size() > 0) { + for (BlockXmlVO blockXmlVO : blockXmlVOS.getBlockXmlVOList()) { + String roomId = blockXmlVO.getRoomId(); + String bodyId = blockXmlVO.getBoxId(); + String groupId = blockXmlVO.getGroupId(); + + long plateNo = idWorker.nextId(); + long obtainingTime = idWorker.obtainingTime(); + Long plateId = (Long) identifierGenerator.nextId(null); + BigDecimal area = BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getWidth()) * Double.parseDouble(blockXmlVO.getLength())); + // 开料面积 + BigDecimal sealAcreage = BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getCuttingWidth()) * Double.parseDouble(blockXmlVO.getCuttingLength())); + // 开门类型获取 + Integer doorType = Integer.valueOf(dictDataApi.parseDictData(DOOR_OPEN_DIR, blockXmlVO.getOpenDirection()).getData().getValue()); + + // 板材获取 + + Map idMap = getId(blockXmlVO.getRoomId(), blockXmlVO.getBoxId(), roomInfos, blockXmlVO.getGroupId(), groupInfos, orderId, organId); + + PlateDO plateDO = PlateDO.builder() + .id(plateId) + .organId(organId) + .orderId(orderId) + .name(blockXmlVO.getName()) + .plateNo((obtainingTime) + Long.toString(plateNo).substring(2)) + .type(Integer.valueOf(blockXmlVO.getType())) + .goodsId(goodsId) + .width(BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getWidth()))) + .height(BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getLength()))) + .thickness(BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getThickness()))) + .splitHeight(BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getLength()))) + .splitThickness(BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getThickness()))) + .splitWidth(BigDecimal.valueOf(Double.parseDouble(blockXmlVO.getWidth()))) + .area(area) + .texture(Integer.valueOf(blockXmlVO.getTexture())) + .holeFace(Integer.valueOf(blockXmlVO.getLayoutFace())) + .isDoor(doorType == 0) + .openDoorType(doorType) + .isSpecialShaped(convertToBoolean(blockXmlVO.getUnregular())) + .build(); + + orderItemMap.put(blockXmlVO.getId(), OrderItemDO.builder() + .id((Long) identifierGenerator.nextId(null)) + .organId(organId) + .orderId(orderId) + .type(2) + .plateId(plateId) + .groupId(idMap.get("groupId")) + .roomId(idMap.get("roomId")) + .bodyId(idMap.get("bodyId")) + .num(1.0) + .build()); + + PlateDetail plateDetail = PlateDetail.builder() + .plateId(plateId) + .plateNo(plateDO.getPlateNo()) + .name(plateDO.getName()) + .customPlateNo(blockXmlVO.getDesignNo()) + .texture(plateDO.getTexture()) + .typographicFace(plateDO.getHoleFace()) + .openDoorType(plateDO.getOpenDoorType()) + .boardType(blockXmlVO.getType()) + .multiNum(Integer.valueOf(blockXmlVO.getMultipleNumber())) + .plateWidth(plateDO.getWidth()) + .plateLength(plateDO.getHeight()) + .acreage(plateDO.getArea()) + .splitLength(BigDecimal.valueOf(Long.parseLong(blockXmlVO.getCuttingLength()))) + .splitWidth(BigDecimal.valueOf(Long.parseLong(blockXmlVO.getCuttingWidth()))) + .sealAcreage(sealAcreage) + .isUnRegular(plateDO.getIsSpecialShaped()) + .build(); + // 小板、es 封边值 + addSealEdge(plateDO, plateDetail, blockXmlVO.getOutlineXmlVO(), partsMap); + // 偏移量 不含封边 + addPointDetail(plateDO, plateDetail, blockXmlVO.getCuttingOutlineXmlVO()); + // 孔数据 + addHole(plateDO, plateDetail, blockXmlVO.getHoleXmlVOS()); + // 造型数据 + addContourDetail(plateDO, plateDetail, blockXmlVO.getGrooveXmlVOS()); + // 小板备注信息 + addRemark(plateDO, plateDetail, blockXmlVO); + + // + plateDOs.add(plateDO); + plateDetails.add(plateDetail); + } + + } + return plateDetails; + } + + // 是否转换布尔值 + public Boolean convertToBoolean(String str) { + Boolean isTrue = false; + switch (str) { + case "是": + isTrue = true; + break; + default: + isTrue = false; + break; + } + return isTrue; + } + + // 封边值相关信息添加 (原始点明细) + private void addSealEdge(PlateDO plateDO, PlateDetail plateDetail, OutlineXmlVO outlineXmlVO, Map edgIng) { + BigDecimal sealLeft = BigDecimal.valueOf(0); + BigDecimal sealRight = BigDecimal.valueOf(0); + BigDecimal sealUp = BigDecimal.valueOf(0); + BigDecimal sealDown = BigDecimal.valueOf(0); + + if (outlineXmlVO != null && outlineXmlVO.getPointXmlVOList() != null && outlineXmlVO.getPointXmlVOList().size() > 0) { + for (PointXmlVO pointXmlVO : outlineXmlVO.getPointXmlVOList()) { + Double x = Double.parseDouble(pointXmlVO.getPointX()); + Double y = Double.parseDouble(pointXmlVO.getPointY()); + OrderPartsAddVO edging = (OrderPartsAddVO) edgIng.get(pointXmlVO.getEdgingId()); + if (!plateDO.getIsSpecialShaped()) { + if (x == 0 && y == 0) { + sealDown = edging.getThickness(); + } + if (x != 0 && y == 0) { + sealRight = edging.getThickness(); + } + if (x != 0 && y != 0) { + sealUp = edging.getThickness(); + } + if (x == 0 && y != 0) { + sealLeft = edging.getThickness(); + } + } + + plateDetail.getRawPointDetail().add(PointDetail.builder() + .id(pointXmlVO.getId()) + .pointX(x) + .pointY(y) + .curve(Double.parseDouble(pointXmlVO.getCurvature())) + .radius(Double.parseDouble(pointXmlVO.getRadius())) + .sealSize(edging.getThickness()) + .build()); + plateDetail.getSideRemark().put(pointXmlVO.getId(), pointXmlVO.getRemark()); + } + } + plateDetail.setSealUp(sealUp).setSealDown(sealDown).setSealLeft(sealLeft).setSealRight(sealRight); + plateDO.setSealUp(sealUp).setSealDown(sealDown).setSealLeft(sealLeft).setSealRight(sealRight); + } + + // 点明细(不含封边) + private void addPointDetail(PlateDO plateDO, PlateDetail plateDetail, CuttingOutlineXmlVO cuttingOutlineXmlVO) { + if (cuttingOutlineXmlVO != null) { + plateDO.setOffsetX(BigDecimal.valueOf(Long.parseLong(cuttingOutlineXmlVO.getReferenceOffsetX()))). + setOffsetY(BigDecimal.valueOf(Long.parseLong(cuttingOutlineXmlVO.getReferenceOffsetY()))); + plateDetail.setOffsetX(plateDO.getOffsetX()).setOffsetY(plateDO.getOffsetY()); + if (cuttingOutlineXmlVO.getPointXmlVOList() != null && cuttingOutlineXmlVO.getPointXmlVOList().size() > 0) { + for (PointXmlVO pointXmlVO : cuttingOutlineXmlVO.getPointXmlVOList()) { + plateDetail.getPointDetail().add(PointDetail.builder() + .id(pointXmlVO.getId()) + .pointX(Double.parseDouble(pointXmlVO.getPointX())) + .pointY(Double.parseDouble(pointXmlVO.getPointY())) + .curve(Double.parseDouble(pointXmlVO.getCurvature())) + .radius(Double.parseDouble(pointXmlVO.getRadius())) + .build()); + } + } + } + } + + // 孔 + private void addHole(PlateDO plateDO, PlateDetail plateDetail, HoleXmlVOS holeXmlVOS) { + if (holeXmlVOS != null) { + plateDO.setFrontHoleCount(Integer.valueOf(holeXmlVOS.getCountFaceA())). + setBackHoleCount(Integer.valueOf(holeXmlVOS.getCountFaceB())). + setSideHoleCount(Integer.valueOf(holeXmlVOS.getCountSide())); + if (holeXmlVOS.getCountThrough() != null && Integer.parseInt(holeXmlVOS.getCountThrough()) > 0) { + plateDO.setFilterType(plateDO.getFilterType() + ",2"); + } + if (holeXmlVOS.getHoleXmlVOList() != null && holeXmlVOS.getHoleXmlVOList().size() > 0) { + for (HoleXmlVO holeXmlVO : holeXmlVOS.getHoleXmlVOList()) { + Integer faceType = Integer.valueOf(dictDataApi.parseDictData(HOLE_FACE, holeXmlVO.getFace()).getData().getValue()); + faceType = faceType == 0 || faceType == 1 ? faceType : 2; + Integer direction = Integer.valueOf(dictDataApi.parseDictData(HOLE_DIR, holeXmlVO.getDirection()).getData().getValue()); + Integer holeType = Integer.valueOf(dictDataApi.parseDictData(HOLE_TYPE, holeXmlVO.getType()).getData().getValue()); + Double radius = holeXmlVO.getDiameter() != null ? Double.parseDouble(holeXmlVO.getDiameter()) / 2 : 0; + Double depth = holeXmlVO.getDepth() != null ? Double.parseDouble(holeXmlVO.getDepth()) : 0; + HoleDetail holeDetail = HoleDetail.builder() + .holeName(holeXmlVO.getName()) + .faceType(faceType) + .holeType(Integer.valueOf(holeXmlVO.getType())) + .direction(direction) + .holeType(holeType) + .radius(radius) + .depth(depth) + .build(); + if (holeXmlVO.getPointBeginXmlVO() != null) { + holeDetail.setStartX(Double.parseDouble(holeXmlVO.getPointBeginXmlVO().getX())). + setStartY(Double.parseDouble(holeXmlVO.getPointBeginXmlVO().getY())). + setStartZ(Double.parseDouble(holeXmlVO.getPointBeginXmlVO().getZ())); + } + if (holeXmlVO.getPointEndXmlVO() != null) { + holeDetail.setEndX(Double.parseDouble(holeXmlVO.getPointEndXmlVO().getX())). + setEndY(Double.parseDouble(holeXmlVO.getPointEndXmlVO().getY())). + setEndZ(Double.parseDouble(holeXmlVO.getPointEndXmlVO().getZ())); + } + plateDetail.getHoleDetail().add(holeDetail); + } + } + } + } + + // 造型 + private void addContourDetail(PlateDO plateDO, PlateDetail plateDetail, GrooveXmlVOS grooveXmlVOS) { + if (grooveXmlVOS != null) { + plateDO.setFrontModelCount(Integer.valueOf(grooveXmlVOS.getCountFaceA())). + setBackModelCount(Integer.valueOf(grooveXmlVOS.getCountFaceB())); + if (grooveXmlVOS.getCountThrough() != null && Integer.parseInt(grooveXmlVOS.getCountThrough()) > 0) { + plateDO.setFilterType(plateDO.getFilterType() + ",1"); + } + if (grooveXmlVOS.getGrooveXmlVOList() != null && grooveXmlVOS.getGrooveXmlVOList().size() > 0) { + for (GrooveXmlVO grooveXmlVO : grooveXmlVOS.getGrooveXmlVOList()) { + Integer faceType = Integer.valueOf(dictDataApi.parseDictData(HOLE_FACE, grooveXmlVO.getFace()).getData().getValue()); + faceType = faceType == 0 || faceType == 1 ? faceType : 2; + ModelDetail modelDetail = ModelDetail.builder() + .type(grooveXmlVO.getType()) + .faceType(faceType) + .depth(Double.parseDouble(grooveXmlVO.getDepth())) + .knifeName(grooveXmlVO.getToolName()) + .knifeRadius(Double.parseDouble(grooveXmlVO.getToolDiameter()) / 2) + .originModeling(getOriginModelingData(grooveXmlVO)) + .pointList(addPointDetail(grooveXmlVO.getPointXmlVOS())) + .offSetList(addOffSetDetail(grooveXmlVO.getOffsetLineXmlVOS())).build(); + plateDetail.getContourDetail().add(modelDetail); + } + } + } + } + + // 造像轮廓数据 + private IOriginModelingData getOriginModelingData(GrooveXmlVO grooveXmlVO) { + return IOriginModelingData.builder() + .knifeRadius(Double.parseDouble(grooveXmlVO.getToolDiameter()) / 2) + .thickness(Double.valueOf(grooveXmlVO.getDepth())) + .addLen(Double.valueOf(grooveXmlVO.getLengthExtend())) + .addDepth(Double.valueOf(grooveXmlVO.getDepthExtend())) + .addWidth(Double.valueOf(grooveXmlVO.getWidthExtend())) + .build(); + } + + // 点列表的赋值 + private List addPointDetail(PointXmlVOS pointXmlVOS) { + List pointLists = new ArrayList<>(); + if (pointXmlVOS != null && pointXmlVOS.getPointXmlVOList() != null && pointXmlVOS.getPointXmlVOList().size() > 0) { + for (PointXmlVO pointXmlVO : pointXmlVOS.getPointXmlVOList()) { + pointLists.add(PointList.builder() + .pointId(Integer.valueOf(pointXmlVO.getId())) + .pointX(Double.parseDouble(pointXmlVO.getPointX())). + pointY(Double.parseDouble(pointXmlVO.getPointY())) + .pointZ(Double.parseDouble(pointXmlVO.getPointZ())) + .radius(Double.parseDouble(pointXmlVO.getRadius())) + .curve(Double.parseDouble(pointXmlVO.getCurvature())) + .holeRadius(Double.parseDouble(pointXmlVO.getRadius())) + .build()); + } + } + return pointLists; + } + + // 偏移量列表 + private List addOffSetDetail(OffsetLineXmlVOS offsetLineXmlVOS) { + List offSetList = new ArrayList<>(); + if (offsetLineXmlVOS != null && offsetLineXmlVOS.getOffsetLineXmlVOList() != null && offsetLineXmlVOS.getOffsetLineXmlVOList().size() > 0) { + for (OffsetLineXmlVO offsetLineXmlVO : offsetLineXmlVOS.getOffsetLineXmlVOList()) { + offSetList.add(OffSetList.builder() + .id(offsetLineXmlVO.getId()) + .value(Double.parseDouble(offsetLineXmlVO.getOffset())) + .depth(Double.parseDouble(offsetLineXmlVO.getDepth())) + .angle(Double.parseDouble(offsetLineXmlVO.getTangentAngle())) + .name(offsetLineXmlVO.getToolName()) + .radius(Double.parseDouble(offsetLineXmlVO.getToolDiameter()) / 2) + .build()); + } + } + return offSetList; + } + + // 小板备注 + private void addRemark(PlateDO plateDO, PlateDetail plateDetail, BlockXmlVO blockXmlVO) { + if (blockXmlVO.getRemarkXmlVOS() != null && blockXmlVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && blockXmlVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) { + for (RemarkXmlVO remarkXmlVO : blockXmlVO.getRemarkXmlVOS().getRemarkXmlVOList()) { + plateDetail.getRemark().put(remarkXmlVO.getName(), remarkXmlVO.getInfo()); + } + plateDO.setRemark(JSONObject.toJSONString(plateDetail.getRemark())); + } + } +} diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/test.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/test.java new file mode 100644 index 000000000..b3d5ba98a --- /dev/null +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/files/xml/test.java @@ -0,0 +1,24 @@ +package com.cf.imes.module.executor.util.fileConversion.admin.files.xml; + +import com.cf.imes.module.executor.dal.dataobject.orderBody.OrderBodyDO; + +import java.lang.reflect.Method; + +/** + * @projectName: cf_imes_server + * @author: 晨丰科技 + * @date: 2024/8/23 16:59 + */ +public class test { + + public static void main(String[] args) { + // 给定的圆的直径 + double diameter = 5; + + // 计算半径 + double radius = diameter / 3; + + // 输出结果 + System.out.println("圆的半径是: " + radius); + } +} diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/pom.xml b/cf-module-prod-manage/cf-module-prod-manage-biz/pom.xml index edbc973de..876419071 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/pom.xml +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/pom.xml @@ -48,7 +48,10 @@ com.cf.imes cf-spring-boot-starter-biz-error-code - + + com.cf.imes + cf-spring-boot-starter-biz-dict + com.cf.imes diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java index b53a6d8de..741724cef 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java @@ -106,7 +106,7 @@ public class PlateController { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = plateService.getPlatePage(pageReqVO).getList(); // 导出 Excel - ExcelUtils.write(response, "板材信息表 plate_{N}.xls", "数据", PlateRespVO.class, + ExcelUtils.write(response, "板材信息表.xls", "数据", PlateRespVO.class, BeanUtils.toBean(list, PlateRespVO.class)); } @@ -117,10 +117,10 @@ public class PlateController { public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( - PlateImportExcelVO.builder().goodsId("SP1123456").goodsName("xixih").material("颗粒板").width(String.valueOf(1212.3)).height(String.valueOf(12131.6)) - .thickness(String.valueOf(0.2)).brand("鹅厂").spec("大厂").remark("测试").color("黑色").texture("有").build(), - PlateImportExcelVO.builder().goodsId("SP1123457").goodsName("2L").material("yuanma@cf.com").width(String.valueOf(21.6)).height(String.valueOf(12231.6)) - .thickness(String.valueOf(5.3)).brand("kkkkkk").spec("大厂").remark("测试").color("黑色").texture("无").build() + PlateImportExcelVO.builder().goodsId("SP1123456").goodsName("尼龙板").material("PVC").width(String.valueOf(1200.000)).height(String.valueOf(2400.000)) + .thickness(String.valueOf(18)).brand("黑天鹅").spec("1200*2400*18").remark("板材样本").color("黑色").texture("无").build(), + PlateImportExcelVO.builder().goodsId("SP1123457").goodsName("电木板").material("塑料").width(String.valueOf(1800.000)).height(String.valueOf(2800.000)) + .thickness(String.valueOf(24)).brand("东粤橡塑厂").spec("1800*2800*24").remark("测试").color("黑色").texture("无").build() ); // 输出 ExcelUtils.write(response, "板材导入模板.xlsx", "板材列表", PlateImportExcelVO.class, list); diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java index af1977faa..40b1601f1 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/vo/plate/PlateRespVO.java @@ -2,7 +2,7 @@ package com.cf.imes.module.manage.controller.admin.plate.vo.plate; import com.cf.imes.framework.excel.core.annotations.DictFormat; import com.cf.imes.framework.excel.core.convert.DictConvert; -import com.cf.imes.module.system.enums.DictTypeConstants; +import com.cf.imes.module.manage.enums.DictTypeConstants; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -34,9 +34,9 @@ public class PlateRespVO { @ExcelProperty("颜色") private String color; - @Schema(description = "纹理", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "纹理", example = "true") @ExcelProperty(value = "纹理", converter = DictConvert.class) - @DictFormat(DictTypeConstants.USER_SEX) + @DictFormat(DictTypeConstants.PLATE_TEXTURE) private Boolean texture; @Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED) diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/plate/PlateDO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/plate/PlateDO.java index 2b7595401..055a8bd41 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/plate/PlateDO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/plate/PlateDO.java @@ -41,6 +41,10 @@ public class PlateDO extends BaseDO { * 颜色 */ private String color; +// /** +// * 背面颜色 +// */ +// private String colorBlack; /** * 纹理 */ diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java index 582b07522..601c2f054 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/dataobject/remainplaten/RemainPlateDO.java @@ -66,6 +66,10 @@ public class RemainPlateDO extends BaseDO { * 颜色 */ private String color; + /** + * 背面颜色 + */ + private String colorBlack; /** * 纹理 */ diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java index 8d0936ce9..f3be94e48 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/organ/OrganApi.java @@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; @@ -34,7 +35,7 @@ public interface OrganApi { @Operation(summary = "组织总数查询") CommonResult> getOrgTotal(); - @GetMapping(PREFIX + "/separate/org") + @PostMapping(PREFIX + "/separate/org") @Operation(summary = "新增、注销组织数量统计") CommonResult> getOrgSeparate(@Valid OrgStatisticsReqDTO reqVO); diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/DictTypeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/DictTypeConstants.java index 6ebf0df61..891d0a789 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/DictTypeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/DictTypeConstants.java @@ -32,4 +32,12 @@ public interface DictTypeConstants { String DOOR_OPENING_DIRECTIONS = "doorOpeningDirections";//开门方向 String PRODUCT_TYPE = "productType";//产品类型 String SYNTHESIS_TYPE = "synthesisType";//加工组类型 + String DOOR_OPEN_DIR = "doorOpeningDirections";// 开门方向 + + String HOLE_FACE = "hole_face";//孔加工面 + String HOLE_DIR = "hole_direction";// 孔方向 + String HOLE_TYPE = "hole_type";//孔类型 + String PLATE_TEXTURE_TYPE = "plateTextureType";//板件纹路类型 + String PLATE_TEXTURE_TYPE_STATUS = "plateTextureTypeStatus";//板件纹路状态 + String PLATE_TEXTURE_TYPE_STATUS_TYPE = "plateTextureTypeStatusType";//板件纹路状态类型 } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java index 4d46dd299..1e426613e 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/organ/OrganApiImpl.java @@ -53,13 +53,13 @@ public class OrganApiImpl implements OrganApi { List dateList = getDateList(reqVO.getCreateTime(),reqVO.getUnit()); - // 生产单有效数量 - Map> orderLapseRespMap = organService.orgCountAddByOrderDateAdd(reqVO).stream() + // 组织有效数量 + Map> orderNotLapseRespMap = organService.orgCountAddByOrderDateAdd(reqVO).stream() .sorted(Comparator.naturalOrder()) .collect(Collectors.groupingBy(OrgStatisticsIsLapseRespDTO::getDate, LinkedHashMap::new, Collectors.toList())); // 组织无效数量 - Map> orderNotLapseRespMap = organService.orgCountLapseByOrderDate(reqVO).stream() + Map> orderLapseRespMap = organService.orgCountLapseByOrderDate(reqVO).stream() .sorted(Comparator.naturalOrder()) .collect(Collectors.groupingBy(OrgStatisticsIsLapseRespDTO::getDate, LinkedHashMap::new, Collectors.toList())); diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml index 3593bf4ef..848369dbc 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/organ/OrganMapper.xml @@ -30,16 +30,16 @@ - ,CONCAT(YEAR(o.order_date), '-', QUARTER(o.order_date)) as date + ,CONCAT(YEAR(o.update_time), '-', QUARTER(o.update_time)) as date - ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date)) as date + ,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time)) as date - ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', FLOOR((DayOfMonth(o.order_date)-1)/7)+1) AS date + ,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time), '-', FLOOR((DayOfMonth(o.update_time)-1)/7)+1) AS date - ,CONCAT(YEAR(o.order_date), '-', MONTH(o.order_date), '-', DAY(o.order_date)) as date + ,CONCAT(YEAR(o.update_time), '-', MONTH(o.update_time), '-', DAY(o.update_time)) as date @@ -53,10 +53,25 @@ group by date; + + + ,CONCAT(YEAR(o.create_time), '-', QUARTER(o.create_time)) as date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time)) as date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', FLOOR((DayOfMonth(o.create_time)-1)/7)+1) AS date + + + ,CONCAT(YEAR(o.create_time), '-', MONTH(o.create_time), '-', DAY(o.create_time)) as date + + +