589 lines
27 KiB
Java
589 lines
27 KiB
Java
/*
|
||
* Copyright 2019-2020 Zheng Jie
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
package com.youchain.businessdata.rest;
|
||
|
||
import com.alibaba.fastjson.JSON;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.youchain.DuplicateSubmission.DuplicateSubmission;
|
||
import com.youchain.annotation.AnonymousAccess;
|
||
import com.youchain.annotation.Log;
|
||
import com.youchain.basicdata.domain.*;
|
||
import com.youchain.basicdata.repository.BigItemRepository;
|
||
import com.youchain.basicdata.repository.BomAccountRepository;
|
||
import com.youchain.basicdata.repository.StockRepository;
|
||
import com.youchain.basicdata.service.AreaService;
|
||
import com.youchain.basicdata.service.ItemService;
|
||
import com.youchain.basicdata.service.StockService;
|
||
import com.youchain.basicdata.service.PointService;
|
||
import com.youchain.basicdata.service.dto.AreaDto;
|
||
import com.youchain.basicdata.service.mapstruct.PointMapper;
|
||
import com.youchain.businessdata.inputJson.IRkConfirm;
|
||
import com.youchain.businessdata.inputJson.IRkInv;
|
||
import com.youchain.businessdata.inputJson.IRkPut;
|
||
import com.youchain.businessdata.domain.*;
|
||
import com.youchain.businessdata.inputJson.IScanPut;
|
||
import com.youchain.businessdata.inputJson.buttenJson.AsnDetailButton;
|
||
import com.youchain.businessdata.repository.AsnDetailRepository;
|
||
import com.youchain.businessdata.repository.InventoryRepository;
|
||
import com.youchain.businessdata.repository.XppRecordRepository;
|
||
import com.youchain.businessdata.returnJson.RRkXpp;
|
||
import com.youchain.businessdata.service.*;
|
||
import com.youchain.businessdata.service.dto.*;
|
||
import com.youchain.businessdata.service.impl.SparepartsServiceImpl;
|
||
import com.youchain.businessdata.service.mapstruct.AsnMapper;
|
||
import com.youchain.businessdata.service.mapstruct.InventoryMapper;
|
||
import com.youchain.config.FileProperties;
|
||
import com.youchain.exception.BadRequestException;
|
||
import com.youchain.exception.handler.ApiError;
|
||
import com.youchain.exception.handler.ApiResult;
|
||
import com.youchain.utils.*;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.springframework.data.domain.Pageable;
|
||
import lombok.RequiredArgsConstructor;
|
||
import org.springframework.http.HttpStatus;
|
||
import org.springframework.http.ResponseEntity;
|
||
import org.springframework.security.access.prepost.PreAuthorize;
|
||
import org.springframework.validation.annotation.Validated;
|
||
import org.springframework.web.bind.annotation.*;
|
||
import io.swagger.annotations.*;
|
||
|
||
import java.beans.Transient;
|
||
import java.io.IOException;
|
||
import java.sql.Timestamp;
|
||
import java.time.format.DateTimeFormatter;
|
||
import java.util.*;
|
||
import javax.servlet.http.HttpServletResponse;
|
||
|
||
import org.springframework.transaction.annotation.Transactional;
|
||
|
||
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||
|
||
/**
|
||
* @author hjl
|
||
* @website https://eladmin.vip
|
||
* @date 2023-08-14
|
||
**/
|
||
@RestController
|
||
@RequiredArgsConstructor
|
||
@Api(tags = "asn_detail管理")
|
||
@Slf4j
|
||
@RequestMapping("/api/asnDetail")
|
||
public class AsnDetailController {
|
||
|
||
private final AsnDetailService asnDetailService;
|
||
|
||
private final ItemService itemService;
|
||
|
||
private final TaskService taskService;
|
||
|
||
private final StockService stockService;
|
||
private final StockRepository stockRepository;
|
||
|
||
private final ItemKeyService itemKeyService;
|
||
|
||
private final InventoryService invService;
|
||
|
||
private final InventoryLogService invLogService;
|
||
|
||
private final PointService pointService;
|
||
|
||
private final AreaService areaService;
|
||
|
||
private final InventoryRepository inventoryRepository;
|
||
private final PointMapper pointMapper;
|
||
private final FileProperties properties;
|
||
private final AsnService asnService;
|
||
private final AsnDetailRepository asnDetailRepository;
|
||
private final AsnMapper asnMapper;
|
||
private final InventoryMapper inventoryMapper;
|
||
private final XppRecordRepository xppRecordRepository;
|
||
private final XppRecordService xppRecordService;
|
||
private final BigItemRepository bigItemRepository;
|
||
private final BomAccountRepository bomAccountRepository;
|
||
private final SparepartsServiceImpl sparepartsServiceImpl;
|
||
|
||
@Log("导出数据")
|
||
@ApiOperation("导出数据")
|
||
@GetMapping(value = "/download")
|
||
@AnonymousAccess
|
||
public void exportAsnDetail(HttpServletResponse response, AsnDetailQueryCriteria criteria) throws Exception {
|
||
asnDetailService.download(asnDetailService.queryAll(criteria), response);
|
||
}
|
||
|
||
@PostMapping("/getIdData")
|
||
@Log("根据id查询asn_detail")
|
||
@ApiOperation("根据id查询asn_detail")
|
||
@AnonymousAccess
|
||
public ResponseEntity<Object> getIdData(@RequestBody Long ids) {
|
||
return new ResponseEntity<>(asnDetailRepository.queryByAsnId(ids), HttpStatus.OK);
|
||
}
|
||
|
||
|
||
@GetMapping
|
||
@Log("查询asn_detail")
|
||
@ApiOperation("查询asn_detail")
|
||
@AnonymousAccess
|
||
public ResponseEntity<Object> queryAsnDetail(AsnDetailQueryCriteria criteria, Pageable pageable) {
|
||
return new ResponseEntity<>(asnDetailService.queryAll(criteria, pageable), HttpStatus.OK);
|
||
}
|
||
|
||
@GetMapping("/queryAsnDetailAll")
|
||
@Log("查询asn_detail全部数据")
|
||
@ApiOperation("查询asn_detail全部数据")
|
||
@AnonymousAccess
|
||
public ResponseEntity<Object> queryAsnDetailAll(AsnDetailQueryCriteria criteria) {
|
||
return new ResponseEntity<>(asnDetailService.queryAll(criteria), HttpStatus.OK);
|
||
}
|
||
|
||
@PostMapping
|
||
@Log("新增asn_detail")
|
||
@ApiOperation("新增asn_detail")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional
|
||
public ResponseEntity<Object> createAsnDetail(@Validated @RequestBody AsnDetail asnDetail) {
|
||
asnDetail.setStatus(BizStatus.OPEN);
|
||
asnDetail.setDept(UserUtils.getDept());
|
||
if (asnDetail.getRemark() == null && asnDetail.getAsn().getDescription() != null) {
|
||
asnDetail.setRemark(asnDetail.getAsn().getDescription());
|
||
}
|
||
asnDetailService.create(asnDetail);
|
||
// Stock stock=asnDetail.getStock();
|
||
// stock.setStatus(BaseStatus.USED);
|
||
// stockService.update(stock);
|
||
//orderQty
|
||
//添加订单数量
|
||
if (asnDetail.getOrderQty() != null && asnDetail.getOrderQty() != 0) {
|
||
Asn asn = asnDetail.getAsn();
|
||
asn.setOrderQuantity(asn.getOrderQuantity() + asnDetail.getOrderQty());
|
||
asnService.update(asn);
|
||
}
|
||
return new ResponseEntity<>(HttpStatus.OK);
|
||
}
|
||
|
||
|
||
|
||
@PutMapping
|
||
@Log("修改asn_detail")
|
||
@ApiOperation("修改asn_detail")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
public ResponseEntity<Object> updateAsnDetail(@Validated @RequestBody AsnDetail resources) {
|
||
AsnDetailDto byId = asnDetailService.findById(resources.getId());
|
||
AsnDto byId1 = asnService.findById(resources.getAsn().getId());
|
||
byId1.setOrderQuantity((byId1.getOrderQuantity() - byId.getOrderQty()) + resources.getOrderQty());
|
||
asnDetailService.update(resources);
|
||
asnService.update(asnMapper.toEntity(byId1));
|
||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||
}
|
||
|
||
|
||
@DeleteMapping
|
||
@Log("删除asn_detail")
|
||
@ApiOperation("删除asn_detail")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
public ResponseEntity<Object> deleteAsnDetail(@RequestBody Long[] ids) {
|
||
asnDetailService.deleteAll(ids);
|
||
return new ResponseEntity<>(HttpStatus.OK);
|
||
}
|
||
|
||
@PostMapping("/putawayInvApp")
|
||
@Log("APP现品票上架-单个")
|
||
@ApiOperation("APP现品票上架-单个")
|
||
@AnonymousAccess
|
||
@Transactional
|
||
public ResponseEntity<Object> putawayInvApp(@RequestBody IRkPut s) {
|
||
String pointCode = s.getPointCode();
|
||
String ewm = s.getEwm();
|
||
int seq=s.getSeq();
|
||
XppRecord xppRecord =null;
|
||
Point point =null;
|
||
RRkXpp map = new RRkXpp();
|
||
AsnDetail d=null;
|
||
xppRecord = xppRecordRepository.findByCode(ewm);
|
||
if(xppRecord==null){
|
||
return new ResponseEntity<>(ewm + "未收货", BAD_REQUEST);
|
||
}
|
||
d=xppRecord.getAsnDetailId();
|
||
if(d.getReceivedQty()>0){
|
||
return new ResponseEntity<>(ewm + "已上架,不能重复上架", BAD_REQUEST);
|
||
}
|
||
if(seq==1){//扫描列表
|
||
Item it=d.getItem();
|
||
map.setItemCode(it.getCode());
|
||
map.setItemName(it.getName());
|
||
map.setAc(xppRecord.getAc());
|
||
map.setDdbh(xppRecord.getDdbh());
|
||
map.setNrs(xppRecord.getNrs());
|
||
map.setNrzsr(DateUtil.dateYmd(xppRecord.getNrDate()));
|
||
map.setFzh(xppRecord.getFzh());
|
||
map.setTjkw(it.getPoint()==null?null:it.getPoint().getCode());
|
||
return new ResponseEntity<>(map, HttpStatus.OK);
|
||
}
|
||
if (seq==2) {//列表提交上架
|
||
if(pointCode==null||!pointCode.equals("")){
|
||
Point dstPoint=d.getItem().getPoint();
|
||
if(dstPoint==null){
|
||
return new ResponseEntity<>(d.getItem().getCode() + "品番未维护库位", BAD_REQUEST);
|
||
}
|
||
point=dstPoint;
|
||
pointCode=dstPoint.getCode();
|
||
}else {
|
||
point = pointService.getPoint(pointCode, null, null, null);
|
||
if (point == null) {
|
||
return new ResponseEntity<>(pointCode + "库位不存在", BAD_REQUEST);
|
||
}
|
||
}
|
||
Area area=point.getArea();
|
||
asnDetailService.putawayInv(d.getId(),area.getId(),point.getId(),s.getQty(),ewm);
|
||
}
|
||
return new ResponseEntity<>("操作成功", HttpStatus.OK);
|
||
}
|
||
|
||
@PostMapping("/putawayXppApp")
|
||
@Log("扫描现品票上架APP")
|
||
@ApiOperation("扫描现品票上架APP")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional
|
||
@DuplicateSubmission
|
||
public ResponseEntity<Object> putawayXppApp(@RequestBody IRkPut s) {
|
||
int seq=s.getSeq();
|
||
if(seq==1){
|
||
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(str.length>1){//固定库位标签
|
||
pointCode=str[3];
|
||
bomItemCode=str[0];
|
||
bonded=str[2];
|
||
}
|
||
if (pointCode == null||pointCode.equals("")) {
|
||
return new ResponseEntity<>( "库位不能为空", BAD_REQUEST);
|
||
}
|
||
Point point = pointService.getPoint(pointCode,null, null, null);
|
||
if (point == null) {
|
||
return new ResponseEntity<>(pointCode + "库位不存在", BAD_REQUEST);
|
||
}
|
||
Area area=point.getArea();
|
||
for(String ewm:s.getEwms()){
|
||
if(seq==2) {//收货上架
|
||
XppRecord xppRecord = xppRecordService.saveXppRecord(ewm, point.getArea(), BillParmType.XPP_1001);
|
||
AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord);
|
||
String nrcs=xppRecord.getRelaCode();
|
||
if(nrcs.equals("00209")||nrcs.equals("00609")||nrcs.equals("00683")||nrcs.equals("00809")){
|
||
asnDetail.setPropC2(BaseStatus.BS);
|
||
}else {
|
||
asnDetail.setPropC2(BaseStatus.KS);
|
||
}
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
return new ResponseEntity<>("操作成功", HttpStatus.OK);
|
||
}
|
||
|
||
@PostMapping("/collectPutAway")
|
||
@Log("现品票上架")
|
||
@ApiOperation("现品票上架")
|
||
@AnonymousAccess
|
||
@Transactional(rollbackFor = Exception.class)
|
||
public ResponseEntity<Object> collectPutAway(@RequestBody HashMap rk) {
|
||
Long pointId=Long.parseLong(rk.get("pointId").toString());
|
||
String type=rk.get("type").toString();
|
||
Point point=pointService.findEntityById(pointId);
|
||
String ewm=rk.get("ewm").toString();
|
||
if(type.equals(BillParmType.XPP_1001)){//收货上架
|
||
XppRecord xppRecord = xppRecordService.saveXppRecord(rk.get("ewm").toString(),point.getArea(),type);
|
||
AsnDetail asnDetail = xppRecordService.addAsnDetail(xppRecord);
|
||
String nrcs=xppRecord.getRelaCode();
|
||
if(nrcs.equals("00209")||nrcs.equals("00609")||nrcs.equals("00683")||nrcs.equals("00809")){
|
||
asnDetail.setPropC2(BaseStatus.BS);
|
||
}else {
|
||
asnDetail.setPropC2(BaseStatus.KS);
|
||
}
|
||
asnDetailService.putawayInv(asnDetail.getId(),point.getArea().getId(),pointId,xppRecord.getNrs(),xppRecord.getEwm());
|
||
}else if(type.equals(BillParmType.XPP_2001)){//制造投料上架
|
||
//查找线边库存是否存在,插入
|
||
Long bomId=Long.parseLong(rk.get("bomId").toString());
|
||
BomAccount bom=bomAccountRepository.getById(bomId);
|
||
String bomItemCode=bom.getItem().getCode();
|
||
xppRecordService.xppPutaway(ewm,bom.getBonded(),bomItemCode,point);
|
||
}
|
||
return new ResponseEntity<>("操作成功", HttpStatus.OK);
|
||
}
|
||
|
||
|
||
@PostMapping("/putawayConfirmXpp")
|
||
@Log("现品票上架确认-系统")
|
||
@ApiOperation("现品票上架确认-系统")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional(rollbackFor = Exception.class)
|
||
@DuplicateSubmission
|
||
public ResponseEntity<Object> putawayConfirmXpp(@RequestBody HashMap rk) {
|
||
Long asnDetailId=Long.parseLong(rk.get("detailId").toString());
|
||
AsnDetailDto dto= asnDetailService.findById(asnDetailId);
|
||
Double recQty=dto.getOrderQty()-dto.getReceivedQty();
|
||
asnDetailService.putawayInv(asnDetailId, Long.parseLong(rk.get("areaId").toString())
|
||
, Long.parseLong(rk.get("pointId").toString()),recQty,null);
|
||
return new ResponseEntity<>("操作成功", HttpStatus.OK);
|
||
}
|
||
|
||
@Log("取消上架")
|
||
@ApiOperation("取消上架")
|
||
@PostMapping("/cancelPut")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional
|
||
public ResponseEntity<Object> cancelPut(@RequestBody Long[] ids) {
|
||
for (Long id:ids){
|
||
XppRecord xppRecord = xppRecordService.getEntity(id);
|
||
AsnDetail ad=xppRecord.getAsnDetailId();
|
||
if(ad==null){
|
||
return new ResponseEntity("找不到上架记录", BAD_REQUEST);
|
||
}
|
||
if (!xppRecord.getStatus().equals(BizStatus.PUTAWAY)) {
|
||
throw new BadRequestException("上架状态才能取消上架");
|
||
}
|
||
Task t=xppRecord.getRkTask();
|
||
// List<Task> ts=taskService.queryTask(ad.getId(),null,null,null);
|
||
// for(Task t:ts) {
|
||
asnDetailService.cancelPut(t.getId(), xppRecord);
|
||
// }
|
||
xppRecordRepository.delete(xppRecord);
|
||
}
|
||
return new ResponseEntity("取消成功", HttpStatus.OK);
|
||
}
|
||
@Log("取消收货的操作")
|
||
@ApiOperation("取消收货的操作")
|
||
@PostMapping("/rkAndQxButtonQX")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional
|
||
public ApiResult rkAndQxButtonQX(@RequestBody AsnDetailButton asnDetailButton) {
|
||
if (!asnDetailButton.getAsnDetailDataS().isEmpty()) {
|
||
for (AsnDetail ad : asnDetailButton.getAsnDetailDataS()) {
|
||
Asn asn = ad.getAsn();
|
||
if (Objects.isNull(asn)){
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, ad.getItem().getCode() + "没有主单(订单序号)");
|
||
}
|
||
AsnDto byId = asnMapper.toDto(asn);
|
||
//取消收货
|
||
//物料 点位 增加/减少 1
|
||
InventoryLogQueryCriteria inventoryLogQueryCriteria = new InventoryLogQueryCriteria();
|
||
inventoryLogQueryCriteria.setIncDec(1);
|
||
inventoryLogQueryCriteria.setItemCode(ad.getItem().getCode());
|
||
inventoryLogQueryCriteria.setSrcPointCode(ad.getPoint().getCode());
|
||
inventoryLogQueryCriteria.setAreaCode(byId.getArea().getCode());
|
||
List<InventoryLogDto> inventoryLogDtos = invLogService.queryAll(inventoryLogQueryCriteria);
|
||
if (inventoryLogDtos.isEmpty()) {
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, ad.getId() + "未发现库存日志");
|
||
}
|
||
//判断库存数量 是否大于取消的数量
|
||
// for (InventoryLogDto inve : inventoryLogDtos) {
|
||
InventoryLogDto inve = inventoryLogDtos.get(0);
|
||
//目标标点位
|
||
Point dstPoint = inve.getDstPoint();
|
||
//查库存
|
||
InventoryQueryCriteria inventoryQueryCriteria = new InventoryQueryCriteria();
|
||
inventoryQueryCriteria.setPointCode(dstPoint.getCode());
|
||
inventoryQueryCriteria.setItemKey(inve.getItemKey());
|
||
inventoryQueryCriteria.setAreaName(byId.getArea().getName());
|
||
List<InventoryDto> inventoryDtos = invService.queryAll(inventoryQueryCriteria);
|
||
if (!inventoryDtos.isEmpty()) {
|
||
InventoryDto inventoryDto = inventoryDtos.get(0);
|
||
double pd = inventoryDto.getQuantity()-ad.getReceivedQty();
|
||
if (pd>0){
|
||
inventoryDto.setQuantity((int)pd);
|
||
invService.update(inventoryMapper.toEntity(inventoryDto));
|
||
}else if (pd==0d){
|
||
inventoryRepository.deleteById(inventoryDto.getId());
|
||
}else {
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, ad.getItem().getCode()+"库存数量不满,无法取消");
|
||
}
|
||
|
||
//生成库存日志
|
||
InventoryLog inventoryLog = invLogService.storeInventoryLog(BizStatus.RECEIVING_CANCEL, BizStatus.REDUCE, null, ad.getPoint().getArea(), inve.getItemKey(),
|
||
pointMapper.toEntity(inventoryDto.getPoint()) , dstPoint, ad.getStock(), ad.getStock(), ad.getReceivedQty(), ad.getReceivedQty(), null,null,BizStatus.ASN, ad.getId(), inventoryDto.getId(), ad.getRemark());
|
||
}
|
||
// }
|
||
byId.setReceivedQuantity(byId.getReceivedQuantity()-ad.getReceivedQty());
|
||
ad.setReceivedQty(0d);
|
||
asnDetailService.update(ad);
|
||
asnService.update(asnMapper.toEntity(byId));
|
||
}
|
||
}
|
||
return ApiResult.result(200, "操作成功", HttpStatus.OK);
|
||
}
|
||
/**
|
||
* 整单入库、单一入库、取消收货的操作
|
||
*
|
||
* @param asnDetailButton
|
||
* @return
|
||
*/
|
||
@Log("整单入库、单一入库、取消收货的操作")
|
||
@ApiOperation("整单入库、单一入库、取消收货的操作")
|
||
@PostMapping("/rkAndQxButton")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional(rollbackFor = Exception.class)
|
||
public ApiResult rkAndQxButton(@RequestBody AsnDetailButton asnDetailButton) {
|
||
if (asnDetailButton.getButton() == 1) {
|
||
//整单入库
|
||
long asnId = asnDetailButton.getId();
|
||
AsnDto byId = asnService.findById(asnId);
|
||
if (Objects.isNull(byId)) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, asnId + "未查到该数据");
|
||
}
|
||
//库区的判断
|
||
AreaDto area = byId.getArea();
|
||
if (Objects.isNull(area)) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, asnId + "库区未填写");
|
||
}
|
||
//查询 那个明细需要确认
|
||
List<AsnDetail> asnDetails =asnDetailService.findAsnDetails(asnId,"1");
|
||
if (!asnDetails.isEmpty()) {
|
||
for (AsnDetail d : asnDetails) {
|
||
asnDetailService.putawayInv(d.getId(), byId.getArea().getId(), d.getPoint()==null?null:d.getPoint().getId(),(d.getOrderQty()-d.getReceivedQty()),null);
|
||
byId.setReceivedDate(new Timestamp(System.currentTimeMillis()));
|
||
byId.setReceivedQuantity(byId.getReceivedQuantity() + d.getOrderQty());
|
||
|
||
double pd = byId.getOrderQuantity() - byId.getReceivedQuantity();
|
||
if (pd == 0) {
|
||
byId.setStatus(BizStatus.RECEIVED);
|
||
} else if (pd > 0 && byId.getReceivedQuantity() > 0) {
|
||
byId.setStatus(BizStatus.RECEIVING);
|
||
}
|
||
asnService.update(asnMapper.toEntity(byId));
|
||
}
|
||
}
|
||
return ApiResult.result(200, "入库确认成功", HttpStatus.OK);
|
||
} else if (asnDetailButton.getButton() == 2) {
|
||
double qty=asnDetailButton.getOneRNumber();
|
||
long id = asnDetailButton.getId();
|
||
AsnDto byId = asnService.findById(id);
|
||
if (Objects.isNull(byId)) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "未查到该数据");
|
||
}
|
||
//库区的判断
|
||
AreaDto area = byId.getArea();
|
||
if (Objects.isNull(area)) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "库区未填写");
|
||
}
|
||
asnDetailService.putawayInv(id,area.getId(),asnDetailButton.getOneRPoint().getId(),qty,null);
|
||
} else if (asnDetailButton.getButton() == 3) {
|
||
long id = asnDetailButton.getId();
|
||
AsnDto byId = asnService.findById(id);
|
||
if (!asnDetailButton.getAsnDetailDataS().isEmpty()) {
|
||
for (AsnDetail ad : asnDetailButton.getAsnDetailDataS()) {
|
||
List<Task> ts=taskService.queryTask(ad.getId(),null,null,null,null);
|
||
for(Task t:ts) {
|
||
asnDetailService.cancelPut(t.getId(),null);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, asnDetailButton.getButton() + "的操作码不对 1、整单入库,2、单一入库,3取消收货");
|
||
}
|
||
return ApiResult.result(200, "操作成功", HttpStatus.OK);
|
||
}
|
||
|
||
|
||
@Log("入库确认")
|
||
@ApiOperation("入库确认")
|
||
@PostMapping(value = "/invVerify")
|
||
@PreAuthorize("@el.check('super:man')")
|
||
@Transactional(rollbackFor = Exception.class)
|
||
public ApiResult invVerify(@RequestBody Long[] ids) {
|
||
for (Long id : ids) {
|
||
AsnDto byId = asnService.findById(id);
|
||
if (Objects.isNull(byId)) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "未查到该数据");
|
||
}
|
||
//库区的判断
|
||
AreaDto area = byId.getArea();
|
||
if (Objects.isNull(area)) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "库区未填写");
|
||
}
|
||
// if (!area.getBesh()){
|
||
// // 通用异常,使用自定义状态码
|
||
// throw new BadRequestException(HttpStatus.NOT_FOUND,id+"的库区的仓库不是接收仓库");
|
||
// }
|
||
//查询 那个明细需要确认
|
||
List<AsnDetail> asnDetails = asnDetailRepository.queryByAsnId(id);
|
||
if (!asnDetails.isEmpty()) {
|
||
for (AsnDetail asnDetailData : asnDetails) {
|
||
if (asnDetailData.getOrderQty() == asnDetailData.getReceivedQty()) {
|
||
continue;
|
||
}
|
||
//1.库区为接收仓库,库位为每个detail上的库位,如果没有则提示
|
||
//2.库区不为接收仓库,库位取item上维护的库位,如果没有则提示
|
||
if (area.getBexb()) {//判断库区是否为接受仓库
|
||
if (Objects.isNull(asnDetailData.getPoint())) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "是接受仓库 副表" + asnDetailData.getId() + "的库位未填写");
|
||
}
|
||
} else {
|
||
if (Objects.isNull(asnDetailData.getItem())) {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "是不是接受仓库 副表" + asnDetailData.getId() + "的物料未填写");
|
||
}
|
||
}
|
||
ApiResult apiResult = null;
|
||
if (Objects.isNull( asnDetailData.getPoint())){
|
||
// apiResult = this.putawayInv(asnDetailData.getId(), byId.getArea().getId(), null);
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, asnDetailData.getId() + "没有填写点位");
|
||
}else {
|
||
if (asnDetailData.getReceivedQty()>0){
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, id + "的副表" + asnDetailData.getId() + "的物料已经单一入库无法使用整单入库");
|
||
}
|
||
asnDetailService.putawayInv(asnDetailData.getId(), byId.getArea().getId(), asnDetailData.getPoint().getId(),(asnDetailData.getOrderQty()-asnDetailData.getReceivedQty()),null);
|
||
}
|
||
|
||
if (apiResult.getStatus() == 200) {
|
||
//收货日期改成当前日期 数量累计
|
||
byId.setReceivedDate(new Timestamp(System.currentTimeMillis()));
|
||
byId.setReceivedQuantity(byId.getReceivedQuantity() + asnDetailData.getOrderQty());
|
||
} else {
|
||
// 通用异常,使用自定义状态码
|
||
throw new BadRequestException(HttpStatus.NOT_FOUND, apiResult.getMessage());
|
||
}
|
||
double pd = byId.getOrderQuantity() - byId.getReceivedQuantity();
|
||
if (pd == 0) {
|
||
byId.setStatus(BizStatus.RECEIVED);
|
||
} else if (pd > 0 && byId.getReceivedQuantity() > 0) {
|
||
byId.setStatus(BizStatus.RECEIVING);
|
||
}
|
||
asnService.update(asnMapper.toEntity(byId));
|
||
}
|
||
}
|
||
}
|
||
return ApiResult.result(200, "入库确认成功", HttpStatus.OK);
|
||
}
|
||
|
||
|
||
|
||
} |