From 86603f927e1129828abfd528bd8462c2f5141dca Mon Sep 17 00:00:00 2001 From: lym <1994302445@qq.com> Date: Thu, 14 Nov 2024 11:31:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=A7=E9=9D=A2=E9=80=A0=E5=9E=8B=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/order/OrderController.java | 1 + .../dataobject/ordermodel/OrderModelDO.java | 2 +- .../dal/mysql/orderItem/OrderItemMapper.java | 4 + .../service/order/OrderServiceImpl.java | 15 ++- .../deviseData/structure/PlateDetail.java | 2 +- .../admin/api/webcad/ApiDataAchieve.java | 14 ++ .../admin/api/webcad/ApiDataProduction.java | 4 + .../admin/api/webcad/ApiTypeRealize.java | 123 ++++++++++++++---- .../admin/api/webcad/ProduceApiConstants.java | 8 +- 9 files changed, 143 insertions(+), 30 deletions(-) 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 e3dcdb2c1..973992b2e 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 @@ -222,6 +222,7 @@ public class OrderController { JSONObject dataModule = apiDataAchieve.getApiGroupMessage(token, orderNo).get(); JSONObject block = apiDataAchieve.getApiBlocksMessage(token, orderNo).get(); Map listMap = apiTypeRealize.apiPlateDataChange( + token, order, dataPlates,//板件生产信息 dataParts,// 配件信息 diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java index 2de67235b..4d089972d 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/ordermodel/OrderModelDO.java @@ -79,7 +79,7 @@ public class OrderModelDO extends ESDocument { @Schema(description = "造型明细(凹槽)") private List contourDetail; @Schema(description = "造型明细(孤岛,现在是xml数据格式添加)") - private List isletsDetail ; //造型明细(孤岛) + private List sideDetail ; //造型明细(孤岛) sideDetail @Schema(description = "侧面孔明细列表") private List sideHoleDetail; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java index e27049f6a..cf569a13e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/mysql/orderItem/OrderItemMapper.java @@ -127,4 +127,8 @@ public interface OrderItemMapper extends BaseMapperX { IPage selectGoodsDetailByOrderId(@Param("page") IPage page, @Param("orderId") Long orderId, @Param("roomId") Set roomId, @Param("bodyId") Set bodyId, @Param("groupId") Set groupId, @Param("goodsId") Set goodsId, @Param("organId") Long organId, @Param("deleted") Integer deleted); + + List selectPartsNotId(@Param("orderId") Long orderId, @Param("roomId") Long roomId, + @Param("bodyId") Long bodyId, @Param("groupId") Long groupId, @Param("goodsId") Long goodsId, + @Param("organId") Long organId, @Param("deleted") Integer deleted); } \ 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/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 41bd8cf41..ec9bfe307 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 @@ -291,6 +291,14 @@ public class OrderServiceImpl implements OrderService { List partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyIds, getUserOrganId(), orderId); // 配件 if (!partsList.isEmpty()){ +// // 判断是否含有重复的配件 +// List partsNot = new ArrayList<>(); +// for (Long partsId : partsList) { +// Long partNot = orderItemMapper.selectPartsNotId(partsId, getUserOrganId(), orderId); +// if (!groupIds.isEmpty()) { +// orderGroupMapper.updateDeletedGroup(groupIds, getUserOrganId(), orderId); +// } +// } orderPartsMapper.updateDeletedParts(partsList, getUserOrganId(),orderId); } @@ -403,11 +411,11 @@ public class OrderServiceImpl implements OrderService { orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS, partsDOS); List orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class); - if (!orderModelDOs.isEmpty()) { + if (orderModelDOs != null && !orderModelDOs.isEmpty()) { orderModelDOs.forEach(orderModelDO -> orderModelDO.setOrderId(order.getId())); orderInputProcessor.batchSaveModel(orderModelDOs); } - if (!partsRemark.isEmpty()) { + if (partsRemark != null && !partsRemark.isEmpty()) { orderInputProcessor.batchSaveOrderPartsModel(partsRemark); } @@ -727,6 +735,9 @@ public class OrderServiceImpl implements OrderService { Map> map = new HashMap<>(); List plateGoodLists = new ArrayList<>(); + if (goodsLists == null) { + return Collections.emptyMap(); + } for (GoodsDO goodsDO : goodsLists) { PlateGoodDO plateGoodDO = null; List plateGoodDOS = null; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java index 4a0c762c8..5aef6e4e8 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/deviseData/structure/PlateDetail.java @@ -106,7 +106,7 @@ public class PlateDetail{ private List holeDetail ; //孔明细,表示板上的孔 private Map contourCount;//凹槽数量集合 (xml中特有----槽所在板面的对应数量) private List contourDetail ; //造型明细(xml中为凹槽,将孤岛的信息放入槽中) -// private List isletsDetail ; //造型明细(孤岛)不需要 + private List sideDetail ; //造型明细(侧面) private List sideHoleDetail;//侧面孔明细 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/ApiDataAchieve.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java index 5d70ac25c..6f8f5106c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataAchieve.java @@ -14,6 +14,7 @@ import javax.annotation.Resource; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; +import java.util.List; import java.util.concurrent.Future; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -42,6 +43,7 @@ public class ApiDataAchieve { private static final String ERR_CODE_KEY = "err_code"; private static final String PAGECOUNT_KEY = "PageCount"; private static final String VALUE_KEY = "value"; + private static final String GOODS_ID = "goods_id"; // 获得token数据 @@ -182,6 +184,18 @@ public class ApiDataAchieve { return new AsyncResult<>(block); } + // 商品列表信息转换 + @Async + public Future getApiGoodsMessage(String token, Long[] id) { + JSONObject jsonGoods = new JSONObject(); + jsonGoods.put(GOODS_ID, id); + JSONObject good = apiDataProduction.getApiGoods(token, jsonGoods); + if (!good.getString(ERR_CODE_KEY).equals("0")) { + log.error("配件数据获取错误" + id); + } + return new AsyncResult<>(good); + } + // 订单获取 public Future getApiOrder(String token, String shopId, String orderNo) { JSONObject jsonOrders = new JSONObject(); 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/ApiDataProduction.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataProduction.java index d65b13b83..c0204e81c 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataProduction.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ApiDataProduction.java @@ -45,4 +45,8 @@ public interface ApiDataProduction { // 订单列表 @RequestMapping(value = "/Api-erpOrders-orderList",method = RequestMethod.POST) JSONObject getApiOrderList(@RequestParam("token") String token, @RequestBody JSONObject json); + +// 商品列表 + @RequestMapping(value = "/Api-erpOrders-goodsData",method = RequestMethod.POST) + JSONObject getApiGoods(@RequestParam("token") String token, @RequestBody JSONObject json); } 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 d32d0a979..70ea4286b 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 @@ -46,6 +46,9 @@ public class ApiTypeRealize { @Resource private SnowflakeIdWorker3rd idWorker; + @Resource + private ApiDataAchieve apiDataAchieve; + private static final Integer X = 0; private static final Integer Y = 1; @@ -53,6 +56,11 @@ public class ApiTypeRealize { private static final Integer INDEX = 0; + private static String PART_WIDTH = "width"; + private static String PART_LENGTH = "length"; + private static String PART_THICKNESS = "thickness"; + private static String PART_COLOR = "color"; + private static String PART_MATERIAL = "material"; /** * @param dataPlates: 板件生产信息 造型数据 * @param dataParts: 配件信息 @@ -63,7 +71,8 @@ public class ApiTypeRealize { * @param dataBlocks: 大板信息 * @return Map> */ - public Map apiPlateDataChange(JSONObject order, + public Map apiPlateDataChange(String token, + JSONObject order, JSONObject dataPlates, JSONObject dataParts, JSONObject dataBody, @@ -99,7 +108,7 @@ public class ApiTypeRealize { // 配件 - Map partsDO = partsInfoChange(dataParts, orderId, goodsDOS, bodyInfoChange, organId); + Map partsDO = partsInfoChange(dataParts, orderId, goodsDOS, bodyInfoChange, organId, token); Map partsRemark = (Map) partsDO.get("remarks"); // 配件备注 map.put(FieldConstants.PARTS_REMARK, new ArrayList<>(partsRemark.values())); @@ -117,28 +126,45 @@ public class ApiTypeRealize { Map platesDO = platesInfoChange(dataPlates, plates, orderId, goodsDOS, bodyInfoChange, dataBlocks, organId); Map orderPlatesDO = (Map) platesDO.get("platesInfos"); - map.put(FieldConstants.PLATE, new ArrayList<>(orderPlatesDO.values())); + if (orderPlatesDO != null) { + map.put(FieldConstants.PLATE, new ArrayList<>(orderPlatesDO.values())); + } + Map plateDetail = (Map) platesDO.get("plateDetail"); - map.put(FieldConstants.PLATE_DETAIL, new ArrayList<>(plateDetail.values())); + if (plateDetail != null) { + map.put(FieldConstants.PLATE_DETAIL, new ArrayList<>(plateDetail.values())); + } + Map platesItems = (Map) platesDO.get("platesItems"); Map bodyItemsPlates = (Map) platesDO.get("bodyInfos"); platesItems = orderPartsChange(orderGroupDO, groupLists, platesItems);// item补充 - itemsList.addAll(platesItems.values()); + if (platesItems != null) { + itemsList.addAll(platesItems.values()); + } - List goodsDO = new ArrayList<>(goodsDOS.values()); // (List) - map.put(FieldConstants.GOODS, goodsDO); - List rawGoodsDO = new ArrayList<>(rawGoodsDOS.values()); - map.put(FieldConstants.RAW_GOODS, rawGoodsDO); + if (goodsDOS != null) { + List goodsDO = new ArrayList<>(goodsDOS.values()); // (List) + map.put(FieldConstants.GOODS, goodsDO); + } + + if (rawGoodsDOS != null) { + List rawGoodsDO = new ArrayList<>(rawGoodsDOS.values()); + map.put(FieldConstants.RAW_GOODS, rawGoodsDO); + } + map.put(FieldConstants.GROUP, new ArrayList<>(groupAddUnregularNum(itemsList, orderPlatesDO, orderGroupDO).values())); map.put(FieldConstants.ITEM, itemsList); - map.put(FieldConstants.BODY, new ArrayList<>(bodyItemsPlates.values())); + if (bodyItemsPlates != null) { + map.put(FieldConstants.BODY, new ArrayList<>(bodyItemsPlates.values())); + } + return map; } @@ -197,6 +223,10 @@ public class ApiTypeRealize { Map orderPlatesDO, Map orderGroupDO) { + if (itemsList == null || orderGroupDO == null || orderPlatesDO == null) { + return Collections.emptyMap(); + } + Map> groupPlate = itemsList.stream().collect(Collectors.groupingBy(OrderItemDO::getGroupId)); List orderItemDOList = orderPlatesDO.values().stream().toList(); Map plateDOMap = orderItemDOList.stream().collect(Collectors.toMap(PlateDO::getId, plate -> plate)); @@ -453,10 +483,44 @@ public class ApiTypeRealize { return list; } + /** + * 配件长宽厚信息转换 + */ + private Map getPartsSize(JSONObject size, JSONObject spec) { + Map map = new HashMap<>(); + if (size != null && !size.isEmpty()) { + map.put(PART_WIDTH, size.getInteger(ProduceApiConstants.PD_WIDTH)); + map.put(PART_LENGTH, size.getInteger(ProduceApiConstants.PD_LENGTH)); + map.put(PART_THICKNESS, size.getInteger(ProduceApiConstants.PD_THICKNESS)); + } + if (spec != null && !spec.isEmpty()) { + map.put(PART_COLOR, spec.getString(ProduceApiConstants.PD_PARTS_SPEC_COLOR)); + map.put(PART_MATERIAL, spec.getString(ProduceApiConstants.PD_PARTS_SPEC_MATERIAL)); + } + return map; + } + + /** + * goods_sn获取 + */ + private String getGoodsSn(Long goodId, String token) { + String goodsSn; + try { + JSONObject jsonGood = apiDataAchieve.getApiGoodsMessage(token, new Long[]{goodId}).get(); + System.out.println(jsonGood.getJSONArray(ProduceApiConstants.DATA)); + + goodsSn = jsonGood.getJSONArray(ProduceApiConstants.DATA).getJSONObject(0).getString(ProduceApiConstants.GD_GOODS_SN); + } catch (Exception e){ + return null; + } + + return goodsSn; + } + /** * 配件信息转存 * - * @param value: JSON数据 + * @param value: 配件数据 * @param orderId: * @param goodsDOMap: * @return Map Integer指配件的dataId标识id @@ -465,7 +529,8 @@ public class ApiTypeRealize { Long orderId, Map goodsDOMap, Map bodyInfos, - Long organId) { + Long organId, + String token) { if (value == null || value.isEmpty()) { return Collections.emptyMap(); @@ -481,16 +546,31 @@ public class ApiTypeRealize { for (int i = 0; i < partsLists.size(); i++) { JSONObject parts = partsLists.getJSONObject(i); Long partsId = (Long) identifierGenerator.nextId(null); + // 这边用的配件详情接口的数据,可能存在多种配件的goodsId相同 + // 配件长宽厚颜色赋值 + Map sizeMap = getPartsSize(parts.getJSONObject(ProduceApiConstants.PD_SIZE), parts.getJSONObject(ProduceApiConstants.PD_PARTS_SPEC_OB)); + // goods_id转换,需要调用接口 +// Long goodsId = goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null +// ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getId() : parts.getLong(ProduceApiConstants.PD_GOODS_ID); + Long goodsId = parts.getLong(ProduceApiConstants.PD_GOODS_ID); + String goodsSn = null; + if (goodsId != null) { + goodsSn = getGoodsSn(parts.getLong(ProduceApiConstants.PD_GOODS_ID), token); + } OrderPartsDO partsInfo = OrderPartsDO.builder() .id(partsId) .orderId(orderId) - .goodsId(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null - ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getId() : parts.getLong(ProduceApiConstants.PD_GOODS_ID))) + .goodsId(goodsSn) .name(parts.getString(ProduceApiConstants.PD_NAME)) - .material(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null - ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getMaterial() : "")) +// .material(String.valueOf(goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)) != null +// ? goodsDOMap.get(parts.getLong(ProduceApiConstants.PD_GOODS_ID)).getMaterial() : "")) + .material((String) sizeMap.get(PART_MATERIAL)) .type(parts.getString(ProduceApiConstants.PD_OBJECT_TYPE)) .model(parts.getString(ProduceApiConstants.PD_MODEL)) + .color((String) sizeMap.get(PART_COLOR)) + .width((Double) sizeMap.get(PART_WIDTH)) + .length((Double) sizeMap.get(PART_LENGTH)) + .thickness((Double) sizeMap.get(PART_THICKNESS)) .spec(parts.getString(ProduceApiConstants.PD_SPEC)) .brand(parts.getString(ProduceApiConstants.PD_BRAND)) .factory(parts.getString(ProduceApiConstants.PD_FACTORY)) @@ -812,7 +892,8 @@ public class ApiTypeRealize { .rawPointDetail(getPointDetail(block, false)) .holeDetail(getHoleDetail(block, true)) .sideHoleDetail(getHoleDetail(block, false)) - .contourDetail(getModelDetail(block)) + .contourDetail(getModelDetail(block.getJSONArray(ProduceApiConstants.BPD_MODEL))) + .sideDetail(getModelDetail(block.getJSONArray(ProduceApiConstants.BPD_SIDE_MODEL))) .build(); if (block.getJSONObject(ProduceApiConstants.BPD_EXTRA_REMARK) != null) { @@ -938,9 +1019,7 @@ public class ApiTypeRealize { } // 造型明细板数据解析 (type 为1,正面;3,侧面) - private List getModelDetail(JSONObject block) { - JSONArray models = block.getJSONArray(ProduceApiConstants.BPD_MODEL); - JSONArray sideModels = block.getJSONArray(ProduceApiConstants.BPD_SIDE_MODEL); // 侧面造型 + private List getModelDetail(JSONArray models) { List modelDetails = new ArrayList<>(); @@ -950,10 +1029,6 @@ public class ApiTypeRealize { modelDetails.addAll(modelData); } - List sideModelData = getModelData(sideModels); - if (sideModelData != null && !sideModelData.isEmpty()) { - modelDetails.addAll(sideModelData); - } } catch (Exception e) { // 处理异常,例如记录日志或抛出自定义异常 } 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/ProduceApiConstants.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java index 759f691ff..bb30b75dd 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/util/fileConversion/admin/api/webcad/ProduceApiConstants.java @@ -12,6 +12,9 @@ public class ProduceApiConstants { public static final String ZERO = "0"; public static final String ONE = "1"; + // ========== getApiOrderPartsMessage partsList 配件明细模块 ========== + public static final String GD_GOODS_SN = "goods_sn"; // 用户自定义配件编号 + // ========== getApiOrderPartsMessage partsList 配件明细模块 ========== public static final String PD_ROOM_ID = "RoomID"; // 房间标识 @@ -31,8 +34,9 @@ public class ProduceApiConstants { public static final String PD_GROUP_NAME = "GroupName"; // 五金分类 public static final String PD_OBJECT_TYPE = "ObjectType"; // 五金类型 public static final String PD_SPEC_EXTRAS = "SpecExtras"; // 五金额外规格 - public static final String PD_PARTS_SPEC = "PartsSpec"; // 配件属性 - public static final String PD_PARTS_SPEC_SPEC = "spec"; // 配件属性 -> 规格 + public static final String PD_PARTS_SPEC = "spec"; // 配件规格 + public static final String PD_PARTS_SPEC_OB = "PartsSpec"; // 配件属性 + public static final String PD_PARTS_SPEC_SPEC = "PartsSpec"; // 配件属性 -> 规格 public static final String PD_PARTS_SPEC_MATERIAL = "material"; // 配件属性 -> 材质 public static final String PD_PARTS_SPEC_COLOR = "color"; // 配件属性 -> 颜色 public static final String PD_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串)