mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
api配件新增、excel导入检查修改
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
|||||||
|
package com.cf.imes.module.executor.enums;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配件主类的枚举值
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum CategoryEnum {
|
||||||
|
|
||||||
|
ASSEMBLY("组件"),
|
||||||
|
HARDWARE("五金"),
|
||||||
|
EDGING("封边条");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类别名称
|
||||||
|
*/
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
}
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
package com.cf.imes.module.executor.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum IsHavaeEnum {
|
||||||
|
|
||||||
|
HAVE_ITEM(0, "有"),
|
||||||
|
BI_ITEM(1, "无");
|
||||||
|
|
||||||
|
|
||||||
|
private final Integer status;
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(Integer status) {
|
||||||
|
return this.status .equals(status) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(IsHavaeEnum quarrelEnum) {
|
||||||
|
return quarrelEnum != null && quarrelEnum.status .equals(this.getStatus()) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
package com.cf.imes.module.executor.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum QuarrelEnum {
|
||||||
|
PLATE_ITEM(0, "是"),
|
||||||
|
OTHER_ITEM(1, "否");
|
||||||
|
|
||||||
|
private final Integer status;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public boolean equals(Integer status) {
|
||||||
|
return this.status .equals(status) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean equals(QuarrelEnum quarrelEnum) {
|
||||||
|
return quarrelEnum != null && quarrelEnum.status .equals(this.getStatus()) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
@@ -8,6 +8,7 @@ import com.cf.imes.framework.common.pojo.PageResult;
|
|||||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
|
import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
|
||||||
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
|
||||||
|
import com.cf.imes.framework.redis.util.RedisLockUtil;
|
||||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.*;
|
import com.cf.imes.module.executor.controller.admin.order.vo.order.*;
|
||||||
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO;
|
import com.cf.imes.module.executor.controller.admin.order.vo.product.OrderBodyRespVO;
|
||||||
@@ -94,6 +95,10 @@ public class OrderController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private XmlTypeRealize xmlTypeRealize;
|
private XmlTypeRealize xmlTypeRealize;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisLockUtil redisLockUtil;
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新生产单")
|
@Operation(summary = "更新生产单")
|
||||||
@PreAuthorize("@ss.hasPermission('production:manager-list:edit')")
|
@PreAuthorize("@ss.hasPermission('production:manager-list:edit')")
|
||||||
@@ -195,6 +200,7 @@ public class OrderController {
|
|||||||
@PreAuthorize("@ss.hasPermission('production:manager-list:create')")
|
@PreAuthorize("@ss.hasPermission('production:manager-list:create')")
|
||||||
public CommonResult<String> getApiData(@RequestParam(value = "orderNo") String orderNo){
|
public CommonResult<String> getApiData(@RequestParam(value = "orderNo") String orderNo){
|
||||||
|
|
||||||
|
redisLockUtil.lock(orderNo);
|
||||||
try {
|
try {
|
||||||
Long orderId = (Long) identifierGenerator.nextId(null);
|
Long orderId = (Long) identifierGenerator.nextId(null);
|
||||||
Long organId = getUserOrganId();
|
Long organId = getUserOrganId();
|
||||||
@@ -232,6 +238,8 @@ public class OrderController {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("api数据导入异常", e);
|
log.error("api数据导入异常", e);
|
||||||
return success(e.getMessage());
|
return success(e.getMessage());
|
||||||
|
} finally {
|
||||||
|
redisLockUtil.unlock(orderNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -260,6 +268,7 @@ public class OrderController {
|
|||||||
|
|
||||||
Boolean flag = true;
|
Boolean flag = true;
|
||||||
String customOrderNoKey = "自定义单号";
|
String customOrderNoKey = "自定义单号";
|
||||||
|
redisLockUtil.lock(file.getOriginalFilename());
|
||||||
try {
|
try {
|
||||||
if (type == 0) { //excel
|
if (type == 0) { //excel
|
||||||
excelReadUtil.setErr(0);
|
excelReadUtil.setErr(0);
|
||||||
@@ -365,6 +374,8 @@ public class OrderController {
|
|||||||
String xmlStr = XmlBuilder.objectToXmlStr(orderXmlVO);
|
String xmlStr = XmlBuilder.objectToXmlStr(orderXmlVO);
|
||||||
XMLUtil.writeErr(response, xmlStr, " order_add_xml_err.xml");
|
XMLUtil.writeErr(response, xmlStr, " order_add_xml_err.xml");
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
redisLockUtil.unlock(file.getOriginalFilename());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+24
@@ -38,6 +38,10 @@ public class OrderPartsDO extends BaseDO {
|
|||||||
* 配件名称
|
* 配件名称
|
||||||
*/
|
*/
|
||||||
private String name;
|
private String name;
|
||||||
|
/**
|
||||||
|
* 颜色
|
||||||
|
*/
|
||||||
|
private String color;
|
||||||
/**
|
/**
|
||||||
* 材质
|
* 材质
|
||||||
*/
|
*/
|
||||||
@@ -45,7 +49,23 @@ public class OrderPartsDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 配件类型
|
* 配件类型
|
||||||
*/
|
*/
|
||||||
|
private String category;
|
||||||
|
/**
|
||||||
|
* 配件子类
|
||||||
|
*/
|
||||||
private String type;
|
private String type;
|
||||||
|
/**
|
||||||
|
* 宽度
|
||||||
|
*/
|
||||||
|
private Double width;
|
||||||
|
/**
|
||||||
|
* 长度
|
||||||
|
*/
|
||||||
|
private Double length;
|
||||||
|
/**
|
||||||
|
* 厚度
|
||||||
|
*/
|
||||||
|
private Double thickness;
|
||||||
/**
|
/**
|
||||||
* 型号
|
* 型号
|
||||||
*/
|
*/
|
||||||
@@ -74,6 +94,10 @@ public class OrderPartsDO extends BaseDO {
|
|||||||
* 是否复合部件:0 否 1 是
|
* 是否复合部件:0 否 1 是
|
||||||
*/
|
*/
|
||||||
private Boolean isComposite;
|
private Boolean isComposite;
|
||||||
|
/**
|
||||||
|
* 子配件ID列表,复合部件时记录子配件ID,半角逗号分隔
|
||||||
|
*/
|
||||||
|
private String subparts;
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
|
|||||||
+101
@@ -0,0 +1,101 @@
|
|||||||
|
package com.cf.imes.module.executor.dal.dataobject.orderParts;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配件表 parts_{N} DO
|
||||||
|
*
|
||||||
|
* @author 晨丰科技
|
||||||
|
*/
|
||||||
|
@TableName("parts")
|
||||||
|
@KeySequence("parts_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class PartsDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配件 ID
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 组织id
|
||||||
|
*/
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private Long organId;
|
||||||
|
/**
|
||||||
|
* 设计端商品ID
|
||||||
|
*/
|
||||||
|
private String goodsId;
|
||||||
|
/**
|
||||||
|
* 配件名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 材质:颗粒板、欧松板、多层板、生态板、禾香板、密度板、实木、铝蜂窝板、铝塑板
|
||||||
|
*/
|
||||||
|
private String material;
|
||||||
|
/**
|
||||||
|
* 颜色
|
||||||
|
*/
|
||||||
|
private String color;
|
||||||
|
/**
|
||||||
|
* 配件类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 配件主类
|
||||||
|
*/
|
||||||
|
private String category;
|
||||||
|
/**
|
||||||
|
* 型号
|
||||||
|
*/
|
||||||
|
private String model;
|
||||||
|
/**
|
||||||
|
* 宽度
|
||||||
|
*/
|
||||||
|
private Double width;
|
||||||
|
/**
|
||||||
|
* 长度
|
||||||
|
*/
|
||||||
|
private Double length;
|
||||||
|
/**
|
||||||
|
* 厚度
|
||||||
|
*/
|
||||||
|
private Double thickness;
|
||||||
|
/**
|
||||||
|
* 规格
|
||||||
|
*/
|
||||||
|
private String spec;
|
||||||
|
/**
|
||||||
|
* 品牌
|
||||||
|
*/
|
||||||
|
private String brand;
|
||||||
|
/**
|
||||||
|
* 厂家
|
||||||
|
*/
|
||||||
|
private String factory;
|
||||||
|
/**
|
||||||
|
* 单位
|
||||||
|
*/
|
||||||
|
private String unit;
|
||||||
|
/**
|
||||||
|
* 是否复合部件:0 否 1 是
|
||||||
|
*/
|
||||||
|
private Boolean isComposite;
|
||||||
|
/**
|
||||||
|
* 子配件ID列表,复合部件时记录子配件ID,半角逗号分隔
|
||||||
|
*/
|
||||||
|
private String subparts;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
}
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package com.cf.imes.module.executor.dal.mysql.orderParts;
|
||||||
|
|
||||||
|
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配件表 parts_{N} Mapper
|
||||||
|
*
|
||||||
|
* @author 晨丰科技
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface PartsMapper extends BaseMapperX<PartsDO> {
|
||||||
|
|
||||||
|
default PartsDO selectByGoodID(String goodId , Long organId) {
|
||||||
|
return selectOne(PartsDO::getGoodsId, goodId, PartsDO::getOrganId, organId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+8
-1
@@ -16,6 +16,7 @@ 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.orderItem.OrderItemDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.orderModuleExtra.OrderModuleExtraDO;
|
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.orderParts.OrderPartsDO;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
|
import com.cf.imes.module.executor.dal.dataobject.plate.PlateGoodDO;
|
||||||
@@ -27,6 +28,7 @@ import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
|
|||||||
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.orderModuleExtra.OrderModuleExtraMapper;
|
import com.cf.imes.module.executor.dal.mysql.orderModuleExtra.OrderModuleExtraMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
||||||
|
import com.cf.imes.module.executor.dal.mysql.orderParts.PartsMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper;
|
import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper;
|
import com.cf.imes.module.executor.dal.mysql.rawgoods.RawGoodsMapper;
|
||||||
@@ -85,6 +87,9 @@ public class OrderInputProcessor {
|
|||||||
@Resource
|
@Resource
|
||||||
private ESDocumentService esDocumentService;
|
private ESDocumentService esDocumentService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PartsMapper partsMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ElasticsearchClient elasticsearchClient;
|
private ElasticsearchClient elasticsearchClient;
|
||||||
|
|
||||||
@@ -112,7 +117,8 @@ public class OrderInputProcessor {
|
|||||||
Collection<PlateDO> plateDOS,
|
Collection<PlateDO> plateDOS,
|
||||||
Collection<OrderItemDO> itemDOS,
|
Collection<OrderItemDO> itemDOS,
|
||||||
Collection<GoodsDO> goodsDOS,
|
Collection<GoodsDO> goodsDOS,
|
||||||
Collection<PlateGoodDO> plateGoodDOS) {
|
Collection<PlateGoodDO> plateGoodDOS,
|
||||||
|
Collection<PartsDO> partsDOS) {
|
||||||
|
|
||||||
|
|
||||||
// if (rawGoodsDOS != null)
|
// if (rawGoodsDOS != null)
|
||||||
@@ -159,6 +165,7 @@ public class OrderInputProcessor {
|
|||||||
insertInBatches(itemDOS, 1000, (batch, index) -> orderItemMapper.insertBatch((Collection<OrderItemDO>) batch));
|
insertInBatches(itemDOS, 1000, (batch, index) -> orderItemMapper.insertBatch((Collection<OrderItemDO>) batch));
|
||||||
insertInBatches(goodsDOS, 1000, (batch, index) -> goodsMapper.insertBatch((Collection<GoodsDO>) batch));
|
insertInBatches(goodsDOS, 1000, (batch, index) -> goodsMapper.insertBatch((Collection<GoodsDO>) batch));
|
||||||
insertInBatches(plateGoodDOS, 1000, (batch, index) -> plateGoodMapper.insertBatch((Collection<PlateGoodDO>) batch));
|
insertInBatches(plateGoodDOS, 1000, (batch, index) -> plateGoodMapper.insertBatch((Collection<PlateGoodDO>) batch));
|
||||||
|
insertInBatches(partsDOS, 1000, (batch, index) -> partsMapper.insertBatch((Collection<PartsDO>) batch));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertInBatches(Collection<?> entities, int batchSize, BiConsumer<Collection<?>, Integer> insertFunction) {
|
private void insertInBatches(Collection<?> entities, int batchSize, BiConsumer<Collection<?>, Integer> insertFunction) {
|
||||||
|
|||||||
+29
-5
@@ -28,6 +28,7 @@ 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.orderGroup.OrderGroupDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
import com.cf.imes.module.executor.dal.dataobject.orderItem.OrderItemDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO;
|
import com.cf.imes.module.executor.dal.dataobject.orderParts.OrderPartsDO;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.orderParts.PartsDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO;
|
import com.cf.imes.module.executor.dal.dataobject.pack.OrderPackageDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
import com.cf.imes.module.executor.dal.dataobject.plan.PlanDO;
|
||||||
@@ -40,6 +41,7 @@ import com.cf.imes.module.executor.dal.mysql.orderBody.OrderBodyMapper;
|
|||||||
import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
|
import com.cf.imes.module.executor.dal.mysql.orderGroup.OrderGroupMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
import com.cf.imes.module.executor.dal.mysql.orderItem.OrderItemMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
import com.cf.imes.module.executor.dal.mysql.orderParts.OrderPartsMapper;
|
||||||
|
import com.cf.imes.module.executor.dal.mysql.orderParts.PartsMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageMapper;
|
import com.cf.imes.module.executor.dal.mysql.pack.OrderPackageMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.pack.OrderPrepackagedMapper;
|
import com.cf.imes.module.executor.dal.mysql.pack.OrderPrepackagedMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
import com.cf.imes.module.executor.dal.mysql.plan.PlanMapper;
|
||||||
@@ -130,6 +132,9 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
@Resource
|
@Resource
|
||||||
private SnowflakeIdWorker3rd idWorker;
|
private SnowflakeIdWorker3rd idWorker;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PartsMapper partsMapper;
|
||||||
|
|
||||||
|
|
||||||
private static final String SUBMIT_STATE = "1"; // 空订单 原生产系统
|
private static final String SUBMIT_STATE = "1"; // 空订单 原生产系统
|
||||||
|
|
||||||
@@ -391,9 +396,11 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
Map<String, List<?>> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在
|
Map<String, List<?>> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在
|
||||||
goodsDO = (List<GoodsDO>) map.get(GOODSDO_KEY);
|
goodsDO = (List<GoodsDO>) map.get(GOODSDO_KEY);
|
||||||
List<PlateGoodDO> plateGoodDOS = (List<PlateGoodDO>) map.get(PLATE_GOODS_LIST_KEY);
|
List<PlateGoodDO> plateGoodDOS = (List<PlateGoodDO>) map.get(PLATE_GOODS_LIST_KEY);
|
||||||
|
// 配件信息
|
||||||
|
List<PartsDO> partsDOS = getPartsGoods(partsDO);
|
||||||
|
|
||||||
|
|
||||||
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS);
|
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS, partsDOS);
|
||||||
List<OrderModelDO> orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class);
|
List<OrderModelDO> orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class);
|
||||||
|
|
||||||
if (!orderModelDOs.isEmpty()) {
|
if (!orderModelDOs.isEmpty()) {
|
||||||
@@ -446,7 +453,8 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
Map<String, List<?>> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 excel
|
Map<String, List<?>> map = getPlateGoods(goodsDO);// 检验商品板材信息是否存在 excel
|
||||||
goodsDO = (List<GoodsDO>) map.get(GOODSDO_KEY);
|
goodsDO = (List<GoodsDO>) map.get(GOODSDO_KEY);
|
||||||
List<PlateGoodDO> plateGoodDOS = (List<PlateGoodDO>) map.get(PLATE_GOODS_LIST_KEY);
|
List<PlateGoodDO> plateGoodDOS = (List<PlateGoodDO>) map.get(PLATE_GOODS_LIST_KEY);
|
||||||
|
// 配件库匹配
|
||||||
|
List<PartsDO> partsDOList = getPartsGoods(partsDO);
|
||||||
|
|
||||||
if (index != 0) {
|
if (index != 0) {
|
||||||
roomCabinetProcessGroupMatch(orderDO.getId(), bodyDO, itemDO);
|
roomCabinetProcessGroupMatch(orderDO.getId(), bodyDO, itemDO);
|
||||||
@@ -463,7 +471,7 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
updateOrder(BeanUtils.toBean(orderDO, OrderSaveReqVO.class));
|
updateOrder(BeanUtils.toBean(orderDO, OrderSaveReqVO.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS);
|
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS, partsDOList);
|
||||||
if (orderModelDOS != null && !orderModelDOS.isEmpty()) {
|
if (orderModelDOS != null && !orderModelDOS.isEmpty()) {
|
||||||
orderInputProcessor.batchSaveModel(orderModelDOS);
|
orderInputProcessor.batchSaveModel(orderModelDOS);
|
||||||
}
|
}
|
||||||
@@ -693,12 +701,28 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
|
|
||||||
private PlateGoodDO getPlateGood(String goodsId, Long organId) {
|
private PlateGoodDO getPlateGood(String goodsId, Long organId) {
|
||||||
List<PlateGoodDO> plateGoodDOs = plateGoodMapper.selectGoodOne(goodsId, organId);
|
List<PlateGoodDO> plateGoodDOs = plateGoodMapper.selectGoodOne(goodsId, organId);
|
||||||
if (plateGoodDOs.size() > 0) {
|
if (!plateGoodDOs.isEmpty()) {
|
||||||
return plateGoodDOs.get(0);
|
return plateGoodDOs.get(0);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 配件匹配
|
||||||
|
private List<PartsDO> getPartsGoods(List<OrderPartsDO> partsLists) {
|
||||||
|
List<PartsDO> partsDOS = new ArrayList<>();
|
||||||
|
|
||||||
|
for (OrderPartsDO partsDO : partsLists) {
|
||||||
|
if (partsDO.getGoodsId() != null) { // 有goodsId
|
||||||
|
PartsDO part = partsMapper.selectByGoodID(partsDO.getGoodsId(), OrganContextHolder.getOrganId());
|
||||||
|
if (part == null) { // 不存在记录,存入数据库
|
||||||
|
partsDOS.add(BeanUtils.toBean(partsDO, PartsDO.class).setOrganId(OrganContextHolder.getOrganId()));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return partsDOS;
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, List<?>> getPlateGoods(List<GoodsDO> goodsLists) {
|
private Map<String, List<?>> getPlateGoods(List<GoodsDO> goodsLists) {
|
||||||
Map<String, List<?>> map = new HashMap<>();
|
Map<String, List<?>> map = new HashMap<>();
|
||||||
List<PlateGoodDO> plateGoodLists = new ArrayList<>();
|
List<PlateGoodDO> plateGoodLists = new ArrayList<>();
|
||||||
@@ -717,7 +741,7 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
goodsDO.setGoodsId((obtainingTime) + Long.toString(plateNo).substring(2));
|
goodsDO.setGoodsId((obtainingTime) + Long.toString(plateNo).substring(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plateGoodDOS != null && plateGoodDOS.size() > 0) {//存在板材
|
if (plateGoodDOS != null && !plateGoodDOS.isEmpty()) {//存在板材
|
||||||
goodsDO.setGoodsId(plateGoodDOS.get(0).getGoodsId());
|
goodsDO.setGoodsId(plateGoodDOS.get(0).getGoodsId());
|
||||||
} else if (plateGoodDO != null) { // 存在板材
|
} else if (plateGoodDO != null) { // 存在板材
|
||||||
goodsDO.setGoodsId(plateGoodDO.getGoodsId());
|
goodsDO.setGoodsId(plateGoodDO.getGoodsId());
|
||||||
|
|||||||
+262
-304
@@ -6,12 +6,10 @@ import com.alibaba.fastjson.JSONArray;
|
|||||||
import com.alibaba.nacos.common.utils.StringUtils;
|
import com.alibaba.nacos.common.utils.StringUtils;
|
||||||
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||||
import com.cf.imes.module.executor.enums.DataTypeEnum;
|
import com.cf.imes.module.executor.enums.*;
|
||||||
import com.cf.imes.module.executor.enums.OrderTypeEnum;
|
|
||||||
import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil;
|
import com.cf.imes.module.executor.util.fileConversion.admin.ToolUtil;
|
||||||
import com.cf.imes.module.system.api.dict.DictDataApi;
|
import com.cf.imes.module.system.api.dict.DictDataApi;
|
||||||
import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO;
|
import com.cf.imes.module.system.api.dict.dto.DictDataRespDTO;
|
||||||
import com.cf.imes.module.executor.enums.DictTypeConstants;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.MapUtils;
|
import org.apache.commons.collections4.MapUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -19,6 +17,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
@@ -27,8 +26,6 @@ import java.util.*;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import static com.mysql.cj.util.TimeUtil.DATE_FORMATTER;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class ExcelReadUtil { // 文件读取
|
public class ExcelReadUtil { // 文件读取
|
||||||
@@ -40,6 +37,11 @@ public class ExcelReadUtil { // 文件读取
|
|||||||
private static final String ERR = "error";
|
private static final String ERR = "error";
|
||||||
private static final String DEALER_PHONE = "dealerPhoneNumber";
|
private static final String DEALER_PHONE = "dealerPhoneNumber";
|
||||||
private static final String NUMBER_TYPE_ERR = "数量类型错误";
|
private static final String NUMBER_TYPE_ERR = "数量类型错误";
|
||||||
|
private static final String NOT_EMPTY= "不可为空";
|
||||||
|
private static final String NUMBER_ERR = "数量错误";
|
||||||
|
private static final String ACCORD_ENUM = "请按照提示词语选择填入";
|
||||||
|
private static final String POSITIVE_ERR = "数据需为正数";
|
||||||
|
private static final String NUMBER_LENGTH_ERR = "数据长度过长";
|
||||||
// 读excel
|
// 读excel
|
||||||
public Map<String, Object> read(MultipartFile file) throws IOException {
|
public Map<String, Object> read(MultipartFile file) throws IOException {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
@@ -64,34 +66,38 @@ public class ExcelReadUtil { // 文件读取
|
|||||||
|
|
||||||
if (index.get()) {
|
if (index.get()) {
|
||||||
orderMap.put(item.get(0), item.get(1));
|
orderMap.put(item.get(0), item.get(1));
|
||||||
orderMap.put(item.get(16), item.get(17));
|
orderMap.put(item.get(19), item.get(20));
|
||||||
i.getAndIncrement();
|
i.getAndIncrement();
|
||||||
} else {
|
} else {
|
||||||
if (i.getAndIncrement() > 6){
|
if (i.getAndIncrement() > 6){
|
||||||
list.add(changeValue(item));
|
list.add(changeValue(item));
|
||||||
}
|
}
|
||||||
// if (item.get(1).equals("配件") || item.get(1).equals("板材")) {
|
|
||||||
// list.add(changeValue(item));
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
index.set(true);
|
index.set(true);
|
||||||
// if (MapUtil.isEmpty(orderMap) || CollectionUtil.isEmpty(list)) {
|
|
||||||
// isErr.set(-1);
|
|
||||||
// }
|
|
||||||
map.put("orderPri", orderMap);
|
map.put("orderPri", orderMap);
|
||||||
map.put("plate", list);
|
map.put("plate", list);
|
||||||
return map;
|
return map;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setIfInvalid(String key, String errValue, Map<String, Object> orderMap, AtomicBoolean error) {
|
//
|
||||||
if (orderMap.get(key) == null) {
|
private void setIfInvalid(String key, String errValue, Map<String, Object> orderMap,int length, AtomicBoolean error) {
|
||||||
orderMap.put(key, errValue);
|
orderMap.compute(key, (k, v) -> {
|
||||||
error.set(false);
|
if (v == null) {
|
||||||
}
|
error.set(false);
|
||||||
|
return errValue;
|
||||||
|
} else {
|
||||||
|
int size = ((String) v).length();
|
||||||
|
if (size > length) {
|
||||||
|
error.set(false);
|
||||||
|
return NUMBER_LENGTH_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setPhone(String key, String errValue, Map<String, Object> orderMap, AtomicBoolean error) {
|
private void setPhone(String key, String errValue, Map<String, Object> orderMap, AtomicBoolean error) {
|
||||||
@@ -111,10 +117,10 @@ public class ExcelReadUtil { // 文件读取
|
|||||||
|
|
||||||
AtomicBoolean error = new AtomicBoolean(true);
|
AtomicBoolean error = new AtomicBoolean(true);
|
||||||
|
|
||||||
setIfInvalid("客户", "---< 客户不能为空 >---", orderMap, error);
|
setIfInvalid("客户", "---< 客户不能为空 >---", orderMap, 255, error);
|
||||||
setIfInvalid("经销商", "---< 经销商不能为空 >---", orderMap, error);
|
setIfInvalid("经销商", "---< 经销商不能为空 >---", orderMap, 255, error);
|
||||||
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, error);
|
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, 255, error);
|
||||||
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, error);
|
setIfInvalid("客户地址", "---< 客户地址不能为空 >---", orderMap, 255, error);
|
||||||
|
|
||||||
if (orderMap.get("客户电话") == null) {
|
if (orderMap.get("客户电话") == null) {
|
||||||
orderMap.put("客户电话", "---< 客户电话不能为空 >---");
|
orderMap.put("客户电话", "---< 客户电话不能为空 >---");
|
||||||
@@ -198,115 +204,124 @@ public class ExcelReadUtil { // 文件读取
|
|||||||
case 6:// 颜色
|
case 6:// 颜色
|
||||||
vo.setColor(value);
|
vo.setColor(value);
|
||||||
break;
|
break;
|
||||||
case 7:// 厂家
|
case 7:// 复合部件
|
||||||
|
vo.setIsComposite(value);
|
||||||
|
break;
|
||||||
|
case 8:// 配件类型
|
||||||
|
vo.setCategory(value);
|
||||||
|
break;
|
||||||
|
case 9:// 子类
|
||||||
|
vo.setType(value);
|
||||||
|
break;
|
||||||
|
case 10:// 厂家
|
||||||
vo.setFactory(value);
|
vo.setFactory(value);
|
||||||
break;
|
break;
|
||||||
case 8:// 品牌
|
case 11:// 品牌
|
||||||
vo.setBrand(value);
|
vo.setBrand(value);
|
||||||
break;
|
break;
|
||||||
case 9:// 型号
|
case 12:// 型号
|
||||||
vo.setModel(value);
|
vo.setModel(value);
|
||||||
break;
|
break;
|
||||||
case 10:// 板材长
|
case 13:// 板材/配件长
|
||||||
vo.setGoodsHeight(value);
|
vo.setGoodsHeight(value);
|
||||||
break;
|
break;
|
||||||
case 11:// 板材宽
|
case 14:// 板材/配件宽
|
||||||
vo.setGoodsWidth(value);
|
vo.setGoodsWidth(value);
|
||||||
break;
|
break;
|
||||||
case 12:// 板材厚
|
case 15:// 板材/配件厚
|
||||||
vo.setGoodsThickness(value);
|
vo.setGoodsThickness(value);
|
||||||
break;
|
break;
|
||||||
case 13:// 规格
|
case 16:// 规格
|
||||||
vo.setSpec(value);
|
vo.setSpec(value);
|
||||||
break;
|
break;
|
||||||
case 14:// 单位
|
case 17:// 单位
|
||||||
vo.setUnit(value);
|
vo.setUnit(value);
|
||||||
break;
|
break;
|
||||||
case 15:// 数量
|
case 18:// 数量
|
||||||
vo.setGoodsNumber(value);
|
vo.setGoodsNumber(value);
|
||||||
break;
|
break;
|
||||||
case 16:// 房间
|
case 19:// 房间
|
||||||
vo.setRoomsName(value);
|
vo.setRoomsName(value);
|
||||||
break;
|
break;
|
||||||
case 17:// 柜体
|
case 20:// 柜体
|
||||||
vo.setCabinetsName(value);
|
vo.setCabinetsName(value);
|
||||||
break;
|
break;
|
||||||
case 18:// 加工组类型
|
case 21:// 加工组类型
|
||||||
vo.setSynthesisTypeName(value);
|
vo.setSynthesisTypeName(value);
|
||||||
break;
|
break;
|
||||||
case 19:// 加工组名称
|
case 22:// 加工组名称
|
||||||
vo.setCombinationName(value);
|
vo.setCombinationName(value);
|
||||||
break;
|
break;
|
||||||
case 20://板名称
|
case 23://板名称
|
||||||
vo.setName(value);
|
vo.setName(value);
|
||||||
break;
|
break;
|
||||||
case 21:// 自定义板编号
|
case 24:// 自定义板编号
|
||||||
vo.setPlateNo(value);
|
vo.setPlateNo(value);
|
||||||
break;
|
break;
|
||||||
case 22:// 成品长
|
case 25:// 成品长
|
||||||
vo.setHeight(value);
|
vo.setHeight(value);
|
||||||
break;
|
break;
|
||||||
case 23:// 成品宽
|
case 26:// 成品宽
|
||||||
vo.setWidth(value);
|
vo.setWidth(value);
|
||||||
break;
|
break;
|
||||||
case 24:// 拆单长
|
case 27:// 拆单长
|
||||||
vo.setSplitHeight(value);
|
vo.setSplitHeight(value);
|
||||||
break;
|
break;
|
||||||
case 25:// 拆单宽
|
case 28:// 拆单宽
|
||||||
vo.setSplitWidth(value);
|
vo.setSplitWidth(value);
|
||||||
break;
|
break;
|
||||||
case 26:// 厚
|
case 29:// 厚
|
||||||
vo.setThickness(value);
|
vo.setThickness(value);
|
||||||
break;
|
break;
|
||||||
case 27:// 左封边
|
case 30:// 左封边
|
||||||
vo.setSealLeft(value);
|
vo.setSealLeft(value);
|
||||||
break;
|
break;
|
||||||
case 28:// 右封边
|
case 31:// 右封边
|
||||||
vo.setSealRight(value);
|
vo.setSealRight(value);
|
||||||
break;
|
break;
|
||||||
case 29:// 上封边
|
case 32:// 上封边
|
||||||
vo.setSealUp(value);
|
vo.setSealUp(value);
|
||||||
break;
|
break;
|
||||||
case 30:// 下封边
|
case 33:// 下封边
|
||||||
vo.setSealDown(value);
|
vo.setSealDown(value);
|
||||||
break;
|
break;
|
||||||
case 31:// 排版面
|
case 34:// 排版面
|
||||||
vo.setTypographicFace(value);
|
vo.setTypographicFace(value);
|
||||||
break;
|
break;
|
||||||
case 32:// 纹路
|
case 35:// 纹路
|
||||||
vo.setTexture(value);
|
vo.setTexture(value);
|
||||||
break;
|
break;
|
||||||
case 33:// 开门方向
|
case 36:// 开门方向
|
||||||
vo.setOpenDoorType(value);
|
vo.setOpenDoorType(value);
|
||||||
break;
|
break;
|
||||||
case 34://备注1
|
case 37://备注1
|
||||||
vo.setRemark1(value);
|
vo.setRemark1(value);
|
||||||
break;
|
break;
|
||||||
case 35://备注2
|
case 38://备注2
|
||||||
vo.setRemark2(value);
|
vo.setRemark2(value);
|
||||||
break;
|
break;
|
||||||
case 36://备注3
|
case 39://备注3
|
||||||
vo.setRemark3(value);
|
vo.setRemark3(value);
|
||||||
break;
|
break;
|
||||||
case 37://备注4
|
case 40://备注4
|
||||||
vo.setRemark4(value);
|
vo.setRemark4(value);
|
||||||
break;
|
break;
|
||||||
case 38://备注5
|
case 41://备注5
|
||||||
vo.setRemark5(value);
|
vo.setRemark5(value);
|
||||||
break;
|
break;
|
||||||
case 39://备注6
|
case 42://备注6
|
||||||
vo.setRemark6(value);
|
vo.setRemark6(value);
|
||||||
break;
|
break;
|
||||||
case 40://备注7
|
case 43://备注7
|
||||||
vo.setRemark7(value);
|
vo.setRemark7(value);
|
||||||
break;
|
break;
|
||||||
case 41://备注8
|
case 44://备注8
|
||||||
vo.setRemark8(value);
|
vo.setRemark8(value);
|
||||||
break;
|
break;
|
||||||
case 42://备注9
|
case 45://备注9
|
||||||
vo.setRemark9(value);
|
vo.setRemark9(value);
|
||||||
break;
|
break;
|
||||||
case 43://备注10
|
case 46://备注10
|
||||||
vo.setRemark10(value);
|
vo.setRemark10(value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -318,272 +333,215 @@ public class ExcelReadUtil { // 文件读取
|
|||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OrderPlateImportExcelVO 数据验证
|
// 错误判断通用方法
|
||||||
private Boolean checkVO(OrderPlateImportExcelVO vo) {
|
// 判断非零,错误返回;不为空时,判断是否符合枚举类
|
||||||
List<String> errList = new ArrayList<>();
|
private void isNotEmptyAndBack(String value, Class<? extends Enum<?>> enumClass, List<String> errList, String errValue, int length , AtomicBoolean flag) {
|
||||||
Boolean flag = true;
|
if (StringUtils.isEmpty(value)) {
|
||||||
// 检查非空 类型、数量
|
errList.add(errValue + NOT_EMPTY);
|
||||||
if (StringUtils.isEmpty(vo.getGoodType())) {
|
flag.set(false);
|
||||||
errList.add("类型不能为空");
|
} else {
|
||||||
flag = false;
|
isEmptyAndSize(value, length, errList, errValue, flag);
|
||||||
|
try {
|
||||||
|
// 获取枚举类的所有值
|
||||||
|
Enum<?>[] enums = enumClass.getEnumConstants();
|
||||||
|
boolean isValid = false;
|
||||||
|
for (Enum<?> enumValue : enums) {
|
||||||
|
Field valueField = enumValue.getClass().getDeclaredField("value");
|
||||||
|
valueField.setAccessible(true);
|
||||||
|
String enumValueStr = (String) valueField.get(enumValue);
|
||||||
|
if (enumValueStr.equals(value)) {
|
||||||
|
isValid = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isValid) {
|
||||||
|
errList.add(errValue + ACCORD_ENUM);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
errList.add(errValue + ACCORD_ENUM);
|
||||||
|
flag.set(false);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (StringUtils.isEmpty(vo.getGoodsNumber())) {
|
}
|
||||||
errList.add("数量不能为空");
|
|
||||||
flag = false;
|
// 非零判断,有值判断---判断数值类型,数值长度
|
||||||
}else {
|
private void isEmptyAndPositiveNumberSize(String value, Class<?> targetType, Integer length, Integer decimalLength, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||||
if (!convertToDouble(vo.getGoodsNumber())) {
|
if (StringUtils.isNotEmpty(value)) {
|
||||||
flag = false;
|
if (Boolean.TRUE.equals(ToolUtil.convertToType(value, targetType))) {
|
||||||
errList.add(NUMBER_TYPE_ERR);
|
if (Boolean.TRUE.equals(ToolUtil.checkNumber(value))) {
|
||||||
|
if (!ToolUtil.checkPrecision(value, length, decimalLength)) {
|
||||||
|
errList.add(errValue + NUMBER_LENGTH_ERR);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
errList.add(errValue + POSITIVE_ERR);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
errList.add(errValue + NUMBER_TYPE_ERR);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断非零,错误返回
|
||||||
|
private void isNotEmptyAndBack(String value, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||||
|
if (StringUtils.isEmpty(value)) {
|
||||||
|
errList.add(errValue + NOT_EMPTY);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断非空,有值判断字符串的长度
|
||||||
|
private void isEmptyAndSize(String value, Integer length, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||||
|
if (StringUtils.isNotEmpty(value)) {
|
||||||
|
int size = value.length();
|
||||||
|
if (size > length) {
|
||||||
|
errList.add(errValue + NUMBER_LENGTH_ERR);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 非空判断,错误填入
|
||||||
|
private void isEmpty(String value, List<String> errList, String errValue, int length, AtomicBoolean flag) {
|
||||||
|
if (StringUtils.isEmpty(value)) {
|
||||||
|
errList.add(errValue + NOT_EMPTY);
|
||||||
|
flag.set(false);
|
||||||
|
} else {
|
||||||
|
// 字符串长度检查
|
||||||
|
int size = value.length();
|
||||||
|
if (size > length) {
|
||||||
|
errList.add(errValue + NUMBER_LENGTH_ERR);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断非空,大于零判断
|
||||||
|
public void isEmptyAndPositiveNumber(String value, Class<?> targetType, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||||
|
if (StringUtils.isNotEmpty(value)) {
|
||||||
|
if (Boolean.FALSE.equals(ToolUtil.convertToType(value, targetType))) {
|
||||||
|
errList.add(errValue + NUMBER_TYPE_ERR);
|
||||||
|
flag.set(false);
|
||||||
}else {
|
}else {
|
||||||
if (!checkNumber(vo.getGoodsNumber())) {
|
if (Boolean.FALSE.equals(checkNumber(value))) {
|
||||||
flag = false;
|
errList.add(errValue + "数量不能为0");
|
||||||
errList.add("数量不能为0");
|
flag.set(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断非空,字典值判断
|
||||||
|
public void isNotEmptyAndDict(String value, String dictType, List<String> errList, String errValue, AtomicBoolean flag) {
|
||||||
|
if (StringUtils.isEmpty(value)) {
|
||||||
|
errList.add(errValue + NOT_EMPTY);
|
||||||
|
flag.set(false);
|
||||||
|
} else {
|
||||||
|
DictDataRespDTO dictDataRespDTO = dictDataApi.parseDictData(dictType, value).getData();
|
||||||
|
if (dictDataRespDTO == null) {
|
||||||
|
errList.add(errValue + ACCORD_ENUM);
|
||||||
|
flag.set(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 板材的数据以及长度的检验
|
||||||
|
public void checkPlate(OrderPlateImportExcelVO vo, List<String> errList , AtomicBoolean flag) {
|
||||||
|
// 数量类型判断
|
||||||
|
isEmptyAndPositiveNumber(vo.getGoodsNumber(), Integer.class, errList, "板材数量", flag);
|
||||||
|
// 板材纹理
|
||||||
|
isNotEmptyAndBack(vo.getWave(), IsHavaeEnum.class, errList, "板材纹理", 4, flag);
|
||||||
|
// 大板的长宽厚存在以及是否符合数个
|
||||||
|
isNotEmptyAndBack(vo.getGoodsWidth(), errList, "板材长度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getGoodsWidth(), Double.class, 5, 3, errList, "板材长度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getGoodsHeight(), errList, "板材宽度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getGoodsHeight(), Double.class, 5, 3, errList, "板材宽度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getGoodsThickness(), errList, "板材厚度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getGoodsThickness(), Double.class, 5, 3, errList, "板材厚度", flag);
|
||||||
|
// 房间、柜体、板名称 不可以为空
|
||||||
|
isEmpty(vo.getRoomsName(), errList, "房间名称", 64, flag);
|
||||||
|
isEmpty(vo.getCabinetsName(), errList, "柜体名称", 64, flag);
|
||||||
|
isEmpty(vo.getName(), errList, "板材名称", 64, flag);
|
||||||
|
//成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边 不能为空
|
||||||
|
isNotEmptyAndBack(vo.getHeight(), errList, "成品长度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getHeight(), Double.class, 5, 3, errList, "成品长度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getWidth(), errList, "成品宽度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getWidth(), Double.class, 5, 3, errList, "成品宽度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getSplitHeight(), errList, "拆单长度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getSplitHeight(), Double.class, 5, 3, errList, "拆单长度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getSplitWidth(), errList, "拆单宽度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getSplitWidth(), Double.class, 5, 3, errList, "拆单宽度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getThickness(), errList, "厚度", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getThickness(), Double.class, 5, 3, errList, "厚度", flag);
|
||||||
|
isNotEmptyAndBack(vo.getSealLeft(), errList, "左封边", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getSealLeft(), Double.class, 5, 3, errList, "左封边", flag);
|
||||||
|
isNotEmptyAndBack(vo.getSealRight(), errList, "右封边", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getSealRight(), Double.class, 5, 3, errList, "右封边", flag);
|
||||||
|
isNotEmptyAndBack(vo.getSealUp(), errList, "上封边", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getSealUp(), Double.class, 5, 3, errList, "上封边", flag);
|
||||||
|
isNotEmptyAndBack(vo.getSealDown(), errList, "下封边", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getSealDown(), Double.class, 5, 3, errList, "下封边", flag);
|
||||||
|
// 排版面、纹路、开门方向
|
||||||
|
isNotEmptyAndDict(vo.getTypographicFace(), DictTypeConstants.TYPOGRAPHY_TYPE, errList, "排版面", flag);
|
||||||
|
isNotEmptyAndDict(vo.getTexture(), DictTypeConstants.GRAIN_TYPE, errList, "纹路", flag);
|
||||||
|
isNotEmptyAndDict(vo.getOpenDoorType(), DictTypeConstants.DOOR_OPENING_DIRECTIONS, errList, "开门方向", flag);
|
||||||
|
|
||||||
|
}
|
||||||
|
// OrderPlateImportExcelVO 数据验证
|
||||||
|
private Boolean checkVO(OrderPlateImportExcelVO vo) {
|
||||||
|
List<String> errList = new ArrayList<>();
|
||||||
|
AtomicBoolean flag = new AtomicBoolean(true);
|
||||||
|
|
||||||
|
// 全部需要值的字段
|
||||||
|
// 检查非空 类型、数量
|
||||||
|
isEmpty(vo.getGoodType(), errList, "类型",32, flag);
|
||||||
|
isEmpty(vo.getGoodsNumber(), errList, "数量", 10000000 ,flag);
|
||||||
|
|
||||||
// 检查商品物料编码或是商品名称、规格、材质、颜色不可全为空
|
// 检查商品物料编码或是商品名称、规格、材质、颜色不可全为空
|
||||||
if (StringUtils.isEmpty(vo.getGoodsName()) || StringUtils.isEmpty(vo.getSpec())
|
if (StringUtils.isEmpty(vo.getGoodsName()) || StringUtils.isEmpty(vo.getSpec())
|
||||||
|| StringUtils.isEmpty(vo.getMaterial()) || StringUtils.isEmpty(vo.getColor()) || StringUtils.isEmpty(vo.getUnit())) {
|
|| StringUtils.isEmpty(vo.getMaterial()) || StringUtils.isEmpty(vo.getColor()) || StringUtils.isEmpty(vo.getUnit())) {
|
||||||
errList.add("商品商品名称、规格、材质、颜色、单位不可为空");
|
errList.add("商品商品名称、规格、材质、颜色、单位不可为空");
|
||||||
flag = false;
|
flag.set(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (StringUtils.equals(vo.getGoodType(), "配件")) {
|
||||||
|
// 复合部件必填
|
||||||
|
isNotEmptyAndBack(vo.getIsComposite(), QuarrelEnum.class, errList, "是否复合部件", 1, flag); // 判断传入的值,是否符合字典中的枚举类
|
||||||
|
// 配件类型必填
|
||||||
|
isNotEmptyAndBack(vo.getCategory(), CategoryEnum.class, errList, "配件类型", 32, flag);
|
||||||
|
// 配件长宽厚,存在判断是否可以转义
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getGoodsWidth(), Double.class, 5, 3, errList, "配件宽", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getGoodsHeight(), Double.class, 5, 3, errList, "配件高", flag);
|
||||||
|
isEmptyAndPositiveNumberSize(vo.getGoodsThickness(), Double.class, 5, 3, errList, "配件厚", flag);
|
||||||
|
// 配件类型为封边条的时候,需要填写配件宽厚
|
||||||
|
if (StringUtils.equals(vo.getCategory(), CategoryEnum.EDGING.getValue())) { // 封边条必须有宽高
|
||||||
|
isNotEmptyAndBack(vo.getGoodsWidth(), errList, "封边条宽", flag);
|
||||||
|
isNotEmptyAndBack(vo.getGoodsThickness(), errList, "封边条厚", flag);
|
||||||
|
}
|
||||||
|
// 配件数量判断
|
||||||
|
isEmptyAndPositiveNumber(vo.getGoodsNumber(), Double.class, errList, "配件数量", flag);
|
||||||
}
|
}
|
||||||
// 若商品类型为板材,需检查房间、柜体、板名称、成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边、排版面、纹路、开门方向不能为空
|
// 若商品类型为板材,需检查房间、柜体、板名称、成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边、排版面、纹路、开门方向不能为空
|
||||||
if (StringUtils.equals(vo.getGoodType(), "板材")) {
|
if (StringUtils.equals(vo.getGoodType(), "板材")) {
|
||||||
// 数量类型判断
|
checkPlate(vo, errList, flag);
|
||||||
if (!convertToInteger(vo.getGoodsNumber())) {
|
|
||||||
flag = false;
|
|
||||||
if (errList.contains(NUMBER_TYPE_ERR)){
|
|
||||||
Iterator<String> iterator = errList.iterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
String element = iterator.next();
|
|
||||||
if (NUMBER_TYPE_ERR.equals(element)) {
|
|
||||||
iterator.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
errList.add("板材数量类型需为整数");
|
|
||||||
}else {
|
|
||||||
errList.add(NUMBER_TYPE_ERR);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// 纹理有效性判断
|
|
||||||
if (StringUtils.isEmpty(vo.getWave())) {
|
|
||||||
errList.add("板材纹理不可为空");
|
|
||||||
flag = false;
|
|
||||||
} else {
|
|
||||||
if (!StringUtils.equals(vo.getWave().trim(), "无") && !StringUtils.equals(vo.getWave().trim(), "有")) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("纹理无效");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 大板长宽厚数据不可为空
|
|
||||||
if (StringUtils.isEmpty(vo.getGoodsHeight()) && StringUtils.isEmpty(vo.getGoodsWidth()) && StringUtils.isEmpty(vo.getGoodsThickness())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材长宽厚数据不能为空");
|
|
||||||
} else {
|
|
||||||
// 大板长宽厚数据不为空,检查数据格式
|
|
||||||
if (!convertToDouble(vo.getGoodsHeight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材长数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getGoodsHeight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材长数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getGoodsWidth())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材宽数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getGoodsWidth())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材宽数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getGoodsThickness())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材厚数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getGoodsThickness())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("板材厚数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StringUtils.isEmpty(vo.getRoomsName()) && StringUtils.isEmpty(vo.getCabinetsName()) && StringUtils.isEmpty(vo.getName())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("房间、柜体、板名称不能为空");
|
|
||||||
}
|
|
||||||
//成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边 不能为空
|
|
||||||
if (StringUtils.isEmpty(vo.getHeight()) || StringUtils.isEmpty(vo.getWidth()) || StringUtils.isEmpty(vo.getSplitHeight())
|
|
||||||
|| StringUtils.isEmpty(vo.getSplitWidth()) || StringUtils.isEmpty(vo.getThickness()) || StringUtils.isEmpty(vo.getSealLeft())
|
|
||||||
|| StringUtils.isEmpty(vo.getSealRight()) || StringUtils.isEmpty(vo.getSealUp()) || StringUtils.isEmpty(vo.getSealDown())) {
|
|
||||||
|
|
||||||
flag = false;
|
|
||||||
errList.add("小板轮廓数据不能为空");
|
|
||||||
} else { // 成品长、成品宽、拆单长、拆单宽、厚、左封边、右封边、上封边、下封边 数据类型以及长度验证
|
|
||||||
if (!convertToDouble(vo.getHeight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("成品长数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getHeight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("成品长数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getWidth())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("成品宽数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getWidth())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("成品宽数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flag) {
|
|
||||||
Double plateHeight = Double.parseDouble(vo.getHeight());
|
|
||||||
Double plateWidth = Double.parseDouble(vo.getWidth());
|
|
||||||
vo.setArea(plateHeight * plateWidth * 0.000001);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!convertToDouble(vo.getSplitHeight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("拆单长数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getSplitHeight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("拆单长数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getSplitWidth())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("拆单宽数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getSplitWidth())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("拆单宽数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getThickness())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("厚数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getThickness())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("厚数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getSealLeft())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("左封边数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getSealLeft())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("左封边数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getSealRight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("右封边数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getSealRight())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("右封边数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getSealUp())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("上封边数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getSealUp())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("上封边数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!convertToDouble(vo.getSealDown())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("下封边数据类型错误");
|
|
||||||
} else {
|
|
||||||
if (!checkPrecision(vo.getSealDown())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("下封边数据长度错误");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 排版面、纹路、开门方向
|
|
||||||
if (StringUtils.isEmpty(vo.getTypographicFace()) && StringUtils.isEmpty(vo.getTexture()) && StringUtils.isEmpty(vo.getOpenDoorType())) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("排版面、纹路、开门方向不能为空");
|
|
||||||
} else {
|
|
||||||
DictDataRespDTO typographyDTO = dictDataApi.parseDictData(DictTypeConstants.TYPOGRAPHY_TYPE, vo.getTypographicFace()).getData();// 排版面
|
|
||||||
if (typographyDTO == null) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("排版面数据不存在");
|
|
||||||
}
|
|
||||||
DictDataRespDTO grainDTO = dictDataApi.parseDictData(DictTypeConstants.GRAIN_TYPE, vo.getTexture()).getData();// 纹路
|
|
||||||
if (grainDTO == null) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("纹路数据不存在");
|
|
||||||
}
|
|
||||||
DictDataRespDTO doorDTO = dictDataApi.parseDictData(DictTypeConstants.DOOR_OPENING_DIRECTIONS, vo.getOpenDoorType()).getData();
|
|
||||||
if (doorDTO == null) {
|
|
||||||
flag = false;
|
|
||||||
errList.add("开门方向数据不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!flag) {
|
|
||||||
|
if (!flag.get()) {
|
||||||
isErr.getAndIncrement();
|
isErr.getAndIncrement();
|
||||||
}
|
}
|
||||||
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(errList));// 错误列表
|
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(errList));// 错误列表
|
||||||
vo.setResult(String.valueOf(jsonArray));
|
vo.setResult(String.valueOf(jsonArray));
|
||||||
return flag;
|
return flag.get();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 数据类型可否转换判断
|
|
||||||
public Boolean convertToDouble(String str) {
|
|
||||||
try {
|
|
||||||
Double.parseDouble(str);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 数据类型可否转换判断
|
|
||||||
public Boolean convertToInteger(String str) {
|
|
||||||
try {
|
|
||||||
Integer.parseInt(str);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 数据长度判断
|
|
||||||
public boolean checkPrecision(String numberStr) {
|
|
||||||
if (numberStr == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 分割整数部分和小数部分
|
|
||||||
String[] parts = numberStr.split("\\.");
|
|
||||||
String integerPart = parts[0];
|
|
||||||
String decimalPart = parts.length > 1 ? parts[1] : "";
|
|
||||||
|
|
||||||
// 检查整数部分位数
|
|
||||||
if (integerPart.length() > 5) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查小数部分位数
|
|
||||||
if (decimalPart.length() > 3) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int isErr() {
|
public int isErr() {
|
||||||
return isErr.get();
|
return isErr.get();
|
||||||
|
|||||||
+6
@@ -238,8 +238,14 @@ public class ExcelTypeRealize {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
//配件
|
//配件
|
||||||
|
|
||||||
Long partsId = (Long) snowFlakeGenerator.nextId(null);
|
Long partsId = (Long) snowFlakeGenerator.nextId(null);
|
||||||
OrderPartsDO orderPartsDO = OrderPartsDO.builder().id(partsId).orderId(orderId).goodsId(combination.getGoodsId())
|
OrderPartsDO orderPartsDO = OrderPartsDO.builder().id(partsId).orderId(orderId).goodsId(combination.getGoodsId())
|
||||||
|
.color(combination.getColor()).category(combination.getCategory()).type(combination.getType())
|
||||||
|
.length(Double.valueOf(StringUtils.isEmpty(combination.getGoodsHeight()) ? "0" : combination.getGoodsHeight()))
|
||||||
|
.width(Double.valueOf(StringUtils.isEmpty(combination.getGoodsWidth()) ? "0" : combination.getGoodsWidth()))
|
||||||
|
.thickness(Double.valueOf(StringUtils.isEmpty(combination.getGoodsThickness()) ? "0" : combination.getGoodsThickness()))
|
||||||
|
.isComposite(Boolean.valueOf(combination.getIsComposite()))
|
||||||
.name(combination.getGoodsName()).material(combination.getMaterial()).type(combination.getGoodType())
|
.name(combination.getGoodsName()).material(combination.getMaterial()).type(combination.getGoodType())
|
||||||
.model(combination.getModel()).spec(combination.getSpec()).brand(combination.getBrand()).factory(combination.getFactory())
|
.model(combination.getModel()).spec(combination.getSpec()).brand(combination.getBrand()).factory(combination.getFactory())
|
||||||
.unit(combination.getUnit()).price(0.0).isComposite(false).remark(remarkExtract(combination.remarkJSON())).isComposite(false).build();
|
.unit(combination.getUnit()).price(0.0).isComposite(false).remark(remarkExtract(combination.remarkJSON())).isComposite(false).build();
|
||||||
|
|||||||
+15
-3
@@ -60,6 +60,18 @@ public class OrderPlateImportExcelVO {
|
|||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String color;
|
private String color;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "复合部件")
|
||||||
|
@JsonIgnore
|
||||||
|
private String isComposite;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "配件类型")
|
||||||
|
@JsonIgnore
|
||||||
|
private String category;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "配件子类")
|
||||||
|
@JsonIgnore
|
||||||
|
private String type;
|
||||||
|
|
||||||
@ExcelProperty(value = "厂家")
|
@ExcelProperty(value = "厂家")
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String factory;
|
private String factory;
|
||||||
@@ -72,15 +84,15 @@ public class OrderPlateImportExcelVO {
|
|||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String model;
|
private String model;
|
||||||
|
|
||||||
@ExcelProperty(value = "板材长")
|
@ExcelProperty(value = "板材/配件长")
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String goodsHeight;
|
private String goodsHeight;
|
||||||
|
|
||||||
@ExcelProperty(value = "板材宽")
|
@ExcelProperty(value = "板材/配件宽")
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String goodsWidth;
|
private String goodsWidth;
|
||||||
|
|
||||||
@ExcelProperty(value = "板材厚")
|
@ExcelProperty(value = "板材/配件厚")
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
private String goodsThickness;
|
private String goodsThickness;
|
||||||
|
|
||||||
|
|||||||
+6
-7
@@ -225,12 +225,9 @@
|
|||||||
g.thickness,
|
g.thickness,
|
||||||
g.remark,
|
g.remark,
|
||||||
g.spec,
|
g.spec,
|
||||||
sub.order_id,
|
SUM(sub.totalPlates) AS number,
|
||||||
sub.totalPlates AS number,
|
SUM(sub.totalArea) AS area
|
||||||
sub.totalArea AS area,
|
|
||||||
sub.room_id,
|
|
||||||
sub.body_id,
|
|
||||||
sub.group_id
|
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
i.room_id,
|
i.room_id,
|
||||||
@@ -243,7 +240,7 @@
|
|||||||
SUM(p.area) AS totalArea
|
SUM(p.area) AS totalArea
|
||||||
FROM
|
FROM
|
||||||
order_item i
|
order_item i
|
||||||
RIGHT JOIN
|
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
|
order_plate p ON i.organ_id = p.organ_id AND i.order_id = p.order_id AND i.plate_id = p.id
|
||||||
WHERE
|
WHERE
|
||||||
i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted}
|
i.organ_id = #{organId} AND i.order_id = #{orderId} AND p.deleted = #{deleted}
|
||||||
@@ -277,6 +274,8 @@
|
|||||||
) sub
|
) sub
|
||||||
LEFT JOIN
|
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
|
order_goods g ON sub.organ_id = g.organ_id AND sub.order_id = g.order_id AND sub.goods_id = g.id
|
||||||
|
GROUP BY
|
||||||
|
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;
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user