bom导入打印

main
FOAM 2025-08-11 18:03:26 +08:00
parent ce55905eec
commit f1300f45ab
32 changed files with 1499 additions and 122 deletions

View File

@ -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 = "完成形式名")

View File

@ -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 = "制造库位")

View File

@ -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

View File

@ -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<BigItem, Long>, JpaSpec
@Query(value = "SELECT * FROM base_big_item", nativeQuery = true)
List<BigItem> getBigItem();
@Query("from BigItem i where i.code in (:codes) and i.enabled=true ")
List<BigItem> queryByBigItemCodes(List<String> codes);
@Query("from BigItem i where i.code in (:names) and i.enabled=true ")
List<BigItem> queryByBigItemNames(List<String> names);
}

View File

@ -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<BomAccount, Long>, 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<BomAccount, Long>, J
List<Long> 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<BomPrint> 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<BomPrint> queryPrintAll();
}

View File

@ -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<Point, Long>, JpaSpecific
Point findByCode(String code);
/*@Query(value = "SELECT p.* FROM base_point p WHERE p.code=?1", nativeQuery = true)
List<Point> findByCodes(String code);*/
@Query("from Point i where i.code in (:codes) and i.enabled=true ")
List<Point> queryByPointCodes(List<String> codes);
}

View File

@ -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<Object> queryBomPrintList(BomAccountQueryCriteria criteria){
RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
redisUtils.del(SecurityUtils.getCurrentUsername()+"_BiaoQian");
List<BomPrint> 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<BomPrint_BiaoQian2> 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<Object> 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<BomPrint_BiaoQian2> list= JSONUtil.toList(json, BomPrint_BiaoQian2.class);
List<BomPrint_BiaoQian> 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")

View File

@ -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<Object> 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);
}
}

View File

@ -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<Map<String, Object>> 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);
}

View File

@ -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<BigItemDto> all, HttpServletResponse response) throws Exception, Exception;
List<BigItemDto> getBigItem(String type);
/**
*
* @param code
* @return
*/
BigItem existBigItem(String code);
List<BigItem> queryByBigItemCodes(List<String> codes);
Map<String, BigItem> queryByBigItemCodesToMap(List<String> codes);
List<BigItem> queryByBigItemNames(List<String> codes);
Map<String, BigItem> queryByBigItemNamesToMap(List<String> codes);
}

View File

@ -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<BomAccountDto> queryAll(BomAccountQueryCriteria criteria);
List<BomPrint> queryPrintAll(BomAccountQueryCriteria criteria);
/**
* ID
* @param id ID

View File

@ -0,0 +1,11 @@
package com.youchain.basicdata.service;
import org.springframework.web.multipart.MultipartFile;
public interface ImportBomAccountService {
/**
*
* @param file
*/
void importBomAccount(MultipartFile file);
}

View File

@ -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<Point> queryByPointCodes(List<String> codes);
Map<String, Point> queryByPointCodesToMap(List<String> codes);
}

View File

