FOAM 2025-08-29 18:01:11 +08:00
parent bca515060e
commit eb6a575312
48 changed files with 1283 additions and 509 deletions

View File

@ -217,6 +217,22 @@ public class Item extends BaseEntity implements Serializable {
@ApiModelProperty(value = "库位")
private Point point;
@Column(name = "`AC`")
@ApiModelProperty(value = "A/C")
private String ac;
@Column(name = "`contents`")
@ApiModelProperty(value = "加工内容")
private String contents;
@Column(name = "`xz`")
@ApiModelProperty(value = "箱种")
private String xz;
@Column(name = "`srs`")
@ApiModelProperty(value = "收容数")
private int srs=0;
public void copy(Item source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}

View File

@ -118,6 +118,10 @@ public class Point extends BaseEntity implements Serializable {
@Column(name = "`sort_index`")
@ApiModelProperty(value = "排序")
private int sortIndex=0;
@Column(name = "`inv_min`")
@ApiModelProperty(value = "库存下限")
private int invMin=0;
public void copy(Point source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}

View File

@ -17,6 +17,7 @@ package com.youchain.basicdata.repository;
import com.youchain.basicdata.domain.Area;
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;
import org.springframework.data.jpa.repository.Modifying;
@ -57,4 +58,7 @@ public interface AreaRepository extends JpaRepository<Area, Long>, JpaSpecificat
@Query(value = "SELECT * FROM base_area t where t.code in ('A仓','S仓')", nativeQuery = true)
List<Area> getBomOutAreas();
@Query("from Area i where i.name in (:codes) and i.enabled=true ")
List<Area> queryByAreaCodes(List<String> codes);
}

View File

@ -75,20 +75,34 @@ public interface BomAccountRepository extends JpaRepository<BomAccount, Long>, J
//获得所有BOM标签
//SUBSTRING(bi.master_name, 1, CEIL(CHAR_LENGTH(bi.master_name)/2))
@Query(value = "select max(ba.id) id ,it.code, ba.ns,it.name pm,point.code hw,ba.xz,ba.srs,ba.bonded,ba.supplier," +
// "GROUP_CONCAT(SUBSTRING(bi.master_name, 1, CEIL(CHAR_LENGTH(bi.master_name)/2))) jxs ,GROUP_CONCAT(ba.singles) tyls " +
"GROUP_CONCAT(bi.master_name) jxs ,GROUP_CONCAT(ba.singles) tyls " +
" GROUP_CONCAT(bi.master_name, ';') AS jxs ,GROUP_CONCAT(ba.singles, ';') AS tyls " +
"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" +
" left join base_area area on area.id=ba.r_area_id" +
" where ba.bp_type=:dxw and (it.code=:itemCode or :itemCode is null) and (point.code=:hw or :hw is null) " +
" where (ba.bp_type=:bp_type or :bp_type is null) and (it.code=:itemCode or :itemCode is null) and (point.code=:hw or :hw is null) " +
" and (area.code=:kq or :kq 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 " +
" and (bi.code=:bigItemCode or :bigItemCode is null) and (ba.supplier=:supplier or :supplier is null)" +
" and (ba.tckw=:tckw or :tckw is null) and ba.bp_type=:dxw" +
" GROUP BY it.code,it.name,ba.ns,ba.xz,ba.srs,ba.bonded,ba.supplier,point.code " +
"order by point.code ", nativeQuery = true)
List<BomPrint> queryPrintAll(String itemCode, String hw, String ns,String kq,String dxw);
List<BomPrint> queryPrintAll_old(String bigItemCode,String itemCode, String hw, String ns,String kq,String bp_type,String tckw,String supplier,String dxw);
@Query(value = "select ba.id id ,it.code, ba.ns,it.name pm,point.code hw,ba.xz,ba.srs,ba.bonded," +
"ba.supplier,bi.master_name AS jxs ,ba.singles AS tyls " +
"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" +
" left join base_area area on area.id=ba.r_area_id" +
" where (ba.bp_type=:bp_type or :bp_type is null) and (it.code=:itemCode or :itemCode is null) and (point.code=:hw or :hw is null) " +
" and (area.code=:kq or :kq is null) and (ba.ns=:ns or :ns is null)" +
" and (bi.code=:bigItemCode or :bigItemCode is null) and (ba.supplier=:supplier or :supplier is null)" +
" and (ba.tckw=:tckw or :tckw is null) and ba.bp_type=:dxw" +
" order by point.code, ba.ns,it.code,ba.bonded,bi.master_name ", nativeQuery = true)
List<BomPrint> queryPrintAll(String bigItemCode,String itemCode, String hw, String ns,String kq,String bp_type,String tckw,String supplier,String dxw);
}

View File

@ -48,7 +48,7 @@ public interface PointRepository extends JpaRepository<Point, Long>, JpaSpecific
@Query(value = "select p.code,area.`name` areaName from base_point p \n" +
"left join base_area area on area.id=p.area_id " +
" where (area.name=:areaName or :areaName is null)", nativeQuery = true)
" where (area.name=:areaName or :areaName is null) and p.description='自由货位标签'", nativeQuery = true)
List<PointZyPrint> queryPrintAll(String areaName);
}

View File

@ -50,9 +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.Arrays;
import java.util.List;
import java.util.*;
import javax.servlet.http.HttpServletResponse;
/**
@ -123,6 +121,42 @@ public class BomAccountController {
return new ResponseEntity<>(list,HttpStatus.OK);
}
// @GetMapping("/bomPrintBiaoQianList/{dxw}")
// @Log("获取Bom中库位标签")
// @ApiOperation("获取Bom中库位标签")
// @AnonymousAccess
// public ResponseEntity<Object> bomPrintBiaoQianList(@PathVariable("dxw") String dxw){
// RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
// String json=(String)redisUtils.get(SecurityUtils.getCurrentUsername()+dxw);
// //log.info(SecurityUtils.getCurrentUsername()+dxw+"-----"+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();
// String code=l.getCode().substring(0,5)+"-"+l.getCode().substring(5,l.getCode().length());
// bq.setNs(l.getNs()+"/"+code);
// bq.setCode(code);
// String hw=l.getHw();
// hw=hw.substring(0,3)+"-"+hw.substring(3,hw.length());
// bq.setHw(hw);
// bq.setPm(l.getPm());
// bq.setEwm(l.getId()+"]"+l.getCode()+"]"+l.getNs()+"]"+l.getBonded()+"]"+l.getHw());
// bq.setBonded(l.getBonded());
// bq.setSrs(l.getSrs());
// bq.setXz(l.getXz());
// bq.setSupplier(l.getSupplier());
// bq.setId(l.getId());
// bq.setJxs(l.getJxs() == null ? null :
// Arrays.stream(l.getJxs().split(";"))
// .map(s -> s.length() > 16 ? s.substring(0, 16) : s)
// .toArray(String[]::new));
// bq.setTyls(l.getTyls()==null?null:l.getTyls().split(";"));
// list2.add(bq);
// }
// return new ResponseEntity<>( list2,HttpStatus.OK);
// }
@GetMapping("/bomPrintBiaoQianList/{dxw}")
@Log("获取Bom中库位标签")
@ApiOperation("获取Bom中库位标签")
@ -132,9 +166,29 @@ public class BomAccountController {
String json=(String)redisUtils.get(SecurityUtils.getCurrentUsername()+dxw);
//log.info(SecurityUtils.getCurrentUsername()+dxw+"-----"+json);
List<BomPrint_BiaoQian2> list= JSONUtil.toList(json, BomPrint_BiaoQian2.class);
List<BomPrint_BiaoQian> list2=new ArrayList<>();
HashMap<String ,List<BomPrint_BiaoQian2>> map=new HashMap<>();
List<String> sortList=new ArrayList<>();
for(BomPrint_BiaoQian2 l:list){
String key=l.getCode()+"]"+l.getNs()+"]"+l.getBonded()+"]"+l.getHw();
log.info(l.getHw());
if(map.containsKey(key)){
List<BomPrint_BiaoQian2> list2=map.get(key);
list2.add(l);
map.put(key,list2);
}else{
List<BomPrint_BiaoQian2> list2=new ArrayList<>();
list2.add(l);
map.put(key,list2);
sortList.add(key);
}
}
List<BomPrint_BiaoQian> list2=new ArrayList<>();
// for (String key : map.keySet()) {
for(String key:sortList){
log.info(key);
List<BomPrint_BiaoQian2> bqs=map.get(key);
BomPrint_BiaoQian bq=new BomPrint_BiaoQian();
BomPrint_BiaoQian2 l=bqs.get(0);
String code=l.getCode().substring(0,5)+"-"+l.getCode().substring(5,l.getCode().length());
bq.setNs(l.getNs()+"/"+code);
bq.setCode(code);
@ -142,19 +196,31 @@ public class BomAccountController {
hw=hw.substring(0,3)+"-"+hw.substring(3,hw.length());
bq.setHw(hw);
bq.setPm(l.getPm());
bq.setEwm(l.getId()+"]"+l.getCode()+"]"+l.getNs()+"]"+l.getBonded()+"]"+l.getHw());
bq.setEwm(key);
bq.setBonded(l.getBonded());
bq.setSrs(l.getSrs());
bq.setXz(l.getXz());
bq.setSupplier(l.getSupplier());
bq.setId(l.getId());
bq.setJxs(l.getJxs() == null ? null :
Arrays.stream(l.getJxs().split(","))
.map(s -> s.length() > 10 ? s.substring(0, 10) : s)
.toArray(String[]::new));
bq.setTyls(l.getTyls()==null?null:l.getTyls().split(","));
String[] jxs=new String[bqs.size()];
String[] tyls=new String[bqs.size()];
for(int i=0;i<bqs.size();i++){
jxs[i]=bqs.get(i).getJxs();
tyls[i]=bqs.get(i).getTyls();
}
bq.setJxs(jxs);
bq.setTyls(tyls);
list2.add(bq);
}
// list2.sort(Comparator.comparing((BomPrint_BiaoQian item) -> {
// String[] parts = item.getHw().split("-");
// // 将前后部分都转换为整数进行比较
// int firstPart = Integer.parseInt(parts[0]);
// int secondPart = Integer.parseInt(parts[1]);
// // 先比较前部分,再比较后部分
// return firstPart * 1000 + secondPart;
// }));
return new ResponseEntity<>( list2,HttpStatus.OK);
}

View File

@ -22,6 +22,7 @@ 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.basicdata.service.ImportPointService;
import com.youchain.businessdata.domain.Asn;
import com.youchain.businessdata.domain.PickDetail;
import com.youchain.businessdata.domain.PickTicket;
@ -38,6 +39,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@ -70,6 +72,7 @@ public class ImportDataController {
private final ImportDataService importDataService;
private final ImportAsnService importAsnService;
private final ImportBomAccountService importBomAccountService;
private final ImportPointService importPointService;
@Log("导入完成品品番")
@ApiOperation("导入完成品品番")
@ -90,7 +93,7 @@ public class ImportDataController {
}
String re = importDataService.importBigItem(readAll.get(i));
}
return new ResponseEntity("导入成功", HttpStatus.OK);
return new ResponseEntity("导入成功", OK);
}
@Log("导入部品品番")
@ -115,7 +118,7 @@ public class ImportDataController {
b = b + 1;
}
}
return new ResponseEntity("导入成功:执行" + (a + b) + "行 新增" + a + "行,修改" + b + "行", HttpStatus.OK);
return new ResponseEntity("导入成功:执行" + (a + b) + "行 新增" + a + "行,修改" + b + "行", OK);
}
@Log("导入其他入库")
@ -139,7 +142,7 @@ public class ImportDataController {
throw new BadRequestException(HttpStatus.NOT_FOUND, (i + 1) + "行" + re);
}
}
return new ResponseEntity("导入成功", HttpStatus.OK);
return new ResponseEntity("导入成功", OK);
}
@Log("导入其他出库")
@ -167,7 +170,7 @@ public class ImportDataController {
// for(PickDetail d:ds) {
// pickDetailService.allocate(d.getId(),d.getOrderQty());
// }
return new ResponseEntity("导入成功", HttpStatus.OK);
return new ResponseEntity("导入成功", OK);
}
@Log("导入手工指示")
@ -178,7 +181,7 @@ public class ImportDataController {
public ResponseEntity<Object> importPickInstruction(@RequestParam("file") MultipartFile multipartFile) {
List<Map<String, Object>> readAll = getMaps(multipartFile);
importDataService.importPickInstruction(readAll);
return new ResponseEntity("导入成功", HttpStatus.OK);
return new ResponseEntity("导入成功", OK);
}
@Log("导入移位明细")
@ -189,7 +192,7 @@ public class ImportDataController {
public ResponseEntity<Object> importCountMoveDetail(@RequestParam Long countId, @RequestParam("file") MultipartFile multipartFile) {
List<Map<String, Object>> readAll = getMaps(multipartFile);
importDataService.importCountMoveDetail(countId, readAll);
return new ResponseEntity("导入成功", HttpStatus.OK);
return new ResponseEntity("导入成功", OK);
}
@Log("导入BOM工位清单")
@ -202,7 +205,7 @@ public class ImportDataController {
for (int i = 0; i < readAll.size(); i++) {
importDataService.importBomAccount(i, readAll.get(i));
}
return new ResponseEntity("导入成功" + readAll.size() + "行", HttpStatus.OK);
return new ResponseEntity("导入成功" + readAll.size() + "行", OK);
}
@ -234,7 +237,7 @@ public class ImportDataController {
long start = System.currentTimeMillis();
importAsnService.importAsn(file, templateType);
log.info("导入结束,耗时:{}ms", (System.currentTimeMillis() - start));
return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), HttpStatus.OK);
return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), OK);
}
@Log("导入BOM多列")
@ -247,6 +250,20 @@ public class ImportDataController {
long start = System.currentTimeMillis();
importBomAccountService.importBomAccount(multipartFile);
log.info("导入结束,耗时:{}ms", (System.currentTimeMillis() - start));
return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), HttpStatus.OK);
return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), OK);
}
@Log("导入Point")
@ApiOperation("导入Point")
@PostMapping(value = "/importPoint")
@Transactional
@AnonymousAccess
public ResponseEntity<Object> importPoint(@RequestParam("file") MultipartFile multipartFile) {
log.info("开始导入");
long start = System.currentTimeMillis();
importPointService.importPoint(multipartFile);
log.info("导入结束,耗时:{}ms", (System.currentTimeMillis() - start));
return new ResponseEntity<>(ApiResult.success(OK.value(), "导入成功", null), OK);
}
}

View File

@ -106,13 +106,13 @@ public class PointController {
ExcelReader reader = ExcelUtil.getReader(file);
int i = 0;
List<Map<String, Object>> readAll = reader.readAll();
for (i = 4000; i < readAll.size(); i++) {
for (i = 1; 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();
String ccTYPE = readAll.get(i).get("标签类型") == null ? "" : readAll.get(i).get("标签类型").toString().trim();
Area area = areaService.findByCode(areaCode);
if (area == null) {
throw new BadRequestException(areaCode+"库区不存在");
@ -159,6 +159,8 @@ public class PointController {
return new ResponseEntity<>(pointService.queryAll(criteria, pageable), HttpStatus.OK);
}
@PostMapping("/getPoints")
@Log("加载point下拉框")
@ApiOperation("加载point下拉框")

View File

@ -16,6 +16,7 @@
package com.youchain.basicdata.service;
import com.youchain.basicdata.domain.Area;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.service.dto.AreaDto;
import com.youchain.basicdata.service.dto.AreaQueryCriteria;
import org.springframework.data.domain.Pageable;
@ -91,4 +92,9 @@ public interface AreaService {
void download(List<AreaDto> all, HttpServletResponse response) throws Exception, Exception;
List<AreaDto> getAreas(String type);
List<Area> queryByAreaCodes(List<String> codes);
Map<String, Area> queryByAreaCodesToMap(List<String> codes);
}

View File

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

View File

@ -45,7 +45,7 @@ public class BomAccountDto implements Serializable {
/** 机型名称 */
private String bigItemName;
/** 刻印前缀 */
private String kyqz;
private String kyQz;
/** 加工内容 */
private String contents;

