179 lines
8.1 KiB
Plaintext
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;
|
|
}
|
|
}
|