新增配件管理、板材详情

This commit is contained in:
lym
2024-11-08 09:24:34 +08:00
parent e16583e3a8
commit 7c24a7453c
53 changed files with 2648 additions and 532 deletions
@@ -409,7 +409,7 @@ public class OrderController {
}
@PostMapping("/get-platesDetailsPage")
@Operation(summary = "生产单详情-板详细信息(分页)")
@Operation(summary = "生产单详情-板详细信息(分页)")
@PreAuthorize("@ss.hasPermission('production:manager-list:detail')")
public CommonResult<PageResult<OrderPlatesDetailReqVO>> platesDetails(@Valid @RequestBody OrderBodyPageRespVO orderBodyPageRespVO) {
if (orderBodyPageRespVO.getDeleted() == null) {
@@ -434,6 +434,20 @@ public class OrderController {
orderBodyPageRespVO.getPageNo(), orderBodyPageRespVO.getPageSize(), !orderBodyPageRespVO.getDeleted() ? 0 : 1));
}
@PostMapping("/get-goodsDetailsPage")
@Operation(summary = "生产单详情-板材详细信息(分页)")
@PreAuthorize("@ss.hasPermission('production:manager-list:detail')")
public CommonResult<PageResult<OrderGoodsDetailRespVO>> goodsDetails(@Valid @RequestBody OrderBodyPageRespVO orderBodyPageRespVO) {
if (orderBodyPageRespVO.getDeleted() == null) {
orderBodyPageRespVO.setDeleted(false);
}
return success(orderService.getGoodsDetail(orderBodyPageRespVO.getOrderId(),
orderBodyPageRespVO.getRoomIds(), orderBodyPageRespVO.getBodyIds(),
orderBodyPageRespVO.getGroupIds(), orderBodyPageRespVO.getGoodsId(),
orderBodyPageRespVO.getPageNo(), orderBodyPageRespVO.getPageSize(), !orderBodyPageRespVO.getDeleted() ? 0 : 1));
}
@DeleteMapping("/delete-body")
@Operation(summary = "删除柜体")
@PreAuthorize("@ss.hasPermission('production:manager-list:deleteCabinet')")
@@ -32,6 +32,9 @@ public class OrderBodyPageRespVO extends PageParam {
@Schema(description = "配件名称", example = "1024")
private String partsName;
@Schema(description = "板材id", example = "1024")
private Set<Long> goodsId;
@Schema(description = "是否删除", example = "false")
private Boolean deleted;
}
@@ -0,0 +1,59 @@
package com.cf.imes.module.executor.controller.admin.order.vo.order;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 生产单板材表 order_parts_{N} Response VO")
@Data
@ExcelIgnoreUnannotated
public class OrderGoodsDetailRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Long id;
@Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long orderId;
@Schema(description = "客户的商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private String goodsId;
@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
private String goodsName;
@Schema(description = "材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板", requiredMode = Schema.RequiredMode.REQUIRED)
private String material;
@Schema(description = "颜色", requiredMode = Schema.RequiredMode.REQUIRED)
private String color;
@Schema(description = "纹理", example = "true")
private Boolean texture;
@Schema(description = "宽度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double width;
@Schema(description = "高度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double height;
@Schema(description = "厚度", requiredMode = Schema.RequiredMode.REQUIRED)
private Double thickness;
@Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED)
private String brand;
@Schema(description = "规格", requiredMode = Schema.RequiredMode.REQUIRED)
private String spec;
@Schema(description = "小板片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer number;
@Schema(description = "小板总面积", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Double area;
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "随便")
private String remark;
private Long organId;
}
@@ -0,0 +1,38 @@
package com.cf.imes.module.executor.controller.admin.order.vo.order;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 板材生产单关系表
*/
@Schema(description = "管理后台 - 板材生产单关系表 order Response VO")
@Data
@ExcelIgnoreUnannotated
public class OrderGoodsRespVO {
@Schema(description = "生产单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20230414026120")
private Long orderId;
@Schema(description = "房间Id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long roomId;
@Schema(description = "柜体Id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long bodyId;
@Schema(description = "加工组Id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long groupId;
@Schema(description = "板材名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String goodsName;
@Schema(description = "板材id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long goodsId;
@Schema(description = "小板片数", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer totalPlates;
@Schema(description = "小班面积", requiredMode = Schema.RequiredMode.REQUIRED)
private Double totalArea;
}
@@ -21,7 +21,7 @@ public class OrderPlatesDetailReqVO {
@Schema(description = "板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
private String name;
@Schema(description = "自定义板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@Schema(description = "板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
private String plateNo;
@Schema(description = "材质", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@@ -23,7 +23,7 @@ public class OrderPartsRemark extends ESDocument {
@Schema(description = "备注")
private String remark;
@Schema(description = "五金额外规格")
@Schema(description = "额外规格")
private String specExtras;
@Schema(description = "门板组件铰链备注")
@@ -38,7 +38,7 @@ public class PlateDO extends BaseDO {
*/
private String name;
/**
* 自定义板编号,设计有板编号,则保留设计板编号;设计没有且在机台设置中设置了自定义板编号规则,则按规则自动生成
* 组织中唯一板编号
*/
private String plateNo;
/**
@@ -3,6 +3,8 @@ package com.cf.imes.module.executor.dal.mysql.orderItem;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsDetailRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsRespVO;
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlatesDetailRespVO;
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRespVO;
import com.cf.imes.module.executor.controller.admin.plate.vo.PlateDetailReqVO;
@@ -117,4 +119,12 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
void deletePackList(@Param("orderId") Long orderId,@Param("packIds") List<Long> packIds,@Param("organId") Long organId);
List<OrderGoodsRespVO> selectGoodsByOrderId(@Param("orderId") Long orderId,
@Param("organId") Long organId,
@Param("deleted") Integer deleted);
IPage<OrderGoodsDetailRespVO> selectGoodsDetailByOrderId(@Param("page") IPage page, @Param("orderId") Long orderId, @Param("roomId") Set<Long> roomId,
@Param("bodyId") Set<Long> bodyId, @Param("groupId") Set<Long> groupId, @Param("goodsId") Set<Long> goodsId,
@Param("organId") Long organId, @Param("deleted") Integer deleted);
}
@@ -105,10 +105,14 @@ public class OrderInputProcessor {
* @param itemDOS
*/
@Transactional(rollbackFor = Exception.class)
public void batchInsert(Collection<RawGoodsDO> rawGoodsDOS, Collection<OrderBodyDO> orderBodyDOS,
Collection<OrderGroupDO> orderGroupDOS, Collection<OrderPartsDO> orderPartsDOS,
Collection<PlateDO> plateDOS, Collection<OrderItemDO> itemDOS,
Collection<GoodsDO> goodsDOS, Collection<PlateGoodDO> plateGoodDOS) {
public void batchInsert(Collection<RawGoodsDO> rawGoodsDOS,
Collection<OrderBodyDO> orderBodyDOS,
Collection<OrderGroupDO> orderGroupDOS,
Collection<OrderPartsDO> orderPartsDOS,
Collection<PlateDO> plateDOS,
Collection<OrderItemDO> itemDOS,
Collection<GoodsDO> goodsDOS,
Collection<PlateGoodDO> plateGoodDOS) {
// if (rawGoodsDOS != null)
@@ -82,6 +82,15 @@ public interface OrderService {
*/
PageResult<OrderPartsRespVO> getPartsDetail(Long orderId, Set<Long> roomId , Set<Long> bodyId, Set<Long> groupId, String name, Integer pageNo, Integer pageSize, Integer deleted);
/**
* @param orderId: 生产单id
* @param roomId: 房间id
* @param bodyId: 柜体id
* @return List<OrderGoodsDetailRespVO>
* 需要修改返回值
*/
PageResult<OrderGoodsDetailRespVO> getGoodsDetail(Long orderId, Set<Long> roomId , Set<Long> bodyId, Set<Long> groupId, Set<Long> goodsId, Integer pageNo, Integer pageSize, Integer deleted);
/**
* 删除柜体/柜体还原
* @param orderId: 生产单id
@@ -95,8 +104,6 @@ public interface OrderService {
/**
* @param listMap:生产单号
* @return Boolean
* @author Administrator
* @date 2024/3/30
*/
Long importApiData(Map<String, Object> listMap);
@@ -49,6 +49,7 @@ import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper;
import com.cf.imes.module.executor.enums.OrderDeletedEnum;
import com.cf.imes.module.executor.enums.OrderStatusEnum;
import com.cf.imes.module.executor.service.plan.PlanService;
import com.cf.imes.module.executor.util.deviseData.structure.FieldConstants;
import com.cf.imes.module.executor.util.deviseData.structure.PlateDetail;
import com.cf.imes.module.executor.util.fileConversion.admin.SnowflakeIdWorker3rd;
import org.springframework.aop.framework.AopContext;
@@ -215,9 +216,13 @@ public class OrderServiceImpl implements OrderService {
// 配件
List<OrderPlatesDetailRespVO> orderItemDOS = orderItemMapper.selectPartsByOrderId(orderId, getUserOrganId(), deleted);
// 板材
List<OrderGoodsRespVO> orderGoodsRespVOS = orderItemMapper.selectGoodsByOrderId(orderId, getUserOrganId(), deleted);
Map<String, Object> map = new HashMap<>();
map.put("module", orderModuleRespVOList);
map.put("parts", orderItemDOS);
map.put("goods", orderGoodsRespVOS);
return map;
}
@@ -241,6 +246,15 @@ public class OrderServiceImpl implements OrderService {
return new PageResult(orderDetail.getRecords(), orderDetail.getTotal());
}
@Override
public PageResult<OrderGoodsDetailRespVO> getGoodsDetail(Long orderId, Set<Long> roomId, Set<Long> bodyId, Set<Long> groupId, Set<Long> goodsId, Integer pageNo, Integer pageSize, Integer deleted) {
PageDTO<OrderGoodsDetailRespVO> page = new PageDTO<>(pageNo, pageSize);
IPage<OrderGoodsDetailRespVO> goodsDetail = orderItemMapper.selectGoodsDetailByOrderId(page, orderId, roomId, bodyId, groupId, goodsId, getUserOrganId(), deleted);
return new PageResult(goodsDetail.getRecords(), goodsDetail.getTotal());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateDeleteBody(Long orderId, Set<Long> roomIds, Long bodyId, Integer status) { // 要删除传1,还原传0
@@ -369,7 +383,7 @@ public class OrderServiceImpl implements OrderService {
List<OrderBodyDO> bodyDO = (List<OrderBodyDO>) listMap.get("bodyDO");
List<OrderGroupDO> groupDO = (List<OrderGroupDO>) listMap.get("groupDO");
List<OrderPartsDO> partsDO = (List<OrderPartsDO>) listMap.get("partsDO");
List<PlateDO> plateDO = (List<PlateDO>) listMap.get("platesDO");
List<PlateDO> plateDO = (List<PlateDO>) listMap.get(FieldConstants.PLATE);
List<PlateDetail> plateDetail = (List<PlateDetail>) listMap.get("plateDetail");
List<OrderItemDO> itemDO = (List<OrderItemDO>) listMap.get("itemDO");
List<OrderPartsRemark> partsRemark = (List<OrderPartsRemark>) listMap.get("partsRemark");
@@ -0,0 +1,20 @@
package com.cf.imes.module.executor.util.deviseData.structure;
/**
* 数据格式转换对应的常量
*/
public class FieldConstants {
public static final String ORDER = "orderDO";
public static final String BODY = "bodyDO";
public static final String GROUP = "groupDO";
public static final String GOODS = "goodsDO";
public static final String RAW_GOODS = "rawGoodsDO";
public static final String PARTS = "partsDO";
public static final String PLATE = "plateDO";
public static final String ITEM = "itemDO";
public static final String PLATE_DETAIL = "plateDetail";
public static final String PARTS_REMARK = "partsRemark";
}
@@ -1,7 +1,6 @@
package com.cf.imes.module.executor.util.deviseData.structure;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -57,7 +56,7 @@ public class PlateDetail{
// 板材所属加工组
private String group;// 板件加工组Group的名称,可以有多个
// 加工组具体信息
private List<Group> groupList;
// private List<Group> groupList;
// 成品长宽、面积
private BigDecimal plateWidth;
@@ -83,11 +82,11 @@ public class PlateDetail{
private BigDecimal offsetY;
// 大板基本信息
private BoardInfo boardInfo;
// private BoardInfo boardInfo;
// 配件基本信息
private List<PartsInfo> partsInfos;
private List<PartsInfo> partsInfos; // xml中有,估计之后不需要
// 排钻类型
private List<DrillsInfo> drillsInfos;
private List<DrillsInfo> drillsInfos; // api中有
private Double throughHoleCount; // 挖孔的孔数
private Double throughModelCount; // 挖穿的造型数
@@ -103,11 +102,11 @@ public class PlateDetail{
private List<PointDetail> rawPointDetail ; //原始点明细(含封边)
private List<PointDetail> basePointDetail ; //坯料点明细
private Map<String,Integer> holeCount;//孔类型数量集合
private Map<String,Integer> holeCount;//孔类型数量集合 (xml中特有----孔类型,对应的数量)
private List<HoleDetail> holeDetail ; //孔明细,表示板上的孔
private Map<String,Integer> contourCount;//凹槽数量集合
private List<ModelDetail> contourDetail ; //造型明细(凹槽
private List<ModelDetail> isletsDetail ; //造型明细(孤岛)
private Map<String,Integer> contourCount;//凹槽数量集合 (xml中特有----槽所在板面的对应数量)
private List<ModelDetail> contourDetail ; //造型明细(xml中为凹槽,将孤岛的信息放入槽中
// private List<ModelDetail> isletsDetail ; //造型明细(孤岛)不需要
private List<HoleDetail> sideHoleDetail;//侧面孔明细
@@ -50,9 +50,10 @@ public class SnowflakeIdWorker3rd {
/** 测试 */
public static void main(String[] args) {
SnowflakeIdWorker3rd idWorker = new SnowflakeIdWorker3rd();
for (int i = 0; i < 1000; i++) {
long obtainingTime = idWorker.obtainingTime();
for (int i = 0; i < 10001; i++) {
long id = idWorker.nextId();
System.out.println(i + ": " + id + " " + "2406" + Long.toString(id).substring(2));
System.out.println(i + ": " + id + " " + obtainingTime + Long.toString(id).substring(2));
}
// long id = idWorker.nextId();
// System.out.println(id);
@@ -0,0 +1,282 @@
package com.cf.imes.module.executor.util.fileConversion.admin.api.webcad;
/**
* 原系统生产接口返回字段对应参数常量
*/
public class ProduceApiConstants {
public static final String VALUE = "value";
public static final String LIST = "List";
public static final String DATA = "data";
public static final String CODE = "err_code";
public static final String ZERO = "0";
public static final String ONE = "1";
// ========== getApiOrderPartsMessage partsList 配件明细模块 ==========
public static final String PD_ROOM_ID = "RoomID"; // 房间标识
public static final String PD_BOX_ID = "BoxID"; // 柜体标识
public static final String PD_NAME = "Name"; // 配件名称
public static final String PD_BRAND = "Brand"; // 配件品牌
public static final String PD_FACTORY = "Factory"; // 配件厂商
public static final String PD_ITEM_NO = "ItemNo"; // 配件编号
public static final String PD_DATA_ID = "DataID"; // 配件标识
public static final String PD_GOODS_ID = "GoodsID"; // 商品对应标识
public static final String PD_MODEL = "Model"; // 配件型号
public static final String PD_NUM = "Num"; // 配件数量
public static final String PD_SPEC = "Spec"; // 配件规格
public static final String PD_UNITS = "Units"; // 配件单位
public static final String PD_REMARK = "Remark"; // 配件备注
public static final String PD_IS_COMPOSITE = "IsComposite"; // 是否组件
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_MATERIAL = "material"; // 配件属性 -> 材质
public static final String PD_PARTS_SPEC_COLOR = "color"; // 配件属性 -> 颜色
public static final String PD_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串)
public static final String PD_PROCESS_GROUP = "ProcessGroup"; // 五金加工组
public static final String PD_DOOR_REMARK = "DoorRemark"; // 门板组件铰链备注
public static final String PD_HINGE_REMARK = "HingeRemark"; // 门板组件拉手备注
public static final String PD_ROOM_NAME = "RoomName"; // 房间名称
public static final String PD_BOX_NAME = "BoxName"; // 柜体名称
public static final String PD_ITEM_ID = "ItemID"; // 配件ID
public static final String PD_MODULE_TYPE_ID_LIST = "ModuleTypeIDList"; // 加工组类型ID
public static final String PD_MODULE_ID_LIST = "ModuleIDList"; // 加工组ID
public static final String PD_SIZE = "Size"; // 配件尺寸
public static final String PD_LENGTH = "Length"; // 配件长
public static final String PD_WIDTH = "Width"; // 配件宽
public static final String PD_THICKNESS = "Thickness"; // 配件厚
// ========== getApiOrderBodyMessage boxsList 柜体明细模块 ==========
public static final String B_BOX_ID = "BoxID"; // 柜体标识
public static final String B_ROOM_ID = "RoomID"; // 房间标识
public static final String B_ROOM_NAME = "Room"; // 房间名
public static final String B_NAME = "Name"; // 柜体名
public static final String B_WIDTH = "Width"; // 宽
public static final String B_HEIGHT = "Height"; // 高
public static final String B_DEPTH = "Depth"; // 深
// ========== getApiOrderGoodsMessage goodsList 商品数据信息模块 ==========
public static final String G_BRAND = "Brand"; // 商品品牌
public static final String G_COLOR = "Color"; // 商品颜色
public static final String G_DOOR_ID = "GoodsID"; // 商品标识
public static final String G_GOODS_SN = "GoodsSN"; // 商品编号
public static final String G_GOODS_NAME = "GoodsName"; // 商品名称
public static final String G_HEIGHT = "Height"; // 商品长度
public static final String G_MATERIAL = "Material"; // 商品材料
public static final String G_SPEC = "Spec"; // 商品规格
public static final String G_THICKNESS = "Thickness"; // 商品厚度
public static final String G_WIDTH = "Width"; // 商品宽度
public static final String G_EXTRA_PROP = "ExtraProp"; // 额外属性
public static final String G_HAS_WAVE = "HasWave"; // 有无纹路 1:有;0:无
// ========== getApiModuleTypeDataMessage getModuleTypeList 加工组关联板件、五金信息列表模块 ==========
public static final String M_MODULE_TYPE_ID = "ModuleTypeID"; // 加工组类型ID
public static final String M_MODULE_TYPE_NAME = "ModuleTypeName"; // 加工组名称
public static final String M_MODULE_ID = "ModuleID"; // 加工组ID
public static final String M_ROOM_ID = "RoomID"; // 房间ID
public static final String M_ROOM_NAME = "RoomName"; // 房间名称
public static final String M_BOX_ID = "BoxID"; // 柜体ID
public static final String M_BOX_NAME = "BoxName"; // 柜体名称
public static final String M_LENGTH = "Length"; // 加工组长
public static final String M_WIDTH = "Width"; // 加工组宽
public static final String M_THICKNESS = "Thickness"; // 加工组厚
public static final String M_ITEM_ID_LIST = "ItemIDList"; // 加工组关联的板ID
// ========== getApiBlocksDataMessage blocksList 板块明细模块 ==========
public static final String BD_BLOCK_NO = "BlockNo"; // 板材编号
public static final String BD_BOX_ID = "BoxID"; // 柜体标识
public static final String BD_GOODS_ID = "GoodsID"; // 商品标识
public static final String BD_OPEN_DOOR_TYPE = "OpenDoorType"; // 开门类型
public static final String BD_EXTRA_REMARK = "ExtraRemark"; // 扩展备注
public static final String BD_PROCESS_GROUP = "ProcessGroup"; // 加工组
public static final String BD_GROUP_TYPE = "GroupType"; // 类型(柜体,加工组)
public static final String BD_UN_REGULAR_POINT_COUNT = "UnRegularPointCount"; // 异形数
public static final String BD_BACK_HOLE_COUNT = "BackHoleCount"; // 反面孔数
public static final String BD_FRONT_MODEL_COUNT = "FrontModelCount"; // 正面造型数
public static final String BD_BACK_MODEL_COUNT = "BackModelCount"; // 反面造型数
public static final String BD_SIDE_HOLE_COUNT = "SideHoleCount"; // 侧面孔数
public static final String BD_FRONT_HOLE_COUNT = "FrontHoleCount"; // 正面孔数
public static final String BD_CUT_LENGTH = "CutLength"; // 开料长
public static final String BD_CUT_WIDTH = "CutWidth"; // 开料宽
public static final String BD_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串)
public static final String BD_EXTRA_HANDLE_REMARK = "ExtraHandleRemark"; // 拉手备注
public static final String BD_DRILLS_REMARK = "DrillsRemark"; // 排钻备注(Json字符串)
public static final String BD_INFO_REMARK = "InfoRemark"; //板其他备注(Json字符串)
public static final String BD_BOARD_NAME = "BoardName"; // 板名称
public static final String BD_SEALED_LEFT = "SealedLeft"; // 左封边
public static final String BD_SEALED_RIGHT = "SealedRight"; // 右封边
public static final String BD_SEALED_UP = "SealedUp"; // 上封边
public static final String BD_SEALED_DOWN = "SealedDown"; // 下封边
public static final String BD_IS_MODEL = "IsModel"; // 是否有造型
public static final String BD_IS_UN_REGULAR = "UnRegular"; // 是否异形
public static final String BD_IS_FRONT_HOLE = "FrontHole"; // 是否有正面孔
public static final String BD_IS_BACK_HOLE = "BackHole"; // 是否有反面孔
public static final String BD_IS_SIDE_HOLE = "SideHole"; // 是否有侧面孔
public static final String BD_IS_FRONT_MODEL = "FrontModel"; // 是否有正面造型
public static final String BD_IS_BACK_MODEL = "BackModel"; // 是否有反面造型
public static final String BD_BOARD_TYPE = "BoardType"; // 板类型 层板,立板,背板
public static final String BD_SPLIT_THICKNESS = "SpliteThickness"; // 拆单厚
public static final String BD_SPLIT_WIDTH = "SpliteWidth"; // 拆单宽
public static final String BD_SPLIT_HEIGHT = "SpliteHeight"; // 拆单长
public static final String BD_CUSTOMIZE_BLOCK_NO = "CustBlockNo"; // 自定义板号
public static final String BD_REMARK_JSON = "RemarkJson"; // 板件备注(Json字符串)
public static final String BD_IS_COPY = "IsCopy"; // 是否成倍拆单(false为原柜,true为成倍复制的柜子)
public static final String BD_MUL_NUM = "MultNum"; // 成倍拆单数量
public static final String BD_GROUP_NO = "GroupNo"; // 按柜(房名)名分组的柜体序号
public static final String BD_BOX_NO = "BoxNo"; // 成倍拆单柜体序号
public static final String BD_BOX_MUL_NUM = "BoxMultNum"; // 成倍拆单数量(总数、原柜和复制柜一致)
public static final String BD_ROOM_NAME = "RoomName"; // 房间名
public static final String BD_BOX_NAME = "BoxName"; // 柜体名
public static final String BD_ITEM_ID = "ItemID"; // 板ID
public static final String BD_MODULE_TYPE_ID_LIST = "ModuleTypeIDList"; // 加工组类型ID
public static final String BD_MODULE_ID_LIST = "ModuleIDList"; // 加工组ID
// ========== getApiBlocksMessage getBlocks 板件数据(概括)模块 ==========
public static final String BG_ORDER_NO = "OrderNo"; // 订单号
public static final String BG_ROOM_NAME = "RoomName"; // 房间名
public static final String BG_BOX_NAME = "BoxName"; // 柜体名
public static final String BG_BOX_ID = "BoxID"; // 柜体标识
public static final String BG_BLOCK_NO = "BlockNo"; // 板编号
public static final String BG_BOARD_NAME = "BoardName"; // 板名称
public static final String BG_GOODS_ID = "GoodsID"; // 商品标识
public static final String BG_MATERIAL = "Material"; // 材料名称
public static final String BG_COLOR = "Color"; // 颜色
public static final String BG_BRAND = "Brand"; // 品牌
public static final String BG_HEIGHT = "Height"; // 长
public static final String BG_WIDTH = "Width"; // 宽
public static final String BG_THICKNESS = "Thickness"; // 厚
public static final String BG_AREA = "Area"; // 面积
public static final String BG_WAVE = "Wave"; // 纹路(正纹 = 0, 可翻转 = 1, 反纹 = 2 )
public static final String BG_SEAL = "Seal"; // 封边信息(格式:左封边,右封边,上封边,下封边)
public static final String BG_IS_UN_REGULAR = "IsUnRegular"; // 是否异形
public static final String BG_IS_MODEL = "IsModel"; // 是否造型
public static final String BG_IS_HOLE = "IsHole"; // 是否有孔
public static final String BG_REMARK_JSON = "RemarkJson"; // 备注(Json格式)
public static final String BG_SPECIAL_REMARK = "SpecialRemark"; // 特殊备注(Json字符串)
// ========== getApiOrderList orderList 生产单列表模块 ==========
public static final String OL_ORDER_NO = "order_no"; // 订单编号
public static final String OL_CUSTOM_ORDER_NO = "custom_order_no"; // 自定义单号
public static final String OL_STORE_NAME = "store_name"; // 门店名称
public static final String OL_STORE_PHONE = "store_phone"; // 门店电话
public static final String OL_CUSTOMER_NAME = "cosignee_name"; // 客户名称
public static final String OL_CUSTOMER_PHONE = "cosignee_phone"; // 客户电话
public static final String OL_CUSTOMER_ADDRESS = "cosignee_address"; // 客户地址
public static final String OL_START_DATE = "start_date"; // 订单开始时间
public static final String OL_END_DATE = "end_date"; // 订单结束时间
public static final String OL_ORDER_STATUS = "submit_state"; // 平台状态
public static final String OL_COMMENTS = "comments"; // 备注
public static final String OL_NICK_NAME = "nick_name"; // 业务员昵称
public static final String OL_CD_NICK_NAME = "cd_nick_name"; // 拆单员昵称
// ========== getApiOrderMessage orderPlanData 生产数据模块 ==========
public static final String OPD_ORDER = "Orders";
public static final String BPD_ORDER_NO = "OrderNo"; // 订单号
public static final String BPD_CUSTOM_ORDER_NO = "CustomOrderNo"; // 自定义单号
public static final String BPD_MATERIALS = "Materials";
public static final String BPD_MATERIALS_NAME = "Name"; // 材质名称
public static final String BPD_MATERIALS_GOODS_ID = "GoodsID";
public static final String BPD_MATERIALS_COLOR = "Color";
public static final String BPD_MATERIALS_SPECIFICATION = "Specification"; // 板材规格——长宽
public static final String BPD_MATERIALS_ONE = "Material";
public static final String BPD_MATERIALS_THICKNESS = "Thickness"; // 板材厚度
public static final String BPD_MATERIALS_WIDTH = "Width";
public static final String BPD_MATERIALS_LENGTH = "Length";
public static final String BPD_MATERIALS_WAVE = "WaveFlag"; // 有无纹路
public static final String BPD_BLOCKS = "Blocks"; // 板编号
public static final String BPD_BLOCK_NO = "BlockNo"; // 板编号
public static final String BPD_ROOM_NAME = "RoomName"; // 房间名
public static final String BPD_BOX_NO = "BoxNo"; // 柜体号
public static final String BPD_BOX_NAME = "BoxName"; // 柜体名
public static final String BPD_BLOCK_ID = "BlockID"; // 板ID
public static final String BPD_CUSTOM_BLOCK_NO = "CustomNo"; // (自定义)板号
public static final String BPD_BLOCK_NAME = "BlockName"; // 板名称
public static final String BPD_OPEN_DOOR_TYPE = "OpenDoorType"; // 开门类型 0=非门板 1=左开门板 2=右开门板 3=上开门板 4=下开门板
public static final String BPD_EXTRA_REMARK = "ExtraRemark"; // 额外补充
public static final String BPD_DRILLS = "drills";
public static final String BPD_DRILL_NAME = "name";
public static final String BPD_DRILL_TYPE = "type";
public static final String BPD_DRILL_FACE = "face";
public static final String BPD_DRILL_COUNT = "count";
public static final String BPD_EXTRA = "extra";
public static final String BPD_EXTRA_BOARD_TYPE = "boardType"; // 板类型
public static final String BPD_EXTRA_THROUGH_HOLE_COUNT = "throughHoleCount"; // 挖穿的孔数
public static final String BPD_EXTRA_THROUGH_MODEL_COUNT = "throughModelCount"; // 挖穿的造型数
public static final String BPD_EXTRA_HAS_2D_MODEL = "has2DModel"; // 是否有二维刀路
public static final String BPD_EXTRA_HAS_3D_MODEL = "has3DModel"; //
public static final String BPD_PROCESS_GROUP_NAME = "ProcessGroupName"; // 加工组(名称)
public static final String BPD_WIDTH = "Width"; // 成品宽
public static final String BPD_LENGTH = "Length"; // 成品长
public static final String BPD_SIZE = "Size"; // 成品面积
public static final String BPD_CUTTING_WIDTH = "CuttingWidth"; // 开料宽
public static final String BPD_CUTTING_LENGTH = "CuttingLength"; // 开料长
public static final String BPD_CUTTING_SIZE = "CuttingSize"; // 开料面积
public static final String BPD_BORDER_LEFT = "BorderLeft"; // 左封边 用于矩形,异形板对接封边分在原始轮廓里定义
public static final String BPD_BORDER_RIGHT = "BorderRight"; // 右封边
public static final String BPD_BORDER_UPPER = "BorderUpper"; // 上封边
public static final String BPD_BORDER_UNDER = "BorderUnder"; // 下封边
public static final String BPD_WAVE = "Wave"; // 纹路 正纹 = 0,可翻转 = 1, 反纹 = 2
public static final String BPD_PLACE_FACE = "PlaceFace"; // 排版面 正面 = 0, 反面 = 1, 随意面 = 2
public static final String BPD_IS_UN_REGULAR = "IsUnRegular"; // 是否异形
public static final String BPD_OFFSET_X = "OffsetX"; // 开料轮廓,成品轮廓 偏移量X
public static final String BPD_OFFSET_Y = "OffsetY"; // 开料轮廓,成品轮廓 偏移量y
public static final String BPD_POINTS = "Points"; // 异形板的开料轮廓 (不含封边)
public static final String BPD_ORG_POINTS = "OrgPoints"; // 异形板的成品轮廓 (含封边)
public static final String BPD_POINTS_X = "X";
public static final String BPD_POINTS_Y = "Y";
public static final String BPD_POINTS_CURVE = "Curve";
public static final String BPD_POINTS_EDGE = "Edge";
public static final String BPD_HOLES = "Holes"; // 孔
public static final String BPD_SIDE_HOLES = "SideHoles"; // 侧孔 (基于成品轮廓 含封边)
public static final String BPD_HOLE_X = "X";
public static final String BPD_HOLE_Y = "Y";
public static final String BPD_HOLE_DEPTH = "Depth";
public static final String BPD_HOLE_DIAMETER = "Diameter";
public static final String BPD_HOLE_FACE = "Face";
public static final String BPD_HOLE_DIRECTION = "Direction";
public static final String BPD_HOLE_END_POINT = "EndPoint";
public static final String BPD_HOLE_START_POINT = "StartPoint";
public static final String BPD_MODEL = "Models"; // 造型
public static final String BPD_MODEL_DEPTH = "Depth";
public static final String BPD_MODEL_DIAMETER = "Diameter";
public static final String BPD_MODEL_FACE = "Face";
public static final String BPD_MODEL_TOOL_NO = "ToolNo";
public static final String BPD_MODEL_ORIGIN_MODELING = "OriginModeling"; // 造型 原始轮廓
public static final String BPD_MODEL_ORIGIN_MODELING_ADD_DEPTH = "AddDepth";
public static final String BPD_MODEL_ORIGIN_MODELING_ADD_LEN = "AddLen";
public static final String BPD_MODEL_ORIGIN_MODELING_ADD_WIDTH = "AddWidth";
public static final String BPD_MODEL_ORIGIN_MODELING_DIR = "Dir";
public static final String BPD_MODEL_ORIGIN_MODELING_KNIFE_RADIUS = "KnifeRadius";
public static final String BPD_MODEL_ORIGIN_MODELING_THICKNESS = "Thickness";
public static final String BPD_MODEL_ORIGIN_MODELING_OUTLINE = "Outline"; // 造型 原始轮廓 outline
public static final String BPD_MODEL_ORIGIN_MODELING_OUTLINE_CURVE = "Curve";
public static final String BPD_MODEL_ORIGIN_MODELING_OUTLINE_POS = "Pos";
public static final String BPD_MODEL_ORIGIN_MODELING_HOLES = "Holes"; // 造型 原始轮廓 holes
public static final String BPD_MODEL_ORIGIN_MODELING_HOLES_CURVE = "Curve";
public static final String BPD_MODEL_ORIGIN_MODELING_HOLES_POS = "Pos";
public static final String BPD_MODEL_POINTS = "Points"; // 造型 刀路点阵
public static final String BPD_MODEL_POINTS_CURVE = "Curve";
public static final String BPD_MODEL_POINTS_POS = "Pos";
public static final String BPD_MODEL_OFFSET_LIST = "OffsetList"; // 造型 偏移刀路
public static final String BPD_MODEL_OFFSET_LIST_ANGLE = "Angle";
public static final String BPD_MODEL_OFFSET_LIST_DEPTH = "Depth";
public static final String BPD_MODEL_OFFSET_LIST_DIRECTION = "Diameter";
public static final String BPD_MODEL_OFFSET_LIST_NAME = "Name";
public static final String BPD_MODEL_OFFSET_LIST_VALUE = "Value";
}
@@ -6,7 +6,6 @@ import lombok.NoArgsConstructor;
import javax.xml.bind.annotation.*;
import java.io.Serializable;
import java.util.List;
@Data
@AllArgsConstructor
@@ -56,6 +55,14 @@ public class GrooveXmlVO implements Serializable {
@XmlAttribute(name = "depthExtend")
private String depthExtend;
// 造型/凹槽(边缘)的刀路方向——内圈顺时针(最)外圈逆时针、内圈顺时针(最)外圈顺时针、内圈逆时针(最)外圈顺时针、内圈逆时针(最)外圈逆时针
@XmlAttribute(name = "direction")
private String direction;
// 加工模式/方式——由内向外、由外向内
@XmlAttribute(name = "mode")
private String mode;
// 圆角半径
@XmlAttribute(name = "round")
private String round;
@@ -92,6 +99,10 @@ public class GrooveXmlVO implements Serializable {
@XmlElement(name = "offsetLines")
private OffsetLineXmlVOS offsetLineXmlVOS;
// 原始造型(外)轮廓信息
@XmlElement(name = "Outline")
private OutlineXmlVO outlineXmlVO;
@XmlAttribute(name = "result")
private String result;
}
@@ -871,7 +871,7 @@ public class XMLUtil {
flag.set(false);
} else {
for (PointXmlVO pointXmlVO : pointXmlVOS.getPointXmlVOList()) {
checkPoint(pointXmlVO, flag);
checkPointRemoveZ(pointXmlVO, flag, "孤岛");
}
}
}
@@ -970,6 +970,8 @@ public class XMLUtil {
isEmptyAddAndPositiveNumber(grooveXmlVO::getWidthExtend, grooveXmlVO::setWidthExtend, "0", Double.class, "槽宽度延长", flag);
isEmptyAddAndPositiveNumber(grooveXmlVO::getLengthExtend, grooveXmlVO::setLengthExtend, "0", Double.class, "槽长度延长", flag);
isEmptyAddAndPositiveNumber(grooveXmlVO::getDepthExtend, grooveXmlVO::setDepthExtend, "0", Double.class, "槽深度延长", flag);
isEmptyAddAndPositiveNumber(grooveXmlVO::getDirection, grooveXmlVO::setDirection, "0", Double.class, "造型/凹槽(边缘)的刀路方向", flag);
isEmptyAddAndPositiveNumber(grooveXmlVO::getMode, grooveXmlVO::setMode, "0", Double.class, "加工模式/方式", flag);
isEmptyAddAndPositiveNumber(grooveXmlVO::getRound, grooveXmlVO::setRound, "0", Double.class, "圆角半径", flag);
if (grooveXmlVO.getType().trim().equals("路径槽") || grooveXmlVO.getType().trim().equals("折返路径槽")) {
@@ -981,12 +983,21 @@ public class XMLUtil {
isEmptyAddAndPositiveNumber(grooveXmlVO::getTangentAngle, grooveXmlVO::setTangentAngle, "0", Double.class, "角度(二维刀路V型刀提角/清角用)", flag);
isEmptyAddAndPositiveNumber(grooveXmlVO::getIsletCount, grooveXmlVO::setIsletCount, "0", Integer.class, "孤岛数量", flag);
if (grooveXmlVO.getOutlineXmlVO() == null || grooveXmlVO.getOutlineXmlVO().getPointXmlVOList() == null || grooveXmlVO.getOutlineXmlVO().getPointXmlVOList().size() < 1) {
grooveXmlVO.setResult("---< 原始造型(外)轮廓点阵列表不可为空 >---");
flag.set(false);
} else {
for (PointXmlVO pointXmlVO : grooveXmlVO.getOutlineXmlVO().getPointXmlVOList()) {
checkPoint(pointXmlVO, flag, "原始造型(外)轮廓");
}
}
if (grooveXmlVO.getPointXmlVOS() == null || grooveXmlVO.getPointXmlVOS().getPointXmlVOList() == null || grooveXmlVO.getPointXmlVOS().getPointXmlVOList().size() < 1) {
grooveXmlVO.setResult("---< 槽点坐标列表不可为空 >---");
flag.set(false);
} else {
for (PointXmlVO pointXmlVO : grooveXmlVO.getPointXmlVOS().getPointXmlVOList()) {
checkPoint(pointXmlVO, flag);
checkPoint(pointXmlVO, flag, "刀路点阵");
}
}
@@ -1007,8 +1018,8 @@ public class XMLUtil {
private void checkRawOutline(RawOutlineXmlVO rawOutlineXmlVO, AtomicBoolean flag) {
boolean index = isEmptyBackAndPositiveNumberAndBack(rawOutlineXmlVO::getCount, "小板坯料(精加工)轮廓点阵列表数量 "+ rawOutlineXmlVO.getCount(), rawOutlineXmlVO::setCount, Integer.class, flag);
isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetX, rawOutlineXmlVO::setReferenceOffsetX, Double.class, "小板坯料(精加工)轮廓参考点X坐标不可为空 " +rawOutlineXmlVO.getReferenceOffsetX() , flag);
isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetY, rawOutlineXmlVO::setReferenceOffsetY, Double.class, "小板坯料(精加工)轮廓参考点Y坐标不可为空 " +rawOutlineXmlVO.getReferenceOffsetY() , flag);
isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetX, rawOutlineXmlVO::setReferenceOffsetX, Double.class, "相对于成品轮廓,基准点的X坐标偏移量" +rawOutlineXmlVO.getReferenceOffsetX() , flag);
isEmptyBackAndNumber(rawOutlineXmlVO::getReferenceOffsetY, rawOutlineXmlVO::setReferenceOffsetY, Double.class, "相对于成品轮廓,基准点的Y坐标偏移量" +rawOutlineXmlVO.getReferenceOffsetY() , flag);
if (rawOutlineXmlVO.getPointXmlVOList() != null && !rawOutlineXmlVO.getPointXmlVOList().isEmpty()) {
@@ -1018,7 +1029,7 @@ public class XMLUtil {
flag.set(false);
} else {
for (PointXmlVO pointXmlVO : rawOutlineXmlVO.getPointXmlVOList()) {
checkPoint(pointXmlVO, flag);
checkPointRemoveZ(pointXmlVO, flag, "坯料轮廓信息");
}
}
}
@@ -1038,7 +1049,7 @@ public class XMLUtil {
flag.set(false);
} else {
for (PointXmlVO pointXmlVO : cuttingOutlineXmlVO.getPointXmlVOList()) {
checkPoint(pointXmlVO, flag);
checkPointRemoveZ(pointXmlVO, flag, "开料成型轮廓信息");
}
}
}
@@ -1056,6 +1067,7 @@ public class XMLUtil {
if (Integer.parseInt(outlineXmlVO.getCount()) != outlineXmlVO.getPointXmlVOList().size()) {
outlineXmlVO.setCount("---< 小板轮廓点阵数量与实际数量不一致 >---");
flag.set(false);
return;
}
@@ -1065,8 +1077,6 @@ public class XMLUtil {
isEmptyBackAndNumber(pointXmlVO::getCurvature, pointXmlVO::setCurvature, Double.class, "小板轮廓边圆弧凹凸度", flag);
isEmptyBackAndNumber(pointXmlVO::getRadius, pointXmlVO::setRadius, Double.class, "小板轮廓边圆弧半径", flag);
checkPoint(pointXmlVO, flag);
checkEdging(pointXmlVO, flag);
// if (!(StringUtils.isEmpty(pointXmlVO.getItemCode()) && StringUtils.isEmpty(pointXmlVO.getEdgingName()) &&
// StringUtils.isEmpty(pointXmlVO.getEdgingColor()) && StringUtils.isEmpty(pointXmlVO.getEdgingMaterial()) &&
@@ -1128,11 +1138,17 @@ public class XMLUtil {
// point 验证
private void checkPoint(PointXmlVO pointXmlVO, AtomicBoolean flag) {
isEmptyBackAndNumber(pointXmlVO::getPointX, pointXmlVO::setPointX, Double.class, pointXmlVO.getPointX(), flag);
isEmptyBackAndNumber(pointXmlVO::getPointY, pointXmlVO::setPointY, Double.class, pointXmlVO.getPointY(), flag);
isEmptyBackAndNumber(pointXmlVO::getCurvature, pointXmlVO::setCurvature, Double.class, pointXmlVO.getCurvature(), flag);
isEmptyBackAndNumber(pointXmlVO::getRadius, pointXmlVO::setRadius, Double.class, pointXmlVO.getRadius(), flag);
private void checkPointRemoveZ(PointXmlVO pointXmlVO, AtomicBoolean flag, String name) {
isEmptyBackAndNumber(pointXmlVO::getPointX, pointXmlVO::setPointX, Double.class, name + "起点X坐标", flag);
isEmptyBackAndNumber(pointXmlVO::getPointY, pointXmlVO::setPointY, Double.class, name + "起点Y坐标", flag);
isEmptyBackAndNumber(pointXmlVO::getCurvature, pointXmlVO::setCurvature, Double.class, name + "起点圆弧凹凸度", flag);
isEmptyBackAndNumber(pointXmlVO::getRadius, pointXmlVO::setRadius, Double.class, name + "起点圆弧半径", flag);
}
private void checkPoint(PointXmlVO pointXmlVO, AtomicBoolean flag, String name) {
checkPointRemoveZ(pointXmlVO, flag, name);
isEmptyBackAndNumber(pointXmlVO::getPointZ, pointXmlVO::setPointZ, Double.class, name + "起点Z坐标", flag);
}
}
@@ -26,6 +26,8 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -199,6 +201,22 @@ public class XmlTypeRealize {
return groupInfos;
}
private void isEmptyAndAdd(Supplier<String> getName, Consumer<String> setName, Supplier<String> getCode, Consumer<String> setCode) {
String name = getName.get();
String code = getCode.get();
if (StringUtils.isEmpty(name) && StringUtils.isEmpty(code)) {
setName.accept(NOT_ASSIGNED);
setCode.accept(NOT_ASSIGNED_CODE);
}
if (StringUtils.isEmpty(code) && !StringUtils.isEmpty(name)){
setCode.accept(NOT_ASSIGNED_CODE + " + " + name);
}
if (!StringUtils.isEmpty(code) && StringUtils.isEmpty(name)){
setName.accept(NOT_ASSIGNED + " + " + code);
}
}
// 板材信息转换
public Map<String, Object> goodsInfoChange(OrderXmlVO orderXmlVO, Long orderId, Long organId) {
Map<String, Object> map = new HashMap<>();
@@ -219,166 +237,112 @@ public class XmlTypeRealize {
Map<String, OrderGroupDO> groupInfos = groupInfoChange(orderXmlVO.getGroupXmlVOS(), orderId, organId); // groupInfos 这个在跟着一起变
Map<String, Object> itemInfos = new HashMap<>();
// Map<String, Object> partsInfos = new HashMap<>();
Map<String, Object> orderPartsRemarks = new HashMap<>();
Map<String, Object> partsDOInfos = new HashMap<>();
if (orderXmlVO.getMaterialXmlVO() != null) {
MaterialXmlVO materialXmlVO = orderXmlVO.getMaterialXmlVO();
if (materialXmlVO.getAccessoryXmlVO() != null && materialXmlVO.getAssemblieXmlVOS() != null && materialXmlVO.getPlateXmlVOS() != null) {
if (orderXmlVO.getMaterialXmlVO() == null) {
return map;
}
MaterialXmlVO materialXmlVO = orderXmlVO.getMaterialXmlVO();
Map<String, List<EdgingXmlVO>> edgingMap;
Map<String, List<HardwareXmlVO>> hardwareMap;
Map<String, List<AssemblyXmlVO>> assemblyMap;
// 配件
if (materialXmlVO.getAccessoryXmlVO() != null ) {
AccessoryXmlVO accessoryXmlVO = materialXmlVO.getAccessoryXmlVO();
if (accessoryXmlVO.getEdgingXmlVOS() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList() != null && !accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList().isEmpty()) {
List<EdgingXmlVO> edgingList = accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList();
edgingList.forEach(edgingXmlVO -> {
isEmptyAndAdd(edgingXmlVO::getRoomName, edgingXmlVO::setRoomName, edgingXmlVO::getRoomCode, edgingXmlVO::setRoomCode);
isEmptyAndAdd(edgingXmlVO::getBoxName, edgingXmlVO::setBoxName, edgingXmlVO::getBoxCode, edgingXmlVO::setBoxCode);
});
// 以itemCode为条件进行分组,成map
edgingMap = edgingList.stream().collect(Collectors.groupingBy(EdgingXmlVO::getItemCode));
// 遍历map
edgingMap.forEach((key, value) -> {
if (key == null) { // 没有itemCode
Map<String, List<EdgingXmlVO>> edgingMapWithNull = value.stream().collect(Collectors.groupingBy(edgingXmlVO ->
edgingXmlVO.getManufacturer() + edgingXmlVO.getBrand() + edgingXmlVO.getName() + edgingXmlVO.getMaterial() +
edgingXmlVO.getSpecs() + edgingXmlVO.getColor() + edgingXmlVO.getWidth() + edgingXmlVO.getThickness()));
edgingMap.putAll(edgingMapWithNull);
}
});
} else {
edgingMap = null;
}
if (accessoryXmlVO.getHardwareXmlVOS() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList() != null && !accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList().isEmpty()) {
List<HardwareXmlVO> hardwareXmlVOS = accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList();
hardwareXmlVOS.forEach(hardwareXmlVO -> {
isEmptyAndAdd(hardwareXmlVO::getRoomName, hardwareXmlVO::setRoomName, hardwareXmlVO::getRoomCode, hardwareXmlVO::setRoomCode);
isEmptyAndAdd(hardwareXmlVO::getBoxName, hardwareXmlVO::setBoxName, hardwareXmlVO::getBoxCode, hardwareXmlVO::setBoxCode);
});
// 以itemCode为条件进行分组,成map
hardwareMap = hardwareXmlVOS.stream().collect(Collectors.groupingBy(HardwareXmlVO::getItemCode));
// 遍历map
hardwareMap.forEach((key, value) -> {
if (key == null) { //没有itemCode
Map<String, List<HardwareXmlVO>> hardwareMapWithNull = value.stream().collect(Collectors.groupingBy(hardwareXmlVO ->
hardwareXmlVO.getManufacturer() + hardwareXmlVO.getBrand() + hardwareXmlVO.getName() + hardwareXmlVO.getMaterial() +
hardwareXmlVO.getSpecs() + hardwareXmlVO.getColor() + hardwareXmlVO.getType()));
hardwareMap.putAll(hardwareMapWithNull);
}
});
} else {
hardwareMap = null;
}
} else {
hardwareMap = null;
edgingMap = null;
}
if (materialXmlVO.getAssemblieXmlVOS() != null) {
AssemblieXmlVOS assemblieXmlVOS = materialXmlVO.getAssemblieXmlVOS();
if (assemblieXmlVOS.getAssemblyXmlVOList() != null && !assemblieXmlVOS.getAssemblyXmlVOList().isEmpty()) {
List<AssemblyXmlVO> assemblyList = assemblieXmlVOS.getAssemblyXmlVOList();
assemblyList.forEach(assemblyXmlVO -> {
isEmptyAndAdd(assemblyXmlVO::getRoomName, assemblyXmlVO::setRoomName, assemblyXmlVO::getRoomCode, assemblyXmlVO::setRoomCode);
isEmptyAndAdd(assemblyXmlVO::getBoxName, assemblyXmlVO::setBoxName, assemblyXmlVO::getBoxCode, assemblyXmlVO::setBoxCode);
});
assemblyMap = assemblieXmlVOS.getAssemblyXmlVOList().stream().collect(Collectors.groupingBy(AssemblyXmlVO::getItemCode));
assemblyMap.forEach((key, value) -> {
if (key == null) { // 没有itemCode
Map<String, List<AssemblyXmlVO>> assemblyMapWithNull = value.stream().collect(Collectors.groupingBy(assemblyXmlVO ->
assemblyXmlVO.getManufacturer() + assemblyXmlVO.getBrand() + assemblyXmlVO.getName() + assemblyXmlVO.getMaterial() +
assemblyXmlVO.getSpecs() + assemblyXmlVO.getColor() + assemblyXmlVO.getType()));
assemblyMap.putAll(assemblyMapWithNull);
}
});
} else {
assemblyMap = null;
}
} else {
assemblyMap = null;
}
Map<String, Map<String, Object>> partInfoAll = goodsInfoChange(organId, orderId, edgingMap, hardwareMap, assemblyMap, roomInfos, groupInfos);
itemInfos.putAll(partInfoAll.get("orderItemMap"));
orderPartsRemarks.putAll(partInfoAll.get("orderPartsRemarks"));
partsDOInfos.putAll(partInfoAll.get("orderPartsDOMap"));
if (materialXmlVO.getPlateXmlVOS() != null) {
PlateXmlVOS plateXmlVOS = materialXmlVO.getPlateXmlVOS();
AssemblieXmlVOS assemblieXmlVOS = materialXmlVO.getAssemblieXmlVOS();
AccessoryXmlVO accessoryXmlVO = materialXmlVO.getAccessoryXmlVO();
// 配件
Map<String, List<EdgingXmlVO>> edgingMap;
Map<String, List<HardwareXmlVO>> hardwareMap;
Map<String, List<AssemblyXmlVO>> assemblyMap;
if (accessoryXmlVO.getEdgingXmlVOS() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList() != null && accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList().size() > 0) {
List<EdgingXmlVO> edgingList = accessoryXmlVO.getEdgingXmlVOS().getEdgingXmlVOList();
edgingList.forEach(edgingXmlVO -> {
if (edgingXmlVO.getRoomName() == null && edgingXmlVO.getRoomCode() == null) {
edgingXmlVO.setRoomName(NOT_ASSIGNED);
edgingXmlVO.setRoomCode(NOT_ASSIGNED_CODE);
}
if (edgingXmlVO.getRoomCode() == null && edgingXmlVO.getRoomName() != null){
edgingXmlVO.setRoomCode(NOT_ASSIGNED_CODE + " + " + edgingXmlVO.getRoomName());
}
if (edgingXmlVO.getRoomCode() != null && edgingXmlVO.getRoomName() == null){
edgingXmlVO.setRoomName(NOT_ASSIGNED + " + " + edgingXmlVO.getRoomCode());
}
if (edgingXmlVO.getBoxName() == null && edgingXmlVO.getBoxCode() == null) {
edgingXmlVO.setBoxName(NOT_ASSIGNED);
edgingXmlVO.setBoxCode(NOT_ASSIGNED_CODE);
}
if (edgingXmlVO.getBoxCode() == null && edgingXmlVO.getBoxName() != null){
edgingXmlVO.setBoxCode(NOT_ASSIGNED_CODE + " + " + edgingXmlVO.getBoxName());
}
if (edgingXmlVO.getBoxCode() != null && edgingXmlVO.getBoxName() == null){
edgingXmlVO.setBoxName(NOT_ASSIGNED + " + " + edgingXmlVO.getBoxCode());
}
// if (edgingXmlVO.getGroupCode() == null && edgingXmlVO.getGroupName() != null){
// edgingXmlVO.setGroupCode(NOT_ASSIGNED_CODE + " + " + edgingXmlVO.getGroupName());
// }
// if (edgingXmlVO.getGroupCode() != null && edgingXmlVO.getGroupName() == null){
// edgingXmlVO.setGroupName(NOT_ASSIGNED + " + " + edgingXmlVO.getGroupCode());
// }
});
// 以itemCode为条件进行分组,成map
edgingMap = edgingList.stream().collect(Collectors.groupingBy(EdgingXmlVO::getItemCode));
// 遍历map
edgingMap.forEach((key, value) -> {
if (key == null) { // 没有itemCode
Map<String, List<EdgingXmlVO>> edgingMapWithNull = value.stream().collect(Collectors.groupingBy(edgingXmlVO ->
edgingXmlVO.getManufacturer() + edgingXmlVO.getBrand() + edgingXmlVO.getName() + edgingXmlVO.getMaterial() +
edgingXmlVO.getSpecs() + edgingXmlVO.getColor() + edgingXmlVO.getWidth() + edgingXmlVO.getThickness()));
edgingMap.putAll(edgingMapWithNull);
}
});
} else {
edgingMap = null;
}
if (accessoryXmlVO.getHardwareXmlVOS() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList() != null && accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList().size() > 0) {
List<HardwareXmlVO> hardwareXmlVOS = accessoryXmlVO.getHardwareXmlVOS().getHardwareXmlVOList();
hardwareXmlVOS.forEach(hardwareXmlVO -> {
if (hardwareXmlVO.getRoomName() == null && hardwareXmlVO.getRoomCode() == null) {
hardwareXmlVO.setRoomName(NOT_ASSIGNED);
hardwareXmlVO.setRoomCode(NOT_ASSIGNED_CODE);
}
if (hardwareXmlVO.getRoomCode() == null && hardwareXmlVO.getRoomName() != null){
hardwareXmlVO.setRoomCode(NOT_ASSIGNED_CODE + " + " + hardwareXmlVO.getRoomName());
}
if (hardwareXmlVO.getRoomCode() != null && hardwareXmlVO.getRoomName() == null){
hardwareXmlVO.setRoomName(NOT_ASSIGNED + " + " + hardwareXmlVO.getRoomCode());
}
if (hardwareXmlVO.getBoxName() == null && hardwareXmlVO.getBoxCode() == null) {
hardwareXmlVO.setBoxName(NOT_ASSIGNED);
hardwareXmlVO.setBoxCode(NOT_ASSIGNED_CODE);
}
if (hardwareXmlVO.getBoxCode() == null && hardwareXmlVO.getBoxName() != null){
hardwareXmlVO.setBoxCode(NOT_ASSIGNED_CODE + " + " + hardwareXmlVO.getBoxName());
}
if (hardwareXmlVO.getBoxCode() != null && hardwareXmlVO.getBoxName() == null){
hardwareXmlVO.setBoxName(NOT_ASSIGNED + " + " + hardwareXmlVO.getBoxCode());
}
// if (hardwareXmlVO.getGroupCode() == null && hardwareXmlVO.getGroupName() != null){
// hardwareXmlVO.setGroupCode(NOT_ASSIGNED_CODE + " + " + hardwareXmlVO.getGroupName());
// }
// if (hardwareXmlVO.getGroupCode() != null && hardwareXmlVO.getGroupName() == null){
// hardwareXmlVO.setGroupName(NOT_ASSIGNED + " + " + hardwareXmlVO.getGroupCode());
// }
});
// 以itemCode为条件进行分组,成map
hardwareMap = hardwareXmlVOS.stream().collect(Collectors.groupingBy(HardwareXmlVO::getItemCode));
// 遍历map
hardwareMap.forEach((key, value) -> {
if (key == null) { //没有itemCode
Map<String, List<HardwareXmlVO>> hardwareMapWithNull = value.stream().collect(Collectors.groupingBy(hardwareXmlVO ->
hardwareXmlVO.getManufacturer() + hardwareXmlVO.getBrand() + hardwareXmlVO.getName() + hardwareXmlVO.getMaterial() +
hardwareXmlVO.getSpecs() + hardwareXmlVO.getColor() + hardwareXmlVO.getType()));
hardwareMap.putAll(hardwareMapWithNull);
}
});
} else {
hardwareMap = null;
}
if (assemblieXmlVOS.getAssemblyXmlVOList() != null && assemblieXmlVOS.getAssemblyXmlVOList().size() > 0) {
List<AssemblyXmlVO> assemblyList = assemblieXmlVOS.getAssemblyXmlVOList();
assemblyList.forEach(assemblyXmlVO -> {
if (assemblyXmlVO.getRoomName() == null && assemblyXmlVO.getRoomCode() == null) {
assemblyXmlVO.setRoomName(NOT_ASSIGNED);
assemblyXmlVO.setRoomCode(NOT_ASSIGNED_CODE);
}
if (assemblyXmlVO.getRoomCode() == null && assemblyXmlVO.getRoomName() != null){
assemblyXmlVO.setRoomCode(NOT_ASSIGNED_CODE + " + " + assemblyXmlVO.getRoomName());
}
if (assemblyXmlVO.getRoomCode() != null && assemblyXmlVO.getRoomName() == null){
assemblyXmlVO.setRoomName(NOT_ASSIGNED + " + " + assemblyXmlVO.getRoomCode());
}
if (assemblyXmlVO.getBoxName() == null && assemblyXmlVO.getBoxCode() == null) {
assemblyXmlVO.setBoxName(NOT_ASSIGNED);
assemblyXmlVO.setBoxCode(NOT_ASSIGNED_CODE);
}
if (assemblyXmlVO.getBoxCode() == null && assemblyXmlVO.getBoxName() != null){
assemblyXmlVO.setBoxCode(NOT_ASSIGNED_CODE + " + " + assemblyXmlVO.getBoxName());
}
if (assemblyXmlVO.getBoxCode() != null && assemblyXmlVO.getBoxName() == null){
assemblyXmlVO.setBoxName(NOT_ASSIGNED + " + " + assemblyXmlVO.getBoxCode());
}
// if (assemblyXmlVO.getGroupCode() == null && assemblyXmlVO.getGroupName() != null){
// assemblyXmlVO.setGroupCode(NOT_ASSIGNED_CODE + " + " + assemblyXmlVO.getGroupName());
// }
// if (assemblyXmlVO.getGroupCode() != null && assemblyXmlVO.getGroupName() == null){
// assemblyXmlVO.setGroupName(NOT_ASSIGNED + " + " + assemblyXmlVO.getGroupCode());
// }
});
assemblyMap = assemblieXmlVOS.getAssemblyXmlVOList().stream().collect(Collectors.groupingBy(AssemblyXmlVO::getItemCode));
assemblyMap.forEach((key, value) -> {
if (key == null) { // 没有itemCode
Map<String, List<AssemblyXmlVO>> assemblyMapWithNull = value.stream().collect(Collectors.groupingBy(assemblyXmlVO ->
assemblyXmlVO.getManufacturer() + assemblyXmlVO.getBrand() + assemblyXmlVO.getName() + assemblyXmlVO.getMaterial() +
assemblyXmlVO.getSpecs() + assemblyXmlVO.getColor() + assemblyXmlVO.getType()));
assemblyMap.putAll(assemblyMapWithNull);
}
});
} else {
assemblyMap = null;
}
Map<String, Map<String, Object>> partInfoAll = goodsInfoChange(organId, orderId, edgingMap, hardwareMap, assemblyMap, roomInfos, groupInfos);
// Map<String, Map<String, Object>> partAllInfo = goodsInfoChange(accessoryXmlVO, assemblieXmlVOS, orderId, organId, roomInfos, groupInfos);
itemInfos.putAll(partInfoAll.get("orderItemMap"));
// partsInfos.putAll(partInfoAll.get("orderPartsMap"));
orderPartsRemarks.putAll(partInfoAll.get("orderPartsRemarks"));
partsDOInfos.putAll(partInfoAll.get("orderPartsDOMap"));
// 板材
if (plateXmlVOS.getPlateXmlVOList() != null && plateXmlVOS.getPlateXmlVOList().size() > 0) {
if (plateXmlVOS.getPlateXmlVOList() != null && !plateXmlVOS.getPlateXmlVOList().isEmpty()) {
for (PlateXmlVO plateXmlVO : plateXmlVOS.getPlateXmlVOList()) {
if (StringUtils.equals(plateXmlVO.getGrained().trim(), "")) {
plateXmlVO.setGrained("false");
@@ -424,14 +388,14 @@ public class XmlTypeRealize {
goodsDOs.add(goodsDO);
// 小板信息
// plateDetail = plateInfoChange(plateXmlVO.getBlockXmlVOS(), orderId, goodsDO.getId(), organId, roomInfos, groupInfos, partsInfos, itemInfos, plateDOs, boxBasePositions, roomBasePositions);
plateInfoChange(plateDetail, organId, orderId, goodsId, plateXmlVO.getBlockXmlVOS(), plateDOs, itemInfos, partsDOInfos, roomInfos, groupInfos, boxBasePositions, roomBasePositions);
// plateDetail.add(plateInfoChange(organId, orderId, goodsId, plateXmlVO.getBlockXmlVOS(), plateDOs, itemInfos, partsDOInfos, roomInfos, groupInfos, boxBasePositions, roomBasePositions));
}
}
}
}
// 取map中的值
List<Object> orderBodyDOList = roomInfos.values().stream()
@@ -453,8 +417,7 @@ public class XmlTypeRealize {
map.put("orderItemDOS", itemDOList);
map.put("plateDetail", plateDetail);
map.put("orderPartsRemarks", partRemarks);
// System.out.println(" orderBodyDOS " + orderBodyDOList);
// System.out.println(" orderPartsDOS " + partDOList);
return map;
}
@@ -584,7 +547,7 @@ public class XmlTypeRealize {
for (EdgingXmlVO edgingVO : value) {
partsNum = partsNum + Double.parseDouble(edgingVO.getCount());
if (edgingVO.getRemarkXmlVOS() != null && edgingVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && edgingVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) {
if (edgingVO.getRemarkXmlVOS() != null && edgingVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && !edgingVO.getRemarkXmlVOS().getRemarkXmlVOList().isEmpty()) {
finalRemarkXmlVOS.addAll(edgingVO.getRemarkXmlVOS().getRemarkXmlVOList());
}
}
@@ -601,7 +564,7 @@ public class XmlTypeRealize {
.build());
});
if (finalRemarkXmlVOS.size() > 0) {
if (!finalRemarkXmlVOS.isEmpty()) {
orderPartsRemarks.put(key, OrderPartsRemark.builder()
.partsId(partsId)
.orderId(orderId)
@@ -653,7 +616,7 @@ public class XmlTypeRealize {
for (HardwareXmlVO hardwareVO : value) {
partsNum = partsNum + Double.parseDouble(hardwareVO.getCount());
if (hardwareVO.getRemarkXmlVOS() != null && hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) {
if (hardwareVO.getRemarkXmlVOS() != null && hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && !hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList().isEmpty()) {
finalRemarkXmlVOS.addAll(hardwareVO.getRemarkXmlVOS().getRemarkXmlVOList());
}
}
@@ -670,7 +633,7 @@ public class XmlTypeRealize {
.build());
});
if (finalRemarkXmlVOS.size() > 0) {
if (!finalRemarkXmlVOS.isEmpty()) {
orderPartsRemarks.put(key, OrderPartsRemark.builder()
.partsId(partsId)
.orderId(orderId)
@@ -722,7 +685,7 @@ public class XmlTypeRealize {
for (AssemblyXmlVO assemblyVO : value) {
partsNum = partsNum + Double.parseDouble(assemblyVO.getCount());
if (assemblyVO.getRemarkXmlVOS() != null && assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList().size() > 0) {
if (assemblyVO.getRemarkXmlVOS() != null && assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList() != null && !assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList().isEmpty()) {
finalRemarkXmlVOS.addAll(assemblyVO.getRemarkXmlVOS().getRemarkXmlVOList());
}
}
@@ -739,7 +702,7 @@ public class XmlTypeRealize {
.build());
});
if (finalRemarkXmlVOS.size() > 0) {
if (!finalRemarkXmlVOS.isEmpty()) {
orderPartsRemarks.put(key, OrderPartsRemark.builder()
.partsId(partsId)
.orderId(orderId)
@@ -761,9 +724,12 @@ public class XmlTypeRealize {
List<Object> plateDOs, Map<String, Object> orderItemMap, Map<String, Object> partsDO,
Map<String, Map<String, OrderBodyDO>> roomInfos, Map<String, OrderGroupDO> groupInfos,
Map<String, Map<String, BasePosition>> boxBasePositionMap, Map<String, BasePosition> roomBasePositions) {
// List<Object> plateDetails = new ArrayList<>();
if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() != null && blockXmlVOS.getBlockXmlVOList().size() > 0) {
if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() == null || blockXmlVOS.getBlockXmlVOList().isEmpty()) {
}
if (blockXmlVOS != null && blockXmlVOS.getBlockXmlVOList() != null && !blockXmlVOS.getBlockXmlVOList().isEmpty()) {
for (BlockXmlVO blockXmlVO : blockXmlVOS.getBlockXmlVOList()) {
long plateNo = idWorker.nextId();
@@ -800,9 +766,9 @@ public class XmlTypeRealize {
.moduleName(blockXmlVO.getModuleName())
.moduleCode(blockXmlVO.getModuleCode())
.build();
// Map<String, Long> idMap = getId(blockXmlVO.getRoomCode(), blockXmlVO.getBoxCode(), roomInfos, blockXmlVO.getGroupCode(), groupInfos, plateNum, unregularNum, orderId, organId);
Map<String, Long> idMap = getId(positionVO, roomInfos, groupInfos, plateNum, unregularNum, orderId, organId);
// 出错 null
// 柜体基点坐标
BasePosition boxBasePoint = null;
if (boxBasePositionMap.get(blockXmlVO.getRoomCode()) != null){
@@ -87,6 +87,9 @@ spring:
bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
elasticsearch:
uris: 192.168.1.205:9200
security-http-ssl-enable: false
username: elastic
password: admin.
--- #################### 定时任务相关配置 ####################
xxl:
@@ -186,6 +186,97 @@
</update>
<select id="selectGoodsByOrderId"
resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsRespVO">
SELECT
i.order_id,
i.room_id,
i.body_id,
p.goods_id,
g.goods_name,
COUNT(DISTINCT p.id) AS totalPlates,
SUM(p.area) AS totalArea
FROM
order_item i
RIGHT JOIN
order_plate p ON i.organ_id = p.organ_id AND i.order_id = p.order_id AND i.plate_id = p.id
RIGHT JOIN
order_goods g ON i.organ_id = g.organ_id AND i.order_id = g.order_id AND p.goods_id = g.id
WHERE
i.order_id = #{orderId} AND i.organ_id = #{organId} AND p.deleted = #{deleted}
GROUP BY
i.room_id, i.body_id, p.goods_id, g.goods_name
</select>
<select id="selectGoodsDetailByOrderId" resultType="com.cf.imes.module.executor.controller.admin.order.vo.order.OrderGoodsDetailRespVO">
SELECT
g.id,
g.order_id,
g.brand,
g.goods_id,
g.goods_name,
g.material,
g.texture,
g.color,
g.color_black,
g.width,
g.height,
g.thickness,
g.remark,
g.spec,
sub.order_id,
sub.totalPlates AS number,
sub.totalArea AS area,
sub.room_id,
sub.body_id,
sub.group_id
FROM (
SELECT
i.room_id,
i.body_id,
i.group_id,
i.organ_id,
i.order_id,
p.goods_id,
COUNT(p.id) AS totalPlates,
SUM(p.area) AS totalArea
FROM
order_item i
RIGHT JOIN
order_plate p ON i.organ_id = p.organ_id AND i.order_id = p.order_id AND i.plate_id = p.id
WHERE
i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted}
<if test="roomId != null and roomId.size() > 0">
AND i.room_id IN
<foreach item="roomIdItem" collection="roomId" open="(" separator="," close=")">
#{roomIdItem}
</foreach>
</if>
<if test="bodyId != null and bodyId.size() > 0">
AND i.body_id IN
<foreach item="bodyIdItem" collection="bodyId" open="(" separator="," close=")">
#{bodyIdItem}
</foreach>
</if>
<if test="groupId != null and groupId.size() > 0">
AND i.group_id IN
<foreach item="groupIdItem" collection="groupId" open="(" separator="," close=")">
#{groupIdItem}
</foreach>
</if>
<if test="goodsId != null and goodsId.size() > 0">
AND p.goods_id IN
<foreach item="goodIdItem" collection="goodsId" open="(" separator="," close=")">
#{goodIdItem}
</foreach>
</if>
GROUP BY
i.room_id, i.body_id, i.group_id, p.goods_id, i.organ_id, i.order_id
) sub
LEFT JOIN
order_goods g ON sub.organ_id = g.organ_id AND sub.order_id = g.order_id AND sub.goods_id = g.id
</select>
</mapper>