View File

@ -62,4 +62,8 @@ public class BomAccountQueryCriteria{
private String ns;
@Query
private String bp_type;
@Query
private String tckw;
@Query
private String supplier;
}

View File

@ -156,4 +156,12 @@ public class ItemDto implements Serializable {
private PointDto point;
private String ac;
private String contents;
private String xz;
private int srs;
}

View File

@ -79,7 +79,8 @@ public class PointDto implements Serializable {
private int line;
/** 层 */
private int rows;
/**库存下限*/
private int invMin;
/** 排序 */
private int sortIndex;
// /** 排序 */

View File

@ -16,11 +16,9 @@
package com.youchain.basicdata.service.impl;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.Maps;
import com.youchain.basicdata.domain.Area;
import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.service.PointService;
import com.youchain.basicdata.service.dto.PointDto;
import com.youchain.basicdata.service.mapstruct.PointMapper;
import com.youchain.utils.*;
import lombok.RequiredArgsConstructor;
import com.youchain.basicdata.repository.AreaRepository;
@ -29,19 +27,18 @@ import com.youchain.basicdata.service.dto.AreaDto;
import com.youchain.basicdata.service.dto.AreaQueryCriteria;
import com.youchain.basicdata.service.mapstruct.AreaMapper;
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.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;
/**
* @author HJL
@ -57,7 +54,6 @@ public class AreaServiceImpl implements AreaService {
private final AreaRepository areaRepository;
private final AreaMapper areaMapper;
private final EntityManager entityMapper;
private final PointService pointService;
@Override
public Map<String, Object> queryAll(AreaQueryCriteria criteria, Pageable pageable) {
@ -130,4 +126,27 @@ public class AreaServiceImpl implements AreaService {
}
return null;
}
@Override
public List<Area> queryByAreaCodes(List<String> codes) {
if (CollectionUtils.isEmpty(codes)) {
return Collections.emptyList();
}
//去重
codes = codes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
return areaRepository.queryByAreaCodes(codes);
}
@Override
public Map<String, Area> queryByAreaCodesToMap(List<String> codes) {
List<Area> items = queryByAreaCodes(codes);
//封装成map
Map<String, Area> itemMap = Maps.newHashMap();
for (Area item : items) {
itemMap.put(item.getName(), item);
itemMap.put(item.getCode(), item);
}
return itemMap;
}
}

View File

@ -89,7 +89,7 @@ public class BomAccountServiceImpl implements BomAccountService {
}
public List<BomPrint> queryPrintAll(BomAccountQueryCriteria criteria,String dxw){
List<BomPrint> bomPrints=bomAccountRepository.queryPrintAll(criteria.getItemCode(),criteria.getZPointCode(),criteria.getNs(),criteria.getRAreaCode(),dxw);
List<BomPrint> bomPrints=bomAccountRepository.queryPrintAll(criteria.getBigItemCode(),criteria.getItemCode(),criteria.getZPointCode(),criteria.getNs(),criteria.getRAreaCode(),criteria.getBp_type(),criteria.getTckw(),criteria.getSupplier(),dxw);
return bomPrints;
}

View File

@ -48,7 +48,7 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
//13个开始4个一循环
List<Map<Integer, Object>> list=FastExcelUtil.readExcelData2(file);
List<Map<Integer, Object>> list=FastExcelUtil.readExcelData2(file,2);
log.info("开始导入list:"+list.size());
List<BomEntity> dataList =new ArrayList<>();
@ -71,27 +71,27 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
for (int ccc=0;ccc<50;ccc++){
BomEntity bomAccountImport_new=new BomEntity();
int index=ccc*4+12;
bomAccountImport_new.setJx((map.get((index+1)) != null ? map.get((index+1)).toString() : ""));
bomAccountImport_new.setJxdm((map.get((index+2)) != null ? map.get((index+2)).toString() : ""));
bomAccountImport_new.setKyh((map.get((index+3)) != null ? map.get((index+3)).toString() : ""));
bomAccountImport_new.setTyl((map.get((index+4)) != null ? map.get((index+4)).toString() : ""));
String tyl=(map.get((index+4)) != null ? map.get((index+4)).toString() : "");
if (tyl.length() > 0) {
bomAccountImport_new.setJxdm((map.get((index+1)) != null ? map.get((index+1)).toString() : ""));
bomAccountImport_new.setJx((map.get((index+2)) != null ? map.get((index+2)).toString() : ""));
bomAccountImport_new.setKyh((map.get((index+3)) != null ? map.get((index+3)).toString() : ""));
bomAccountImport_new.setTyl(tyl);
log.error(bomAccountImport_new.getJx()+"---"+bomAccountImport_new.getTyl()+"---"+bomAccountImport_new.getKyh());
log.error(bomAccountImport_new.getJx()+"---"+bomAccountImport_new.getTyl());
bomAccountImport_new.setPf(bomAccountImport.getPf());
bomAccountImport_new.setNs(bomAccountImport.getNs());
bomAccountImport_new.setPm(bomAccountImport.getPm());
bomAccountImport_new.setGys(bomAccountImport.getGys());
bomAccountImport_new.setAc(bomAccountImport.getAc());
bomAccountImport_new.setJgnr(bomAccountImport.getJgnr());
bomAccountImport_new.setZcfq(bomAccountImport.getZcfq());
bomAccountImport_new.setHw(bomAccountImport.getHw());
bomAccountImport_new.setXz(bomAccountImport.getXz());
bomAccountImport_new.setSrs(bomAccountImport.getSrs());
bomAccountImport_new.setTckw(bomAccountImport.getTckw());
bomAccountImport_new.setDxw(bomAccountImport.getDxw());
bomAccountImport_new.setSb(bomAccountImport.getSb());
if (bomAccountImport_new.getTyl().length() > 0) {
bomAccountImport_new.setPf(bomAccountImport.getPf());
bomAccountImport_new.setNs(bomAccountImport.getNs());
bomAccountImport_new.setPm(bomAccountImport.getPm());
bomAccountImport_new.setGys(bomAccountImport.getGys());
bomAccountImport_new.setAc(bomAccountImport.getAc());
bomAccountImport_new.setJgnr(bomAccountImport.getJgnr());
bomAccountImport_new.setZcfq(bomAccountImport.getZcfq());
bomAccountImport_new.setHw(bomAccountImport.getHw());
bomAccountImport_new.setXz(bomAccountImport.getXz());
bomAccountImport_new.setSrs(bomAccountImport.getSrs());
bomAccountImport_new.setTckw(bomAccountImport.getTckw());
bomAccountImport_new.setDxw(bomAccountImport.getDxw());
bomAccountImport_new.setSb(bomAccountImport.getSb());
dataList.add(bomAccountImport_new);
}
}
@ -107,9 +107,9 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
Map<String, BomEntity> existBomAccountMap =new HashMap<>();
for(BomEntity ba:dataList){
String key=ba.pf+"]"+ba.jxdm+"]"+ba.ns+"]"+ ba.hw+"]"+ba.sb;
if(existBomAccountMap.containsKey(key)){
log.info(JSONUtil.toJsonStr(ba));
}
// if(existBomAccountMap.containsKey(key)){
// log.info(JSONUtil.toJsonStr(ba));
// }
existBomAccountMap.put(key,ba);
}
@ -139,6 +139,7 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
it.setXz(data.getXz());
it.setPm(data.getPm());
it.setSrs(data.getSrs()+"");
it.setJgnr(data.getJgnr());
itemEntitys.put(data.getPf(),it);
BigItemEntity be=new BigItemEntity();
@ -211,31 +212,50 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
.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);
//已存在更新,不存在创建
for(String code:allCodes){
ItemEntity itemEntity=entitys.get(code);
Item it=existMap.get(code);
if(it==null){
it=new Item();
it.setDept(UserUtils.getDept());
it.setCode(code);
it.setEnabled(Boolean.TRUE);
}
it.setName(itemEntity.pm);
it.setXz(itemEntity.xz);
it.setSrs(Integer.parseInt(itemEntity.srs));
it.setExtendD3(Double.parseDouble(itemEntity.srs));
it.setAc(itemEntity.ac);
it.setContents(itemEntity.jgnr);
itemRepository.save(it);
totalMap.put(it.getCode(),it);
}
totalMap.putAll(createMap);
// 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);
// }
// }
// if (existMap != null) {
// totalMap.putAll(existMap);
// }
// totalMap.putAll(createMap);
return totalMap;
}
@ -245,69 +265,22 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
.map(BigItemEntity::getCode)
.collect(Collectors.toList());
Map<String, BigItem> existMap = bigItemService.queryByBigItemCodesToMap(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){
BigItemEntity bi=entitys.get(code);
BigItem entity=new BigItem();
entity.setCode(code);
entity.setName(bi.getName());
entity.setDeptId(UserUtils.getDept().getId());
entity.setModels("无");
entity.setMasterName(bi.getName());
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,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);
for(String code:allCodes){
BigItemEntity bigItemEntity=entitys.get(code);
BigItem bigItem=existMap.get(code);
if(bigItem==null){
bigItem=new BigItem();
bigItem.setCode(code);
bigItem.setDeptId(UserUtils.getDept().getId());
bigItem.setEnabled(true);
bigItem.setDeptId(UserUtils.getDept().getId());
}
bigItem.setName(bigItemEntity.getName());//更新名称
bigItem.setMasterName(bigItemEntity.getName());
bigItemRepository.save(bigItem);
totalMap.put(code,bigItem);
}
Map<String, BigItem> totalMap = new HashMap<>();
if (existMap != null) {
totalMap.putAll(existMap);
}
totalMap.putAll(createMap);
return totalMap;
}
//验证库位
@ -421,186 +394,4 @@ public class ImportBomAccountServiceImpl implements ImportBomAccountService {
ba.setKyQz(data.getKyh());
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

@ -93,7 +93,7 @@ public class ImportDataServiceImpl implements ImportDataService {
String bp_type = readAll.get("部品种类") == null ? null : readAll.get("部品种类").toString();
BigItem bigItem = null;
if (bigItemCode.length() > 0) {
if (bigItemCode!=null&&!bigItemCode.equals("")) {
bigItem = bigItemRepository.findByCode(bigItemCode);
if (bigItem == null) {
throw new BadRequestException(HttpStatus.NOT_FOUND, row + "行" + bigItemCode + "完成品品番无效");

View File

@ -0,0 +1,146 @@
package com.youchain.basicdata.service.impl;
import com.youchain.basicdata.domain.Area;
import com.youchain.basicdata.domain.BillType;
import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.repository.BillTypeRepository;
import com.youchain.basicdata.repository.PointRepository;
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.PointImport;
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.modules.system.domain.Dept;
import com.youchain.utils.*;
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 ImportPointServiceImpl implements ImportPointService {
private final PointRepository pointRepository;
private final PointService pointService;
private final AreaService areaService;
@Override
@Transactional(rollbackFor = Exception.class)
public void importPoint(MultipartFile file) {
// 验证模板类型是否正确
isValidTemplateType(file);
// 根据模板类型进行不同的处理
baseImportTemplate(file);
}
// 处理标准模板
@Transactional
public void baseImportTemplate(MultipartFile file) {
// 读取sheet数据
List<PointImport> dataList = FastExcelUtil.readExcelData(file, PointImport.class, 0, 1);
//批量导入
importPointData(dataList);
}
/**
*
*/
private void importPointData(List<PointImport> dataList) {
// TODO: 实现批量导入逻辑
log.info("处理批量导入,数据条数: {}", dataList.size());
//获取文件中所有的库位编码
List<String> pointcodes = dataList.stream().map(PointImport::getCode).collect(Collectors.toList());
pointcodes = pointcodes.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
Map<String, Point> exitPointMap = validatePoint(pointcodes);
//获取文件中所有的库区名称
List<String> areaNames = dataList.stream().map(PointImport::getAreaName).collect(Collectors.toList());
areaNames = areaNames.stream().filter(Objects::nonNull).distinct().collect(Collectors.toList());
Map<String, Area> exitAreaMap = validateArea(areaNames);
for (PointImport data : dataList) {
Point point = exitPointMap.get(data.getCode());
if (point == null) {
point=new Point();
point.setCode(data.getCode());
point.setDept(UserUtils.getDept());
point.setCreateBy(SecurityUtils.getCurrentUsername());
point.setCreateTime(new Timestamp(new Date().getTime()));
point.setEnabled(Boolean.TRUE);
}
point.setArea(exitAreaMap.get(data.getAreaName()));
String lx = data.getType();
if (lx.equals("材管库位")) {
lx = BaseStatus.CH;
} else if (lx.equals("制造库位")) {
lx = BaseStatus.ZZKW;
}else if (lx.equals("缓存库位")) {
lx = BaseStatus.HCKW;
}
point.setType(data.getType());
point.setBeatCode(data.getNs());
point.setDescription(data.getBqlx());
point.setItemCode(data.getItemCode());
pointRepository.save(point);
}
}
//验证库位
private Map<String, Point> validatePoint(List<String> codes) {
Map<String, Point> existMap = pointService.queryByPointCodesToMap(codes);
return existMap;
}
//验证库区
private Map<String, Area> validateArea(List<String> names) {
Map<String, Area> existMap = areaService.queryByAreaCodesToMap(names);
if (existMap.isEmpty()) {
throw new BadRequestException("库区不存在或已失效");
}
List<String> existCodes = new ArrayList(existMap.keySet());
// 获取两个集合的非交集说明品番不存在或失效,直接提示
List<String> difference = SmartStringUtil.getDifference(names, existCodes);
if (CollectionUtils.isNotEmpty(difference)) {
throw new BadRequestException(difference + "库区不存在或已失效");
}
return existMap;
}
//验证模板是否使用正确
private void isValidTemplateType(MultipartFile file) {
// 根据模板类型进行不同的处理
List<String> requiredColumns = Arrays.asList(
"编码",
"库区",
"存储类型",
"品番编码",
"纳所",
"标签类型"
);
List<String> headers = FastExcelUtil.readHeadContent(file, requiredColumns, 0, 0);
if (!SmartStringUtil.containsAllIgnoreCase(requiredColumns, headers)) {
throw new BadRequestException("标准导入模板不正确,请确认模板信息");
}
}
}

