From f1300f45ab090c224a913f997de6f836c51c355f Mon Sep 17 00:00:00 2001 From: FOAM <491460741@qq.com> Date: Mon, 11 Aug 2025 18:03:26 +0800 Subject: [PATCH] =?UTF-8?q?bom=E5=AF=BC=E5=85=A5=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youchain/basicdata/domain/BigItem.java | 5 + .../youchain/basicdata/domain/BomAccount.java | 22 +- .../com/youchain/basicdata/domain/Point.java | 4 +- .../repository/BigItemRepository.java | 7 + .../repository/BomAccountRepository.java | 26 +- .../basicdata/repository/PointRepository.java | 4 + .../basicdata/rest/BomAccountController.java | 65 +++ .../basicdata/rest/ImportDataController.java | 15 + .../basicdata/rest/PointController.java | 17 +- .../basicdata/service/BigItemService.java | 15 + .../basicdata/service/BomAccountService.java | 3 + .../service/ImportBomAccountService.java | 11 + .../basicdata/service/PointService.java | 6 + .../basicdata/service/dto/BigItemDto.java | 2 + .../basicdata/service/dto/BomAccountDto.java | 15 + .../service/impl/BigItemServiceImpl.java | 68 ++- .../service/impl/BomAccountServiceImpl.java | 14 +- .../impl/ImportBomAccountServiceImpl.java | 485 ++++++++++++++++++ .../service/impl/ImportDataServiceImpl.java | 4 + .../service/impl/PointServiceImpl.java | 24 + .../inputJson/imports/BomAccountImport.java | 289 +++++++++++ .../rest/AsnDetailController.java | 20 +- .../rest/XppRecordController.java | 202 ++++---- .../businessdata/returnJson/BomPrint.java | 61 +++ .../returnJson/BomPrint_BiaoQian.java | 45 ++ .../returnJson/BomPrint_BiaoQian2.java | 45 ++ .../businessdata/returnJson/RRkXpp.java | 7 + .../service/XppRecordService.java | 13 + .../service/impl/PickTicketServiceImpl.java | 1 - .../service/impl/XppRecordServiceImpl.java | 121 ++++- .../java/com/youchain/utils/BaseStatus.java | 4 + .../java/com/youchain/utils/BizStatus.java | 1 + 32 files changed, 1499 insertions(+), 122 deletions(-) create mode 100644 youchain-system/src/main/java/com/youchain/basicdata/service/ImportBomAccountService.java create mode 100644 youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportBomAccountServiceImpl.java create mode 100644 youchain-system/src/main/java/com/youchain/businessdata/inputJson/imports/BomAccountImport.java create mode 100644 youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint.java create mode 100644 youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian.java create mode 100644 youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian2.java diff --git a/youchain-system/src/main/java/com/youchain/basicdata/domain/BigItem.java b/youchain-system/src/main/java/com/youchain/basicdata/domain/BigItem.java index dc1c3b2..daeede0 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/domain/BigItem.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/domain/BigItem.java @@ -47,6 +47,11 @@ public class BigItem extends BaseEntity implements Serializable { @ApiModelProperty(value = "完成品品番") private String code; + @Column(name = "`master_name`",nullable = false) + @NotBlank + @ApiModelProperty(value = "完成形式名") + private String masterName; + @Column(name = "`name`",nullable = false) @NotBlank @ApiModelProperty(value = "完成形式名") diff --git a/youchain-system/src/main/java/com/youchain/basicdata/domain/BomAccount.java b/youchain-system/src/main/java/com/youchain/basicdata/domain/BomAccount.java index f8fcac8..6b605e4 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/domain/BomAccount.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/domain/BomAccount.java @@ -73,7 +73,7 @@ public class BomAccount extends BaseEntity implements Serializable { private String outType; @Column(name = "`station_type`") - @ApiModelProperty(value = "工位") + @ApiModelProperty(value = "工位,台车库位") private String stationType; @Column(name = "`bp_type`") @@ -104,6 +104,26 @@ public class BomAccount extends BaseEntity implements Serializable { @ApiModelProperty(value = "税别") private String bonded; + @Column(name = "`ns`") + @ApiModelProperty(value = "纳所") + private String ns; + + @Column(name = "`xz`") + @ApiModelProperty(value = "箱种") + private String xz; + + @Column(name = "`srs`") + @ApiModelProperty(value = "收容数") + private int srs; + + @Column(name = "`zcfq`") + @ApiModelProperty(value = "制材分区") + private String zcfq; + @Column(name = "`tckw`") + @ApiModelProperty(value = "台车库位,工程") + private String tckw; + + @OneToOne @JoinColumn(name = "`z_point_id`") @ApiModelProperty(value = "制造库位") 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 ff6ed95..96a40ff 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 @@ -59,11 +59,11 @@ public class Point extends BaseEntity implements Serializable { private String description; @Column(name = "`beat_code`") - @ApiModelProperty(value = "区域编码") + @ApiModelProperty(value = "纳所") private String beatCode; @Column(name = "`item_code`") - @ApiModelProperty(value = "机械臂作业物料编码") + @ApiModelProperty(value = "物料编码") private String itemCode; @OneToOne diff --git a/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java b/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java index 3a85b99..aeaa094 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/repository/BigItemRepository.java @@ -16,6 +16,7 @@ package com.youchain.basicdata.repository; import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; @@ -46,4 +47,10 @@ public interface BigItemRepository extends JpaRepository, JpaSpec @Query(value = "SELECT * FROM base_big_item", nativeQuery = true) List getBigItem(); + + @Query("from BigItem i where i.code in (:codes) and i.enabled=true ") + List queryByBigItemCodes(List codes); + + @Query("from BigItem i where i.code in (:names) and i.enabled=true ") + List queryByBigItemNames(List names); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/repository/BomAccountRepository.java b/youchain-system/src/main/java/com/youchain/basicdata/repository/BomAccountRepository.java index 86bc6a6..a56b6b8 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/repository/BomAccountRepository.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/repository/BomAccountRepository.java @@ -17,6 +17,7 @@ package com.youchain.basicdata.repository; import com.youchain.basicdata.domain.BigItem; import com.youchain.basicdata.domain.BomAccount; +import com.youchain.businessdata.returnJson.BomPrint; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; @@ -38,6 +39,10 @@ public interface BomAccountRepository extends JpaRepository, J @Query(value = "SELECT * FROM base_bom_account ba WHERE ba.big_item_id=?1 and ba.item_id=?2 and ba.r_area_id=?3 and ba.z_point_id=?4", nativeQuery = true) BomAccount findByOnly(Long big_item_id,Long item_id,Long r_area_id,Long z_point_id); + + @Query(value = "SELECT * FROM base_bom_account ba WHERE ba.big_item_id=?1 and ba.item_id=?2 and ba.ns=?3 and ba.z_point_id=?4", nativeQuery = true) + BomAccount findByQnique(Long big_item_id,Long item_id,String ns,Long z_point_id); + /** * 查询说有的 接收仓库 为true的 bigitem * @return @@ -66,7 +71,26 @@ public interface BomAccountRepository extends JpaRepository, J List getJsAreaList( Long big_item_id); @Query(value = "SELECT IFNULL(max(b.c_area_id),0) FROM `base_bom_account` b where b.item_id=?1", nativeQuery = true) Long getItemAreaId( Long item_id); - //获得所有BOM清单 + + //获得所有BOM标签 + @Query(value = "select CONCAT(it.code,'/',ba.ns) ns,it.name pm,ba.xz,ba.srs,ba.bonded,ba.supplier,GROUP_CONCAT(bi.master_name) jxs ,GROUP_CONCAT(ba.singles) tyls,\n" + + "CONCAT('code:',it.code,'ns:',ba.ns,'sb:',ba.bonded,'kw:',point.code) ewm\n" + + "from base_bom_account ba \n" + + "LEFT JOIN base_big_item bi on bi.id=ba.big_item_id\n" + + "left join base_item it on it.id=ba.item_id\n" + + "left join base_point point on point.id=ba.z_point_id" + + " where (it.code=:itemCode or :itemCode is null) and (point.code=:hw or :hw is null) and (ba.ns=:ns or :ns is null)" + + "GROUP BY it.code,it.name,ba.ns,ba.xz,ba.srs,ba.bonded,ba.supplier,point.code ", nativeQuery = true) + List queryPrintAll(String itemCode, String hw, String ns); + + @Query(value = "select CONCAT(it.code,'/',ba.ns) ns,it.name pm,ba.xz,ba.srs,ba.bonded,ba.supplier,GROUP_CONCAT(bi.master_name) jxs ,GROUP_CONCAT(ba.singles) tyls,\n" + + "CONCAT('code:',it.code,'ns:',ba.ns,'sb:',ba.bonded,'kw:',point.code) ewm\n" + + "from base_bom_account ba \n" + + "LEFT JOIN base_big_item bi on bi.id=ba.big_item_id\n" + + "left join base_item it on it.id=ba.item_id\n" + + "left join base_point point on point.id=ba.z_point_id\n" + + "GROUP BY it.code,it.name,ba.ns,ba.xz,ba.srs,ba.bonded,ba.supplier,point.code ", nativeQuery = true) + List queryPrintAll(); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/repository/PointRepository.java b/youchain-system/src/main/java/com/youchain/basicdata/repository/PointRepository.java index 5445172..d292994 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/repository/PointRepository.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/repository/PointRepository.java @@ -15,6 +15,7 @@ */ package com.youchain.basicdata.repository; +import com.youchain.basicdata.domain.BigItem; import com.youchain.basicdata.domain.Point; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; @@ -37,4 +38,7 @@ public interface PointRepository extends JpaRepository, JpaSpecific Point findByCode(String code); /*@Query(value = "SELECT p.* FROM base_point p WHERE p.code=?1", nativeQuery = true) List findByCodes(String code);*/ + + @Query("from Point i where i.code in (:codes) and i.enabled=true ") + List queryByPointCodes(List codes); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/rest/BomAccountController.java b/youchain-system/src/main/java/com/youchain/basicdata/rest/BomAccountController.java index a4a7b2a..27b6a93 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/rest/BomAccountController.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/rest/BomAccountController.java @@ -15,6 +15,8 @@ */ package com.youchain.basicdata.rest; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; import com.youchain.basicdata.domain.BigItem; @@ -30,9 +32,15 @@ import com.youchain.basicdata.service.PointService; import com.youchain.basicdata.service.dto.*; import com.youchain.basicdata.service.impl.TableConfigServiceImpl; import com.youchain.basicdata.service.mapstruct.BomAccountMapper; +import com.youchain.businessdata.returnJson.BomPrint; +import com.youchain.businessdata.returnJson.BomPrint_BiaoQian; +import com.youchain.businessdata.returnJson.BomPrint_BiaoQian2; import com.youchain.utils.BaseStatus; +import com.youchain.utils.RedisUtils; +import com.youchain.utils.SecurityUtils; import com.youchain.utils.SpringContextHolder; import lombok.extern.slf4j.Slf4j; +import net.dreamlu.mica.core.utils.JsonUtil; import org.springframework.data.domain.Pageable; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -42,6 +50,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -62,6 +71,7 @@ public class BomAccountController { private final BomAccountMapper bomAccountMapper; private final PointRepository pointRepository; private final PointService pointService; + private final BomAccountRepository bomAccountRepository; @Log("导出数据") @ApiOperation("导出数据") @@ -87,6 +97,61 @@ public class BomAccountController { return new ResponseEntity<>(bomAccountService.queryAll(criteria),HttpStatus.OK); } + + @GetMapping("/queryBomPrintList") + @Log("查询bom打印标签") + @ApiOperation("查询bom打印标签") + @AnonymousAccess + public ResponseEntity queryBomPrintList(BomAccountQueryCriteria criteria){ + RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); + redisUtils.del(SecurityUtils.getCurrentUsername()+"_BiaoQian"); + List list=bomAccountService.queryPrintAll(criteria); + boolean isok=redisUtils.set(SecurityUtils.getCurrentUsername()+"_BiaoQian", JsonUtil.toJson(list)); + log.info(SecurityUtils.getCurrentUsername()+"_BiaoQian"+"-----isok:"+isok); + String json=(String)redisUtils.get(SecurityUtils.getCurrentUsername()+"_BiaoQian"); + log.info(SecurityUtils.getCurrentUsername()+"_BiaoQian"+"-----"+json); + + + List list2= JSONUtil.toList(json, BomPrint_BiaoQian2.class); + for(BomPrint_BiaoQian2 l:list2){ + log.info(l.getNs()); + } + + return new ResponseEntity<>(list,HttpStatus.OK); + } + + @GetMapping("/bomPrintBiaoQianList") + @Log("获取Bom中库位标签") + @ApiOperation("获取Bom中库位标签") + @AnonymousAccess + public ResponseEntity bomPrintBiaoQianList(){ + log.info(SecurityUtils.getCurrentUsername()+"_BiaoQian"); + RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); + + String json=(String)redisUtils.get(SecurityUtils.getCurrentUsername()+"_BiaoQian"); + log.info(SecurityUtils.getCurrentUsername()+"_BiaoQian"+"-----"+json); + + + List list= JSONUtil.toList(json, BomPrint_BiaoQian2.class); + + List list2=new ArrayList<>(); + for(BomPrint_BiaoQian2 l:list){ + BomPrint_BiaoQian bq=new BomPrint_BiaoQian(); + bq.setNs(l.getNs()); + bq.setHw(l.getHw()); + bq.setPm(l.getPm()); + bq.setEwm(l.getEwm()); + bq.setBonded(l.getBonded()); + bq.setSrs(l.getSrs()); + bq.setSupplier(l.getSupplier()); + bq.setJxs(l.getJxs()==null?null:l.getJxs().split(",")); + bq.setTyls(l.getTyls()==null?null:l.getTyls().split(",")); + list2.add(bq); + } + return new ResponseEntity<>( list2,HttpStatus.OK); + } + + @GetMapping(value = "/queryBigItemByStationType/{stationType}") @Log("根据工位查询bomAccount") @ApiOperation("根据工位查询bomAccount") diff --git a/youchain-system/src/main/java/com/youchain/basicdata/rest/ImportDataController.java b/youchain-system/src/main/java/com/youchain/basicdata/rest/ImportDataController.java index 3793024..996836a 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/rest/ImportDataController.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/rest/ImportDataController.java @@ -20,6 +20,7 @@ import cn.hutool.poi.excel.ExcelUtil; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; import com.youchain.basicdata.service.ImportAsnService; +import com.youchain.basicdata.service.ImportBomAccountService; import com.youchain.basicdata.service.ImportDataService; import com.youchain.businessdata.domain.Asn; import com.youchain.businessdata.domain.PickDetail; @@ -68,6 +69,7 @@ public class ImportDataController { private final PickDetailService pickDetailService; private final ImportDataService importDataService; private final ImportAsnService importAsnService; + private final ImportBomAccountService importBomAccountService; @Log("导入完成品品番") @ApiOperation("导入完成品品番") @@ -234,4 +236,17 @@ public class ImportDataController { log.info("导入结束,耗时:{}ms", (System.currentTimeMillis() - start)); return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), HttpStatus.OK); } + + @Log("导入BOM多列") + @ApiOperation("导入BOM多列") + @PostMapping(value = "/bomAccountBatch") + @Transactional + @AnonymousAccess + public ResponseEntity bomAccountBatch(@RequestParam("file") MultipartFile multipartFile) { + log.info("开始导入"); + long start = System.currentTimeMillis(); + importBomAccountService.importBomAccount(multipartFile); + log.info("导入结束,耗时:{}ms", (System.currentTimeMillis() - start)); + return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), HttpStatus.OK); + } } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/rest/PointController.java b/youchain-system/src/main/java/com/youchain/basicdata/rest/PointController.java index 402a692..8921e37 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/rest/PointController.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/rest/PointController.java @@ -33,6 +33,7 @@ import com.youchain.businessdata.service.InventoryService; import com.youchain.businessdata.service.dto.InventoryDto; import com.youchain.businessdata.service.dto.InventoryQueryCriteria; import com.youchain.config.FileProperties; +import com.youchain.exception.BadRequestException; import com.youchain.exception.handler.ApiError; import com.youchain.modules.system.domain.Dept; import com.youchain.utils.BaseStatus; @@ -103,18 +104,17 @@ public class PointController { //编码、描述、库区、存储类型 ExcelReader reader = ExcelUtil.getReader(file); int i = 0; - int edit_len = 0; - int new_len = 0; List> readAll = reader.readAll(); - for (i = 0; i < readAll.size(); i++) { + for (i = 4000; i < readAll.size(); i++) { String code = readAll.get(i).get("编码").toString().trim(); String types = readAll.get(i).get("存储类型").toString().trim(); String areaCode = readAll.get(i).get("库区").toString().trim(); + String itemCode = readAll.get(i).get("品番编码") == null ? "" : readAll.get(i).get("品番编码").toString().trim(); + String beatCode = readAll.get(i).get("纳所") == null ? "" : readAll.get(i).get("纳所").toString().trim(); String ccTYPE = readAll.get(i).get("描述") == null ? "" : readAll.get(i).get("描述").toString().trim(); Area area = areaService.findByCode(areaCode); if (area == null) { - ApiError apiError = ApiError.errorJosn(BAD_REQUEST.value(), "找不到库区" + areaCode); - return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus())); + throw new BadRequestException(areaCode+"库区不存在"); } Point point = pointService.getPoint(code, null, null, null); Boolean isNew=Boolean.FALSE; @@ -128,7 +128,7 @@ public class PointController { isNew=Boolean.TRUE; } String lx = ""; - if (types.equals("存货")) { + if (types.equals("材管库位")) { lx = BaseStatus.CH; } else if (types.equals("制造库位")) { lx = BaseStatus.ZZKW; @@ -138,14 +138,15 @@ public class PointController { point.setType(lx); point.setArea(area); point.setDescription(ccTYPE); + point.setItemCode(itemCode); + point.setBeatCode(beatCode); if(isNew){ pointService.create(point); }else { pointService.update(point); } } - ApiError apiError = ApiError.errorJosn(HttpStatus.OK.value(), "导入成功:" + (i) + "行 新增(" + new_len + ")修改(" + edit_len + ")"); - return new ResponseEntity(apiError, HttpStatus.valueOf(apiError.getStatus())); + return new ResponseEntity("导入成功", HttpStatus.OK); } diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/BigItemService.java b/youchain-system/src/main/java/com/youchain/basicdata/service/BigItemService.java index 2f3b039..ae23695 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/BigItemService.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/BigItemService.java @@ -16,6 +16,7 @@ package com.youchain.basicdata.service; import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.service.dto.BigItemDto; import com.youchain.basicdata.service.dto.BigItemQueryCriteria; import org.springframework.data.domain.Pageable; @@ -82,4 +83,18 @@ public interface BigItemService { void download(List all, HttpServletResponse response) throws Exception, Exception; List getBigItem(String type); + /** + *查找完成品是否存在 + * @param code + * @return + */ + BigItem existBigItem(String code); + + List queryByBigItemCodes(List codes); + + Map queryByBigItemCodesToMap(List codes); + + List queryByBigItemNames(List codes); + + Map queryByBigItemNamesToMap(List codes); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/BomAccountService.java b/youchain-system/src/main/java/com/youchain/basicdata/service/BomAccountService.java index dc539a5..d1d02df 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/BomAccountService.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/BomAccountService.java @@ -21,6 +21,7 @@ import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.service.dto.BomAccountDto; import com.youchain.basicdata.service.dto.BomAccountPointDto; import com.youchain.basicdata.service.dto.BomAccountQueryCriteria; +import com.youchain.businessdata.returnJson.BomPrint; import org.springframework.data.domain.Pageable; import java.util.Map; import java.util.List; @@ -50,6 +51,8 @@ public interface BomAccountService { */ List queryAll(BomAccountQueryCriteria criteria); + List queryPrintAll(BomAccountQueryCriteria criteria); + /** * 根据ID查询 * @param id ID diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/ImportBomAccountService.java b/youchain-system/src/main/java/com/youchain/basicdata/service/ImportBomAccountService.java new file mode 100644 index 0000000..22ec44c --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/ImportBomAccountService.java @@ -0,0 +1,11 @@ +package com.youchain.basicdata.service; + +import org.springframework.web.multipart.MultipartFile; + +public interface ImportBomAccountService { + /** + * 批量导入 + * @param file 文件 + */ + void importBomAccount(MultipartFile file); +} diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/PointService.java b/youchain-system/src/main/java/com/youchain/basicdata/service/PointService.java index 700b5d5..ac62f6c 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/PointService.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/PointService.java @@ -16,6 +16,7 @@ package com.youchain.basicdata.service; import com.youchain.basicdata.domain.Area; +import com.youchain.basicdata.domain.BigItem; import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.service.dto.ItemDto; @@ -162,4 +163,9 @@ public interface PointService { * @return */ Point createPoint(String code,String type,Area area); + + + List queryByPointCodes(List codes); + + Map queryByPointCodesToMap(List codes); } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BigItemDto.java b/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BigItemDto.java index 85b6c6a..80af2ac 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BigItemDto.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BigItemDto.java @@ -33,6 +33,8 @@ public class BigItemDto implements Serializable { /** 完成品品番 */ private String code; + /** 主形式名 */ + private String masterName; /** 完成形式名 */ private String name; diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BomAccountDto.java b/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BomAccountDto.java index c20a01f..6d77a98 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BomAccountDto.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/dto/BomAccountDto.java @@ -88,9 +88,24 @@ public class BomAccountDto implements Serializable { /** A/C */ private String ac; + /** 收容数 */ + private int srs; + + /** 箱种 */ + private String xz; + + /**纳所 */ + private String ns; + /** 税别 */ private String bonded; + /** 台车库位 */ + private String tckw; + + /** 制材分区 */ + private String zcfq; + /** 制造库位 */ private PointDto zPoint; diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BigItemServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BigItemServiceImpl.java index e3a7290..e64e38e 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BigItemServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BigItemServiceImpl.java @@ -15,7 +15,9 @@ */ package com.youchain.basicdata.service.impl; +import com.google.common.collect.Maps; import com.youchain.basicdata.domain.BigItem; +import com.youchain.basicdata.domain.Item; import com.youchain.exception.EntityExistException; import com.youchain.utils.*; import lombok.RequiredArgsConstructor; @@ -24,16 +26,18 @@ import com.youchain.basicdata.service.BigItemService; import com.youchain.basicdata.service.dto.BigItemDto; import com.youchain.basicdata.service.dto.BigItemQueryCriteria; import com.youchain.basicdata.service.mapstruct.BigItemMapper; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import java.util.List; -import java.util.Map; + +import java.util.*; import java.io.IOException; +import java.util.stream.Collectors; +import javax.persistence.EntityManager; +import javax.persistence.Query; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.LinkedHashMap; /** * @website https://eladmin.vip @@ -47,6 +51,7 @@ public class BigItemServiceImpl implements BigItemService { private final BigItemRepository bigItemRepository; private final BigItemMapper bigItemMapper; + private final EntityManager entityManager; @Override public Map queryAll(BigItemQueryCriteria criteria, Pageable pageable){ @@ -115,4 +120,59 @@ public class BigItemServiceImpl implements BigItemService { List bigItems=bigItemRepository.getBigItem(); return bigItemMapper.toDto(bigItems); } + + @Override + public BigItem existBigItem(String code) { + String hql = "select it from Item it where it.code='" + code + "'"; + Query query = entityManager.createQuery(hql); + List its = query.getResultList(); + if (its.size() > 0) { + return its.get(0); + } + return null; + } + + @Override + public List queryByBigItemCodes(List codes) { + if (CollectionUtils.isEmpty(codes)) { + return Collections.emptyList(); + } + //去重 + codes = codes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + return bigItemRepository.queryByBigItemCodes(codes); + } + + @Override + public Map queryByBigItemCodesToMap(List codes) { + List items = queryByBigItemCodes(codes); + //封装成map + Map itemMap = Maps.newHashMap(); + for (BigItem item : items) { + itemMap.put(item.getCode(), item); + } + return itemMap; + } + + + @Override + public List queryByBigItemNames(List names) { + if (CollectionUtils.isEmpty(names)) { + return Collections.emptyList(); + } + //去重 + names = names.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + return bigItemRepository.queryByBigItemNames(names); + } + + @Override + public Map queryByBigItemNamesToMap(List names) { + List items = queryByBigItemNames(names); + //封装成map + Map itemMap = Maps.newHashMap(); + for (BigItem item : items) { + itemMap.put(item.getMasterName(), item); + } + return itemMap; + } + } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BomAccountServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BomAccountServiceImpl.java index d005468..60717ff 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BomAccountServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/BomAccountServiceImpl.java @@ -28,6 +28,7 @@ import com.youchain.basicdata.domain.Item; import com.youchain.basicdata.service.BomAccountLogService; import com.youchain.basicdata.service.PointService; import com.youchain.basicdata.service.dto.*; +import com.youchain.businessdata.returnJson.BomPrint; import com.youchain.modules.system.domain.Dict; import com.youchain.modules.system.domain.DictDetail; import com.youchain.modules.system.service.dto.DictDto; @@ -75,18 +76,27 @@ public class BomAccountServiceImpl implements BomAccountService { private final BomAccountLogService bomAccountLogService; @Override - @Cacheable(key = "'queryALL1:' + #p0") +// @Cacheable(key = "'queryALL1:' + #p0") public Map queryAll(BomAccountQueryCriteria criteria, Pageable pageable){ Page page = bomAccountRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); return PageUtil.toPage(page.map(bomAccountMapper::toDto)); } @Override - @Cacheable(key = "'queryALL2:' + #p0") +// @Cacheable(key = "'queryALL2:' + #p0") public List queryAll(BomAccountQueryCriteria criteria){ return bomAccountMapper.toDto(bomAccountRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); } + public List queryPrintAll(BomAccountQueryCriteria criteria){ + + List bomPrints=bomAccountRepository.queryPrintAll(criteria.getItemCode(),null,null); +// List bomPrints=bomAccountRepository.queryPrintAll(); + log.info(bomPrints.toString()); + + return bomPrints; + } + @Override @Transactional @Cacheable(key = "'id:' + #p0") diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportBomAccountServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportBomAccountServiceImpl.java new file mode 100644 index 0000000..58ca291 --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportBomAccountServiceImpl.java @@ -0,0 +1,485 @@ +package com.youchain.basicdata.service.impl; + +import cn.idev.excel.annotation.ExcelProperty; +import com.youchain.basicdata.domain.*; +import com.youchain.basicdata.repository.*; +import com.youchain.basicdata.service.*; +import com.youchain.businessdata.domain.Asn; +import com.youchain.businessdata.domain.AsnDetail; +import com.youchain.businessdata.inputJson.imports.BaseImport; +import com.youchain.businessdata.inputJson.imports.BomAccountImport; +import com.youchain.businessdata.inputJson.imports.invoicePackingImport; +import com.youchain.businessdata.repository.AsnDetailRepository; +import com.youchain.businessdata.repository.AsnRepository; +import com.youchain.businessdata.service.AsnService; +import com.youchain.exception.BadRequestException; +import com.youchain.utils.*; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.sql.Timestamp; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +@Slf4j +public class ImportBomAccountServiceImpl implements ImportBomAccountService { + private final ItemService itemService; + private final BigItemService bigItemService; + private final PointService pointService; + private final AsnService asnService; + private final AreaService areaService; + private final ItemRepository itemRepository; + private final BigItemRepository bigItemRepository; + private final PointRepository pointRepository; + private final BomAccountRepository bomAccountRepository; + private final AreaRepository areaRepository; + + @Override + @Transactional(rollbackFor = Exception.class) + public void importBomAccount(MultipartFile file) { + + // 验证模板类型是否正确 + isValidTemplateType(file); + + baseImportTemplate(file); + } + + // 处理标准模板 + @Transactional + public void baseImportTemplate(MultipartFile file) { + // 读取sheet数据 + List dataList = FastExcelUtil.readExcelData(file, BomAccountImport.class, 0, 1); + + //批量导入 + importBomAccountData(dataList); + } + + + /** + * 处理批量导入 + */ + @Transactional + public void importBomAccountData(List dataList) { + // TODO: 实现批量导入逻辑 +// log.info("处理批量导入,数据条数: {}", dataList.size()); + Map itemEntitys=new HashMap<>(); + List bomEntitys=new ArrayList<>(); + for (BomAccountImport data : dataList) { + ItemEntity it=new ItemEntity(); + it.setAc(data.getAc()); + it.setPf(data.getPf()); + it.setXz(data.getXz()); + it.setPm(data.getPm()); + it.setSrs(data.getSrs()); + itemEntitys.put(data.getPf(),it); + bomEntitys=batchBomEntitys(data,bomEntitys); + + } + //验证品番 + Map existItemMap = validateItem(itemEntitys); + //获取文件中所有的完成品 + List bigItemNames = bomEntitys.stream().map(BomEntity::getJx).collect(Collectors.toList()); + bigItemNames = bigItemNames.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + //验证完成品品番 + Map existBigItemMap = validateBigItem(bigItemNames); + //获取文件中所有的库位 + List hwCodes = dataList.stream().map(BomAccountImport::getHw).collect(Collectors.toList()); + hwCodes = hwCodes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + //验证库位 + Map existPointMap = validatePoint(hwCodes); + List createBomList = new ArrayList<>();//批量新增BomAccount + List updateBomList = new ArrayList<>();//批量修改BomAccount +// Area outArea=areaRepository.getByCode(BaseStatus.DEFAULT_AREA); + for (BomEntity entity : bomEntitys) { + //品番 + Item item = existItemMap.get(entity.getPf()); + //货位 + Point point=existPointMap.get(entity.getHw()); + //完成品品番 + BigItem bigItem=existBigItemMap.get(entity.getJx()); + BomAccount existBom = bomAccountRepository.findByQnique(bigItem.getId(), item.getId(),entity.ns, point.getId()); + if(existBom==null){ + existBom=new BomAccount(); + BomAccount ba=this.BaEntity(existBom,entity,bigItem,item,point,entity.tyl,null); + updateBomList.add(ba); + }else { + BomAccount ba = this.BaEntity(existBom, entity, bigItem,item, point, entity.tyl,null); + createBomList.add(ba); + } + if(CollectionUtils.isNotEmpty(createBomList)){ + bomAccountRepository.saveAll(createBomList); + } + if(CollectionUtils.isNotEmpty(updateBomList)){ + bomAccountRepository.saveAll(updateBomList); + } + } + + } + + //验证品番 + private Map validateItem(Map entitys) { + List allCodes = entitys.values().stream() + .map(ItemEntity::getPf) + .collect(Collectors.toList()); + Map existMap = itemService.queryByItemCodesToMap(allCodes); + Map createMap = new HashMap<>(); + List existCodes = new ArrayList<>(existMap.keySet()); + // 获取两个集合的非交集说明品番不存在或失效,直接提示 + List difference = SmartStringUtil.getDifference(allCodes, existCodes); + List creteItems=new ArrayList<>(); + for(String pf:difference){ + ItemEntity it=entitys.get(pf); + Item entity=new Item(); + entity.setCode(pf); + entity.setName(it.pm); + entity.setExtendD3(Double.parseDouble(it.srs)); + entity.setDept(UserUtils.getDept()); + creteItems.add(entity); + } + if(CollectionUtils.isNotEmpty(creteItems)){ + List createEntityList= itemRepository.saveAll(creteItems); + for (Item it:createEntityList){ + createMap.put(it.getCode(),it); + } + } + Map totalMap = new HashMap<>(); + if (existMap != null) { + totalMap.putAll(existMap); + } + totalMap.putAll(createMap); + return totalMap; + } + + //验证完成品品番 + private Map validateBigItem(List allCodes) { + log.info(allCodes.toString()); +// Map existMap = bigItemService.queryByBigItemCodesToMap(allCodes); + Map existMap = bigItemService.queryByBigItemNamesToMap(allCodes); + Map createMap = new HashMap<>(); + List existCodes = new ArrayList<>(existMap.keySet()); + // 获取两个集合的非交集说明品番不存在或失效,直接提示 + List difference = SmartStringUtil.getDifference(allCodes, existCodes); + List createEntitys=new ArrayList<>(); + for(String code:difference){ + BigItem entity=new BigItem(); + entity.setCode(code); + entity.setName(code); + entity.setDeptId(UserUtils.getDept().getId()); + entity.setModels("无"); + entity.setMasterName(code); + entity.setEnabled(true); + entity.setDeptId(UserUtils.getDept().getId()); + createEntitys.add(entity); + } + if(CollectionUtils.isNotEmpty(createEntitys)){ + List createEntityList= bigItemRepository.saveAll(createEntitys); + for (BigItem it:createEntityList){ + createMap.put(it.getCode(),it); + } + } + Map totalMap = new HashMap<>(); + if (existMap != null) { + totalMap.putAll(existMap); + } + totalMap.putAll(createMap); + return totalMap; + } + //验证库位 + private Map validatePoint(List codes) { + Map existMap = pointService.queryByPointCodesToMap(codes); + if (existMap.isEmpty()) { + throw new BadRequestException("库位不存在或已失效"); + } + List existCodes = new ArrayList(existMap.keySet()); + // 获取两个集合的非交集说明品番不存在或失效,直接提示 + List difference = SmartStringUtil.getDifference(codes, existCodes); + if (CollectionUtils.isNotEmpty(difference)) { + throw new BadRequestException(difference + "库位不存在或已失效"); + } + return existMap; + } + + //验证模板是否使用正确 + private void isValidTemplateType(MultipartFile file) { + List requiredColumns = Arrays.asList( + "品番", + "纳所", + "品名(多国语)", + "本国语供应商1(多国语)", + "A/C", + "加工内容", + "制材区分", + "货位", + "箱种", + "收容数", + "台车库位", + "大小物", + "税别", + // 机型1-38 及对应的台用量 + "机型1", "台用量1", "机型2", "台用量2", "机型3", "台用量3", "机型4", "台用量4", "机型5", "台用量5", + "机型6", "台用量6", "机型7", "台用量7", "机型8", "台用量8", "机型9", "台用量9", "机型10", "台用量10", + "机型11", "台用量11", "机型12", "台用量12", "机型13", "台用量13", "机型14", "台用量14", "机型15", "台用量15", + "机型16", "台用量16", "机型17", "台用量17", "机型18", "台用量18", "机型19", "台用量19", "机型20", "台用量20", + "机型21", "台用量21", "机型22", "台用量22", "机型23", "台用量23", "机型24", "台用量24", "机型25", "台用量25", + "机型26", "台用量26", "机型27", "台用量27", "机型28", "台用量28", "机型29", "台用量29", "机型30", "台用量30", + "机型31", "台用量31", "机型32", "台用量32", "机型33", "台用量33", "机型34", "台用量34", "机型35", "台用量35", + "机型36", "台用量36", "机型37", "台用量37", "机型38", "台用量38" + ); + List headers = FastExcelUtil.readHeadContent(file, requiredColumns, 0, 0); + if (!SmartStringUtil.containsAllIgnoreCase(requiredColumns, headers)) { + throw new BadRequestException("标准导入模板不正确,请确认模板信息"); + } + } + @Data + public class ItemEntity{ + private String pf; + + private String pm; + + private String ac; + + private String jgnr; + + private String xz; + + private String srs; + } + + @Data + public class BigItemEntity{ + private String code; + } + + @Data + public class BomEntity{ + private String pf; + private String ns; + private String pm; + private String gys; + private String ac; + private String jgnr; + private String zcfq; + private String hw; + private String xz; + private int srs; + private String tckw; + private String dxw; + private String sb; + private String jx; + private int tyl; + } + + public BomAccount BaEntity(BomAccount ba,BomEntity data,BigItem bigItem,Item it,Point point,int dyl,Area outArea){ + ba.setBigItem(bigItem); + ba.setItem(it); + ba.setRArea(point.getArea()); + ba.setDept(point.getArea().getDept()); + ba.setZPoint(point); + ba.setBp_type(data.getDxw()); + ba.setStationType(data.getTckw()); + ba.setCArea(outArea); + ba.setAc(data.getAc()); + ba.setContents(data.getJgnr()); + ba.setEnabled(true); + ba.setSingles(dyl); + ba.setOutType("大"); + ba.setSupplier(data.getGys()); + ba.setBonded(data.getSb()); + ba.setSrs(data.getSrs()); + ba.setXz(data.getXz()); + ba.setNs(data.getNs()); + ba.setDept(UserUtils.getDept()); + ba.setZcfq(data.getZcfq()); + ba.setTckw(data.getTckw()); + return ba; + } + + public BomEntity createBomEntity(BomAccountImport data,String jx,int tyl){ + BomEntity entity = new BomEntity(); + entity.setNs(data.getNs()); + entity.setPf(data.getPf()); + entity.setPm(data.getPm()); + entity.setGys(data.getGys()); + entity.setAc(data.getAc()); + entity.setJgnr(data.getJgnr()); + entity.setZcfq(data.getZcfq()); + entity.setHw(data.getHw()); + entity.setXz(data.getXz()); + entity.setSrs(Integer.parseInt(data.getSrs())); + entity.setTckw(data.getTckw()); + entity.setDxw(data.getDxw()); + entity.setSb(data.getSb()); + entity.setJx(jx); + entity.setTyl(tyl); + return entity; + } + + public List batchBomEntitys(BomAccountImport data, List bomEntitys){ + if(data.getZcfq().equals("制造库位")) { + if (StringUtils.isNotEmpty(data.getTyl1())) { + BomEntity entity = createBomEntity(data, data.getJx1(), Integer.parseInt(data.getTyl1())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl2())) { + BomEntity entity = createBomEntity(data, data.getJx2(), Integer.parseInt(data.getTyl2())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl3())) { + BomEntity entity = createBomEntity(data, data.getJx3(), Integer.parseInt(data.getTyl3())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl4())) { + BomEntity entity = createBomEntity(data, data.getJx4(), Integer.parseInt(data.getTyl4())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl5())) { + BomEntity entity = createBomEntity(data, data.getJx5(), Integer.parseInt(data.getTyl5())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl6())) { + BomEntity entity = createBomEntity(data, data.getJx6(), Integer.parseInt(data.getTyl6())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl7())) { + BomEntity entity = createBomEntity(data, data.getJx7(), Integer.parseInt(data.getTyl7())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl8())) { + BomEntity entity = createBomEntity(data, data.getJx8(), Integer.parseInt(data.getTyl8())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl9())) { + BomEntity entity = createBomEntity(data, data.getJx9(), Integer.parseInt(data.getTyl9())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl10())) { + BomEntity entity = createBomEntity(data, data.getJx10(), Integer.parseInt(data.getTyl10())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl11())) { + BomEntity entity = createBomEntity(data, data.getJx11(), Integer.parseInt(data.getTyl11())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl12())) { + BomEntity entity = createBomEntity(data, data.getJx12(), Integer.parseInt(data.getTyl12())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl13())) { + BomEntity entity = createBomEntity(data, data.getJx13(), Integer.parseInt(data.getTyl13())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl14())) { + BomEntity entity = createBomEntity(data, data.getJx14(), Integer.parseInt(data.getTyl14())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl15())) { + BomEntity entity = createBomEntity(data, data.getJx15(), Integer.parseInt(data.getTyl15())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl16())) { + BomEntity entity = createBomEntity(data, data.getJx16(), Integer.parseInt(data.getTyl16())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl17())) { + BomEntity entity = createBomEntity(data, data.getJx17(), Integer.parseInt(data.getTyl17())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl18())) { + BomEntity entity = createBomEntity(data, data.getJx18(), Integer.parseInt(data.getTyl18())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl19())) { + BomEntity entity = createBomEntity(data, data.getJx19(), Integer.parseInt(data.getTyl19())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl20())) { + BomEntity entity = createBomEntity(data, data.getJx20(), Integer.parseInt(data.getTyl20())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl21())) { + BomEntity entity = createBomEntity(data, data.getJx21(), Integer.parseInt(data.getTyl21())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl22())) { + BomEntity entity = createBomEntity(data, data.getJx22(), Integer.parseInt(data.getTyl22())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl23())) { + BomEntity entity = createBomEntity(data, data.getJx23(), Integer.parseInt(data.getTyl23())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl24())) { + BomEntity entity = createBomEntity(data, data.getJx24(), Integer.parseInt(data.getTyl24())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl25())) { + BomEntity entity = createBomEntity(data, data.getJx25(), Integer.parseInt(data.getTyl25())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl26())) { + BomEntity entity = createBomEntity(data, data.getJx26(), Integer.parseInt(data.getTyl26())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl27())) { + BomEntity entity = createBomEntity(data, data.getJx27(), Integer.parseInt(data.getTyl27())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl28())) { + BomEntity entity = createBomEntity(data, data.getJx28(), Integer.parseInt(data.getTyl28())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl29())) { + BomEntity entity = createBomEntity(data, data.getJx29(), Integer.parseInt(data.getTyl29())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl30())) { + BomEntity entity = createBomEntity(data, data.getJx30(), Integer.parseInt(data.getTyl30())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl31())) { + BomEntity entity = createBomEntity(data, data.getJx21(), Integer.parseInt(data.getTyl31())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl32())) { + BomEntity entity = createBomEntity(data, data.getJx22(), Integer.parseInt(data.getTyl32())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl33())) { + BomEntity entity = createBomEntity(data, data.getJx23(), Integer.parseInt(data.getTyl33())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl34())) { + BomEntity entity = createBomEntity(data, data.getJx24(), Integer.parseInt(data.getTyl34())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl35())) { + BomEntity entity = createBomEntity(data, data.getJx25(), Integer.parseInt(data.getTyl35())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl36())) { + BomEntity entity = createBomEntity(data, data.getJx26(), Integer.parseInt(data.getTyl36())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl37())) { + BomEntity entity = createBomEntity(data, data.getJx27(), Integer.parseInt(data.getTyl37())); + bomEntitys.add(entity); + } + if (StringUtils.isNotEmpty(data.getTyl38())) { + BomEntity entity = createBomEntity(data, data.getJx28(), Integer.parseInt(data.getTyl38())); + bomEntitys.add(entity); + } + }else{ + BomEntity entity = createBomEntity(data, BaseStatus.DEFAULT_CG_BIG, 0); + bomEntitys.add(entity); + } + return bomEntitys; + } + +} diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportDataServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportDataServiceImpl.java index 0564b3c..1c1ce19 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportDataServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/ImportDataServiceImpl.java @@ -221,8 +221,10 @@ public class ImportDataServiceImpl implements ImportDataService { String re = ""; String code = readAll.get("完成品品番") == null ? null : readAll.get("完成品品番").toString().trim(); String name = readAll.get("完成品型式名") == null ? null : readAll.get("完成品型式名").toString().trim(); + String masterName = readAll.get("主型式名") == null ? null : readAll.get("主型式名").toString().trim(); String models = readAll.get("机种") == null ? null : readAll.get("机种").toString().trim(); String country = readAll.get("国别") == null ? null : readAll.get("国别").toString().trim(); + String description = readAll.get("备注") == null ? null : readAll.get("备注").toString().trim(); String outboundType = readAll.get("出库类型") == null ? null : readAll.get("出库类型").toString().trim(); if (code.length() > 0) { BigItem bigItem = bigItemRepository.findByCode(code); @@ -235,6 +237,8 @@ public class ImportDataServiceImpl implements ImportDataService { re = "b"; } bigItem.setModels(models); + bigItem.setMasterName(masterName); + bigItem.setDescription(description); bigItem.setName(name); bigItem.setCountry(country); bigItem.setOutboundType(outboundType); 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 57cde46..23966c1 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 @@ -17,8 +17,10 @@ package com.youchain.basicdata.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; import com.youchain.appupdate.ReturnJson.RLocLayout; import com.youchain.basicdata.domain.Area; +import com.youchain.basicdata.domain.BigItem; import com.youchain.basicdata.domain.Point; import com.youchain.utils.*; import lombok.RequiredArgsConstructor; @@ -30,6 +32,7 @@ import com.youchain.basicdata.service.dto.PointQueryCriteria; import com.youchain.basicdata.service.mapstruct.PointMapper; import lombok.extern.slf4j.Slf4j; import net.dreamlu.mica.core.utils.JsonUtil; +import org.apache.commons.collections4.CollectionUtils; import org.hibernate.SQLQuery; import org.hibernate.transform.AliasToEntityMapResultTransformer; import org.springframework.stereotype.Service; @@ -491,4 +494,25 @@ public class PointServiceImpl implements PointService { return point; } + @Override + public List queryByPointCodes(List codes) { + if (CollectionUtils.isEmpty(codes)) { + return Collections.emptyList(); + } + //去重 + codes = codes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList()); + return pointRepository.queryByPointCodes(codes); + } + + @Override + public Map queryByPointCodesToMap(List codes) { + List items = queryByPointCodes(codes); + //封装成map + Map itemMap = Maps.newHashMap(); + for (Point item : items) { + itemMap.put(item.getCode(), item); + } + return itemMap; + } + } \ No newline at end of file diff --git a/youchain-system/src/main/java/com/youchain/businessdata/inputJson/imports/BomAccountImport.java b/youchain-system/src/main/java/com/youchain/businessdata/inputJson/imports/BomAccountImport.java new file mode 100644 index 0000000..1574cfe --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/businessdata/inputJson/imports/BomAccountImport.java @@ -0,0 +1,289 @@ +package com.youchain.businessdata.inputJson.imports; + +import cn.idev.excel.annotation.ExcelIgnore; +import cn.idev.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: 发票箱单导入 + * @author: youzhi.gao + * @date: 2020-04-01 15:01 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class BomAccountImport { + //箱种 收容数 台车库位 大小物 税别 机型1 台用量1 机型2 台用量2 机型3 台用量3 机型4 台用量4 机型5 台用量5 机型6 台用量6 机型7 台用量7 机型8 台用量8 机型9 台用量9 机型10 台用量10 机型11 台用量11 机型12 台用量12 机型13 台用量13 机型14 台用量14 机型15 台用量15 机型16 台用量16 机型17 台用量17 机型18 台用量18 机型19 台用量19 机型20 台用量20 机型21 台用量21 机型22 台用量22 机型23 台用量23 机型24 台用量24 机型25 台用量25 机型26 台用量26 机型27 台用量27 机型28 台用量28 机型29 台用量29 机型30 台用量30 机型31 台用量31 机型32 台用量32 机型33 台用量33 机型34 台用量34 机型35 台用量35 机型36 台用量36 机型37 台用量37 机型38 台用量38 + @ExcelProperty("品番") + private String pf; + + @ExcelProperty("纳所") + private String ns; + + @ExcelProperty("品名(多国语)") + private String pm; + + @ExcelProperty("本国语供应商1(多国语)") + private String gys; + + @ExcelProperty("A/C") + private String ac; + + @ExcelProperty("加工内容") + private String jgnr; + + @ExcelProperty("制材区分") + private String zcfq; + + @ExcelProperty("货位") + private String hw; + + @ExcelProperty("箱种") + private String xz; + + @ExcelProperty("收容数") + private String srs; + + @ExcelProperty("台车库位") + private String tckw; + + @ExcelProperty("大小物") + private String dxw; + + @ExcelProperty("税别") + private String sb; + + @ExcelProperty("机型1") + private String jx1; + + @ExcelProperty("机型2") + private String jx2; + + @ExcelProperty("机型3") + private String jx3; + + @ExcelProperty("机型4") + private String jx4; + + @ExcelProperty("机型5") + private String jx5; + + @ExcelProperty("机型6") + private String jx6; + + @ExcelProperty("机型7") + private String jx7; + + @ExcelProperty("机型8") + private String jx8; + + @ExcelProperty("机型9") + private String jx9; + + @ExcelProperty("机型10") + private String jx10; + + @ExcelProperty("机型11") + private String jx11; + + @ExcelProperty("机型12") + private String jx12; + + @ExcelProperty("机型13") + private String jx13; + + @ExcelProperty("机型14") + private String jx14; + + @ExcelProperty("机型15") + private String jx15; + + @ExcelProperty("机型16") + private String jx16; + + @ExcelProperty("机型17") + private String jx17; + + @ExcelProperty("机型18") + private String jx18; + + @ExcelProperty("机型19") + private String jx19; + + @ExcelProperty("机型20") + private String jx20; + + @ExcelProperty("机型21") + private String jx21; + + @ExcelProperty("机型22") + private String jx22; + + @ExcelProperty("机型23") + private String jx23; + + @ExcelProperty("机型24") + private String jx24; + + @ExcelProperty("机型25") + private String jx25; + + @ExcelProperty("机型26") + private String jx26; + + @ExcelProperty("机型27") + private String jx27; + + @ExcelProperty("机型28") + private String jx28; + + @ExcelProperty("机型29") + private String jx29; + + @ExcelProperty("机型30") + private String jx30; + + @ExcelProperty("机型31") + private String jx31; + + @ExcelProperty("机型32") + private String jx32; + + @ExcelProperty("机型33") + private String jx33; + + @ExcelProperty("机型34") + private String jx34; + + @ExcelProperty("机型35") + private String jx35; + + @ExcelProperty("机型36") + private String jx36; + + @ExcelProperty("机型37") + private String jx37; + + @ExcelProperty("机型38") + private String jx38; + @ExcelProperty("台用量1") + private String tyl1; + + @ExcelProperty("台用量2") + private String tyl2; + + @ExcelProperty("台用量3") + private String tyl3; + + @ExcelProperty("台用量4") + private String tyl4; + + @ExcelProperty("台用量5") + private String tyl5; + + @ExcelProperty("台用量6") + private String tyl6; + + @ExcelProperty("台用量7") + private String tyl7; + + @ExcelProperty("台用量8") + private String tyl8; + + @ExcelProperty("台用量9") + private String tyl9; + + @ExcelProperty("台用量10") + private String tyl10; + + @ExcelProperty("台用量11") + private String tyl11; + + @ExcelProperty("台用量12") + private String tyl12; + + @ExcelProperty("台用量13") + private String tyl13; + + @ExcelProperty("台用量14") + private String tyl14; + + @ExcelProperty("台用量15") + private String tyl15; + + @ExcelProperty("台用量16") + private String tyl16; + + @ExcelProperty("台用量17") + private String tyl17; + + @ExcelProperty("台用量18") + private String tyl18; + + @ExcelProperty("台用量19") + private String tyl19; + + @ExcelProperty("台用量20") + private String tyl20; + + @ExcelProperty("台用量21") + private String tyl21; + + @ExcelProperty("台用量22") + private String tyl22; + + @ExcelProperty("台用量23") + private String tyl23; + + @ExcelProperty("台用量24") + private String tyl24; + + @ExcelProperty("台用量25") + private String tyl25; + + @ExcelProperty("台用量26") + private String tyl26; + + @ExcelProperty("台用量27") + private String tyl27; + + @ExcelProperty("台用量28") + private String tyl28; + + @ExcelProperty("台用量29") + private String tyl29; + + @ExcelProperty("台用量30") + private String tyl30; + + @ExcelProperty("台用量31") + private String tyl31; + + @ExcelProperty("台用量32") + private String tyl32; + + @ExcelProperty("台用量33") + private String tyl33; + + @ExcelProperty("台用量34") + private String tyl34; + + @ExcelProperty("台用量35") + private String tyl35; + + @ExcelProperty("台用量36") + private String tyl36; + + @ExcelProperty("台用量37") + private String tyl37; + + @ExcelProperty("台用量38") + private String tyl38; + + + +} diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java index e73514f..ec6420e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/AsnDetailController.java @@ -34,6 +34,7 @@ import com.youchain.businessdata.inputJson.IRkConfirm; import com.youchain.businessdata.inputJson.IRkInv; import com.youchain.businessdata.inputJson.IRkPut; import com.youchain.businessdata.domain.*; +import com.youchain.businessdata.inputJson.IScanPut; import com.youchain.businessdata.inputJson.buttenJson.AsnDetailButton; import com.youchain.businessdata.repository.AsnDetailRepository; import com.youchain.businessdata.repository.InventoryRepository; @@ -203,7 +204,6 @@ public class AsnDetailController { @AnonymousAccess @Transactional public ResponseEntity putawayInvApp(@RequestBody IRkPut s) { - log.info("s:"+s); String pointCode = s.getPointCode(); String ewm = s.getEwm(); int seq=s.getSeq(); @@ -219,7 +219,7 @@ public class AsnDetailController { if(d.getReceivedQty()>0){ return new ResponseEntity<>(ewm + "已上架,不能重复上架", BAD_REQUEST); } - if(seq==1){ + if(seq==1){//扫描列表 Item it=d.getItem(); map.setItemCode(it.getCode()); map.setItemName(it.getName()); @@ -231,7 +231,7 @@ public class AsnDetailController { map.setTjkw(it.getPoint()==null?null:it.getPoint().getCode()); return new ResponseEntity<>(map, HttpStatus.OK); } - if (seq==2) { + if (seq==2) {//列表提交上架 if(pointCode==null||!pointCode.equals("")){ Point dstPoint=d.getItem().getPoint(); if(dstPoint==null){ @@ -295,6 +295,20 @@ public class AsnDetailController { return new ResponseEntity<>("操作成功", HttpStatus.OK); } + @PostMapping("/collectPutAway") + @Log("现品票采集上架") + @ApiOperation("现品票采集表") + @AnonymousAccess + @Transactional(rollbackFor = Exception.class) + public ResponseEntity collectPutAway(@RequestBody HashMap rk) { + XppRecord xppRecord = xppRecordService.saveXppRecord(rk.get("ewm").toString()); + Long pointId=Long.parseLong(rk.get("pointId").toString()); + AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord); + Point point=pointService.findEntityById(pointId); + putawayInv(asnDetail.getId(),point.getArea().getId(),pointId,xppRecord.getNrs(),xppRecord.getEwm()); + return new ResponseEntity<>("操作成功", HttpStatus.OK); + } + @PostMapping("/putawayConfirmXpp") @Log("现品票上架确认-系统") diff --git a/youchain-system/src/main/java/com/youchain/businessdata/rest/XppRecordController.java b/youchain-system/src/main/java/com/youchain/businessdata/rest/XppRecordController.java index 83eca60..62b80aa 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/rest/XppRecordController.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/rest/XppRecordController.java @@ -379,66 +379,67 @@ public class XppRecordController { return new ResponseEntity<>("操作成功", HttpStatus.OK); } - @PostMapping("/collectFromPass") - @Log("现品票采集表") - @ApiOperation("现品票采集表") - @AnonymousAccess - @Transactional(rollbackFor = Exception.class) - public ResponseEntity collectFromPass(@RequestBody String resources) { - XppRecord xppRecord = xppRecordService.collectFromPass(resources); - // AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord); - return new ResponseEntity<>("操作成功", HttpStatus.OK); - } - @PostMapping("/xppCollectApp") - @Log("APP现品票采集表") - @ApiOperation("APP现品票采集表") - @AnonymousAccess - @Transactional(rollbackFor = Exception.class) - public ResponseEntity xppCollectApp(@RequestBody String resources) { - JSONObject jsonObject = JSONObject.parseObject(resources); - String ewm=jsonObject.getString("ewm"); - if (ewm.length()<85){ - throw new BadRequestException("二维码格式错误"); - } - int i=0; - String gc=ewm.substring(i, i+=2); - String pq=ewm.substring(i, i+=1); - String pf=ewm.substring(i, i+=10); - String ac=ewm.substring(i, i+=3); - String jgnr=ewm.substring(i, i+=3); - String zf=ewm.substring(i, i+=10); - String ddbh=ewm.substring(i, i+=8); - String nrzsr=ewm.substring(i, i+=8); - String nrs=ewm.substring(i, i+=7); - String gys=ewm.substring(i, i+=12); - String nrcs=ewm.substring(i, i+=6); - String zzkw=ewm.substring(i, i+=6); - String cgkw=ewm.substring(i, i+=6); - String fzh=ewm.substring(i, i+=3); - Item item = itemRepository.findByCode(pf); - if (item==null){ - throw new BadRequestException("部品品番不存在"); - } - XppRecord xppRecord = xppRecordRepository.findByCode(ewm); - if (xppRecord==null){ - xppRecord=new XppRecord(); - xppRecord.setEwm(ewm); - }else{ - throw new BadRequestException("二维码已采集"); - } - RRkXpp xpp = new RRkXpp(); - xpp.setItemCode(item.getCode()); - xpp.setItemName(item.getName()); - xpp.setAc(ac); - xpp.setDdbh(ddbh); - xpp.setNrs(Integer.valueOf(nrs)); - xpp.setNrzsr(nrzsr); - xpp.setFzh(fzh); - xpp.setGys(gys); - xpp.setCjsj(new Date()); - return new ResponseEntity<>(xpp, HttpStatus.OK); - } +// @PostMapping("/collectFromPass") +// @Log("现品票采集表") +// @ApiOperation("现品票采集表") +// @AnonymousAccess +// @Transactional(rollbackFor = Exception.class) +// public ResponseEntity collectFromPass(@RequestBody IScanPut iPut ) { +// XppRecord xppRecord = xppRecordService.collectFromPass(iPut.getScanCode()); +// // AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord); +// return new ResponseEntity<>("操作成功", HttpStatus.OK); +// } +// +// @PostMapping("/xppCollectApp") +// @Log("APP现品票采集表") +// @ApiOperation("APP现品票采集表") +// @AnonymousAccess +// @Transactional(rollbackFor = Exception.class) +// public ResponseEntity xppCollectApp(@RequestBody String resources) { +// JSONObject jsonObject = JSONObject.parseObject(resources); +// String ewm=jsonObject.getString("ewm"); +// if (ewm.length()<85){ +// throw new BadRequestException("二维码格式错误"); +// } +// int i=0; +// String gc=ewm.substring(i, i+=2); +// String pq=ewm.substring(i, i+=1); +// String pf=ewm.substring(i, i+=10); +// String ac=ewm.substring(i, i+=3); +// String jgnr=ewm.substring(i, i+=3); +// String zf=ewm.substring(i, i+=10); +// String ddbh=ewm.substring(i, i+=8); +// String nrzsr=ewm.substring(i, i+=8); +// String nrs=ewm.substring(i, i+=7); +// String gys=ewm.substring(i, i+=12); +// String nrcs=ewm.substring(i, i+=6); +// String zzkw=ewm.substring(i, i+=6); +// String cgkw=ewm.substring(i, i+=6); +// String fzh=ewm.substring(i, i+=3); +// Item item = itemRepository.findByCode(pf); +// if (item==null){ +// throw new BadRequestException("部品品番不存在"); +// } +// XppRecord xppRecord = xppRecordRepository.findByCode(ewm); +// if (xppRecord==null){ +// xppRecord=new XppRecord(); +// xppRecord.setEwm(ewm); +// }else{ +// throw new BadRequestException("二维码已采集"); +// } +// RRkXpp xpp = new RRkXpp(); +// xpp.setItemCode(item.getCode()); +// xpp.setItemName(item.getName()); +// xpp.setAc(ac); +// xpp.setDdbh(ddbh); +// xpp.setNrs(Integer.valueOf(nrs)); +// xpp.setNrzsr(nrzsr); +// xpp.setFzh(fzh); +// xpp.setGys(gys); +// xpp.setCjsj(new Date()); +// return new ResponseEntity<>(xpp, HttpStatus.OK); +// } @PostMapping("/confirmCollectApp") @Log("APP现品票采集表") @ApiOperation("APP现品票采集表") @@ -489,50 +490,55 @@ public class XppRecordController { JSONObject jsonObject = JSONObject.parseObject(resources); String ewm=jsonObject.getString("ewm"); String type=jsonObject.getString("type"); - XppRecord xppRecord = xppRecordRepository.findByCode(ewm); - String gw=""; - if (xppRecord==null){ - throw new BadRequestException("现品票未采集"); + if(type.equals("7")){//现品票二维码解析 + RRkXpp xpp = xppRecordService.xppAnalysis(ewm); + return new ResponseEntity<>(xpp, HttpStatus.OK); }else{ - if(type.equals("1")) {//留样出库 - if(!xppRecord.getStatus().equals(BizStatus.RECEIVED)&&!xppRecord.getStatus().equals(BizStatus.PUTAWAY)){ - throw new BadRequestException("现品票状态不正确"); - } - } else if (type.equals("2")) {//还样入库 - if(!xppRecord.getStatus().equals(BizStatus.RETENTION_OUT)){ - throw new BadRequestException("现品票状态不正确"); - } - }else if (type.equals("3")) {//现品票出库 - if(!xppRecord.getStatus().equals(BizStatus.PUTAWAY)){ - throw new BadRequestException("现品票状态不正确"); - } - }else if (type.equals("4")) {//现品票退库接收 - if(!xppRecord.getStatus().equals(BizStatus.SHIP_ALL)&&!xppRecord.getStatus().equals(BizStatus.SL_ALL)){ - throw new BadRequestException("现品票状态不正确"); - } - }else if (type.equals("5")) {//现品票投料 - if(xppRecord.getCkTaskLog()==null){ - throw new BadRequestException("现品票未出库"); - } - if(xppRecord.getCkTaskLog().getSlQty()<=0){ - throw new BadRequestException("现品票未接收"); - } + String gw=""; + XppRecord xppRecord = xppRecordRepository.findByCode(ewm); + if (xppRecord==null){ + throw new BadRequestException("现品票未采集"); + }else { + if (type.equals("1")) {//留样出库 + if (!xppRecord.getStatus().equals(BizStatus.RECEIVED) && !xppRecord.getStatus().equals(BizStatus.PUTAWAY)) { + throw new BadRequestException("现品票状态不正确"); + } + } else if (type.equals("2")) {//还样入库 + if (!xppRecord.getStatus().equals(BizStatus.RETENTION_OUT)) { + throw new BadRequestException("现品票状态不正确"); + } + } else if (type.equals("3")) {//现品票出库 + if (!xppRecord.getStatus().equals(BizStatus.PUTAWAY)) { + throw new BadRequestException("现品票状态不正确"); + } + } else if (type.equals("4")) {//现品票退库接收 + if (!xppRecord.getStatus().equals(BizStatus.SHIP_ALL) && !xppRecord.getStatus().equals(BizStatus.SL_ALL)) { + throw new BadRequestException("现品票状态不正确"); + } + } else if (type.equals("5")) {//现品票投料 + if (xppRecord.getCkTaskLog() == null) { + throw new BadRequestException("现品票未出库"); + } + if (xppRecord.getCkTaskLog().getSlQty() <= 0) { + throw new BadRequestException("现品票未接收"); + } - Task t=xppRecord.getCkTaskLog().getTask(); - PickDetail pd =t.getPickDetail(); - if(pd.getShArea()!=null) { - gw=pd.getShArea().getWorkingStation(); - } - }else if (type.equals("6")) {//现品票移位 - if(xppRecord.getCkTaskLog()!=null){ - throw new BadRequestException("现品票已备货"); + Task t = xppRecord.getCkTaskLog().getTask(); + PickDetail pd = t.getPickDetail(); + if (pd.getShArea() != null) { + gw = pd.getShArea().getWorkingStation(); + } + } else if (type.equals("6")) {//现品票移位 + if (xppRecord.getCkTaskLog() != null) { + throw new BadRequestException("现品票已备货"); + } } } - + RRkXpp xpp = xppRecordService.xppAnalysis(xppRecord); + xpp.setGw(gw); + return new ResponseEntity<>(xpp, HttpStatus.OK); } - RRkXpp xpp = xppRecordService.xppAnalysis(xppRecord); - xpp.setGw(gw); - return new ResponseEntity<>(xpp, HttpStatus.OK); + } @PostMapping("/xppLyOutApp") @Log("APP现品票留样出库") diff --git a/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint.java b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint.java new file mode 100644 index 0000000..f482c74 --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint.java @@ -0,0 +1,61 @@ +package com.youchain.businessdata.returnJson; + +import cn.idev.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; + +/** + * @description: 标签打印 + * @date: 2020-04-01 15:01 + */ +public interface BomPrint { + String getNs(); + String getXz(); + String getPm(); + String getSupplier(); + String getHw(); + String getSrs(); + String getDxw(); + String getBonded(); + String getJxs(); + String getTyls(); + + String getEwm(); + +// private String ns; +// +// @ExcelProperty("箱种") +// private String xz; +// +// @ExcelProperty("品名") +// private String pm; +// +// @ExcelProperty("供应商") +// private String supplier; +// +// @ExcelProperty("货位") +// private String hw; +// +// @ExcelProperty("收容数") +// private String srs; +// +// @ExcelProperty("大小物") +// private String dxw; +// +// @ExcelProperty("税别") +// private String bonded; +// +// @ExcelProperty("机型") +// private String jxs; +// +// @ExcelProperty("台用量") +// private String tyls; +// +// @ExcelProperty("二维码") +// private String ewm; + +} diff --git a/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian.java b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian.java new file mode 100644 index 0000000..edeaee3 --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian.java @@ -0,0 +1,45 @@ +package com.youchain.businessdata.returnJson; + +import lombok.Data; + +/** + * @description: 标签打印 + * @date: 2020-04-01 15:01 + */ +@Data +public class BomPrint_BiaoQian { + + + private String ns; + + //"箱种" + private String xz; + + //"品名" + private String pm; + + //"供应商" + private String supplier; + + //"货位" + private String hw; + + //"收容数" + private String srs; + + //"大小物" + private String dxw; + + //"税别" + private String bonded; + + //"机型" + private String [] jxs; + + //"台用量" + private String [] tyls; + + //"二维码" + private String ewm; + +} diff --git a/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian2.java b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian2.java new file mode 100644 index 0000000..53206a6 --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/BomPrint_BiaoQian2.java @@ -0,0 +1,45 @@ +package com.youchain.businessdata.returnJson; + +import lombok.Data; + +/** + * @description: 标签打印 + * @date: 2020-04-01 15:01 + */ +@Data +public class BomPrint_BiaoQian2 { + + + private String ns; + + //"箱种" + private String xz; + + //"品名" + private String pm; + + //"供应商" + private String supplier; + + //"货位" + private String hw; + + //"收容数" + private String srs; + + //"大小物" + private String dxw; + + //"税别" + private String bonded; + + //"机型" + private String jxs; + + //"台用量" + private String tyls; + + //"二维码" + private String ewm; + +} diff --git a/youchain-system/src/main/java/com/youchain/businessdata/returnJson/RRkXpp.java b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/RRkXpp.java index 326c74f..6208b3a 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/returnJson/RRkXpp.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/returnJson/RRkXpp.java @@ -36,4 +36,11 @@ public class RRkXpp { /**工位*/ String gw; + String pq; + String jgnr; + String zf; + String nrcs; + String zzkw; + String cgkw; + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/XppRecordService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/XppRecordService.java index f2338ab..44bdb95 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/XppRecordService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/XppRecordService.java @@ -110,6 +110,19 @@ public interface XppRecordService { * @return */ RRkXpp xppAnalysis(XppRecord xppRecord) ; + /** + * 现品票二维码解析 + * @param ewm + * @return + */ + RRkXpp xppAnalysis(String ewm); + + /*** + * 新增现品票标签 + * @param ewm + * @return + */ + XppRecord saveXppRecord(String ewm); /** * 现品票出库 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickTicketServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickTicketServiceImpl.java index fa62ad9..c89fd79 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickTicketServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickTicketServiceImpl.java @@ -16,7 +16,6 @@ package com.youchain.businessdata.service.impl; import com.alibaba.fastjson.JSON; -import com.sun.org.apache.xpath.internal.operations.Bool; import com.youchain.basicdata.domain.*; import com.youchain.basicdata.repository.StockRepository; import com.youchain.basicdata.service.PointService; diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/XppRecordServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/XppRecordServiceImpl.java index 7ef1d29..a9bcb8c 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/XppRecordServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/XppRecordServiceImpl.java @@ -163,7 +163,7 @@ public class XppRecordServiceImpl implements XppRecordService { @Override public XppRecord collectFromPass(String ewm) { - if (ewm.length() < 85) { + if (ewm.length() < 82) { throw new BadRequestException("二维码格式错误"); } int i = 0; @@ -180,7 +180,12 @@ public class XppRecordServiceImpl implements XppRecordService { String nrcs = ewm.substring(i, i += 6); String zzkw = ewm.substring(i, i += 6); String cgkw = ewm.substring(i, i += 6); - String fzh = ewm.substring(i, i += 3); + String fzh =null; + String sb=null; + if(ewm.length()==85){//85为国产 + fzh=ewm.substring(i, i += 3); + sb="课税"; + } //纳入场所包含0055不接收 if(nrcs.indexOf("0055")==0){ throw new BadRequestException(pf+"纳入场所包含0055"); @@ -376,6 +381,118 @@ public class XppRecordServiceImpl implements XppRecordService { return xpp; } + public RRkXpp xppAnalysis(String ewm) { + if (ewm.length() < 82) { + throw new BadRequestException("二维码格式错误"); + } + int i = 0; + String gc = ewm.substring(i, i += 2); + String pq = ewm.substring(i, i += 1); + String pf = ewm.substring(i, i += 10); + String ac = ewm.substring(i, i += 3); + String jgnr = ewm.substring(i, i += 3); + String zf = ewm.substring(i, i += 10); + String ddbh = ewm.substring(i, i += 8); + String nrzsr = ewm.substring(i, i += 8); + String nrs = ewm.substring(i, i += 7); + String gys = ewm.substring(i, i += 12); + String nrcs = ewm.substring(i, i += 6); + String zzkw = ewm.substring(i, i += 6); + String cgkw = ewm.substring(i, i += 6); + String fzh =null; + if(ewm.length()==85){//85为国产 + fzh=ewm.substring(i, i += 3); + } +// //纳入场所包含0055不接收 +// if(nrcs.indexOf("0055")==0){ +// throw new BadRequestException(pf+"纳入场所包含0055"); +// } + Item item = itemRepository.findByCode(pf); + if (item==null){ + throw new BadRequestException("部品品番不存在"); + } + XppRecord xppRecord = xppRecordRepository.findByCode(ewm); + if (xppRecord!=null){ + throw new BadRequestException("二维码已采集"); + } + RRkXpp xpp = new RRkXpp(); + xpp.setItemCode(item.getCode()); + xpp.setItemName(item.getName()); + xpp.setAc(ac); + xpp.setDdbh(ddbh); + xpp.setNrs(Integer.valueOf(nrs)); + xpp.setNrzsr(nrzsr); + xpp.setFzh(fzh); + xpp.setGys(gys.trim()); + xpp.setCjsj(new Date()); + xpp.setJgnr(jgnr); + xpp.setPq(pq); + xpp.setZf(zf); + xpp.setNrcs(nrcs); + xpp.setZzkw(zzkw); + xpp.setCgkw(cgkw); + return xpp; + } + + public XppRecord saveXppRecord(String ewm){ + XppRecord xppRecord = xppRecordRepository.findByCode(ewm); + if (xppRecord != null) { + throw new BadRequestException("二维码已采集"); + } + RRkXpp xpp=this.xppAnalysis(ewm); + Item item = itemRepository.findByCode(xpp.getItemCode()); + if (item == null) { + throw new BadRequestException("部品品番不存在"); + } + xppRecord = new XppRecord(); + Area area=areaRepository.getByCode(BaseStatus.DEFAULT_AREA); +// Long user_id=SecurityUtils.getCurrentUserId(); +// List jobs=jobRepository.jobAreaCodes(user_id); +// if(jobs.size()>0){ +// String areaCode= jobs.get(0).getAreaCode(); +// Area area=areaRepository.getByCode(areaCode); +// if(area==null){ +// throw new BadRequestException("维护岗位对应的库区"); +// } +// xppRecord.setArea(area); +// } +// Long areaId=bomAccountRepository.getItemAreaId(item.getId()); +// Area area=areaRepository.getById(areaId); +// if(area==null){ +// throw new BadRequestException(pf+"找不到BOM对应的出库库区"); +// } + xppRecord.setItem(item); + xppRecord.setItemCode(xpp.getItemCode()); + xppRecord.setAreaCode(xpp.getPq()); + xppRecord.setAc(xpp.getAc()); + xppRecord.setContents(xpp.getJgnr()); + xppRecord.setZf(xpp.getZf()); + xppRecord.setDdbh(xpp.getDdbh()); + xppRecord.setNrs(Integer.valueOf(xpp.getNrs())); + xppRecord.setRelaSupplier(xpp.getGys()); + xppRecord.setRelaCode(xpp.getNrcs()); + xppRecord.setZPointCode(xpp.getZzkw()); + xppRecord.setCPointCode(xpp.getCgkw()); + xppRecord.setFzh(xpp.getFzh()); + xppRecord.setArea(area); + xppRecord.setEwm(ewm); + DateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Timestamp nrDate = null; + try { + nrDate = Timestamp.valueOf(sdf2.format(sdf.parse(xpp.getNrzsr() + "000000"))); + } catch (Exception e) { + + } + + xppRecord.setNrDate(nrDate); + //采集时间 + xppRecord.setCjDate(new Timestamp(System.currentTimeMillis())); + xppRecord.setStatus(BizStatus.RECEIVED); + xppRecordRepository.save(xppRecord); + return xppRecord; + } + public void xppShipOut(Long id, Area area,Point srcPoint,Point zzkw,String type,String billCode,String des) { XppRecord xppRecord = xppRecordRepository.getById(id); if(!xppRecord.getStatus().equals(BizStatus.PUTAWAY)){ 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 0583090..96d021f 100644 --- a/youchain-system/src/main/java/com/youchain/utils/BaseStatus.java +++ b/youchain-system/src/main/java/com/youchain/utils/BaseStatus.java @@ -14,6 +14,10 @@ public interface BaseStatus { * 占用 */ public static String USED = "USED"; + + /** + * 材管库位通用完成品,用于打印标签*/ + public static String DEFAULT_CG_BIG = "CG_WCP"; /** * 可用 */ diff --git a/youchain-system/src/main/java/com/youchain/utils/BizStatus.java b/youchain-system/src/main/java/com/youchain/utils/BizStatus.java index b8698f5..8302da8 100644 --- a/youchain-system/src/main/java/com/youchain/utils/BizStatus.java +++ b/youchain-system/src/main/java/com/youchain/utils/BizStatus.java @@ -283,4 +283,5 @@ public class BizStatus { * 叫料模式-铺线备货; */ public static String PX_BH = "PX_BH"; + }