@ -33,6 +33,8 @@ public class BigItemDto implements Serializable {
/** 完成品品番 */
private String code;
/** 主形式名 */
private String masterName;
/** 完成形式名 */
private String name;

View File

@ -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;

View File

@ -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<String,Object> queryAll(BigItemQueryCriteria criteria, Pageable pageable){
@ -115,4 +120,59 @@ public class BigItemServiceImpl implements BigItemService {
List<BigItem> 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<BigItem> its = query.getResultList();
if (its.size() > 0) {
return its.get(0);
}
return null;
}
@Override
public List<BigItem> queryByBigItemCodes(List<String> 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<String, BigItem> queryByBigItemCodesToMap(List<String> codes) {
List<BigItem> items = queryByBigItemCodes(codes);
//封装成map
Map<String, BigItem> itemMap = Maps.newHashMap();
for (BigItem item : items) {
itemMap.put(item.getCode(), item);
}
return itemMap;
}
@Override
public List<BigItem> queryByBigItemNames(List<String> 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<String, BigItem> queryByBigItemNamesToMap(List<String> names) {
List<BigItem> items = queryByBigItemNames(names);
//封装成map
Map<String, BigItem> itemMap = Maps.newHashMap();
for (BigItem item : items) {
itemMap.put(item.getMasterName(), item);
}
return itemMap;
}
}

View File

@ -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<String,Object> queryAll(BomAccountQueryCriteria criteria, Pageable pageable){
Page<BomAccount> 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<BomAccountDto> queryAll(BomAccountQueryCriteria criteria){
return bomAccountMapper.toDto(bomAccountRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
}
public List<BomPrint> queryPrintAll(BomAccountQueryCriteria criteria){
List<BomPrint> bomPrints=bomAccountRepository.queryPrintAll(criteria.getItemCode(),null,null);
// List<BomPrint> bomPrints=bomAccountRepository.queryPrintAll();
log.info(bomPrints.toString());
return bomPrints;
}
@Override
@Transactional
@Cacheable(key = "'id:' + #p0")

View File

@ -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<BomAccountImport> dataList = FastExcelUtil.readExcelData(file, BomAccountImport.class, 0, 1);
//批量导入
importBomAccountData(dataList);
}
/**
*
*/
@Transactional
public void importBomAccountData(List<BomAccountImport> dataList) {
// TODO: 实现批量导入逻辑
// log.info("处理批量导入,数据条数: {}", dataList.size());
Map<String,ItemEntity> itemEntitys=new HashMap<>();
List<BomEntity> 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<String, Item> existItemMap = validateItem(itemEntitys);
//获取文件中所有的完成品
List<String> bigItemNames = bomEntitys.stream().map(BomEntity::getJx).collect(Collectors.toList());
bigItemNames = bigItemNames.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
//验证完成品品番
Map<String, BigItem> existBigItemMap = validateBigItem(bigItemNames);
//获取文件中所有的库位
List<String> hwCodes = dataList.stream().map(BomAccountImport::getHw).collect(Collectors.toList());
hwCodes = hwCodes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
//验证库位
Map<String, Point> existPointMap = validatePoint(hwCodes);
List<BomAccount> createBomList = new ArrayList<>();//批量新增BomAccount
List<BomAccount> 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<String,Item> validateItem(Map<String,ItemEntity> entitys) {
List<String> allCodes = entitys.values().stream()
.map(ItemEntity::getPf)
.collect(Collectors.toList());
Map<String, Item> existMap = itemService.queryByItemCodesToMap(allCodes);
Map<String, Item> createMap = new HashMap<>();
List<String> existCodes = new ArrayList<>(existMap.keySet());
// 获取两个集合的非交集说明品番不存在或失效,直接提示
List<String> difference = SmartStringUtil.getDifference(allCodes, existCodes);
List<Item> 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<Item> createEntityList= itemRepository.saveAll(creteItems);
for (Item it:createEntityList){
createMap.put(it.getCode(),it);
}
}
Map<String, Item> totalMap = new HashMap<>();
if (existMap != null) {
totalMap.putAll(existMap);
}
totalMap.putAll(createMap);
return totalMap;
}
//验证完成品品番
private Map<String,BigItem> validateBigItem(List<String> allCodes) {
log.info(allCodes.toString());
// Map<String, BigItem> existMap = bigItemService.queryByBigItemCodesToMap(allCodes);
Map<String, BigItem> existMap = bigItemService.queryByBigItemNamesToMap(allCodes);
Map<String, BigItem> createMap = new HashMap<>();
List<String> existCodes = new ArrayList<>(existMap.keySet());
// 获取两个集合的非交集说明品番不存在或失效,直接提示
List<String> difference = SmartStringUtil.getDifference(allCodes, existCodes);
List<BigItem> 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<BigItem> createEntityList= bigItemRepository.saveAll(createEntitys);
for (BigItem it:createEntityList){
createMap.put(it.getCode(),it);
}
}
Map<String, BigItem> totalMap = new HashMap<>();
if (existMap != null) {
totalMap.putAll(existMap);
}
totalMap.putAll(createMap);
return totalMap;
}
//验证库位
private Map<String, Point> validatePoint(List<String> codes) {
Map<String, Point> existMap = pointService.queryByPointCodesToMap(codes);
if (existMap.isEmpty()) {
throw new BadRequestException("库位不存在或已失效");
}
List<String> existCodes = new ArrayList(existMap.keySet());
// 获取两个集合的非交集说明品番不存在或失效,直接提示
List<String> difference = SmartStringUtil.getDifference(codes, existCodes);
if (CollectionUtils.isNotEmpty(difference)) {
throw new BadRequestException(difference + "库位不存在或已失效");
}
return existMap;
}
//验证模板是否使用正确
private void isValidTemplateType(MultipartFile file) {
List<String> 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<String> 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<BomEntity> batchBomEntitys(BomAccountImport data, List<BomEntity> 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;
}
}

View File

@ -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);

View File

@ -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<Point> queryByPointCodes(List<String> 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<String, Point> queryByPointCodesToMap(List<String> codes) {
List<Point> items = queryByPointCodes(codes);
//封装成map
Map<String, Point> itemMap = Maps.newHashMap();
for (Point item : items) {
itemMap.put(item.getCode(), item);
}
return itemMap;
}
}

View File

@ -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;
}

View File

@ -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<Object> 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<Object> 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("现品票上架确认-系统")

View File

@ -379,66 +379,67 @@ public class XppRecordController {
return new ResponseEntity<>("操作成功", HttpStatus.OK);
}
@PostMapping("/collectFromPass")
@Log("现品票采集表")
@ApiOperation("现品票采集表")
@AnonymousAccess
@Transactional(rollbackFor = Exception.class)
public ResponseEntity<Object> 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<Object> 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<Object> 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<Object> 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现品票留样出库")

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -36,4 +36,11 @@ public class RRkXpp {
/**工位*/
String gw;
String pq;
String jgnr;
String zf;
String nrcs;
String zzkw;
String cgkw;
}

View File

@ -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);
/**
*

View File

@ -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;

View File

@ -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<Job> 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)){

View File

@ -14,6 +14,10 @@ public interface BaseStatus {
*
*/
public static String USED = "USED";
/**
* */
public static String DEFAULT_CG_BIG = "CG_WCP";
/**
*
*/

View File

@ -283,4 +283,5 @@ public class BizStatus {
* -线;
*/
public static String PX_BH = "PX_BH";
}