View File

@ -0,0 +1,13 @@
package com.youchain.businessdata.inputJson;
import lombok.Data;
@Data
public class XdMoveReq {//箱单移位入参
String ewm;
/**库位序号*/
Long pointId;
/**箱单号*/
String stockCode;
String type;
}

View File

@ -0,0 +1,14 @@
package com.youchain.businessdata.inputJson;
import lombok.Data;
@Data
public class ZzjlPickConfirm {
/**序号*/
Long detail_id;
String type;
String view_type;
String scan_code;
String xpp;
String stock_code;
}

View File

@ -0,0 +1,37 @@
package com.youchain.businessdata.inputJson.imports;
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 PointImport {
@ExcelProperty("编码")
private String code;
@ExcelProperty("库区")
private String areaName;
@ExcelProperty("存储类型")
private String type;
@ExcelProperty("品番编码")
private String itemCode;
@ExcelProperty("纳所")
private String ns;
@ExcelProperty("标签类型")
private String bqlx;
}

View File

@ -36,6 +36,10 @@ public interface XppRecordRepository extends JpaRepository<XppRecord, Long>, Jpa
@Query(value = "SELECT * FROM data_xpp_record xr WHERE xr.ewm=?1", nativeQuery = true)
XppRecord findByCode(String qr);
@QueryHints(@QueryHint(name = "org.hibernate.cacheMode", value = "REFRESH"))
@Query(value = "SELECT * FROM data_xpp_record xr WHERE xr.ewm=:ewm and xr.type=:type", nativeQuery = true)
XppRecord findByEwmType(String ewm,String type);
@Query(value = "SELECT * FROM data_xpp_record xr WHERE xr.item_Key_id=?1 and xr.inv_Point_id=?2 and xr.status='PUTAWAY'", nativeQuery = true)
List<XppRecord> queryXppItemKeyPoint(Long itemKeyId, Long invPointId);

View File

