Files
scrq-hd/.svn/pristine/47/47b61cf643fbca2f0ca245248a9bf3e08be4c5ed.svn-base
2025-07-03 10:34:04 +08:00

179 lines
8.1 KiB
Plaintext

package com.cmeim.biz.controller.app;
import com.cmeim.basic.api.dto.SyDictDto;
import com.cmeim.biz.po.MmArriveBill;
import com.cmeim.biz.po.MmArriveBillDetail;
import com.cmeim.biz.po.MmMaterialBar;
import com.cmeim.biz.repository.MmArriveBillDetailRepository;
import com.cmeim.biz.repository.MmArriveBillRepository;
import com.cmeim.biz.repository.MmMaterialBarRepository;
import com.cmeim.biz.service.ArriveBillService;
import com.cmeim.biz.service.InputAppService;
import com.cmeim.biz.vo.MmArriveBillVo;
import com.cmeim.biz.vo.MmInputBillVo;
import com.cmeim.biz.vo.app.ArriveBillDetailVo;
import com.cmeim.biz.vo.app.MaterialBarVo;
import com.cmeim.common.core.exception.ServiceException;
import com.cmeim.common.core.utils.BeanUtil;
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.page.PageVo;
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.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.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Api(value = "app", tags = "APP采购收货模块")
@RestController
@RequestMapping(value = "input/app/receive")
@Slf4j
public class AppReceiveController extends GenericController {
@Autowired
private InputAppService service;
@Autowired
private ArriveBillService arriveBillService;
@Autowired
private MmArriveBillDetailRepository arriveBillDetailRepository;
@Autowired
private MmMaterialBarRepository materialBarRepository;
@Autowired
private MmArriveBillRepository arriveBillRepository;
@ApiOperation(value = "IF-120:未收货完成的到货单列表接口")
@PostMapping(value = "getUnArriveBillList")
public Respond getUnArriveBillList(PageVo pv, MmArriveBillVo mmArriveBillVo) {
mmArriveBillVo.setDictStatus(20);
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
Sort.by(sortOrder(pv.getOrders())));
Page page = arriveBillRepository.findAll(buildSpecification(mmArriveBillVo), pageRequest);
List<MmArriveBill> list = page.getContent();
pv.setRecordsTotal(page.getTotalElements());
pv.setData(list);
return buildSuccess(pv);
}
@ApiOperation(value = "IF-121:根据到货单号查询物料明细接口")
@GetMapping(value = "getArriveBillDetailListByNumber")
public Respond getArriveBillDetailListByNumber(String arriveBillNumber) {
log.info("根据到货单号查询物料明细接口调用开始:" + arriveBillNumber);
String[] orders = {"dictStatus asc", "updatedDt desc"};
List<MmArriveBillDetail> arriveBillDetails =
arriveBillDetailRepository.findByArriveBillNumber(arriveBillNumber, Sort.by(sortOrder(orders)));
List<ArriveBillDetailVo> vos = BeanUtil.copyProperties(arriveBillDetails, ArriveBillDetailVo.class);
vos.forEach(vo -> {
int totalBar =
materialBarRepository.countByArriveBillNumberAndMaterialCode(arriveBillNumber, vo.getMaterialCode());
int arrivedBar =
materialBarRepository.countByArriveBillNumberAndMaterialCodeAndDictStatusNot(arriveBillNumber,
vo.getMaterialCode(), 5);
vo.setTotalQty(totalBar);
vo.setArrivedQty(arrivedBar);
});
log.info("根据到货单号查询物料明细接口调用结束:" + arriveBillNumber);
return buildSuccess(vos);
}
/**
* 扫描条码后保存收货记录接口
*
* @param arriveBillNumber 到货单号
* @param materialBar 物料条码
* @param materialQty 物料数量
* @param batchNo 批次
* @return 操作结果
*/
@ApiOperation(value = "IF-122:扫描条码后保存收货记录接口")
@PostMapping(value = "saveArriveBillRecord")
@Transactional
public Respond saveArriveBillRecord(String arriveBillNumber, String materialBar, BigDecimal materialQty,
String batchNo) {
arriveBillService.saveArriveBillRecord(arriveBillNumber, materialBar, materialQty, batchNo);
return buildSuccess();
}
/*
* @Author 谷宬膊
* @Description //TODO materialCodeList 新增 勾选物料功能
* @Date 11:03 2022/5/9
* @Param [arriveBillNumber, materialCodeList]
* @return com.cmeim.common.core.web.domain.Respond
**/
@ApiOperation(value = "发起检验接口")
@GetMapping(value = "createInspect")
@Transactional
public Respond createInspect(String arriveBillNumber, String materialCodeList) {
if (StringUtils.isEmpty(materialCodeList)) {
throw new ServiceException(RespondEnum.FAILURE, "没有勾选物料明细,不允许新增检验单");
}
arriveBillService.createInspect(arriveBillNumber, materialCodeList);
return buildSuccess();
}
@ApiOperation(value = "根据到货单号、物料编码查询条码列表")
@PostMapping(value = "getMaterialBar")
public Respond getMaterialBar(@RequestBody MmArriveBillDetail detail) {
List<MmMaterialBar> materialBarList =
materialBarRepository.findByArriveBillNumberAndMaterialCode(detail.getArriveBillNumber(),
detail.getMaterialCode());
List<MaterialBarVo> materialBarVoList = BeanUtil.copyProperties(materialBarList, MaterialBarVo.class);
List<SyDictDto> syDictDtoList = service.findTextByGroupCode("mm_material_bar_status");
materialBarVoList.forEach(vo -> {
//vo.setDictStatusShow(service.findTextByGroupCodeAndKey("mm_material_bar_status", vo.getDictStatus()));
for (SyDictDto dto : syDictDtoList) {
if (dto.getGroupKey().equals(vo.getDictStatus())) {
vo.setDictStatusShow(dto.getGroupText());
}
}
});
return buildSuccess(materialBarVoList);
}
private Specification buildSpecification(MmArriveBillVo mmArriveBillVo) {
Specification<MmInputBillVo> specification = new Specification<MmInputBillVo>() {
@Override
public Predicate toPredicate(Root<MmInputBillVo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> predicates = Lists.newArrayList();
predicates.add(cb.lessThanOrEqualTo(root.get("dictStatus").as(Integer.class),
mmArriveBillVo.getDictStatus()));
if (StringUtils.isNotBlank(mmArriveBillVo.getArriveBillNumber())) {
predicates.add(cb.like(root.get("arriveBillNumber").as(String.class),
"%" + mmArriveBillVo.getArriveBillNumber().trim() + "%"));
}
List<Order> orders = new ArrayList<>();
orders.add(cb.desc(root.get("createdDt")));
criteriaQuery.orderBy(orders);
// 外联结子表,状态多选->去重
criteriaQuery.distinct(true);
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return specification;
}
}