Files
scrq-hd/.svn/pristine/6a/6a9a52c2da72a6a9d38b90e9fcabf34cbf6c8e0a.svn-base
2025-07-03 10:34:04 +08:00

637 lines
28 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.cmeim.biz.controller;
import com.cmeim.basic.api.dto.MaterialDto;
import com.cmeim.basic.api.enums.BaNumberRuleCode;
import com.cmeim.biz.po.MmMaterialBar;
import com.cmeim.biz.po.MmOtherInputBill;
import com.cmeim.biz.po.MmPickBill;
import com.cmeim.biz.po.MmProdInBill;
import com.cmeim.biz.po.MmProdInBillDetail;
import com.cmeim.biz.repository.MmMaterialBarRepository;
import com.cmeim.biz.repository.MmPickBillRepository;
import com.cmeim.biz.repository.MmProdInBillDetailRepository;
import com.cmeim.biz.repository.MmProdInBillRepository;
import com.cmeim.biz.service.*;
import com.cmeim.biz.vo.*;
import com.cmeim.common.core.domain.R;
import com.cmeim.common.core.exception.ServiceException;
import com.cmeim.common.core.utils.BeanUtil;
import com.cmeim.common.core.utils.DateUtil;
import com.cmeim.common.core.utils.ExcelExportUtil;
import com.cmeim.common.core.web.controller.GenericController;
import com.cmeim.common.core.web.domain.Respond;
import com.cmeim.common.core.web.domain.RespondEnum;
import com.cmeim.common.core.web.domain.TUserInfo;
import com.cmeim.common.core.web.page.PageVo;
import com.cmeim.exec.api.dto.InspectionDto;
import com.cmeim.plan.api.dto.OrderProdDto;
import com.cmeim.plan.api.dto.OrderWorkDto;
import com.cmeim.plan.api.dto.OrderWorkPbmDto;
import com.cmeim.plan.api.dto.ReWriteProductQtyDto;
import com.cmeim.stock.dto.MmStockDto;
import com.cmeim.stock.dto.ProStockDto;
import com.cmeim.stock.dto.WarehouseDto;
import com.cmeim.stock.po.BaWarehouse;
import com.cmeim.stock.po.MmStockArea;
import com.cmeim.stock.repository.BaWareHouseRepository;
import com.cmeim.stock.repository.MmStockAreaRepository;
import com.cmeim.stock.service.api.MaterialBarService;
import com.cmeim.system.api.domain.SysDept;
import com.cmeim.system.api.domain.SysUser;
import com.google.common.collect.Lists;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* 作者:李俊辉
* date: 2021/9/18
*/
@Api(value = "prodIn", tags = "成品入库单")
@RestController
@Slf4j
@RequestMapping(value = "input/prodIn")
public class ProdInController extends GenericController {
@Autowired
private ProdInBillService prodInBillService;
@Autowired
private MmProdInBillRepository prodInBillRepository;
@Autowired
private MmProdInBillDetailRepository prodInBillDetailRepository;
@Autowired
private InputRemoteService remoteService;
@Autowired
private InputActService actService;
@Autowired
private BaWareHouseRepository baWareHouseRepository;
@Autowired
private MmStockAreaRepository stockAreaRepository;
@Autowired
private PickBillService pickBillService;
@Autowired
private MmPickBillRepository mmPickBillRepository;
@Autowired
private MmMaterialBarRepository materialBarRepository;
@Autowired
private MaterialBarService materialBarService;
@Autowired
private SyncEdgeService syncEdgeService;
@ApiOperation(value = "成品入库单列表")
@GetMapping(value = "list")
public Respond list(PageVo pv, ProdInVo query) {
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
Sort.by(sortOrder(pv.getOrders())));
Page page = prodInBillRepository.findAll(buildSpecification(query), pageRequest);
pv.setRecordsTotal(page.getTotalElements());
pv.setData(page.getContent());
return buildSuccess(pv);
}
@ApiOperation(value = "入库单创建时间更改")
@PostMapping(value = "updateCreateTime")
@Transactional
public Respond updateCreateTime(@RequestBody List<String> ids) {
ids.forEach(id -> {
final MmProdInBill mmInputBill = prodInBillRepository.findById(Long.parseLong(id.split(";")[0])).get();
mmInputBill.setCreatedDt(id.split(";")[1]);
final List<MmProdInBillDetail> byProdInBillNumber =
prodInBillDetailRepository.findByProdInBillNumber(mmInputBill.getProdInBillNumber());
byProdInBillNumber.forEach(e -> {
e.setCreatedDt(id.split(";")[1]);
});
prodInBillDetailRepository.saveAll(byProdInBillNumber);
prodInBillRepository.save(mmInputBill);
});
return buildSuccess();
}
@ApiOperation(value = "成品入库单明细列表")
@GetMapping(value = "detailList")
public Respond detailList(String prodInBillNumber) {
List<MmProdInBillDetail> mmProdInBillDetailList =
prodInBillDetailRepository.findByProdInBillNumberOrderByMaterialCodeAsc(prodInBillNumber);
return buildSuccess(mmProdInBillDetailList);
}
/**
* 成品入库单打印明细列表
*
* @param ids 成品入库单id
* @return 查询结果
*/
@ApiOperation(value = "成品入库单打印明细列表")
@GetMapping(value = "printList")
public Respond printList(String ids) {
String[] strings = ids.split(",");
List<MmProdInBill> mmProdInBillList = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
MmProdInBill mmProdInBill = new MmProdInBill();
Optional<MmProdInBill> byId = prodInBillRepository.findById(Long.valueOf(strings[i]));
if (byId.isPresent()) {
mmProdInBill = byId.get();
}
List<MmProdInBillDetail> mmProdInBillDetailList =
prodInBillDetailRepository.findByProdInBillNumberOrderByMaterialCodeAsc(mmProdInBill.getProdInBillNumber());
mmProdInBill.setItems(mmProdInBillDetailList);
mmProdInBillList.add(mmProdInBill);
}
return buildSuccess(mmProdInBillList);
}
private Specification buildSpecification(final ProdInVo prodInVo) {
Specification<ProdInVo> specification = new Specification<ProdInVo>() {
@Override
public Predicate toPredicate(Root<ProdInVo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> predicates = Lists.newArrayList();
if (StringUtils.isNotBlank(prodInVo.getProdInBillNumber())) {
predicates.add(cb.like(root.get("prodInBillNumber").as(String.class),
"%" + prodInVo.getProdInBillNumber() + "%"));
}
if (StringUtils.isNotBlank(prodInVo.getErpNumber())) {
predicates.add(cb.like(root.get("erpNumber").as(String.class),
"%" + prodInVo.getErpNumber() + "%"));
}
if (StringUtils.isNotBlank(prodInVo.getInStockWarehouseName())) {
predicates.add(cb.like(root.get("inStockWarehouseName").as(String.class),
"%" + prodInVo.getInStockWarehouseName() + "%"));
}
if (StringUtils.isNotBlank(prodInVo.getOrderWorkNumber())) {
predicates.add(cb.like(root.get("orderWorkNumber").as(String.class),
"%" + prodInVo.getOrderWorkNumber() + "%"));
}
if (StringUtils.isNotBlank(prodInVo.getInStockWarehouseNumber())) {
predicates.add(cb.equal(root.get("inStockWarehouseNumber").as(String.class),
prodInVo.getInStockWarehouseNumber()));
}
if (StringUtils.isNotBlank(prodInVo.getOpTimeStart())) {
predicates.add(cb.greaterThanOrEqualTo(root.get("opTime").as(String.class),
prodInVo.getOpTimeStart()));
}
if (StringUtils.isNotBlank(prodInVo.getOpTimeEnd())) {
predicates.add(cb.lessThanOrEqualTo(root.get("opTime").as(String.class), prodInVo.getOpTimeEnd()));
}
if (prodInVo.getStatus() != null) {
predicates.add(cb.equal(root.get("status").as(Integer.class), prodInVo.getStatus()));
}
if (null != prodInVo.getNumberArr() && prodInVo.getNumberArr().length > 0) {
Path<String> path = root.get("prodInBillNumber");
CriteriaBuilder.In<String> in = cb.in(path);
for (String number : prodInVo.getNumberArr()) {
in.value(number.trim());
}
predicates.add(in);
}
criteriaQuery.distinct(true);
if (null != prodInVo.getMaterialCode()) {
predicates.add(cb.like(root.get("materialCode").as(String.class), "%" + prodInVo.getMaterialCode() + "%"));
}
if (null != prodInVo.getMaterialName()) {
predicates.add(cb.like(root.get("materialName").as(String.class), "%" + prodInVo.getMaterialName() + "%"));
}
if (null != prodInVo.getMaterialSpec()) {
predicates.add(cb.like(root.get("materialSpec").as(String.class), "%" + prodInVo.getMaterialSpec() + "%"));
}
if (null != prodInVo.getInStockQty()) {
predicates.add(cb.equal(root.get("inStockQty").as(BigDecimal.class), prodInVo.getInStockQty() ));
}
if (null != prodInVo.getInStockType()) {
predicates.add(cb.equal(root.get("inStockType").as(Integer.class), prodInVo.getInStockType() ));
}
if (null != prodInVo.getInStockWarehouseName()) {
predicates.add(cb.like(root.get("inStockWarehouseName").as(String.class), "%" + prodInVo.getInStockWarehouseName() + "%"));
}
if (null != prodInVo.getLineStockName()) {
predicates.add(cb.like(root.get("lineStockName").as(String.class), "%" + prodInVo.getLineStockName() + "%"));
}
if (null != prodInVo.getDeptName()) {
predicates.add(cb.like(root.get("deptName").as(String.class), "%" + prodInVo.getDeptName() + "%"));
}
if (null != prodInVo.getErpNumber()) {
predicates.add(cb.like(root.get("erpNumber").as(String.class), "%" + prodInVo.getErpNumber() + "%"));
}
if (null != prodInVo.getErpJson()) {
predicates.add(cb.like(root.get("erpJson").as(String.class), "%" + prodInVo.getErpJson() + "%"));
}
if (null != prodInVo.getOpUser()) {
predicates.add(cb.like(root.get("opUser").as(String.class), "%" + prodInVo.getOpUser() + "%"));
}
if (null != prodInVo.getMemo()) {
predicates.add(cb.like(root.get("memo").as(String.class), "%" + prodInVo.getMemo() + "%"));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return specification;
}
/**
* 查询该工单的入库数量之和
*
* @param orderWorkNumber 工单号
* @return 查询结果
*/
@ApiOperation(value = "查询该工单的入库数量之和")
@GetMapping(value = "findTotalQty")
public Respond findTotalQty(String orderWorkNumber) {
List<MmProdInBill> mmProdInBillList = prodInBillRepository.findByOrderWorkNumber(orderWorkNumber);
BigDecimal totalQty = BigDecimal.valueOf(0);
if (mmProdInBillList.size() > 0) {
totalQty = mmProdInBillList.stream().map(MmProdInBill::getInStockQty).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return buildSuccess(totalQty);
}
/**
* 仓库列表
*
* @param warehouseDto 仓库结合
* @return 查询结果
*/
@ApiOperation(value = "仓库列表")
@PostMapping(value = "warehouseList")
public Respond warehouseList(WarehouseDto warehouseDto) {
BaWarehouse baWarehouse = BeanUtil.copyProperties(warehouseDto, BaWarehouse.class);
List<BaWarehouse> warehouseList = baWareHouseRepository.findAll(buildSpecification2(baWarehouse));
List<WarehouseDto> warehouseDtoList = BeanUtil.copyProperties(warehouseList, BaWarehouse.class);
return buildSuccess(warehouseDtoList);
}
private Specification buildSpecification2(BaWarehouse baWarehouse) {
Specification<BaWarehouse> specification = new Specification<BaWarehouse>() {
@Override
public Predicate toPredicate(Root<BaWarehouse> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> predicates = Lists.newArrayList();
if (baWarehouse.getWarehouseCode() != null) {
predicates.add(cb.like(root.get("warehouseCode").as(String.class),
"%" + baWarehouse.getWarehouseCode() + "%"));
}
if (baWarehouse.getWarehouseName() != null) {
predicates.add(cb.like(root.get("warehouseName").as(String.class),
"%" + baWarehouse.getWarehouseName() + "%"));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return specification;
}
/**
* 工单列表
*
* @param orderWorkDto 工单集合
* @return 查询结果
*/
@ApiOperation(value = "工单列表")
@PostMapping(value = "orderWorkList")
public Respond orderWorkList(OrderWorkDto orderWorkDto) {
List<OrderWorkDto> orderWorkDtoList = remoteService.queryOrderWork(orderWorkDto);
return buildSuccess(orderWorkDtoList);
}
/**
* 工单的用料清单列表
*
* @param orderWorkPbmDto 工单查询参数集合
* @return 查询结果
*/
@ApiOperation(value = "工单的用料清单列表")
@PostMapping(value = "orderWorkPbmList")
public Respond orderWorkPbmList(OrderWorkPbmDto orderWorkPbmDto) {
List<OrderWorkPbmDto> orderWorkDtoList = remoteService.queryOrderWorkPbm(orderWorkPbmDto);
return buildSuccess(orderWorkDtoList);
}
/**
* 订单列表
*
* @param orderProdDto 订单查询集合
* @return 查询结果
*/
@ApiOperation(value = "订单列表")
@PostMapping(value = "orderProdList")
public Respond orderProdList(OrderProdDto orderProdDto) {
List<OrderProdDto> orderProdDtoList = remoteService.queryOrderProd(orderProdDto);
return buildSuccess(orderProdDtoList);
}
/**
* 交检检验记录列表
*
* @param inspectionDto 交检查询参数集合
* @return 查询结果
*/
@ApiOperation(value = "交检检验记录列表")
@PostMapping(value = "inspectionList")
public Respond inspectionList(InspectionDto inspectionDto) {
List<InspectionDto> inspectionDtoList = remoteService.findByOrderWorkNumber(inspectionDto);
return buildSuccess(inspectionDtoList);
}
/**
* 库存列表
*
* @param dto 库存查询参数
* @return 查询结果
*/
@ApiOperation(value = "库存列表")
@PostMapping(value = "stockList")
public Respond stockList(@RequestBody ProStockDto dto) {
String orderWorkNumbers = dto.getOrderWorkNumbers();
List<MmPickBill> pickBillList = mmPickBillRepository.findByOrderWorkNumbersLike("%" + orderWorkNumbers + "%");
log.info("pickBillList库存:" + pickBillList);
List<MmStockArea> mmStockList = BeanUtil.copyProperties(dto.getStockDtoList(), MmStockArea.class);
List<MmStockArea> stockList = new ArrayList<>();
if (pickBillList != null && pickBillList.size() > 0) {
String[] billIdArr = new String[pickBillList.size()];
for (int i = 0; i < pickBillList.size(); i++) {
billIdArr[i] = pickBillList.get(i).getPickBillNumber();
}
for (MmStockArea mmStock : mmStockList) {
BigDecimal qty = new BigDecimal(0);
final List<MmStockArea> mmStockAreaList = stockAreaRepository
.findByWarehouseCodeAndMaterialIdAndBillNumberIn(mmStock.getWarehouseCode(),
mmStock.getMaterialId(), billIdArr);
for (MmStockArea mmStockArea : mmStockAreaList) {
if (mmStockArea.getBackflushedQty() != null) {
qty = qty.add(mmStockArea.getQty()).subtract(mmStockArea.getBackflushedQty());
} else {
qty = qty.add(mmStockArea.getQty());
}
}
mmStock.setQty(qty);
stockList.add(mmStock);
mmStockAreaList.clear();
}
} else {
for (MmStockArea mmStock : mmStockList) {
BigDecimal qty = new BigDecimal(0);
mmStock.setQty(qty);
stockList.add(mmStock);
}
}
List<MmStockDto> stockDtos = BeanUtil.copyProperties(stockList, MmStockDto.class);
//查询ERP库存
for (MmStockDto mmStockDto : stockDtos) {
com.cmeim.kafka.api.dto.stock.MmStockDto kafkaDto = new com.cmeim.kafka.api.dto.stock.MmStockDto();
MaterialDto materialDto = remoteService.findByMaterialId(mmStockDto.getMaterialId());
if (materialDto != null) {
kafkaDto.setMaterialCode(materialDto.getMaterialCode());
}
kafkaDto.setWarehouseCode(mmStockDto.getWarehouseCode());
log.info("kafkaDto:" + kafkaDto);
R respond = syncEdgeService.queryStockBycMaterialCodeAndWarehouseCode(kafkaDto);
if (respond.getCode() == 200) {
String iQuantity = respond.getData().toString();
log.info("查询ERP库存:" + mmStockDto.getMaterialCode() + "," + respond);
mmStockDto.setErpQty(new BigDecimal(iQuantity));
}
}
return buildSuccess(stockDtos);
}
/**
* 成品入库单新增
*
* @param vo 入库参数
* @return 操作结果
*/
@ApiOperation(value = "成品入库单新增")
@PostMapping(value = "add")
@Transactional
public Respond add(@RequestBody ProdInBillVo vo) {
final Boolean aBoolean = prodInBillService.judgeProdQty(vo.getMmProdInBill().getOrderWorkNumber(),
vo.getMmProdInBill().getInStockQty());
if (!aBoolean) {
throw new ServiceException(RespondEnum.FAILURE, "入库数量大于应入库数量");
}
MmProdInBill mmProdInBill = vo.getMmProdInBill();
TUserInfo userInfo = getCurrentUser();
String datetime = DateUtil.getCurrentDate();
List<SysUser> sysUserList = new ArrayList<SysUser>();
ArrayList<Long> userIds = new ArrayList<Long>();
userIds.add(userInfo.getUserId());
R<List<SysUser>> listR = remoteService.queryUser(userIds);
SysDept sysDept = new SysDept();
sysDept.setDeptId(listR.getData().get(0).getDeptId());
List<SysDept> sysDeptList = remoteService.queryDept(sysDept);
String deptName = sysDeptList.get(0).getDeptName();
mmProdInBill.setCreatedDt(datetime);
if (userInfo != null) {
mmProdInBill.setCreatedBy(userInfo.getUserName());
mmProdInBill.setDeptName(deptName);
mmProdInBill.setDeptNumber(sysDeptList.get(0).getPhone());
}
log.info("开始生成单据");
mmProdInBill.setProdInBillNumber(remoteService.getByCode(BaNumberRuleCode.CPRK));
mmProdInBill.setStatus(5);
MmProdInBill prodInBill = prodInBillRepository.save(mmProdInBill);
log.info("成品入库单主表:"+prodInBill);
//生成成品条码
Date date = new Date();
String timestamp = String.valueOf(date.getTime());
MmMaterialBar materialBar = new MmMaterialBar();
String dateBar = remoteService.getByCode(BaNumberRuleCode.PRODLNBAR);
String bar = mmProdInBill.getMaterialCode()+dateBar;
materialBar.setMaterialBar(bar);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(new Date());
log.info("成品入库单条码:"+timestamp+"批次:"+format);
materialBar.setBatchNo(format.replace("-", ""));
materialBar.setMaterialId(mmProdInBill.getMaterialId());
materialBar.setMaterialCode(mmProdInBill.getMaterialCode());
materialBar.setMaterialName(mmProdInBill.getMaterialName());
materialBar.setMaterialSpec(mmProdInBill.getMaterialSpec());
materialBar.setMaterialQty(mmProdInBill.getInStockQty());
materialBar.setCreatedDt(DateUtil.getCurrentDate());
materialBar.setInputBillId(mmProdInBill.getId());
materialBar.setInputBillNumber(mmProdInBill.getProdInBillNumber());
MmMaterialBar newBar = materialBarService.createNewBar(materialBar);
log.info("生成的成品条码:"+newBar);
for (MmProdInBillDetail detail : vo.getMmProdInBillDetailList()) {
detail.setProdInBillNumber(prodInBill.getProdInBillNumber());
detail.setCreatedBy(userInfo.getUserName());
detail.setCreatedDt(datetime);
}
saveDetails(vo.getMmProdInBillDetailList());
log.info("反写检验记录");
remoteService.prodInStock(vo.getInspectionDtoList());
List<ReWriteProductQtyDto> dto = new ArrayList<>();
ReWriteProductQtyDto reWriteProductQtyDto = new ReWriteProductQtyDto();
reWriteProductQtyDto.setOrderWorkNumber(mmProdInBill.getOrderWorkNumber());
reWriteProductQtyDto.setInStockQty(mmProdInBill.getInStockQty());
reWriteProductQtyDto.setDeliverQty(BigDecimal.ZERO);
dto.add(reWriteProductQtyDto);
log.info("反写订单数量");
log.info(String.valueOf(dto));
R r = remoteService.reWriteQty(dto);
if (r.getCode() != R.SUCCESS) {
throw new ServiceException(RespondEnum.PARAMETER_ERROR, "反写订单数量失败");
}
log.info(String.valueOf(r.getCode()));
return buildSuccess(prodInBill);
}
private void saveDetails(List<MmProdInBillDetail> detailList) {
List<MmProdInBillDetail> mmProdInBillDetails = prodInBillDetailRepository.saveAll(detailList);
log.info("成品入库单明细表:"+mmProdInBillDetails);
}
/**
* 成品入库单删除
*
* @param ids 单据id
* @return 操作结果
*/
@ApiOperation(value = "成品入库单删除")
@PostMapping(value = "delete")
@Transactional
public Respond delete(String ids) {
String[] strings = ids.split(",");
for (int i = 0; i < strings.length; i++) {
MmProdInBill mmProdInBill = prodInBillRepository.findById(Long.valueOf(strings[i])).get();
if (StringUtils.isNotBlank(mmProdInBill.getErpNumber())) {
throw new ServiceException(
RespondEnum.PARAMETER_ERROR, "单据【" + mmProdInBill.getProdInBillNumber() + "】已上传erp不能删除");
}
}
return buildSuccess(prodInBillService.delete(ids));
}
/**
* web端手动推送ERP
*
* @param billNumber 入库单号
* @return 操作结果
*/
@ApiOperation(value = "web端手动推送ERP")
@GetMapping(value = "pushErp")
@Transactional
public Respond pushErp(String billNumber) {
prodInBillService.finishProduckByWeb(billNumber);
return buildSuccess();
}
@ApiOperation(value = "打印条码")
@GetMapping(value = "printBars")
public Respond printBars(String prodInBillNumber) {
return buildSuccess(prodInBillService.printBars(prodInBillNumber));
}
/**
* 获取相关物料条码
*
* @param idsVo 其他入库单id集合
* @return 查询结果
*/
@ApiOperation(value = "获取相关物料条码")
@PostMapping(value = "getMaterialBar")
public Respond getMaterialBar(@RequestBody IdsVo idsVo) {
ProdInputBarVo vo = new ProdInputBarVo();
List<MmProdInBill> allById = prodInBillRepository.findAllById(idsVo.getIds());
vo.setMmProdInBillList(allById);
List<String> inputBillNumbers =
allById.stream().map(MmProdInBill::getProdInBillNumber).collect(Collectors.toList());
log.info("inputBillNumbers:" + inputBillNumbers);
List<MmMaterialBar> materialBars = materialBarRepository.findAllByInputBillNumberIn(inputBillNumbers);
for (MmMaterialBar mmMaterialBar : materialBars) {
if (com.cmeim.common.core.utils.StringUtils.isNotBlank(mmMaterialBar.getInputBillNumber())) {
MmMaterialBar materialBarSplit = getMaterialBarSplit(mmMaterialBar);
if (com.cmeim.common.core.utils.StringUtils.isNotBlank(materialBarSplit.getCustomerAbbreviation())) {
continue;
}
}
if (com.cmeim.common.core.utils.StringUtils.isNotBlank(mmMaterialBar.getWarehouseCode())) {
BaWarehouse baWarehouse = baWareHouseRepository.findByWarehouseCode(mmMaterialBar.getWarehouseCode());
if (com.cmeim.common.core.utils.StringUtils.isNotBlank(baWarehouse.getCustomerAbbreviation())) {
mmMaterialBar.setCustomerAbbreviation(baWarehouse.getCustomerAbbreviation());
}
}
}
vo.setMaterialBars(materialBars);
return buildSuccess(vo);
}
public MmMaterialBar getMaterialBarSplit(MmMaterialBar mmMaterialBar) {
MmProdInBill byInputBillNumber = prodInBillRepository.findByProdInBillNumber(
mmMaterialBar.getInputBillNumber());
if (byInputBillNumber != null) {
BaWarehouse baWarehouse = baWareHouseRepository.findByWarehouseCode(byInputBillNumber.getInStockWarehouseNumber());
if (com.cmeim.common.core.utils.StringUtils.isNotBlank(baWarehouse.getCustomerAbbreviation())) {
mmMaterialBar.setCustomerAbbreviation(baWarehouse.getCustomerAbbreviation());
}
}
return mmMaterialBar;
}
/**
* 导出成品入库单列表
*/
@ApiOperation(value = "导出成品入库单列表")
@GetMapping(value = "exportExcel")
public void exportExcel(ProdInVo prodInVo, HttpServletResponse response) throws Exception {
SXSSFWorkbook workbook = new SXSSFWorkbook();
SXSSFSheet sheet = workbook.createSheet("生产领料单");
List<MmProdInBill> list = prodInBillRepository.findAll(buildSpecification(prodInVo));
String[] cloumns = new String[]{"序号", "成品入库单号", "入库状态", "制单人", "制单时间",
"入库类别", "工单号", "转入仓库", "转出仓库", "数量",
"产品编码", "产品名称", "产品规格", "备注", "ERP单号"};
List<Object[]> datalist = prodInBillService.initPrintData(list, cloumns);
ExcelExportUtil.getExportWorkbook(workbook, sheet, cloumns, datalist);
ExcelExportUtil.sendHttpResponse(response, "prodInBill", workbook);
}
@ApiOperation(value = "撤回上传到erp")
@GetMapping(value = "cancelPushErp")
@Transactional
public Respond cancelPushErp(String billNumber) {
prodInBillService.cancelPushErp(billNumber, this.getCurrentUser());
return buildSuccess();
}
}