This commit is contained in:
yangsb
2024-04-30 14:46:09 +08:00
10 changed files with 198 additions and 153 deletions
@@ -50,8 +50,9 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_BODY_NOT_EXISTS = new ErrorCode(1_002_029_004, "此生产单中柜体并不存在不存在");
ErrorCode RAW_GOODS_NOT_EXISTS = new ErrorCode(1_002_029_005, "生产单中未用到此板材");
ErrorCode ORDER_STATUS_ERROR = new ErrorCode(1_002_029_006, "生产单不允许删除");
ErrorCode APP_TOKEN_ERROR = new ErrorCode(1_002_029_006, "token获取失败");
ErrorCode PLATE_DATA_ERROR = new ErrorCode(1_002_029_006, "板材数据获取错误");
ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_006, "配件数据获取错误");
ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_006, "柜体数据获取错误");
ErrorCode APP_TOKEN_ERROR = new ErrorCode(1_002_029_007, "token获取失败");
ErrorCode PLATE_DATA_ERROR = new ErrorCode(1_002_029_008, "板材数据获取错误");
ErrorCode PARTS_DATA_ERROR = new ErrorCode(1_002_029_009, "配件数据获取错误");
ErrorCode BODY_DATA_ERROR = new ErrorCode(1_002_029_010, "柜体数据获取错误");
ErrorCode GOODS_DATA_ERROR = new ErrorCode(1_002_029_011, "商品信息获取错误");
}
@@ -50,7 +50,7 @@ public class OrderDO extends OrganBaseDO {
*/
private Integer orderSort;
/**
* CAD数据类型,1CAD 2WebCAD 3Excel
* 数据类型,1文件导入 2API 3数据源
*/
private Integer dataType;
/**
@@ -162,6 +162,14 @@ public class PlateDO extends BaseDO {
* 模块类型 ID
*/
private Long moduleTypeId;
/**
* 是否异性
*/
private Boolean isSpecialShaped;
/**
* 是否造型
*/
private Boolean isSculpt;
/**
* 排单过滤类型,1 有挖穿造型 2 有挖穿孔 4 有二维刀路 8 可叠
*/
@@ -21,4 +21,7 @@ public interface ApiOrderService {
@RequestMapping(value = "/Api-erpOrders-boxsList",method = RequestMethod.POST)
JSONObject getApiOrderBodyMessage(@RequestParam("token") String token, @RequestBody JSONObject json);
@RequestMapping(value = "/Api-erpOrders-goodsList",method = RequestMethod.POST)
JSONObject getApiOrderGoodsMessage(@RequestParam("token") String token, @RequestBody JSONObject json);
}
@@ -429,8 +429,26 @@ public class OrderServiceImpl implements OrderService {
JSONObject value = apiOrderService.getApiOrderPartsMessage(token, jsonBody).getJSONObject("value");
mergeJSONObjects(dataBody, value);
}
// 商品信息转换
JSONObject jsonGoods = new JSONObject();
jsonGoods.put("curr_page", 1);
jsonGoods.put("page_count", PARTS_PAGE_MAX);
jsonGoods.put("order_no", orderNo);
JSONObject goods = apiOrderService.getApiOrderGoodsMessage(token, jsonGoods);
if (!goods.getString("err_code").equals("0")) {
throw exception(GOODS_DATA_ERROR);
}
JSONObject dataGoods = new JSONObject();
for (int i = 1; i <= dataGoods.getJSONObject("value").getInteger("PageCount"); i++) {
jsonParts.put("curr_page", i);
JSONObject value = apiOrderService.getApiOrderGoodsMessage(token, jsonGoods).getJSONObject("value");
mergeJSONObjects(dataGoods, value);
}
// 转换
List<PlateDetail> plateDetails = (List<PlateDetail>) apiTypeChangeRealize.apiPlateDataChange(dataPlates.getJSONObject("value"),dataParts,dataBody);
List<PlateDetail> plateDetails = (List<PlateDetail>) apiTypeChangeRealize.apiPlateDataChange(dataPlates.getJSONObject("value"),dataParts,dataBody,dataGoods);
// order_raw_goods List<BoardInfo>
// List<RawGoodsDO> boardInfos = BeanUtils.toBean(apiTypeChangeRealize.goodsInfoChange(dataGoods), RawGoodsDO.class);
System.out.println(plateDetails);
return null;
}
@@ -16,7 +16,7 @@ public class BoardInfo {
// 商品信息
private String goodsName; //商品名称
private String goodsNo; // 商品编号
private String goodsNo; // 商品编号 商品信息中的GoodsID
private Long goodId; // 商品id
private String material; //材质
@@ -28,10 +28,13 @@ public class BoardInfo {
private String unit; //商品单位
private String spec; //商品规格
private Double height;
private Double width;
private Double Length;
private Double length;
private Double thickness;//规格-板厚 板厚,成品和开料都是一样的
private Boolean isTexture; // 有无纹路
private Double price;
}
@@ -3,15 +3,25 @@ package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
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.orderModuleExtra.OrderModuleExtraDO;
import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO;
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
import com.cf.imes.module.executor.dal.dataobject.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.system.api.dict.DictDataApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -31,93 +41,13 @@ public class ApiTypeChangeRealize {
@Resource
private IdentifierGenerator identifierGenerator;
public <T> List<?> apiPlateDataChange(JSONObject dataPlates, JSONObject dataParts, JSONObject dataBody) {
@Resource
private DictDataApi dictDataApi;
// 配件数据分类
List<PartsInfo> partsInfos = partsInfoChange(dataParts);
Map<String, List<PartsInfo>> partsMap = partsInfos.stream()
.collect(Collectors.groupingBy(
partsInfo -> partsInfo.getBodyNo() != null ? partsInfo.getBodyNo() : " ",
Collectors.toList()
));
// 柜体信息
List<BodyInfo> bodyInfos = bodyInfoChange(dataBody);
Map<String, List<BodyInfo>> bodyMap = bodyInfos.stream()
.collect(Collectors.groupingBy(
bodyInfo -> bodyInfo.getBodyNo() != null ? bodyInfo.getBodyNo() : " ",
Collectors.toList()
));
// 放入板材
List<PlateDetail> plateDetails = platesInfoChange(dataPlates);
for (PlateDetail plateDetail : plateDetails) {
if (partsMap.get(plateDetail.getBodyNo()) != null) {
plateDetail.setPartsInfos(partsMap.get(plateDetail.getBodyNo()));
}
if (bodyMap.get(plateDetail.getBodyNo()) != null) {
BodyInfo bodyInfo = bodyMap.get(plateDetail.getBodyNo()).get(0);
plateDetail.setRoomsName(bodyInfo.getRoomsName()).setRoomNo(bodyInfo.getRoomNo())
.setBodyName(bodyInfo.getBodyName()).setBodyNo(bodyInfo.getBodyNo())
.setWidth(bodyInfo.getWidth()).setHeight(bodyInfo.getHeight()).setDepth(bodyInfo.getDepth());
}
}
// 生产单信息获取
OrderDO orderDO = orderInfoChange(dataPlates);
Long orderId = orderDO.getId();// 生产单id
public Map<Long, List<?>> apiPlateDataChange(JSONObject dataPlates, JSONObject dataParts, JSONObject dataBody, JSONObject dataGoods) {
return plateDetails;
}
private List<BodyInfo> bodyInfoChange(JSONObject dataBody) {
List<BodyInfo> bodyInfos = new ArrayList<>();
dataBody.getJSONArray("List").forEach(item -> {
JSONObject body = (JSONObject) item;
BodyInfo bodyInfo = BodyInfo.builder()
.roomsName(body.getString("Room"))
.roomNo(body.getString("RoomID"))
.bodyName(body.getString("Name"))
.bodyNo(body.getString("BoxID"))
.width(body.getDouble("Width"))
.height(body.getDouble("Height"))
.depth(body.getDouble("Depth"))
.build();
bodyInfos.add(bodyInfo);
});
return bodyInfos;
}
// 生产单信息获取
public OrderDO orderInfoChange(JSONObject dataPlates) {
List<PlateDetail> plateDetails = new ArrayList<>();
// 获取 Orders 字段对应的数组
JSONObject order = dataPlates.getJSONObject("Orders");
// 如果 Orders 数组不为空,则获取第一个订单对象
if (order != null && !order.isEmpty()) {
// 获取生产单信息
// 使用 DateTimeFormatter 解析日期字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate deliveryDate = LocalDate.parse(order.getString("DeliveryDate"), formatter);
OrderDO orderDO = OrderDO.builder()
.id(identifierGenerator.nextId(null).longValue())
.parentNo(0L)
.orderType(true)
.orderSort(0)
.dataType(1)
.status(0)
.customOrderNo(order.getString("OrderNo"))
.customer(order.getString("Consigee"))
.address(order.getString("ConsigeeAddress"))
.phoneNumber(order.getString("ConsigeePhone"))
.dealer(order.getString("CustomName"))
.salesman(order.getString("SalePerson"))
.remark(order.getString("Remark"))
.deliveryDate(deliveryDate.atStartOfDay())
.build();
return orderDO;
}
return null;
Map<Long, List<?>> map = new HashMap<>();
return map;
}
// 板材数据转换
@@ -127,30 +57,106 @@ public class ApiTypeChangeRealize {
JSONArray ordersArray = dataPlates.getJSONArray("Orders");
// 如果 Orders 数组不为空,则获取第一个订单对象
Map<OrderDO, Map<String, List<?>>> goodsMap = new HashMap<>();
if (ordersArray != null && !ordersArray.isEmpty()) {
// 获取生产单信息
List<RawGoodsDO> rawGoodsDOS = new ArrayList<>();
for (int i = 0; i < ordersArray.size(); i++) {
// Map<String,List<?>> orderMap = new HashMap<>();
JSONObject order = ordersArray.getJSONObject(i);
// 生产单信息
Long orderId = (Long) identifierGenerator.nextId(null);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate orderDate = LocalDate.parse(order.getString("SaleDate"), formatter);
LocalDate deliveryDate = LocalDate.parse(order.getString("DeliveryDate"), formatter);
OrderDO orderDO = OrderDO.builder()
.id(orderId)
.orderDate(orderDate.atStartOfDay())
.dataType(2)
.customOrderNo(order.getString("CustomOrderNo"))
.deliveryDate(deliveryDate.atStartOfDay())
.dealer(order.getString("CustomName"))
.salesman(order.getString("salesman"))
.customer(order.getString("Consigee"))
.phoneNumber(order.getString("ConsigeePhone"))
.address(order.getString("ConsigeeAddress"))
.remark(order.getString("Remark"))
.build();
// 获取材料信息
if (order.getJSONArray("Materials") != null && !order.getJSONArray("Materials").isEmpty()) {
List<GoodsDO> goodsDOS = new ArrayList<>();
for (int j = 0; j < order.getJSONArray("Materials").size(); j++) {
JSONObject material = order.getJSONArray("Materials").getJSONObject(j);
// rawGoodsDOS.add(RawGoodsDO.builder()
// .id(identifierGenerator.nextId(null).longValue())
// .orderId(organId)
// .goodsName(material.getString("MaterialName"))
// .material(material.getString("MaterialName"))
// .color(material.getString("Color"))
// .brand(material.getString("Brand"))
// .price(material.getDouble("Price"))
// .spec(material.getString("Spec"))
// .unit(material.getString("Unit"))
// .build());
Long goodsId = (Long) identifierGenerator.nextId(null);
GoodsDO goodsDO = GoodsDO.builder()
.id(goodsId)
.orderId(orderId)
.goodsId(Long.valueOf(material.getString("GoodsID")))
.goodsName(material.getString("Name"))
.material(material.getString("Material"))
.color(material.getString("Color"))
.width(BigDecimal.valueOf(material.getDouble("Width")))
.height(BigDecimal.valueOf(material.getDouble("Length")))
.thickness(BigDecimal.valueOf(material.getDouble("Thickness")))
.brand(material.getString("Brand"))
.spec(material.getString("Specification"))
.build();
goodsDOS.add(goodsDO);
// 板件信息
if (material.getJSONArray("Blocks") != null && !material.getJSONArray("Blocks").isEmpty()) {
List<PlateDO> orderPartsDOS = new ArrayList<>();
for (int k = 0; k < material.getJSONArray("Blocks").size(); k++) {
JSONObject block = material.getJSONArray("Blocks").getJSONObject(k);// 每块板
Long plateId = (Long) identifierGenerator.nextId(null);
// 字典转换板类型
Integer type = Integer.valueOf(dictDataApi.parseDictData("order_plate_type",
block.getJSONObject("ExtraRemark").getJSONObject("extra").getString("boardType"))
.getData().getValue());
PlateDO orderPartsDO = PlateDO.builder()
.id(plateId)
.goodsId(String.valueOf(goodsId))
.orderId(orderId)
.name(block.getString("BlockName"))
.plateNo(block.getString("CustomNo"))
.type(type)
.width(BigDecimal.valueOf(block.getDouble("Width")))
.height(BigDecimal.valueOf(block.getDouble("Length")))
.thickness(BigDecimal.valueOf(0))
.splitWidth(BigDecimal.valueOf(block.getDouble("CuttingWidth")))
.splitHeight(BigDecimal.valueOf(block.getDouble("CuttingLength")))
.splitThickness(BigDecimal.valueOf(0))
.sealLeft(BigDecimal.valueOf(block.getDouble("BorderLeft")))
.sealRight(BigDecimal.valueOf(block.getDouble("BorderRight")))
.sealUp(BigDecimal.valueOf(block.getDouble("BorderUpper")))
.sealDown(BigDecimal.valueOf(block.getDouble("BorderUnder")))
.area(BigDecimal.valueOf(block.getDouble("Size")))
.texture(0)
.holeFace(0)
.holeArrange(0)
.unregularPointCount(0)
.frontHoleCount(0)
.frontModelCount(0)
.backHoleCount(0)
.sideHoleCount(0)
.backModelCount(0)
.isDoor(block.getInteger("OpenDoorType") == 0 ? false : true)
.openDoorType(block.getInteger("OpenDoorType"))
.offsetX(block.getDouble("OffsetX"))
.offsetY(block.getDouble("OffsetY"))
.isArcAcross(false)
.moduleTypeId(0L)
.isSpecialShaped(false)
.isCancel(false)
.filterType(0)
.remark(remarkToMap(block).toString())
.isCancel(false)
.build();
PlateDetail plateDetail = PlateDetail.builder()
.bodyNo(block.getString("BoxNo"))
@@ -161,7 +167,7 @@ public class ApiTypeChangeRealize {
.bodyName(block.getString("BoxName"))
.group(block.getString("ProcessGroupName"))
.multiNum(1)
.groupList(getProcessGroup(block))
// .groupList(getProcessGroup(block))
.plateWidth(Double.valueOf(block.getString("Width")))
.plateLength(Double.valueOf(block.getString("Length")))
.acreage(Double.valueOf(block.getString("Size")))
@@ -198,6 +204,7 @@ public class ApiTypeChangeRealize {
System.out.println("plateDetail " + plateDetail);
}
}
}
}
@@ -211,50 +218,32 @@ public class ApiTypeChangeRealize {
return plateDetails;
}
// 配件信息转换
public List<PartsInfo> partsInfoChange(JSONObject value) {
List<PartsInfo> partsInfos = new ArrayList<>();
// 柜体信息转换
private List<OrderBodyDO> bodyInfoChange(JSONObject dataBody) {
List<OrderBodyDO> bodyInfos = new ArrayList<>();
if (value != null && !value.isEmpty()) {
JSONArray partsLists = value.getJSONArray("List");
for (int i = 0; i < partsLists.size(); i++) {
JSONObject parts = partsLists.getJSONObject(i);
PartsInfo partsInfo = PartsInfo.builder()
.id(parts.getString("DataID"))
.name(parts.getString("Name"))
.roomName(parts.getString("RoomName"))
.bodyName(parts.getString("BoxName"))
.bodyNo(parts.getString("BoxID"))
.multiNum(Integer.valueOf(parts.getString("MultiNum")))
.goodsNo(parts.getString("GoodsNo"))
.goodId(Long.valueOf(parts.getString("GoodsID")))
.material(parts.getString("material"))
.color(parts.getString("color"))
.factory(parts.getString("Factory"))
.brand(parts.getString("Brand"))
.model(parts.getString("Model"))
.unit(parts.getString("Units"))
.price(parts.getDouble("Price"))
.isComposite(Boolean.valueOf(parts.getString("IsComposite")))
.groupName(parts.getString("GroupName"))
.objectType(parts.getString("ObjectType"))
.objectSpecExtras(parts.getString("SpecExtras"))
.goodsNumber(Double.valueOf(parts.getString("GoodsNumber")))
.doorRemark(parts.getString("DoorRemark"))
.hingeRemark(parts.getString("HingeRemark"))
.specialRemark(parts.getString("SpecialRemark"))
.remark(parts.getString("Remark"))
.processGroup(parts.getString("ProcessGroup"))
.build();
}
}
System.out.println(" partsInfos " + partsInfos);
return partsInfos;
dataBody.getJSONArray("List").forEach(item -> {
JSONObject body = (JSONObject) item;
OrderBodyDO bodyInfo = OrderBodyDO.builder()
.id(Long.valueOf(body.getString("BoxID")))// 差一个BoxID,没有对应的
.roomId(Long.valueOf(body.getString("RoomID")))
.roomName(body.getString("Room"))
.name(body.getString("Name"))
.width(body.getDouble("Width"))
.height(body.getDouble("Height"))
.depth(body.getDouble("Depth"))
.build();
bodyInfos.add(bodyInfo);
});
return bodyInfos;
}
// 加工组信息筛选
private List<Group> getProcessGroup(JSONObject block) {
List<Group> groupList = new ArrayList<>();
private List<OrderGroupDO> getProcessGroup(JSONObject block) {
List<OrderGroupDO> groupList = new ArrayList<>();
if (block.getJSONObject("ExtraRemark") != null && !block.getJSONObject("ExtraRemark").isEmpty()) {
JSONObject extraRemark = block.getJSONObject("ExtraRemark");
if (extraRemark.getJSONObject("extra") != null && !extraRemark.getJSONObject("extra").isEmpty()) {
@@ -262,7 +251,8 @@ public class ApiTypeChangeRealize {
if (extra.getJSONArray("processList") != null && !extra.getJSONArray("processList").isEmpty()) {
for (int i = 0; i < extra.getJSONArray("processList").size(); i++) {
JSONObject process = extra.getJSONArray("processList").getJSONObject(i);
Group group = Group.builder()
OrderGroupDO group = OrderGroupDO.builder()
// .id
.name(process.getString("name"))
.width(Double.valueOf(process.getJSONObject("size").getString("width")))
.height(Double.valueOf(process.getJSONObject("size").getString("height")))
@@ -276,7 +266,7 @@ public class ApiTypeChangeRealize {
}
}
return null;
return groupList;
}
// 异形板的开料轮廓 (type 为1,不含封边;其他为,含封边)