@ -138,13 +138,16 @@ public class AsnController {
}
@PostMapping("/checkPutawayApp")
@Log("校验托盘号-APP")
@ApiOperation("校验托盘号-APP")
@Log("箱单入库-APP")
@ApiOperation("箱单入库-APP")
@PreAuthorize("@el.check('super:man')")
@Transactional(rollbackFor = Exception.class)
@DuplicateSubmission
public ResponseEntity<Object> checkPutawayApp(@RequestBody PutawayRequest request) {
String stockCode = request.getStockCode();
if(stockCode.indexOf("84")==0){
stockCode=stockCode.substring(2);
}
int checkType=request.getCheckType();
String pointCode= request.getPointCode();
if(checkType==1) {
@ -184,6 +187,9 @@ public class AsnController {
@DuplicateSubmission
public ResponseEntity<Object> putawayApp(@RequestBody PutawayRequest request) {
String stockCode = request.getStockCode();
if(stockCode.indexOf("84")==0){
stockCode=stockCode.substring(2);
}
int checkType=request.getCheckType();
String pointCode= request.getPointCode();
Point point=pointRepository.findByCodeType(pointCode, BaseStatus.CH);

View File

@ -260,18 +260,18 @@ public class AsnDetailController {
public ResponseEntity<Object> putawayXppApp(@RequestBody IRkPut s) {
int seq=s.getSeq();
if(seq==1){
RRkXpp map = xppRecordService.xppAnalysis(s.getEwm());
RRkXpp map = xppRecordService.xppAnalysis(s.getEwm(),BillParmType.XPP_1001);
return new ResponseEntity<>(map, HttpStatus.OK);
}
if (seq==2||seq==3) {//库存上架
String pointCode = s.getPointCode();
String[] str=pointCode.split("]");
String bomItemCode=null;
String bonded=null;
if(seq==3){
String[] str=pointCode.split("]");
pointCode=str[4];
bomItemCode=str[1];
bonded=str[3];
if(str.length>1){//固定库位标签
pointCode=str[3];
bomItemCode=str[0];
bonded=str[2];
}
if (pointCode == null||pointCode.equals("")) {
return new ResponseEntity<>( "库位不能为空", BAD_REQUEST);
@ -283,8 +283,10 @@ public class AsnDetailController {
Area area=point.getArea();
for(String ewm:s.getEwms()){
if(seq==2) {//收货上架
XppRecord xppRecord = xppRecordService.saveXppRecord(ewm, point.getArea(), "1001");
XppRecord xppRecord = xppRecordService.saveXppRecord(ewm, point.getArea(), BillParmType.XPP_1001);
AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord);
asnDetail.setPropC2("课税");
asnDetailRepository.save(asnDetail);
asnDetailService.putawayInv(asnDetail.getId(), area.getId(), point.getId(), xppRecord.getNrs(), xppRecord.getEwm());
}else if(seq==3){//制造投料
xppRecordService.xppPutaway(ewm,bonded,bomItemCode,point);
@ -295,8 +297,8 @@ public class AsnDetailController {
}
@PostMapping("/collectPutAway")
@Log("现品票采集上架")
@ApiOperation("现品票采集表")
@Log("现品票上架")
@ApiOperation("现品票上架")
@AnonymousAccess
@Transactional(rollbackFor = Exception.class)
public ResponseEntity<Object> collectPutAway(@RequestBody HashMap rk) {
@ -304,11 +306,11 @@ public class AsnDetailController {
String type=rk.get("type").toString();
Point point=pointService.findEntityById(pointId);
String ewm=rk.get("ewm").toString();
if(type.equals("1001")){//收货上架
if(type.equals(BillParmType.XPP_1001)){//收货上架
XppRecord xppRecord = xppRecordService.saveXppRecord(rk.get("ewm").toString(),point.getArea(),type);
AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord);
asnDetailService.putawayInv(asnDetail.getId(),point.getArea().getId(),pointId,xppRecord.getNrs(),xppRecord.getEwm());
}else if(type.equals("2001")){//制造上架
}else if(type.equals(BillParmType.XPP_2001)){//制造投料上架
//查找线边库存是否存在,插入
Long bomId=Long.parseLong(rk.get("bomId").toString());
BomAccount bom=bomAccountRepository.getById(bomId);

View File

@ -15,24 +15,29 @@
*/
package com.youchain.businessdata.rest;
import com.youchain.DuplicateSubmission.DuplicateSubmission;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.annotation.Log;
import com.youchain.appupdate.inputJson.ScanItemCode;
import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.domain.Task;
import com.youchain.basicdata.domain.BomAccount;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.repository.BomAccountRepository;
import com.youchain.basicdata.repository.PointRepository;
import com.youchain.businessdata.domain.*;
import com.youchain.businessdata.inputJson.XdMoveReq;
import com.youchain.businessdata.inputJson.buttenJson.InventoryButton;
import com.youchain.businessdata.repository.InventoryRepository;
import com.youchain.businessdata.repository.TaskRepository;
import com.youchain.businessdata.returnJson.RInvQuery;
import com.youchain.businessdata.returnJson.XdInventory;
import com.youchain.businessdata.service.InventoryLogService;
import com.youchain.businessdata.service.InventoryService;
import com.youchain.businessdata.service.ItemKeyService;
import com.youchain.businessdata.service.dto.InvQueryCriteria;
import com.youchain.businessdata.service.dto.InventoryDto;
import com.youchain.businessdata.service.dto.InventoryQueryCriteria;
import com.youchain.businessdata.service.dto.ItemKeyDto;
import com.youchain.businessdata.service.dto.*;
import com.youchain.businessdata.service.dto.jsonDto.CxjlDto;
import com.youchain.exception.BadRequestException;
import com.youchain.exception.handler.ApiResult;
import com.youchain.utils.BillParmType;
import com.youchain.utils.BizStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
@ -48,6 +53,7 @@ import io.swagger.annotations.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
/**
@ -64,8 +70,11 @@ public class InventoryController {
private final InventoryService inventoryService;
private final InventoryRepository inventoryRepository;
private final InventoryLogService invLogService;
private final InventoryLogService inventoryLogService;
private final TaskRepository taskRepository;
private final PointRepository pointRepository;
private final BomAccountRepository bomAccountRepository;
private final ItemKeyService itemKeyService;
@Log("导出数据")
@ApiOperation("导出数据")
@ -108,6 +117,14 @@ public class InventoryController {
return new ResponseEntity<>(inventoryService.queryAll(criteria, pageable), HttpStatus.OK);
}
@GetMapping(value = "/queryInventoryZz")
@Log("查询制造库存")
@ApiOperation("查询制造库存")
@AnonymousAccess
public ResponseEntity<Object> queryInventoryZz(InventoryQueryCriteria criteria, Pageable pageable) {
return new ResponseEntity<>(inventoryService.queryAll(criteria, pageable), HttpStatus.OK);
}
@PostMapping
@Log("新增inventory")
@ApiOperation("新增inventory")
@ -124,10 +141,10 @@ public class InventoryController {
//库存修改
Inventory byId = inventoryRepository.getById(resources.getId());
if (byId.getQuantity()>resources.getQuantity()){//以前的大于现在的
invLogService.storeInventoryLog(BizStatus.INVENTORY_ADJUST, BizStatus.REDUCE, null, byId.getArea(), byId.getItemKey(), byId.getPoint(), byId.getPoint(), byId.getStock(), byId.getStock(), byId.getQuantity(), (byId.getQuantity() - resources.getQuantity()),
inventoryLogService.storeInventoryLog(BizStatus.INVENTORY_ADJUST, BizStatus.REDUCE, null, byId.getArea(), byId.getItemKey(), byId.getPoint(), byId.getPoint(), byId.getStock(), byId.getStock(), byId.getQuantity(), (byId.getQuantity() - resources.getQuantity()),
null,null,BizStatus.INVENTORY_ADJUST, byId.getId(), byId.getId(), resources.getDescription());
}else {
invLogService.storeInventoryLog(BizStatus.INVENTORY_ADJUST, BizStatus.ADD, null, byId.getArea(), byId.getItemKey(), byId.getPoint(), byId.getPoint(), byId.getStock(), byId.getStock(), byId.getQuantity(), (resources.getQuantity()-byId.getQuantity()),
inventoryLogService.storeInventoryLog(BizStatus.INVENTORY_ADJUST, BizStatus.ADD, null, byId.getArea(), byId.getItemKey(), byId.getPoint(), byId.getPoint(), byId.getStock(), byId.getStock(), byId.getQuantity(), (resources.getQuantity()-byId.getQuantity()),
null,null,BizStatus.INVENTORY_ADJUST, byId.getId(), byId.getId(), resources.getDescription());
}
inventoryService.update(resources);
@ -150,7 +167,7 @@ public class InventoryController {
if(update_zys<task_zys){
throw new BadRequestException("占用数量不能小于"+task_zys);
}
invLogService.storeInventoryLog(BizStatus.INVENTORY_ADJUST, BizStatus.REDUCE, "修改占用数", inv.getArea(), inv.getItemKey(), inv.getPoint(), inv.getPoint(), inv.getStock(), inv.getStock(), inv.getQueuedQty(), (inv.getQueuedQty() - update_zys),
inventoryLogService.storeInventoryLog(BizStatus.INVENTORY_ADJUST, BizStatus.REDUCE, "修改占用数", inv.getArea(), inv.getItemKey(), inv.getPoint(), inv.getPoint(), inv.getStock(), inv.getStock(), inv.getQueuedQty(), (inv.getQueuedQty() - update_zys),
null,null,BizStatus.INVENTORY_ADJUST, inv.getId(), inv.getId(), inv.getDescription());
inv.setQueuedQty(update_zys);
inventoryService.update(inv);
@ -196,4 +213,105 @@ public class InventoryController {
List<RInvQuery> qs=inventoryService.queryInvApp(code,scan.getPointCode());
return ApiResult.result(200, "", qs);
}
@GetMapping("/queryPickDetailXd")
@Log("拣货确认-箱单库存记录")
@ApiOperation("拣货确认-箱单库存记录")
@AnonymousAccess
public ResponseEntity<Object> queryPickDetailXd(TaskQueryCriteria criteria){
List<XdInventory> invs = inventoryService.queryInvForPickDetail(criteria.getPickDetailId());
return new ResponseEntity<>(invs,HttpStatus.OK);
}
@PostMapping("/zzrkInv")
@Log("制造入库")
@ApiOperation("制造入库")
@PreAuthorize("@el.check('super:man')")
@AnonymousAccess
@DuplicateSubmission(5)
public ResponseEntity<Object> zzrkInv(@RequestBody CxjlDto cxjldto) throws Exception {
BomAccount bomAccount=bomAccountRepository.getById(cxjldto.getBom_account_id());
Point point=bomAccount.getZPoint();
ItemKey itemKey = itemKeyService.getItemKey(bomAccount.getItem(), null,bomAccount.getBonded());
Inventory inventory = inventoryService.getInventory(itemKey, point.getArea(), point, point, point.getDept(), BizStatus.ZZKW_TL,null);
double srcQty = inventory.getQuantity();
inventory.setQuantity(inventory.getQuantity() + cxjldto.getOrder_qty());
inventoryService.update(inventory);
InventoryLog inventoryLog = inventoryLogService.storeInventoryLog(BizStatus.ZZKW_RK, BizStatus.ADD, "制造入库", point.getArea(), itemKey, inventory.getPoint(), inventory.getPoint(), null, null, srcQty, cxjldto.getOrder_qty()+0d, null, null,
BizStatus.ZZKW_TL, bomAccount.getId(), inventory.getId(), "制造入库");
inventoryLog.setZzkw(point);
inventoryLogService.update(inventoryLog);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/xdMoveInvApp")
@Log("箱单移位App")
@ApiOperation("箱单移位App")
@PreAuthorize("@el.check('super:man')")
@AnonymousAccess
@DuplicateSubmission(5)
public ResponseEntity<Object> xdMoveInvApp(@RequestBody XdMoveReq xdMoveReq) throws Exception {
String type=xdMoveReq.getType();
String stockCode=xdMoveReq.getStockCode();
if(stockCode.indexOf("84")==0){
stockCode=stockCode.substring(2);
}
List<Inventory> invs = inventoryRepository.queryInvStockCode(stockCode);
if (invs.size() <= 0) {
throw new BadRequestException("没有对应的库存");
}
if (type.equals("xd_move_002")) {
String ewm=xdMoveReq.getEwm();
String[] str=ewm.split("]");
String pointCode=null;
if(str.length>=3) {//固定库位标签
pointCode = str[3];
}else {
pointCode=ewm;
}
Point point = pointRepository.findByCode(pointCode);
xdMoveReq.setPointId(point.getId());
xdMoveReq.setStockCode(stockCode);
this.xdMoveInv(xdMoveReq);
}
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
@PostMapping("/xdMoveInv")
@Log("箱单移位")
@ApiOperation("箱单移位")
@PreAuthorize("@el.check('super:man')")
@AnonymousAccess
@DuplicateSubmission(5)
public ResponseEntity<Object> xdMoveInv(@RequestBody XdMoveReq xdMoveReq) throws Exception {
Point point=pointRepository.getById(xdMoveReq.getPointId());
if(!point.getType().equals("CH")) {
throw new BadRequestException("库位类型需为材管库位");
}
List<Inventory> invs=inventoryRepository.queryInvStockCode(xdMoveReq.getStockCode());
if(invs.size()<=0){
throw new BadRequestException("没有对应的库存");
}
for(Inventory inventory:invs){
double srcQty=inventory.getQuantity();
Point srcPoint=inventory.getPoint();
if(inventory.getQueuedQty()>0){
throw new BadRequestException("已锁定,不能移位");
}
if(point.getId().equals(inventory.getPoint().getId())){
throw new BadRequestException("库位相同,不能移位");
}
if(point.getItemCode()!=null&&!point.getItemCode().equals("")){
if(!point.getItemCode().equals(inventory.getItemKey().getItem().getCode())){
throw new BadRequestException("库位品番"+point.getItemCode()+"不一致,不能移位");
}
}
inventory.setPoint(point);
inventoryRepository.save(inventory);
InventoryLog inventoryLog = inventoryLogService.storeInventoryLog(BizStatus.XD_MOVE, BizStatus.REDUCE, "箱单移位", point.getArea(), inventory.getItemKey(), srcPoint, point, null, null, srcQty, inventory.getQuantity(), xdMoveReq.getStockCode(), null,
BizStatus.ZZKW_TL, null, inventory.getId(), "箱单移位");
}
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
}

View File

@ -16,6 +16,8 @@
package com.youchain.businessdata.rest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.youchain.DuplicateSubmission.DuplicateSubmission;
import com.youchain.annotation.AnonymousAccess;
import com.youchain.annotation.Log;
@ -24,23 +26,18 @@ import com.youchain.basicdata.repository.*;
import com.youchain.basicdata.service.AreaService;
import com.youchain.basicdata.service.dto.AreaDto;
import com.youchain.basicdata.service.dto.BomAccountPointDto;
import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.repository.PickTicketRepository;
import com.youchain.businessdata.returnJson.RPTaskList;
import com.youchain.businessdata.domain.PickDetail;
import com.youchain.businessdata.domain.PickTicket;
import com.youchain.businessdata.domain.Task;
import com.youchain.businessdata.domain.*;
import com.youchain.businessdata.inputJson.ZzjlPickConfirm;
import com.youchain.businessdata.repository.*;
import com.youchain.businessdata.returnJson.*;
import com.youchain.businessdata.inputJson.IPPickDetail;
import com.youchain.businessdata.inputJson.IScanPut;
import com.youchain.businessdata.repository.PickDetailRepository;
import com.youchain.businessdata.service.*;
import com.youchain.businessdata.service.dto.*;
import com.youchain.businessdata.service.dto.jsonDto.CxjlDto;
import com.youchain.exception.BadRequestException;
import com.youchain.exception.handler.ApiResult;
import com.youchain.utils.BaseStatus;
import com.youchain.utils.BizStatus;
import com.youchain.utils.DateUtil;
import com.youchain.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import lombok.RequiredArgsConstructor;
@ -77,10 +74,15 @@ public class PickDetailController {
private final PickDetailRepository pickDetailRepository;
private final PickTicketService pickTicketService;
private final InventoryService inventoryService;
private final InventoryLogService inventoryLogService;
private final BillTypeRepository billTypeRepository;
private final InventoryRepository inventoryRepository;
private final TaskRepository taskRepository;
private final AreaRepository areaRepository;
private final ItemRepository itemRepository;
private final ItemKeyService itemKeyService;
private final PointRepository pointRepository;
private final XppRecordRepository xppRecordRepository;
private final AutomaticPlanningRepository automaticPlanningRepository;
private final BomAccountRepository bomAccountRepository;
private final PickTicketRepository pickTicketRepository;
@ -199,6 +201,74 @@ public class PickDetailController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/zzjlApp")
@Log("制造叫料App")
@ApiOperation("制造叫料App")
@PreAuthorize("@el.check('super:man')")
@AnonymousAccess
@DuplicateSubmission(5)
public ResponseEntity<Object> zzjlApp(@RequestBody CxjlDto cxjldto) throws Exception {
String ewm=cxjldto.getEwm();
String type=cxjldto.getType();
if(type.equals("cxjl_001")){
//解析二维码内容
String[] str=ewm.split("]");
if(str.length>=3){//固定库位标签
String pointCode=str[3];
String bomItemCode=str[0];
String bonded=str[2];
Point point=pointRepository.findByCode(pointCode);
Item item=itemRepository.findByCode(bomItemCode);
if(point==null||!point.getType().equals("ZZKW")){
throw new BadRequestException("制造库位错误");
}
cxjldto.setRk_id(point.getArea().getId());
cxjldto.setItem_id(item.getId());
cxjldto.setZzkw_id(point.getId());
cxjldto.setBonded(bonded);
cxjldto.setArea_name(point.getArea().getName());
cxjldto.setPoint_code(point.getCode());
cxjldto.setItem_name(item.getName());
cxjldto.setItem_code(item.getCode());
cxjldto.setOrder_qty(item.getSrs());
return new ResponseEntity<>(cxjldto,HttpStatus.OK);
}else{
throw new BadRequestException("扫描错误");
}
}else if(type.equals("cxjl_002")){//制造叫料APP
PickDetail pickDetail = pickDetailService.cxjlCreate(cxjldto);
//自动分配
pickDetailService.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(), pickDetail.getPo(), BaseStatus.ZZJL);
}else if(type.equals("cxjl_003")){//制造入库APP
//解析二维码内容
String[] str=ewm.split("]");
if(str.length>=3) {
String pointCode = str[3];
String bomItemCode = str[0];
String bonded = str[2];
Point point = pointRepository.findByCode(pointCode);
if (point == null || !point.getType().equals("ZZKW")) {
throw new BadRequestException("制造库位错误");
}
Item item = itemRepository.findByCode(bomItemCode);
ItemKey itemKey = itemKeyService.getItemKey(item, null, bonded);
Inventory inventory = inventoryService.getInventory(itemKey, point.getArea(), point, point, point.getDept(), BizStatus.ZZKW_TL, null);
double srcQty = inventory.getQuantity();
inventory.setQuantity(inventory.getQuantity() + cxjldto.getOrder_qty());
inventoryService.update(inventory);
InventoryLog inventoryLog = inventoryLogService.storeInventoryLog(BizStatus.ZZKW_RK, BizStatus.ADD, "制造入库APP", point.getArea(), itemKey, inventory.getPoint(), inventory.getPoint(), null, null, srcQty, cxjldto.getOrder_qty() + 0d, null, null,
BizStatus.ZZKW_TL, null, inventory.getId(), "制造入库APP");
inventoryLog.setZzkw(point);
inventoryLogService.update(inventoryLog);
}else {
throw new BadRequestException("扫描错误");
}
}
return new ResponseEntity<>("操作成功", HttpStatus.OK);
}
@PostMapping("/zzjl")
@Log("制造叫料")
@ApiOperation("制造叫料")
@ -206,28 +276,177 @@ public class PickDetailController {
@AnonymousAccess
@DuplicateSubmission(5)
public ResponseEntity<Object> zzjl(@RequestBody CxjlDto cxjldto) throws Exception {
pickDetailService.cxjlCreate(cxjldto);
PickDetail pickDetail=pickDetailService.cxjlCreate(cxjldto);
BomAccount bomAccount=bomAccountRepository.getById(cxjldto.getBom_account_id());
cxjldto.setBonded(bomAccount.getBonded());
//自动分配
pickDetailService.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(),pickDetail.getPo(),BaseStatus.ZZJL);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/zzjlList")
@Log("制造叫料拣货列表")
@ApiOperation("制造叫料拣货列表")
@AnonymousAccess
public ResponseEntity<Object> zzjlList(@RequestBody HashMap map) throws Exception {
String itemCode=map.get("itemCode")==null?null:map.get("itemCode").toString();
//查询叫料返回数据
List<ZzjlPickList> list=pickDetailService.queryZzjlPickList(itemCode);
return new ResponseEntity<>(list,HttpStatus.OK);
}
@PostMapping("/zzjlPickApp")
@Log("制造叫料拣货确认")
@ApiOperation("制造叫料拣货确认")
@AnonymousAccess
public ResponseEntity<Object> zzjlPickApp(@RequestBody ZzjlPickConfirm zzjlPick) throws Exception {
String type= zzjlPick.getType();
if(type.equals("zzjl_pick_001")){
PickDetail pickDetail=pickDetailRepository.getById(zzjlPick.getDetail_id());
if(pickDetail.getPickedQty()>=pickDetail.getOrderQty()){
return new ResponseEntity<>("拣货完成,返回列表",HttpStatus.OK);
}
if(pickDetail.getAllocatedQty()<pickDetail.getOrderQty()) {
pickDetailService.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(), pickDetail.getPo(), BaseStatus.ZZJL);
}
JSONArray array=new JSONArray();
//查询是否有Task或者库存
List<Task> tasks=taskRepository.getPickDetailTasks(pickDetail.getId());
String view_type="01";
String view_des="无库存";
String view_name="箱单号";
ZzjlPickHead head=new ZzjlPickHead();
List<ZzjlPickDetail> detail_list=new ArrayList<>();
if(tasks.size()>=0){
for(Task t:tasks){
ZzjlPickDetail detail=new ZzjlPickDetail();
detail.setStock_code("");
detail.setPoint_code(t.getSrcPoint().getCode());
detail.setPch(t.getItemKey().getPropC1());
detail.setItem_code(t.getItemKey().getItem().getCode());
detail.setItem_name(t.getItemKey().getItem().getName());
detail.setBonded(pickDetail.getPropC2());
detail.setQty(t.getPlanQty()+"");
detail_list.add(detail);
view_type="02";
view_name="现品票";
}
}
if(tasks.size()==0){
List<XdInventory> invs= inventoryService.queryInvForPickDetail(pickDetail.getId());
for(XdInventory inv:invs) {
ZzjlPickDetail detail=new ZzjlPickDetail();
detail.setStock_code(inv.getStockCode());
detail.setPoint_code(inv.getPointCode());
detail.setPch(inv.getPropC1());
detail.setItem_code(inv.getItemCode());
detail.setItem_name(inv.getItemName());
detail.setBonded(inv.getBonded());
detail.setQty(inv.getInvQty());
detail_list.add(detail);
view_type="03";
}
}
if(view_type.equals("01")){
throw new BadRequestException( "无库存");
}
head.setView_des(view_des);
head.setView_type(view_type);
head.setView_list(detail_list);
head.setView_name(view_name);
return new ResponseEntity<>(head,HttpStatus.OK);
}else if(type.equals("zzjl_pick_002")){//扫描现品票或者箱单号
String xppQRCode= null;
String stock_code=null;
if(zzjlPick.getView_type().equals("02")){
xppQRCode=zzjlPick.getScan_code();
}else if(zzjlPick.getView_type().equals("03")){
stock_code=zzjlPick.getScan_code();
if(stock_code.indexOf("84")==0){
stock_code=stock_code.substring(2);
}
}
PickDetail pickDetail=pickDetailRepository.getById(zzjlPick.getDetail_id());
if(stock_code!=null){
List<Inventory> invs = inventoryRepository.queryInvStockCode(stock_code);
for (Inventory inv : invs) {
//生成Task生成出库扣减库存
Task task = taskService.storeTask(null,pickDetail,inv.getArea(),inv.getItemKey(),inv.getPoint(),null,inv.getQuantity(),inv.getStockCode());
task.setBillCode(pickDetail.getItem().getCode()+"关联箱单出库"+pickDetail.getId());
task.setTaskType(BizStatus.XD_PICK);
taskRepository.save(task);
pickTicketService.pickForTask(task.getId(), task.getSrcStockCode(), task.getPlanQty()-task.getMoveQty(), null, SecurityUtils.getCurrentUsername());
}
} else if (xppQRCode!=null) {//现品票拣货确认
XppRecord xpp = xppRecordRepository.findByEwmType(xppQRCode, BillParmType.XPP_1001);
if (Objects.isNull(xpp)){
throw new BadRequestException(HttpStatus.NOT_FOUND, "未找到对应的现品票二维码");
}
if(xpp.getCkTaskLog()!=null){
throw new BadRequestException(HttpStatus.NOT_FOUND, "现品票已出库");
}
ItemKey ik=xpp.getItemKey();
//取现品票上的库位进行拣货
Long srcPointId=null;
if(xpp.getInvPoint()!=null){
srcPointId=xpp.getInvPoint().getId();
}
List<Task> ts=taskService.queryTask(null,pickDetail.getId(),ik.getId(),null,srcPointId);
Task t=null;
for(Task task:ts){
if(task.getMoveQty()<task.getPlanQty()){
t=task;
}
}
if(ts.size()<=0){
throw new BadRequestException(HttpStatus.NOT_FOUND, ik.getItem().getCode()+"已全部备货");
}
if(t==null){
throw new BadRequestException(HttpStatus.NOT_FOUND, ik.getItem().getCode()+"找不到待拣货任务");
}
pickTicketService.pickForTask(t.getId(),pickDetail.getPo(),xpp.getNrs(),xpp,SecurityUtils.getCurrentUsername());
}
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}else {
throw new BadRequestException("请选择记录");
}
}
@PostMapping("/allocatePickDetail")
@Log("拣货分配审核")
@ApiOperation("拣货分配审核")
@Log("制造叫料分配审核")
@ApiOperation("制造叫料分配审核")
@AnonymousAccess
public synchronized ResponseEntity<Object> allocatePickDetail(@RequestBody Long[] ids) throws Exception {
List<Long> pickDetailIds = Arrays.asList(ids);
Collections.sort(pickDetailIds);//升序排序
if (pickDetailIds.size() > 0) {
try {
for (Long pickDetailId : pickDetailIds) {
PickDetail pickDetail=pickDetailRepository.getById(pickDetailId);
pickDetailService.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(),pickDetail.getPo(),BaseStatus.ZZJL);
}
} catch (Exception e) {
return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), e.getMessage(), ""), HttpStatus.BAD_REQUEST);
for (Long pickDetailId : pickDetailIds) {
PickDetail pickDetail=pickDetailRepository.getById(pickDetailId);
pickDetailService.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(),pickDetail.getPo(),BaseStatus.ZZJL);
}
} else {
return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), "参数错误或者为null", ""), HttpStatus.BAD_REQUEST);
throw new BadRequestException("请选择记录");
}
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/cancelAllocatePickDetail")
@Log("制造叫料取消分配")
@ApiOperation("制造叫料取消分配")
@AnonymousAccess
public synchronized ResponseEntity<Object> cancelAllocatePickDetail(@RequestBody Long[] ids) throws Exception {
List<Long> pickDetailIds = Arrays.asList(ids);
Collections.sort(pickDetailIds);//升序排序
if (pickDetailIds.size() > 0) {
for (Long pickDetailId : pickDetailIds) {
PickDetail pickDetail=pickDetailRepository.getById(pickDetailId);
if(pickDetail.getAllocatedQty()>0&&pickDetail.getPickedQty()<=0) {
//取消分配
pickDetailService.cancelAllocate(pickDetail.getId());
}
}
} else {
throw new BadRequestException("请选择记录");
}
return new ResponseEntity<>(HttpStatus.OK);
}
@ -283,19 +502,6 @@ public class PickDetailController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/cancelAllocate")
@Log("取消分配")
@ApiOperation("取消分配")
@AnonymousAccess
public synchronized ResponseEntity<Object> cancelAllocate(@RequestBody Long[] ids) {
List<Long> pickDetailIds = Arrays.asList(ids);
if (pickDetailIds.size() > 0) {
for (Long id : pickDetailIds) {
pickDetailService.cancelAllocate(id);
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/queryTaskApp")
@Log("查询拣货列表")
@ -325,19 +531,27 @@ public class PickDetailController {
}
public ResponseEntity<Object> pick_in(Long pickDetailId) {
// List<Task> ts=taskRepository.getNotPickTask(resources.getPickTicketId());
// if(ts.size()<=0){
// throw new BadRequestException("没有需要拣货的明细");
// }
// for(Task t:ts) {
// pickTicketService.pickForTask(t.getId(), t.getSrcStockCode(), t.getPlanQty()-t.getMoveQty(), null, bhr);
// }
//查询未完成的拣货任务
List<Task> Tasks = taskService.getPickNotAllTask(pickDetailId);
if (Tasks.size() > 0) {
try {
for (Task task : Tasks) {
log.error("正在拣货-----");
taskService.pickConfirm(task.getId(), task.getPlanQty());
}
} catch (Exception e) {
return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), e.getMessage(), ""), HttpStatus.BAD_REQUEST);
List<Task> ts = taskService.getPickNotAllTask(pickDetailId);
if (ts.size() > 0) {
// for (Task task : ts) {
// log.error("正在拣货-----");
// taskService.pickConfirm(task.getId(), task.getPlanQty());
// }
for(Task t:ts) {
pickTicketService.pickForTask(t.getId(), t.getSrcStockCode(), t.getPlanQty()-t.getMoveQty(), null, SecurityUtils.getCurrentUsername());
}
} else {
return new ResponseEntity(ApiResult.fail(BAD_REQUEST.value(), "已拣货完成,请勿重复操作!", ""), HttpStatus.BAD_REQUEST);
throw new BadRequestException("没有需要拣货的明细");
}
log.error("完成拣货-----");
return new ResponseEntity(ApiResult.fail(HttpStatus.OK.value(), "已拣货完成,请勿重复操作!", ""), HttpStatus.OK);

View File

@ -33,6 +33,7 @@ import com.youchain.businessdata.repository.*;
import com.youchain.businessdata.returnJson.PutawayRet;
import com.youchain.businessdata.returnJson.RPPickList;
import com.youchain.businessdata.returnJson.RPTaskList;
import com.youchain.businessdata.returnJson.XdInventory;
import com.youchain.businessdata.service.*;
import com.youchain.businessdata.service.dto.PickTicketDto;
import com.youchain.businessdata.service.dto.PickTicketQueryCriteria;
@ -97,33 +98,6 @@ public class PickTicketController {
return new ResponseEntity<>(pickTicketRepository.findById(id), HttpStatus.OK);
}
@GetMapping(value = "/createNo")
@Log("出库管理生成单号")
@ApiOperation("出库管理生成单号")
@AnonymousAccess
public ResponseEntity<Object> createNo(@RequestParam("code") String code) {
//获取最大单号
PickTicket pickTicket = pickTicketRepository.queryMaxCode();
//生成日期 YYMMDD 格式的日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYMMDD");
String formatDate = simpleDateFormat.format(new Date());
//返回的单号
String returnNo = null;
//判断是否有数据
if (Objects.isNull(pickTicket)){
log.warn("表中还没有数据");
return new ResponseEntity<>((code+formatDate+"001"), HttpStatus.OK);
}
//获取出库管理的code值
String pTCode = pickTicket.getCode();
int i = Integer.parseInt(pTCode.substring(pTCode.length() - 3))+1;
if (i > 999) {
i = 001;
}
returnNo = code + formatDate + String.format("%03d", i);
return new ResponseEntity<>(returnNo, HttpStatus.OK);
}
@Log("导出数据")
@ApiOperation("导出数据")
@ -191,7 +165,7 @@ public class PickTicketController {
}
@PostMapping("/pickingOperations")
@PostMapping("/pickingOperations-del")
@Log("拣货操作")
@ApiOperation("拣货操作")
@PreAuthorize("@el.check('super:man')")
@ -208,7 +182,7 @@ public class PickTicketController {
//检查该托盘是否还有库存
List<Inventory> invs=inventoryRepository.queryInvStockCode(stockCode);
if(invs.size()<=0){
return new ResponseEntity<>("没有对应的库存",HttpStatus.BAD_REQUEST);
throw new BadRequestException("没有对应的库存");
}
BillType bt=billTypeRepository.findByName(BaseStatus.XDBH);
if(bt==null){
@ -229,6 +203,42 @@ public class PickTicketController {
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
@PostMapping("/xdckAllocate")
@Log("箱单出库分配")
@ApiOperation("箱单出库分配")
@PreAuthorize("@el.check('super:man')")
public ResponseEntity<Object> xdckAllocate(@RequestBody Long[] ids){
for (Long id :ids) {
List<PickDetail> pickTickets =pickDetailRepository.queryByPickTicketId(id);
for (PickDetail pickDetail : pickTickets) {
double unQty=pickDetail.getOrderQty()-pickDetail.getAllocatedQty();
if(unQty>0) {
//分配
pickDetailService.allocate(pickDetail.getId(), pickDetail.getOrderQty() - pickDetail.getAllocatedQty(), pickDetail.getPo(), BaseStatus.ZCCK);
}
}
}
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
@PostMapping("/xdckCancelAllocate")
@Log("箱单出库取消分配")
@ApiOperation("箱单出库取消分配")
@PreAuthorize("@el.check('super:man')")
public ResponseEntity<Object> xdckCancelAllocate(@RequestBody Long[] ids){
for (Long id :ids) {
List<PickDetail> pickTickets =pickDetailRepository.queryByPickTicketId(id);
for (PickDetail pickDetail : pickTickets) {
if(pickDetail.getAllocatedQty()>0&&pickDetail.getPickedQty()<=0) {
//分配
pickDetailService.cancelAllocate(pickDetail.getId());
}
}
}
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
@PostMapping("/pickWhole")
@Log("备货操作-整单拣货")
@ApiOperation("备货操作-整单拣货")
@ -261,7 +271,10 @@ public class PickTicketController {
@Transactional
public ResponseEntity<Object> pickWholeApp(@RequestBody PutawayRequest request){
String bhr=SecurityUtils.getCurrentUsername();
String stockCode=request.getStockCode();
String stockCode = request.getStockCode();
if(stockCode.indexOf("84")==0){
stockCode=stockCode.substring(2);
}
List<PutawayRet> rets=new ArrayList<>();
if(request.getCheckType()==4){
List<PickTicket> pts=pickTicketRepository.queryByCusCode(stockCode);
@ -303,6 +316,29 @@ public class PickTicketController {
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
@PostMapping("/xdckPickOut")
@Log("箱单库存拣货确认")
@ApiOperation("箱单库存拣货确认")
@PreAuthorize("@el.check('super:man')")
public ResponseEntity<Object> xdckPickOut(@RequestBody HashMap map){
Long invId=Long.parseLong(map.get("invId").toString());
Long detailId=Long.parseLong(map.get("detailId").toString());
Inventory xdinv =inventoryRepository.getById(invId);
PickDetail pickDetail=pickDetailRepository.getById(detailId);
//所有该箱单库存一次性拣货确认
List<Inventory> invs = inventoryRepository.queryInvStockCode(xdinv.getStockCode());
for (Inventory inv : invs) {
//生成Task生成出库扣减库存
Task task = taskService.storeTask(null,pickDetail,inv.getArea(),inv.getItemKey(),inv.getPoint(),null,inv.getQuantity(),inv.getStockCode());
task.setBillCode(pickDetail.getItem().getCode()+"关联箱单出库"+detailId);
task.setTaskType(BizStatus.XD_PICK);
taskRepository.save(task);
pickTicketService.pickForTask(task.getId(), task.getSrcStockCode(), task.getPlanQty()-task.getMoveQty(), null, SecurityUtils.getCurrentUsername());
}
return new ResponseEntity<>("操作成功",HttpStatus.OK);
}
@PostMapping("/pickBatch")
@Log("备货操作-批量拣货")
@ApiOperation("备货操作-批量拣货")

View File

@ -19,6 +19,8 @@ import com.youchain.annotation.AnonymousAccess;
import com.youchain.annotation.Log;
import com.youchain.basicdata.service.dto.PointDto;
import com.youchain.basicdata.service.dto.PointQueryCriteria;
import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.domain.PickDetail;
import com.youchain.businessdata.domain.Task;
import com.youchain.businessdata.service.TaskService;
import com.youchain.businessdata.service.dto.TaskQueryCriteria;
@ -87,6 +89,7 @@ public class TaskController {
return new ResponseEntity<>(taskService.queryAll(criteria),HttpStatus.OK);
}
@PostMapping
@Log("新增task")
@ApiOperation("新增task")

View File

@ -501,7 +501,7 @@ public class XppRecordController {
String ewm=jsonObject.getString("ewm");
String type=jsonObject.getString("type");
if(type.equals("7")){//现品票二维码解析
RRkXpp xpp = xppRecordService.xppAnalysis(ewm);
RRkXpp xpp = xppRecordService.xppAnalysis(ewm,null);
return new ResponseEntity<>(xpp, HttpStatus.OK);
}else{
String gw="";

View File

@ -0,0 +1,34 @@
package com.youchain.businessdata.returnJson;
import lombok.Data;
import java.util.Date;
@Data
public class XdInventory {
Long invId;
Long pickDetailId;
/**物料号*/
String itemCode;
/**物料名称*/
String itemName;
/**A/C*/
String ac;
/**箱单号*/
String stockCode;
/**批次号*/
String propC1;
/**点位*/
String pointCode;
/**订单数量*/
String planQty;
/**库存数量*/
String invQty;
/**出库数量*/
String pickQty;
/**税别*/
String bonded;
}

View File

@ -0,0 +1,17 @@
package com.youchain.businessdata.returnJson;
import lombok.Data;
@Data
public class ZzjlPickDetail {
public String id;
public String stock_code;
public String point_code;
public String item_code;
public String pch;
public String item_name;
public String bonded;
public String qty;
}

View File

@ -0,0 +1,14 @@
package com.youchain.businessdata.returnJson;
import lombok.Data;
import java.util.List;
@Data
public class ZzjlPickHead {
public String view_name;
public String view_type;
public String view_des;
public List<ZzjlPickDetail> view_list ;
}

View File

@ -0,0 +1,31 @@
package com.youchain.businessdata.returnJson;
import lombok.Data;
@Data
public class ZzjlPickList {
/**序号*/
Long detail_id;
/**库区*/
String area_name;
/**品番*/
String item_code;
/**品名*/
String item_name;
/**制造库位*/
String point_code;
/**税别*/
String bonded;
/**数量*/
String order_qty;
/**分配数量*/
String allocated_qty;
/**拣货数量*/
String picked_qty;
/**创建人*/
String create_by;
/**创建时间*/
String create_time;
}

View File

@ -87,10 +87,12 @@ public interface InventoryLogService {
* @throws Exception /
*/
void download(List<InventoryLogDto> all, HttpServletResponse response) throws Exception, Exception;
InventoryLog storeInventoryLog(String logType, String incDec, String relatedBill, Area area,ItemKey itemKey, Point srcPoint, Point dstPoint, Stock srcStock, Stock dstStock,
Double srcQty, Double occurQty, String stockCode,String xpp,String refObj, Long refObjId, Long invId, String description);
InventoryLog storeInventoryLog(String logType, String incDec, String relatedBill, Area area,ItemKey itemKey, Point srcPoint, Point dstPoint,
Stock srcStock, Stock dstStock, Double srcQty, Double occurQty, String stockCode,
String xpp,String refObj, Long refObjId, Long invId, String description);
InventoryLog storeInventoryLog(String logType, String incDec, String relatedBill, Area area, ItemKey itemKey, Point srcPoint, Point dstPoint,
Point zzkw, Double srcQty, Double occurQty,String xpp, String refObj, Long refObjId, Long invId, String description);
Point zzkw, Double srcQty, Double occurQty,
String xpp, String refObj, Long refObjId, Long invId, String description);
/**
*

View File

@ -23,6 +23,7 @@ import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.domain.ItemKey;
import com.youchain.businessdata.inputJson.buttenJson.InventoryButton;
import com.youchain.businessdata.returnJson.RInvQuery;
import com.youchain.businessdata.returnJson.XdInventory;
import com.youchain.businessdata.service.dto.InvQueryCriteria;
import com.youchain.businessdata.service.dto.InventoryDto;
import com.youchain.businessdata.service.dto.InventoryQueryCriteria;
@ -142,4 +143,6 @@ public interface InventoryService {
* @return
*/
List<RInvQuery> queryInvApp(String code,String pointCode);
List<XdInventory> queryInvForPickDetail(Long pickDetailId);
}

View File

@ -22,6 +22,7 @@ import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.service.dto.BoxDto;
import com.youchain.businessdata.domain.PickDetail;
import com.youchain.businessdata.domain.PickTicket;
import com.youchain.businessdata.returnJson.ZzjlPickList;
import com.youchain.businessdata.service.dto.PickDetailDto;
import com.youchain.businessdata.service.dto.PickDetailQueryCriteria;
import com.youchain.businessdata.service.dto.PickDetailZscDto;
@ -168,4 +169,6 @@ public interface PickDetailService {
* @return
*/
List<PickDetail> getBomList(long picktickId,String largeClass);
/**查询制造叫料列表*/
List<ZzjlPickList> queryZzjlPickList(String itemCode);
}

View File

@ -115,7 +115,7 @@ public interface XppRecordService {
* @param ewm
* @return
*/
RRkXpp xppAnalysis(String ewm);
RRkXpp xppAnalysis(String ewm,String type);
/***
*

View File

@ -29,8 +29,15 @@ import java.io.Serializable;
public class CxjlDto implements Serializable {
private Long bom_account_id;
private Long item_id;
private String item_code;
private String item_name;
private String point_code;
private String area_name;
private Long zzkw_id;
private Long rk_id;
private double order_qty;
private int order_qty;
private String remark;
private String ewm;
private String type;
private String bonded;
}

View File

@ -150,7 +150,11 @@ public class AsnDetailServiceImpl implements AsnDetailService {
ewm=xppRecord.getEwm();
srcPoint=xppRecord.getInvPoint();
}
Inventory inventory=inventoryService.getInventory(t.getItemKey(),xppRecord.getArea(),srcPoint,t.getAsnDetail().getPoint(),t.getArea().getDept(),BizStatus.RECEIVING_CANCEL,asn.getCusCode());
String xdh=null;
if(asn!=null){
xdh=asn.getCusCode();
}
Inventory inventory=inventoryService.getInventory(t.getItemKey(),xppRecord.getArea(),srcPoint,t.getAsnDetail().getPoint(),t.getArea().getDept(),BizStatus.RECEIVING_CANCEL,xdh);
if(inventory==null){
throw new BadRequestException("找不到对应库存");
}
@ -236,23 +240,28 @@ public class AsnDetailServiceImpl implements AsnDetailService {
@Override
public void putawayInv(@RequestBody Long asnDetailId, Long areaId, Long pointId, double recQty, String ewm) {
AsnDetail d = asnDetailRepository.getById(asnDetailId);
String propC2="课税";
String propC2=null;
if(d.getPropC2()!=null){
if(d.getPropC2().equals("EXP -")||d.getPropC2().equals("课税")){
propC2="课税";
}else if(d.getPropC2().equals("保税")){
propC2="保税";
}else{
propC2="保税";
if(d.getPropC2().indexOf("EXP")>=0){
propC2=BaseStatus.BS;
}else if(d.getPropC2().indexOf("DOM")>=0){
propC2=BaseStatus.KS;
}
}else{
propC2="课税";
}
Area area =null;
Point point = null;
String gdItemCode=null;
if(pointId!=null){
point = pointService.findEntityById(pointId);
if( point.getType().equals(BaseStatus.CH)){
area=point.getArea();
}
gdItemCode=point.getItemCode();
}
if(gdItemCode!=null&&!gdItemCode.equals("")&&!d.getItem().getCode().equals(gdItemCode)){
throw new BadRequestException("和固定库位品番"+gdItemCode+"不匹配");
}
if(areaId!=null){
area = areaService.findEntityById(areaId);
@ -264,7 +273,7 @@ public class AsnDetailServiceImpl implements AsnDetailService {
zzkw=d.getPoint();
if(zzkw==null){
//取默认制造库位
zzkw= pointService.getPoint("ZZKW", null, null, null);
zzkw= pointService.getPoint(BaseStatus.ZZKW, null, null, null);
}
}else{
pc1=DateUtil.dateYmdz();
@ -275,7 +284,7 @@ public class AsnDetailServiceImpl implements AsnDetailService {
double unRecQty=d.getOrderQty() - d.getReceivedQty();
if ( recQty<=unRecQty) {
//现品票确认将任务id回写到现品票表中
XppRecord xppRecord = xppRecordRepository.findByCode(ewm);
XppRecord xppRecord = xppRecordRepository.findByEwmType(ewm,BillParmType.XPP_1001);
ItemKey ik=null;
if(xppRecord!=null){
if(!xppRecord.getStatus().equals(BizStatus.RECEIVED)&&!xppRecord.getStatus().equals(BizStatus.RETENTION_IN)){
@ -294,6 +303,9 @@ public class AsnDetailServiceImpl implements AsnDetailService {
asn.setReceivedQuantity(asn.getReceivedQuantity()+recQty);
if(asn.getReceivedQuantity().intValue()>=asn.getOrderQuantity().intValue()) {
asn.setStatus(BizStatus.PUTAWAY);
asn.setReceivedDate(new Timestamp(new Date().getTime()));
asn.setArea(point.getArea());
asn.setRelatedBill3(point.getCode());
}
asnService.update(asn);
stockCode=asn.getCusCode();

View File

@ -22,14 +22,13 @@ import com.youchain.basicdata.domain.Item;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.domain.Stock;
import com.youchain.basicdata.service.PointService;
import com.youchain.businessdata.domain.CountDetail;
import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.domain.InventoryLog;
import com.youchain.businessdata.domain.ItemKey;
import com.youchain.businessdata.domain.*;
import com.youchain.businessdata.inputJson.buttenJson.InventoryButton;
import com.youchain.businessdata.inputJson.buttenJson.dataAll.InventoryYW;
import com.youchain.businessdata.repository.PickDetailRepository;
import com.youchain.businessdata.returnJson.RInvQuery;
import com.youchain.businessdata.returnJson.RPTaskList;
import com.youchain.businessdata.returnJson.XdInventory;
import com.youchain.businessdata.service.InventoryLogService;
import com.youchain.businessdata.service.dto.*;
import com.youchain.exception.BadRequestException;
@ -77,6 +76,7 @@ public class InventoryServiceImpl implements InventoryService {
private final EntityManager entityManager;
private final InventoryLogService invLogService;
private final PointService pointService;
private final PickDetailRepository pickDetailRepository;
@Override
public Map<String, Object> queryAll(InventoryQueryCriteria criteria, Pageable pageable) {
@ -416,4 +416,32 @@ public class InventoryServiceImpl implements InventoryService {
List<RInvQuery> list = JSON.parseArray(JSON.toJSONString(ts),RInvQuery.class);
return list;
}
public List<XdInventory> queryInvForPickDetail(Long pickDetailId) {
PickDetail pickDetail = pickDetailRepository.getById(pickDetailId);
Item item = pickDetail.getItem();
List<XdInventory> xds=new ArrayList<>();
if (pickDetail.getOrderQty() > pickDetail.getPickedQty()) {
Long zzkwId = null;
Long areaId = 0L;
List<Inventory> invs = this.queryInventoryAllocate(item.getId(), areaId, zzkwId, null, pickDetail.getPropC2(), BaseStatus.ZZJL);
for(Inventory inv:invs){
XdInventory xd=new XdInventory();
xd.setInvId(inv.getId());
xd.setPickDetailId(pickDetailId);
xd.setItemCode(item.getCode());
xd.setItemName(item.getName());
xd.setStockCode(inv.getStockCode());
xd.setPointCode(inv.getPointCode());
xd.setBonded(pickDetail.getPropC2());
xd.setPlanQty(pickDetail.getOrderQty().intValue()+"");
xd.setInvQty(inv.getQuantity().intValue()+"");
xd.setPickQty(pickDetail.getPickedQty().intValue()+"");
xd.setPropC1(inv.getItemKey().getPropC1());
xds.add(xd);
}
}
return xds;
}
}

View File

@ -16,20 +16,19 @@
package com.youchain.businessdata.service.impl;
import com.alibaba.fastjson.JSON;
import com.youchain.annotation.Log;
import com.youchain.basicdata.domain.*;
import com.youchain.basicdata.repository.*;
import com.youchain.basicdata.service.AreaService;
import com.youchain.basicdata.service.ItemService;
import com.youchain.basicdata.service.PointService;
import com.youchain.basicdata.service.dto.ItemDto;
import com.youchain.businessdata.domain.Inventory;
import com.youchain.businessdata.domain.PickDetail;
import com.youchain.businessdata.domain.PickTicket;
import com.youchain.businessdata.domain.Task;
import com.youchain.businessdata.domain.*;
import com.youchain.businessdata.repository.InventoryRepository;
import com.youchain.businessdata.repository.PickTicketRepository;
import com.youchain.businessdata.repository.TaskRepository;
import com.youchain.businessdata.returnJson.RPTaskList;
import com.youchain.businessdata.returnJson.ZzjlPickList;
import com.youchain.businessdata.service.*;
import com.youchain.businessdata.service.dto.PickDetailZscDto;
import com.youchain.businessdata.service.dto.PickTicketDto;
@ -50,6 +49,7 @@ import net.dreamlu.mica.core.utils.JsonUtil;
import org.hibernate.SQLQuery;
import org.hibernate.transform.AliasToEntityMapResultTransformer;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Page;
@ -180,17 +180,17 @@ public class PickDetailServiceImpl implements PickDetailService {
Area sharea=areaRepository.getById(cxjldto.getRk_id());
Item it=itemRepository.getById(cxjldto.getItem_id());
Point zzkw= pointRepository.getById(cxjldto.getZzkw_id());
BomAccount bomAccount=bomAccountRepository.getById(cxjldto.getBom_account_id());
// BomAccount bomAccount=bomAccountRepository.getById(cxjldto.getBom_account_id());
pd.setArea(area);
pd.setShArea(sharea);
pd.setItem(it);
pd.setPoint(zzkw);
pd.setStatus(BizStatus.OPEN);
pd.setOrderQty(cxjldto.getOrder_qty());
pd.setOrderQty(cxjldto.getOrder_qty()+0d);
pd.setRemark(cxjldto.getRemark());
pd.setType(BaseStatus.ZZJL);
pd.setPropC2(bomAccount.getBonded());
pd.setBomId(bomAccount.getId());
pd.setPropC2(cxjldto.getBonded());
pd.setBomId(cxjldto.getBom_account_id());
this.create(pd);
return pd;
}
@ -198,11 +198,9 @@ public class PickDetailServiceImpl implements PickDetailService {
@Override
@Transactional(rollbackFor = Exception.class)
public synchronized void allocate(long id, double quantity,String stockCode,String type){
PickDetailDto pickDetailDto = findById(id);
PickDetail pd = toEntity(pickDetailDto);//Dto转实体
PickDetail pd = pickDetailRepository.getById(id);
PickTicket pickTicket = pd.getPickTicket();
ItemDto itemDto = pickDetailDto.getItem();
Item item = itemService.toEntity(itemDto);
Item item = pd.getItem();
String billCode=null;
Long areaId=0L;
if (pd.getOrderQty() > pd.getAllocatedQty()) {
@ -221,17 +219,18 @@ public class PickDetailServiceImpl implements PickDetailService {
double srs=item.getExtendD3();
Map<String,String> map=new HashMap<>();
for (Inventory inv : invs) {
if(inv.getStockCode()!=null){
if(inv.getStockCode()!=null&&pd.getPo()==null){
//回写推荐托盘即可
map.put(inv.getId()+"",inv.getStockCode()+"]"+inv.getItemKey().getPropC1()+"]"+inv.getPoint().getCode()+"]"+inv.getQuantity());
continue;
}
Point startPoint = inv.getPoint();//原库位
String areaCode=BaseStatus.DEFAULT_AREA;
Point endPoint = pointService.getPoint(null, null, BaseStatus.BHZC, areaCode);//目标库位
if(endPoint==null){
throw new BadRequestException(HttpStatus.NOT_FOUND, "请维护备货暂存区");
}
// String areaCode=BaseStatus.DEFAULT_AREA;
// Point endPoint = pointService.getPoint(null, null, BaseStatus.BHZC, areaCode);//目标库位
// if(endPoint==null){
// throw new BadRequestException(HttpStatus.NOT_FOUND, "请维护备货暂存区");
// }
Point endPoint =null;
if (unQty <= 0) {
break;
}
@ -260,34 +259,38 @@ public class PickDetailServiceImpl implements PickDetailService {
unQty -= allocateQty;
pd.setAllocatedQty(pd.getAllocatedQty() + allocateQty);
if(type.equals(BaseStatus.ZCCK)) {
if(pickTicket!=null) {
pickTicket.setAllocatedQuantity(pickTicket.getAllocatedQuantity() + allocateQty);
if (pickTicket.getAllocatedQuantity()>0) {
pickTicket.setStatus(BizStatus.ALLOCATE);
}
//备货表上出单日期(审核写)
pickTicket.setOutOrderDate(new Timestamp(new Date().getTime()));
pickTicketRepository.save(pickTicket);
} else if (type.equals(BaseStatus.ZZJL)) {
}
if(pd.getAllocatedQty()>0) {
pd.setStatus(BizStatus.ALLOCATE);
}
this.update(pd);
pickDetailRepository.save(pd);
Task task = taskService.storeTask(null,pd,inv.getArea(),inv.getItemKey(),startPoint,endPoint,allocateQty,inv.getStockCode());
//修改占用数,写入日志
inventoryLogService.storeInventoryLog(BizStatus.CHANGE_ZYS, BizStatus.ADD, billCode, inv.getArea(), inv.getItemKey(), inv.getPoint(),
InventoryLog inventoryLog=inventoryLogService.storeInventoryLog(BizStatus.CHANGE_ZYS, BizStatus.ADD, billCode, inv.getArea(), inv.getItemKey(), inv.getPoint(),
inv.getPoint(), inv.getZzkw(), (inv.getQueuedQty()-allocateQty), allocateQty, null, BizStatus.PICK,
pd.getId(), inv.getId(), task.getId()+"备货占用");
inventoryLog.setDstStockCode(inv.getStockCode());
inventoryLogService.update(inventoryLog);
}
if(map!=null){
if(map!=null&&pickTicket==null){
pd.setRemark(map.values().stream()
.collect(Collectors.joining("\n")));
log.info(pd.getRemark()+"===="+pd.getType());
this.update(pd);
pickDetailRepository.save(pd);
}
}else{
log.info("无库存。。。。");
}
} else {
throw new BadRequestException(HttpStatus.NOT_FOUND,"已分配,请勿重复操作!");
throw new BadRequestException("已分配,请勿重复操作!");
}
}
@ -296,23 +299,24 @@ public class PickDetailServiceImpl implements PickDetailService {
@Override
@Transactional(rollbackFor = Exception.class)
public synchronized void cancelAllocate(long id){
PickDetailDto pickDetailDto = findById(id);
PickDetail pd = toEntity(pickDetailDto);
PickDetail pd = pickDetailRepository.getById(id);
List<Task> Tasks = taskRepository.getPickNotAllTask(id);
for (Task task : Tasks) {
if(task.getMoveQty()>0){
//throw new BadRequestException(HttpStatus.NOT_FOUND,"已拣货,请勿重复操作!");
continue;
throw new BadRequestException(HttpStatus.NOT_FOUND,"已拣货,不能取消!");
//continue;
}
log.info(task.getId()+"==="+task.getItemKey().getItem().getCode()+"==="+task.getPlanQty());
//根据Taskz找到对应的库存
double quantity=task.getPlanQty();
// Inventory inv = inventoryRepository.findById(task.getInvId()).get();
Inventory inv=inventoryService.getInventory(task.getItemKey(),pd.getPickTicket().getArea(),task.getSrcPoint(),task.getZzkw(),pd.getPickTicket().getDept(),BizStatus.CANCEL,task.getDstStockCode());
Inventory inv=inventoryService.getInventory(task.getItemKey(),task.getArea(),task.getSrcPoint(),task.getZzkw(),task.getDept(),BizStatus.CANCEL,task.getDstStockCode());
//修改占用数,写入日志
inventoryLogService.storeInventoryLog(BizStatus.CHANGE_ZYS, BizStatus.REDUCE, task.getBillCode(), inv.getArea(), inv.getItemKey(), inv.getPoint(),
InventoryLog inventoryLog=inventoryLogService.storeInventoryLog(BizStatus.CHANGE_ZYS, BizStatus.REDUCE, task.getBillCode(), inv.getArea(), inv.getItemKey(), inv.getPoint(),
inv.getPoint(), inv.getZzkw(), inv.getQueuedQty(), quantity, null, BizStatus.PICK,
pd.getId(), inv.getId(), task.getId()+"取消占用");
inventoryLog.setDstStockCode(inv.getStockCode());
inventoryLogService.update(inventoryLog);
inv.setQueuedQty(inv.getQueuedQty() - quantity);
inventoryRepository.save(inv);
//删除Task
@ -323,9 +327,13 @@ public class PickDetailServiceImpl implements PickDetailService {
pd.setAllocatedQty(0d);
pd.setStatus(BizStatus.OPEN);
}
this.update(pd);
pickDetailRepository.save(pd);
PickTicket pt=pd.getPickTicket();
if(pt!=null) {
pt.setStatus(BizStatus.OPEN);
pt.setAllocatedQuantity(0d);
pickTicketRepository.save(pt);
}
}
}
@ -393,6 +401,24 @@ public class PickDetailServiceImpl implements PickDetailService {
return list;
}
public List<ZzjlPickList> queryZzjlPickList(String itemCode) {
String sql="SELECT d.id detail_id,a.`name` area_name,it.code item_code,it.name item_name, p.code point_code,d.prop_c2 bonded,d.order_qty,d.allocated_qty,d.picked_qty,d.create_by,d.create_time\n" +
" from data_pick_detail d\n" +
" LEFT JOIN base_item it on it.id=d.item_id\n" +
" left JOIN base_point p on p.id=d.point_id\n" +
" left join base_area a on a.id=p.area_id\n" +
" where d.type='ZZJL' and d.picked_qty=0;\n";
Query query = entityManager.createNativeQuery(sql);
List ts= query
.unwrap(SQLQuery.class)
.setResultTransformer(
AliasToEntityMapResultTransformer.INSTANCE
)
.list();
List<ZzjlPickList> list = JSON.parseArray(JSON.toJSONString(ts),ZzjlPickList.class);
return list;
}
public Map<String,Object> queryPickDetailAll(PickDetailQueryCriteria criteria, Pageable pageable) {
int pageNum=pageable.getPageNumber();//当前页

View File

@ -490,8 +490,9 @@ public class PickTicketServiceImpl implements PickTicketService {
PickDetail pd = task.getPickDetail();
PickTicket pt = pd.getPickTicket();
Point zzkw=pd.getPoint();
Area area=task.getArea();
//大部品的库存不能进去
Inventory srcInv = inventoryService.getInventory(task.getItemKey(),pt.getArea(),task.getSrcPoint(),zzkw,pt.getArea().getDept(),BizStatus.PICK_DOWN,task.getDstStockCode());
Inventory srcInv = inventoryService.getInventory(task.getItemKey(),area,task.getSrcPoint(),zzkw,task.getDept(),BizStatus.PICK_DOWN,task.getDstStockCode());
if (srcInv==null) {
throw new BadRequestException(HttpStatus.NOT_FOUND, task.getItem().getCode() + "未发现库存数据");
}
@ -508,9 +509,11 @@ public class PickTicketServiceImpl implements PickTicketService {
}
}
//库存扣除后还要 inventoryLog
invLogService.storeInventoryLog(BizStatus.PICK_DOWN, BizStatus.REDUCE, pt.getCode(), srcInv.getArea(), srcInv.getItemKey(), srcInv.getPoint(),
InventoryLog inventoryLog=invLogService.storeInventoryLog(BizStatus.PICK_DOWN, BizStatus.REDUCE, task.getBillCode(), srcInv.getArea(), srcInv.getItemKey(), srcInv.getPoint(),
srcInv.getPoint(), zzkw, srcQty, pickQty, barCode, BizStatus.PICK_DOWN,
task.getId(), srcInv.getId(), pd.getRemark());
inventoryLog.setDstStockCode(srcInv.getStockCode());
invLogService.update(inventoryLog);
//生成taskLog 日志
TaskLog taskLog = taskLogService.createTaskLog(task, pickQty, stockCode, barCode, bhr);
if (xpp != null) {
@ -533,13 +536,16 @@ public class PickTicketServiceImpl implements PickTicketService {
srcInv.setQueuedQty(0d);
}
inventoryService.update(srcInv);
//修改占用数,写入日志
InventoryLog invLog=invLogService.storeInventoryLog(BizStatus.CHANGE_ZYS, BizStatus.REDUCE, pt.getCode(), srcInv.getArea(), srcInv.getItemKey(), srcInv.getPoint(),
srcInv.getPoint(), srcInv.getZzkw(),srcQue, fpQty, null, BizStatus.PICK,
pd.getId(), srcInv.getId(), taskLog.getId()+"拣货确认");
invLog.setDstQty(srcInv.getQueuedQty());
invLogService.update(invLog);
if(task.getTaskType()!=null&&!task.getTaskType().equals(BizStatus.XD_PICK)) {
InventoryLog invLog = invLogService.storeInventoryLog(BizStatus.CHANGE_ZYS, BizStatus.REDUCE, task.getBillCode(), srcInv.getArea(), srcInv.getItemKey(), srcInv.getPoint(),
srcInv.getPoint(), srcInv.getZzkw(), srcQue, fpQty, null, BizStatus.PICK,
pd.getId(), srcInv.getId(), taskLog.getId() + "拣货确认");
invLog.setDstQty(srcInv.getQueuedQty());
invLog.setDstStockCode(srcInv.getStockCode());
invLogService.update(invLog);
}
//生成备货库存,备货库存也不需要线边
/** Inventory dstInv = inventoryService.getInventory(srcInv.getItemKey(), srcInv.getArea(), task.getDstPoint(), zzkw, srcInv.getDept(), BizStatus.PICK_DOWN,task.getDstStockCode());
@ -549,21 +555,26 @@ public class PickTicketServiceImpl implements PickTicketService {
dstInv.setQuantity(dstInv.getQuantity() + kcNum);
inventoryService.update(dstInv); **/
pd.setPickedQty(pd.getPickedQty() + pickQty);
pickDetailService.update(pd);
//拣货数量
pt.setPickedQuantity(pt.getPickedQuantity() + pickQty);
pt.setBhQty(pt.getBhQty() + pickQty);
if(pd.getPickedQty()>0){
pd.setStatus(BizStatus.PICK_ALL);
}
pickDetailRepository.save(pd);
if(pt!=null) {
//拣货数量
pt.setPickedQuantity(pt.getPickedQuantity() + pickQty);
pt.setBhQty(pt.getBhQty() + pickQty);
// if ((pt.getOrderQuantity() - pt.getPickedQuantity()) <= 0) {
// pt.setStatus(BizStatus.PICK_ALL);
// } else {
// pt.setStatus(BizStatus.PICKUP);
// }
if(pickDetailRepository.queryPickQty(pt.getId()).size()>0){
pt.setStatus(BizStatus.PICKUP);
}else{
pt.setStatus(BizStatus.PICK_ALL);
if (pickDetailRepository.queryPickQty(pt.getId()).size() > 0) {
pt.setStatus(BizStatus.PICKUP);
} else {
pt.setStatus(BizStatus.PICK_ALL);
}
this.update(pt);
}
this.update(pt);
if (xpp != null) {
xpp.setStatus(BizStatus.PICK_ALL);
xpp.setBhr(SecurityUtils.getCurrentUsername());

View File

@ -370,4 +370,5 @@ public class TaskServiceImpl implements TaskService {
List<Task> taskList=query.getResultList();
return taskList;
}
}

View File

@ -389,8 +389,8 @@ public class XppRecordServiceImpl implements XppRecordService {
return xpp;
}
public RRkXpp xppAnalysis(String ewm) {
if (ewm.length() < 82) {
public RRkXpp xppAnalysis(String ewm,String type) {
if (ewm.length() <82) {
throw new BadRequestException("二维码格式错误");
}
int i = 0;
@ -419,16 +419,18 @@ public class XppRecordServiceImpl implements XppRecordService {
if (item==null){
throw new BadRequestException("部品品番不存在");
}
XppRecord xppRecord = xppRecordRepository.findByCode(ewm);
if (xppRecord!=null){
throw new BadRequestException("二维码已采集");
if(type!=null) {
XppRecord xppRecord = xppRecordRepository.findByEwmType(ewm, type);
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.setNrs(Integer.valueOf(nrs.trim()));
xpp.setNrzsr(nrzsr);
xpp.setFzh(fzh);
xpp.setGys(gys.trim());
@ -443,11 +445,11 @@ public class XppRecordServiceImpl implements XppRecordService {
}
public XppRecord saveXppRecord(String ewm,Area area,String type){
XppRecord xppRecord = xppRecordRepository.findByCode(ewm);
if (xppRecord != null) {
XppRecord xppRecord = xppRecordRepository.findByEwmType(ewm,type);
if (xppRecord != null&&type.equals(BillParmType.XPP_1001)) {
throw new BadRequestException("二维码已采集");
}
RRkXpp xpp=this.xppAnalysis(ewm);
RRkXpp xpp=this.xppAnalysis(ewm,type);
Item item = itemRepository.findByCode(xpp.getItemCode());
if (item == null) {
throw new BadRequestException("部品品番不存在");
@ -537,7 +539,7 @@ public class XppRecordServiceImpl implements XppRecordService {
throw new BadRequestException("现品票品番"+xppItemCode+"和库位品番"+bomItemCode+"不一致");
//return new ResponseEntity<>( "现品票品番"+xppItemCode+"和库位品番"+bomItemCode+"不一致", BAD_REQUEST);
}
XppRecord xppRecord = this.saveXppRecord(ewm,point.getArea(),"2001");
XppRecord xppRecord = this.saveXppRecord(ewm,point.getArea(),BillParmType.XPP_2001);
ItemKey itemKey = itemKeyService.getItemKey(xppRecord.getItem(), null,bonded);
Inventory inventory = inventoryService.getInventory(itemKey, point.getArea(), point, point, point.getDept(), BizStatus.ZZKW_TL,null);
double srcQty = inventory.getQuantity();

View File

@ -0,0 +1,12 @@
package com.youchain.utils;
public class BillParmType{
/**
* -
*/
public static String XPP_1001 = "1001";
/**
* -
*/
public static String XPP_2001 = "2001";
}

View File

@ -110,6 +110,10 @@ public class BizStatus {
*
*/
public static String PICK = "PICK";
/**
*
*/
public static String XD_PICK = "XD_PICK";
/**
*
@ -237,6 +241,16 @@ public class BizStatus {
*
*/
public static String ZZKW_TL = "ZZKW_TL";
/**
*
*/
public static String ZZKW_RK = "ZZKW_RK";
/**
*
*/
public static String XD_MOVE = "XD_MOVE";
/**
*
*/

View File

@ -170,10 +170,11 @@ public class FastExcelUtil {
}
public static List<Map<Integer, Object>> readExcelData2(MultipartFile file) {
public static List<Map<Integer, Object>> readExcelData2(MultipartFile file, int headRowNumber) {
try {
return FastExcel.read(file.getInputStream())
.sheet() // 默认读取第一个Sheet
.sheet()
.headRowNumber(headRowNumber)
.doReadSync();
} catch (IOException e) {
throw new BadRequestException("数据格式存在问题,无法读取");