diff --git a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java index 09c511f..61bdac5 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java @@ -2,6 +2,7 @@ package com.youchain.appupdate.service.impl; import com.youchain.appupdate.request.*; import com.youchain.appupdate.service.NioF3AppService; +import com.youchain.basicdata.constant.PointTypeEnum; import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.service.ItemService; @@ -81,7 +82,7 @@ public class NioF3AppServiceImpl implements NioF3AppService { //验证起点 Point point = pointService.validatePoint(bindSmall.getSrcPositionCode()); - if (!BaseStatus.XJ_DFQ.equals(point.getType())) { + if (!PointTypeEnum.XJ_DFQ.getValue().equals(point.getType())) { throw new BadRequestException(bindSmall.getSrcPositionCode() + "不属于小件待发区点位"); } } @@ -174,7 +175,7 @@ public class NioF3AppServiceImpl implements NioF3AppService { //验证起点 Point point = pointService.validatePoint(bindLarge.getSrcPositionCode()); - if (!BaseStatus.DJ_DFQ.equals(point.getType())) { + if (!PointTypeEnum.DJ_DFQ.getValue().equals(point.getType())) { throw new BadRequestException(bindLarge.getSrcPositionCode() + "不属于大件待发区点位"); } } @@ -232,7 +233,7 @@ public class NioF3AppServiceImpl implements NioF3AppService { //验证起点 Point point = pointService.validatePoint(bindLargeZy.getSrcPositionCode()); - if (!BaseStatus.DJ_DFQ.equals(point.getType())) { + if (!PointTypeEnum.DJ_DFQ.getValue().equals(point.getType())) { throw new BadRequestException(bindLargeZy.getSrcPositionCode() + "不属于大件待发区点位"); } } diff --git a/youchain-system/src/main/java/com/youchain/basicdata/constant/PointTypeEnum.java b/youchain-system/src/main/java/com/youchain/basicdata/constant/PointTypeEnum.java new file mode 100644 index 0000000..c339812 --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/basicdata/constant/PointTypeEnum.java @@ -0,0 +1,52 @@ +package com.youchain.basicdata.constant; + +import com.youchain.enumeration.BaseEnum; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum PointTypeEnum implements BaseEnum { + + STORAGE("STORAGE", "存储点"), + + BOX("BOX", "线边点位"), + + XJ_DFQ("XJ_DFQ", "小件待发区"), + + DJ_DFQ("DJ_DFQ", "大件待发区"), + + ; + + private final String value; + + private final String desc; + + /** + * 根据 value 获取对应的 desc + * @param value 枚举值 + * @return 对应的描述,如果未找到则返回 null + */ + public static String getDescByValue(String value) { + for (PointTypeEnum status : PointTypeEnum.values()) { + if (status.getValue().equals(value)) { + return status.getDesc(); + } + } + return null; + } + + /** + * 根据 desc 获取对应的 value + * @param desc 枚举值 + * @return 对应的值,如果未找到则返回 null + */ + public static String getValueByDesc(String desc) { + for (PointTypeEnum status : PointTypeEnum.values()) { + if (status.getDesc().equals(desc)) { + return status.getValue(); + } + } + return null; + } +} diff --git a/youchain-system/src/main/java/com/youchain/basicdata/domain/Point.java b/youchain-system/src/main/java/com/youchain/basicdata/domain/Point.java index 657fa51..477349f 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/domain/Point.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/domain/Point.java @@ -91,7 +91,7 @@ public class Point extends BaseEntity implements Serializable { @Column(name = "`heat`") @ApiModelProperty(value = "热度") - private Double heat; + private Double heat=0d; @Column(name = "`line`") @ApiModelProperty(value = "排") diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ItemServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ItemServiceImpl.java index 92f8f83..bb9ac39 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ItemServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ItemServiceImpl.java @@ -15,7 +15,6 @@ */ package com.youchain.basicdata.service.impl; -import cn.idev.excel.FastExcel; import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.requset.ItemImportReq; import com.youchain.exception.BadRequestException; @@ -27,7 +26,6 @@ import com.youchain.basicdata.service.ItemService; import com.youchain.basicdata.service.dto.ItemDto; import com.youchain.basicdata.service.dto.ItemQueryCriteria; import com.youchain.basicdata.service.mapstruct.ItemMapper; -import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; @@ -51,6 +49,7 @@ public class ItemServiceImpl implements ItemService { private final ItemRepository itemRepository; private final ItemMapper itemMapper; + private final BatchUtils batchUtils; @Override public Map queryAll(ItemQueryCriteria criteria, Pageable pageable) { @@ -153,17 +152,10 @@ public class ItemServiceImpl implements ItemService { @Override @Transactional(rollbackFor = Exception.class) public String importItem(MultipartFile multipartFile) { - List dataList; - try { - dataList = FastExcel.read(multipartFile.getInputStream()).head(ItemImportReq.class) - .sheet() - .doReadSync(); - } catch (IOException e) { - throw new BadRequestException("数据格式存在问题,无法读取"); - } - if (CollectionUtils.isEmpty(dataList)) { - throw new BadRequestException("数据为空"); - } + List dataList=FastExcelUtils.readExcelData(multipartFile, ItemImportReq.class,0, 1); + + //去除掉重复数据 + dataList = dataList.stream().distinct().collect(Collectors.toList()); //获取文件中所有物料编码 List codes = dataList.stream() @@ -189,7 +181,7 @@ public class ItemServiceImpl implements ItemService { Item item = existingItemMap.get(code); itemsToUpdate.add(updateItem(item, specs)); } else { - //新增容器 + //新增物料 Item item = createItem(code, specs, UserUtils.getDept()); itemsToCreate.add(item); existingItemMap.put(code, item); @@ -197,15 +189,17 @@ public class ItemServiceImpl implements ItemService { } //批量新增物料 + int[] resultCreate = new int[0]; if (!itemsToCreate.isEmpty()) { - itemRepository.saveAll(itemsToCreate); + resultCreate = batchUtils.batchInsertItems(itemsToCreate); } //批量更新物料 + int[] resultUpdate = new int[0]; if (!itemsToUpdate.isEmpty()) { - itemRepository.saveAll(itemsToUpdate); + resultUpdate = batchUtils.batchUpdateItems(itemsToUpdate); } - return ("导入成功:" + " 新增(" + itemsToCreate.size() + ")修改(" + itemsToUpdate.size() + ")"); + return String.format("导入成功:新增(%d);修改(%d)", resultCreate.length, resultUpdate.length); } private Item createItem(String code, String specs, Dept dept) { diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java index be629a5..0f1154e 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/PointServiceImpl.java @@ -15,7 +15,7 @@ */ package com.youchain.basicdata.service.impl; -import cn.idev.excel.FastExcel; +import com.youchain.basicdata.constant.PointTypeEnum; import com.youchain.basicdata.domain.Area; import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.repository.AreaRepository; @@ -30,9 +30,7 @@ import com.youchain.basicdata.service.dto.PointDto; import com.youchain.basicdata.service.dto.PointQueryCriteria; import com.youchain.basicdata.service.mapstruct.PointMapper; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; @@ -59,6 +57,7 @@ public class PointServiceImpl implements PointService { private final PointRepository pointRepository; private final AreaRepository areaRepository; private final PointMapper pointMapper; + private final BatchUtils batchUtils; @Override public Map queryAll(PointQueryCriteria criteria, Pageable pageable) { @@ -133,17 +132,11 @@ public class PointServiceImpl implements PointService { @Override @Transactional(rollbackFor = Exception.class) public String importPoint(MultipartFile multipartFile) { - List dataList; - try { - dataList = FastExcel.read(multipartFile.getInputStream()).head(PointImportReq.class) - .sheet() - .doReadSync(); - } catch (IOException e) { - throw new BadRequestException("数据格式存在问题,无法读取"); - } - if (CollectionUtils.isEmpty(dataList)) { - throw new BadRequestException("数据为空"); - } + //读取数据 + List dataList = FastExcelUtils.readExcelData(multipartFile, PointImportReq.class,0, 1); + + //去除掉重复数据 + dataList = dataList.stream().distinct().collect(Collectors.toList()); //获取文件中所有库区名称 List names = dataList.stream() @@ -198,24 +191,31 @@ public class PointServiceImpl implements PointService { } - //批量新增容器 + //批量新增点位 + int[] resultCreate = new int[0]; if (!pointsToCreate.isEmpty()) { - pointRepository.saveAll(pointsToCreate); + resultCreate = batchUtils.batchInsertPoints(pointsToCreate); } - //批量更新容器 + //批量更新点位 + int[] resultUpdate = new int[0]; if (!pointsToUpdate.isEmpty()) { - pointRepository.saveAll(pointsToUpdate); + resultUpdate = batchUtils.batchUpdatePoints(pointsToUpdate); } - return ("导入成功:" + " 新增(" + pointsToCreate.size() + ")修改(" + pointsToUpdate.size() + ")"); + return String.format("导入成功:新增(%d);修改(%d)", resultCreate.length, resultUpdate.length); } private Point createPoint(String code, String beatCode, String type, Area area, Dept dept) { - if ("缓存点".equals(type)) { - type = BaseStatus.STORAGE; - + if ("存储点".equals(type)) { + type = PointTypeEnum.STORAGE.getValue(); } else if ("线边点位".equals(type)) { - type = BaseStatus.BOX; + type = PointTypeEnum.BOX.getValue(); + } else if ("小件待发区".equals(type)) { + type = PointTypeEnum.XJ_DFQ.getValue(); + } else if ("大件待发区".equals(type)) { + type = PointTypeEnum.DJ_DFQ.getValue(); + } else { + throw new BadRequestException(type + "类型不存在"); } return Point.builder() .code(code) @@ -226,16 +226,20 @@ public class PointServiceImpl implements PointService { .enabled(true) .dept(dept) .type(type) - .heat(0.0) .build(); } private Point updatePoint(Point point, Area area, String beatCode, String type) { - if ("缓存点".equals(type)) { - type = BaseStatus.STORAGE; - + if ("存储点".equals(type)) { + type = PointTypeEnum.STORAGE.getValue(); } else if ("线边点位".equals(type)) { - type = BaseStatus.BOX; + type = PointTypeEnum.BOX.getValue(); + } else if ("小件待发区".equals(type)) { + type = PointTypeEnum.XJ_DFQ.getValue(); + } else if ("大件待发区".equals(type)) { + type = PointTypeEnum.DJ_DFQ.getValue(); + } else { + throw new BadRequestException(type + "类型不存在"); } point.setArea(area); point.setBeatCode(beatCode); diff --git a/youchain-system/src/main/java/com/youchain/enumeration/BaseEnum.java b/youchain-system/src/main/java/com/youchain/enumeration/BaseEnum.java new file mode 100644 index 0000000..fc5de6b --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/enumeration/BaseEnum.java @@ -0,0 +1,61 @@ +package com.youchain.enumeration; + +import com.alibaba.fastjson.JSONAware; +import lombok.Data; +import java.util.Objects; + +public interface BaseEnum { + /** + * 获取枚举类的值 + * + * @return Object + */ + Object getValue(); + + /** + * 获取枚举类的说明 + * + * @return String + */ + String getDesc(); + + /** + * 比较参数是否与枚举类的value相同 + * + * @param value 枚举类的value + * @return boolean + */ + default boolean equalsValue(Object value) { + return Objects.equals(getValue(), value); + } + + /** + * 比较枚举类是否相同 + * + * @param baseEnum 枚举类对象 + * @return boolean + */ + default boolean equals(BaseEnum baseEnum) { + return Objects.equals(getValue(), baseEnum.getValue()) && Objects.equals(getDesc(), baseEnum.getDesc()); + } + + + @Data + class DeletedQuotationAware implements JSONAware { + + private String value; + + public DeletedQuotationAware(Object value) { + if (value instanceof String) { + this.value = "'" + value + "'"; + } else { + this.value = value.toString(); + } + } + + @Override + public String toJSONString() { + return value; + } + } +} diff --git a/youchain-system/src/main/java/com/youchain/utils/BaseStatus.java b/youchain-system/src/main/java/com/youchain/utils/BaseStatus.java index cd92572..41fb543 100644 --- a/youchain-system/src/main/java/com/youchain/utils/BaseStatus.java +++ b/youchain-system/src/main/java/com/youchain/utils/BaseStatus.java @@ -22,26 +22,6 @@ public interface BaseStatus { */ public static Boolean F =false; - /** - * 点位类型-按钮盒点位 - */ - public static String BOX = "BOX"; - - /** - * 点位类型-缓存点 - */ - public static String STORAGE = "STORAGE"; - - /** - * 点位类型-小件待发区 - */ - public static String XJ_DFQ = "XJ_DFQ"; - - /** - * 点位类型-大件待发区 - */ - public static String DJ_DFQ = "DJ_DFQ"; - /** * 输送线 */ diff --git a/youchain-system/src/main/java/com/youchain/utils/BatchUtils.java b/youchain-system/src/main/java/com/youchain/utils/BatchUtils.java index 6fc153a..cd06448 100644 --- a/youchain-system/src/main/java/com/youchain/utils/BatchUtils.java +++ b/youchain-system/src/main/java/com/youchain/utils/BatchUtils.java @@ -1,6 +1,7 @@ package com.youchain.utils; -import com.youchain.basicdata.domain.Area; +import com.youchain.basicdata.domain.Item; +import com.youchain.basicdata.domain.Point; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; @@ -9,6 +10,7 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.sql.Timestamp; import java.util.List; @Service @@ -17,54 +19,120 @@ public class BatchUtils { @Autowired private JdbcTemplate jdbcTemplate; - /** - * 批量插入库区数据 + * 批量插入物料数据 */ @Transactional - public int[] batchInsertAreas(List areas) { - String sql = "insert into base_area (code, name, enabled, dept_id,create_by,update_by,create_time,update_time) VALUES (?, ?, ?, ?,?,?,?,?)"; + public int[] batchInsertItems(List items) { + String sql = "insert into base_item (code,name,specs,enabled,good_type,unit,dept_id,create_by,update_by,create_time,update_time) values (?,?,?,?,?,?,?,?,?,?,?)"; return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { - Area area = areas.get(i); - ps.setString(1, area.getCode()); - ps.setString(2, area.getName()); - ps.setBoolean(3, area.getEnabled()); - ps.setLong(4, area.getDept().getId()); - ps.setString(5, area.getCreateBy()); - ps.setString(6, area.getUpdateBy()); - ps.setTimestamp(7, area.getCreateTime()); - ps.setTimestamp(8, area.getUpdateTime()); + Item item = items.get(i); + ps.setString(1, item.getCode()); + ps.setString(2, item.getName()); + ps.setString(3, item.getSpecs()); + ps.setBoolean(4, item.getEnabled()); + ps.setString(5, item.getGoodType()); + ps.setString(6, item.getUnit()); + ps.setLong(7, item.getDept().getId()); + ps.setString(8, SecurityUtils.getCurrentUsername()); + ps.setString(9, SecurityUtils.getCurrentUsername()); + ps.setTimestamp(10, new Timestamp(System.currentTimeMillis())); + ps.setTimestamp(11, new Timestamp(System.currentTimeMillis())); } @Override public int getBatchSize() { - return areas.size(); + return items.size(); } }); } /** - * 批量更新库区域数据(根据ID) + * 批量更新物料 */ - public int[] batchUpdateAreasById(List areas) { - String sql = "update base_area set name = ?, code = ?, enabled = ? WHERE id = ?"; + @Transactional + public int[] batchUpdateItems(List items) { + String sql = "update base_item set code = ?, name = ?, specs = ?, enabled = ?, good_type = ?, unit = ? where id = ?"; return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { - Area area = areas.get(i); - ps.setString(1, area.getName()); - ps.setString(2, area.getCode()); - ps.setBoolean(3, area.getEnabled()); - ps.setLong(4, area.getId()); // WHERE条件 + Item item = items.get(i); + ps.setString(1, item.getCode()); + ps.setString(2, item.getName()); + ps.setString(3, item.getSpecs()); + ps.setBoolean(4, item.getEnabled()); + ps.setString(5, item.getGoodType()); + ps.setString(6, item.getUnit()); + ps.setLong(7, item.getId()); } @Override public int getBatchSize() { - return areas.size(); + return items.size(); + } + }); + } + + /** + * 批量插入点位数据 + */ + @Transactional + public int[] batchInsertPoints(List points) { + String sql = "insert into base_point (code,name,status,beat_code,area_id,enabled,dept_id,type,create_by,update_by,create_time,update_time) values (?,?,?,?,?,?,?,?,?,?,?,?)"; + + return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + Point point = points.get(i); + ps.setString(1, point.getCode()); + ps.setString(2, point.getName()); + ps.setString(3, point.getStatus()); + ps.setString(4, point.getBeatCode()); + ps.setLong(5, point.getArea().getId()); + ps.setBoolean(6, point.getEnabled()); + ps.setLong(7, point.getDept().getId()); + ps.setString(8, point.getType()); + ps.setString(9, SecurityUtils.getCurrentUsername()); + ps.setString(10, SecurityUtils.getCurrentUsername()); + ps.setTimestamp(11, new Timestamp(System.currentTimeMillis())); + ps.setTimestamp(12, new Timestamp(System.currentTimeMillis())); + } + + @Override + public int getBatchSize() { + return points.size(); + } + }); + } + + /** + * 批量更新物料 + */ + @Transactional + public int[] batchUpdatePoints(List points) { + String sql = "update base_point set code = ?, name = ?, status = ?, beat_code = ? , area_id = ? , enabled = ?, type = ? where id = ?"; + + return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + Point point = points.get(i); + ps.setString(1, point.getCode()); + ps.setString(2, point.getName()); + ps.setString(3, point.getStatus()); + ps.setString(4, point.getBeatCode()); + ps.setLong(5, point.getArea().getId()); + ps.setBoolean(6, point.getEnabled()); + ps.setString(7, point.getType()); + ps.setLong(8, point.getId()); + } + + @Override + public int getBatchSize() { + return points.size(); } }); }