You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-spms-java/src/main/java/com/glxp/api/controller/purchase/PurDeliveryController.java

483 lines
21 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.glxp.api.controller.purchase;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.annotation.Log;
import com.glxp.api.annotation.RepeatSubmit;
import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.constant.BusinessType;
import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.controller.BaseController;
import com.glxp.api.entity.auth.InvWarehouseEntity;
import com.glxp.api.entity.basic.BasicProductsEntity;
import com.glxp.api.entity.inout.IoOrderDetailBizEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.purchase.*;
import com.glxp.api.req.purchase.PostPurDeliveryRequest;
import com.glxp.api.req.purchase.PurDeliveryRequest;
import com.glxp.api.req.purchase.PurOrderDetailRequest;
import com.glxp.api.req.purchase.ReviewDeliveryOrderRequest;
import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.res.purchase.PurDeliveryAcceptOrderResponse;
import com.glxp.api.res.purchase.PurDeliveryDetailResponse;
import com.glxp.api.res.purchase.PurDeliveryResponse;
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.inout.IoOrderDetailBizService;
import com.glxp.api.service.inout.IoOrderService;
import com.glxp.api.service.purchase.PurDeliveryCodeService;
import com.glxp.api.service.purchase.PurDeliveryDetailService;
import com.glxp.api.service.purchase.PurDeliveryService;
import com.glxp.api.service.purchase.PurOrderDetailService;
import com.glxp.api.util.CustomUtil;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import com.glxp.api.util.RedisUtil;
import com.glxp.api.util.udi.UdiCalCountUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Validated
@RequiredArgsConstructor
@RestController
public class PurDeliveryController extends BaseController {
@Resource
PurDeliveryService purDeliveryService;
@Resource
PurDeliveryDetailService purDeliveryDetailService;
@Resource
CustomerService customerService;
@Resource
GennerOrderUtils gennerOrderUtils;
@Resource
IoOrderService ioOrderService;
@Resource
IoOrderDetailBizService ioOrderDetailBizService;
@Resource
InvWarehouseService invWarehouseService;
@Resource
private RedisUtil redisUtil;
@Resource
private PurDeliveryCodeService purDeliveryCodeService;
@Resource
private UdiRelevanceService udiRelevanceService;
@Resource
private UdiCalCountUtil calCountUtil;
/**
* 新增到货单
*/
@RepeatSubmit()
@AuthRuleAnnotation("")
@PostMapping("/purchase/delivery/postOrder")
@Log(title = "到货单", businessType = BusinessType.INSERT)
public BaseResponse postOrder(@RequestBody PostPurDeliveryRequest purDeliveryRequest) {
Long userId = customerService.getUserId();
PurDeliveryEntity purArrivalEntity = purDeliveryRequest.getPurDeliveryEntity();
purArrivalEntity.setCreateUser(userId + "");
purArrivalEntity.setCreateTime(new Date());
purArrivalEntity.setUpdateTime(new Date());
purArrivalEntity.setUpdateUser(userId + "");
purArrivalEntity.setStatus(purDeliveryRequest.getEditStatus()); //草稿状态
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(purArrivalEntity.getInvCode());
purArrivalEntity.setDeptCode(invWarehouseEntity.getParentId());
if (purDeliveryRequest.getType() != null) {
String billNo = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.SH_ORDER, "yyyyMMdd"));
purArrivalEntity.setBillNo(billNo);
}
if (purArrivalEntity.getId() == null) {
purDeliveryService.insert(purArrivalEntity);
} else {
purDeliveryService.update(purArrivalEntity);
}
return ResultVOUtils.success("提交成功!");
}
/**
* 查询未审核和草稿状态
*/
@GetMapping("/purchase/delivery/list")
public BaseResponse list(PurDeliveryRequest purDeliveryRequest) {
if (purDeliveryRequest.getStatus() == null) {
purDeliveryRequest.setStatus(11); //查询未审核和草稿状态
}
List<PurDeliveryResponse> purDeliveryResponses = purDeliveryService.queryPageList(purDeliveryRequest);
PageInfo<PurDeliveryResponse> pageInfo;
pageInfo = new PageInfo<>(purDeliveryResponses);
PageSimpleResponse<PurDeliveryResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(purDeliveryResponses);
return ResultVOUtils.success(pageSimpleResponse);
}
/**
* 查询未审核和已审核状态
*/
@GetMapping("/purchase/delivery/auditList")
public BaseResponse auditList(PurDeliveryRequest purDeliveryRequest) {
if (purDeliveryRequest.getStatus() == null) {
purDeliveryRequest.setStatus(10); //查询未审核和已审核状态
}
List<PurDeliveryResponse> purDeliveryResponses = purDeliveryService.queryPageList(purDeliveryRequest);
PageInfo<PurDeliveryResponse> pageInfo;
pageInfo = new PageInfo<>(purDeliveryResponses);
PageSimpleResponse<PurDeliveryResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(purDeliveryResponses);
return ResultVOUtils.success(pageSimpleResponse);
}
/**
* 审核送货单
*/
@RepeatSubmit()
@PostMapping("/purchase/delivery/auditOrder")
@Log(title = "送货单", businessType = BusinessType.INSERT)
public BaseResponse auditOrder(@RequestBody PostPurDeliveryRequest postPurDeliveryRequest) {
Long userId = customerService.getUserId();
PurDeliveryEntity purDeliveryEntity = postPurDeliveryRequest.getPurDeliveryEntity();
purDeliveryEntity.setUpdateTime(new Date());
purDeliveryEntity.setAuditUser(userId + "");
purDeliveryEntity.setStatus(postPurDeliveryRequest.getEditStatus());
purDeliveryService.update(purDeliveryEntity);
String billNo = "";
List<PurDeliveryDetailEntity> purOrderDetailEntities = purDeliveryDetailService.findByOrderId(purDeliveryEntity.getId() + "");
//对计划单里面的供应商进行分组
Map<String, List<PurDeliveryDetailEntity>> map = purOrderDetailEntities.stream().collect(Collectors.groupingBy(PurDeliveryDetailEntity::getSupId));
if (postPurDeliveryRequest.getEditStatus() == ConstantStatus.APPLY_AUDIT_ED) {
if (CollUtil.isNotEmpty(purOrderDetailEntities) && postPurDeliveryRequest.isAutoPurchase() == true
&& StrUtil.isNotEmpty(postPurDeliveryRequest.getTargetSubInv()) && StrUtil.isNotEmpty(postPurDeliveryRequest.getTargetBillAction())) {
for (Map.Entry<String, List<PurDeliveryDetailEntity>> m : map.entrySet()) {
//生产单据表信息
IoOrderEntity ioOrderEntity = new IoOrderEntity();
ioOrderEntity.setBillNo(gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER, "yyyyMMdd")));
ioOrderEntity.setCorpOrderId(CustomUtil.getDate());
ioOrderEntity.setMainAction(ConstantType.TYPE_PUT);
ioOrderEntity.setAction(postPurDeliveryRequest.getTargetBillAction());
ioOrderEntity.setFromCorp(m.getKey());
ioOrderEntity.setFromType(ConstantStatus.FROM_Order);
ioOrderEntity.setStatus(1);
ioOrderEntity.setDealStatus(1);
ioOrderEntity.setOrderType(1);
ioOrderEntity.setCreateTime(new Date());
ioOrderEntity.setCreateUser(postPurDeliveryRequest.getPurDeliveryEntity().getAuditUser());
ioOrderEntity.setUpdateTime(new Date());
ioOrderEntity.setUpdateUser(postPurDeliveryRequest.getPurDeliveryEntity().getAuditUser());
ioOrderEntity.setCustomerId("110");
ioOrderEntity.setDeptCode(postPurDeliveryRequest.getTargetDeptCode());
ioOrderEntity.setInvCode(postPurDeliveryRequest.getTargetSubInv());
ioOrderService.insertOrder(ioOrderEntity);
billNo += ioOrderEntity.getBillNo() + ",";
//插入业务单表
for (PurDeliveryDetailEntity obj : m.getValue()) {
BasicProductsEntity basicProductsEntity = purDeliveryDetailService.selectIoOrderDetailBiz(obj.getId());
IoOrderDetailBizEntity ioOrderDetailBizEntity = new IoOrderDetailBizEntity();
ioOrderDetailBizEntity.setOrderIdFk(ioOrderEntity.getBillNo());
ioOrderDetailBizEntity.setBindRlFk(Long.valueOf(obj.getProductId()));
ioOrderDetailBizEntity.setCount(obj.getCount());
ioOrderDetailBizEntity.setUuidFk(basicProductsEntity.getUuid());
ioOrderDetailBizEntity.setNameCode(basicProductsEntity.getNameCode());
ioOrderDetailBizEntity.setCoName(basicProductsEntity.getCpmctymc());
ioOrderDetailBizEntity.setCertCode(basicProductsEntity.getZczbhhzbapzbh());
ioOrderDetailBizEntity.setYlqxzcrbarmc(basicProductsEntity.getYlqxzcrbarmc());
ioOrderDetailBizEntity.setManufacturer(basicProductsEntity.getManufactory());
ioOrderDetailBizEntity.setMeasname(basicProductsEntity.getMeasname());
ioOrderDetailBizEntity.setSpec(basicProductsEntity.getGgxh());
if (basicProductsEntity.getPrice() != null) {
ioOrderDetailBizEntity.setPrice(BigDecimal.valueOf(basicProductsEntity.getPrice()));
}
ioOrderDetailBizEntity.setSupId(obj.getSupId());
ioOrderDetailBizService.insert(ioOrderDetailBizEntity);
}
}
purDeliveryEntity.setStockOrderNo(billNo.substring(0, billNo.length() - 1));
purDeliveryService.update(purDeliveryEntity);
}
}
return ResultVOUtils.success("更新成功!");
}
/**
* 查询采购订单列表
*/
@GetMapping("/purchase/delivery/list/detail")
public BaseResponse detailList(PurOrderDetailRequest purApplyDetailRequest) {
List<PurDeliveryDetailResponse> purDeliveryDetailResponses = purDeliveryDetailService.joinQueryList(purApplyDetailRequest);
PageInfo<PurDeliveryDetailResponse> pageInfo;
pageInfo = new PageInfo<>(purDeliveryDetailResponses);
PageSimpleResponse<PurDeliveryDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(purDeliveryDetailResponses);
return ResultVOUtils.success(pageSimpleResponse);
}
/**
* 拉取审核单据详情
*
* @param purOrderDetailRequest
* @return
*/
@GetMapping("/purchase/delivery/list/getAcceptOrder")
public BaseResponse getAcceptOrder(PurOrderDetailRequest purOrderDetailRequest) {
if (null == purOrderDetailRequest && StrUtil.isBlank(purOrderDetailRequest.getOrderIdFk())) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL);
}
PurDeliveryAcceptOrderResponse response = new PurDeliveryAcceptOrderResponse();
response.setBillNo(purOrderDetailRequest.getBillNo());
List<PurDeliveryDetailResponse> list = redisUtil.getList(ConstantStatus.REDIS_DELIVERY_BILLNO + purOrderDetailRequest.getBillNo(), PurDeliveryDetailResponse.class);
if (CollUtil.isNotEmpty(list)) {
response.setOrderDetails(list);
response.setExitAccept(true);
} else {
List<PurDeliveryDetailResponse> deliveryDetailResponses = purDeliveryDetailService.joinQueryList(purOrderDetailRequest);
response.setOrderDetails(deliveryDetailResponses);
response.setExitAccept(false);
}
return ResultVOUtils.success(response);
}
/**
* 送货单验收扫码接口
*
* @param acceptOrderResponse
* @return
*/
@PostMapping("/purchase/delivery/list/acceptAddCode")
public BaseResponse acceptAddCode(@RequestBody PurDeliveryAcceptOrderResponse acceptOrderResponse) {
PurDeliveryEntity purDeliveryEntity = purDeliveryService.findByBillNo(acceptOrderResponse.getBillNo());
if (null == purDeliveryEntity) {
return ResultVOUtils.error(500, "此送货单不存在!");
}
List<PurDeliveryCodeEntity> codeList;
List<PurDeliveryCodeEntity> codeEntityList = redisUtil.getList(ConstantStatus.REDIS_DELIVERY_CODES + acceptOrderResponse.getBillNo(), PurDeliveryCodeEntity.class);
if (CollUtil.isNotEmpty(codeEntityList)) {
codeList = purDeliveryCodeService.findByOrderId(acceptOrderResponse.getBillNo());
} else {
codeList = codeEntityList;
}
String relId = udiRelevanceService.getRelIdByUdiCode(acceptOrderResponse.getCode());
if (StrUtil.isBlank(relId)) {
return ResultVOUtils.error(500, "非此单UDI码");
} else {
int status = purDeliveryCodeService.isExist(acceptOrderResponse.getOrderIdFk(), relId);
if (status == Constant.CHECK_NULL) {
return ResultVOUtils.error(500, "非此单UDI码");
}
}
List<PurDeliveryDetailResponse> orderDetails = acceptOrderResponse.getOrderDetails();
if (StrUtil.isNotBlank(acceptOrderResponse.getCode()) && CollUtil.isNotEmpty(orderDetails)) {
boolean isExist = false;
for (PurDeliveryDetailResponse orderDetail : orderDetails) {
if (orderDetail.getProductId().equals(relId)) {
orderDetail.setAcceptCount(orderDetail.getAcceptCount() + calCountUtil.getActCountByRelId(relId));
if (orderDetail.getAcceptCount() > orderDetail.getCount()) {
return ResultVOUtils.error(500, "数量溢出!");
}
purDeliveryCodeService.addCode(acceptOrderResponse.getBillNo(), orderDetail, acceptOrderResponse.getCode());
isExist = true;
break;
}
}
if (isExist) {
redisUtil.set(ConstantStatus.REDIS_DELIVERY_BILLNO + acceptOrderResponse.getBillNo(), acceptOrderResponse);
redisUtil.set(ConstantStatus.REDIS_DELIVERY_CODES + acceptOrderResponse.getBillNo(), codeList);
acceptOrderResponse.setOrderDetails(orderDetails);
if (purOrderDetailService.vailFinish(orderDetails)) {
acceptOrderResponse.setFinishAccept(true);
return ResultVOUtils.success(acceptOrderResponse);
}
return ResultVOUtils.success(acceptOrderResponse);
}
}
return ResultVOUtils.error(500, "非此单UDI码");
}
/**
* 送货单 - 重新验收接口
*
* @param acceptOrderResponse
* @return
*/
@PostMapping("/purchase/delivery/list/acceptClear")
public BaseResponse acceptClear(@RequestBody PurDeliveryAcceptOrderResponse acceptOrderResponse) {
String billNo = acceptOrderResponse.getBillNo();
redisUtil.del(ConstantStatus.REDIS_DELIVERY_BILLNO + billNo);
redisUtil.del(ConstantStatus.REDIS_DELIVERY_CODES + billNo);
PurOrderDetailRequest purOrderDetailRequest = new PurOrderDetailRequest();
purOrderDetailRequest.setOrderIdFk(acceptOrderResponse.getOrderIdFk());
List<PurDeliveryDetailResponse> deliveryDetailResponses = purDeliveryDetailService.joinQueryList(purOrderDetailRequest);
acceptOrderResponse.setOrderDetails(deliveryDetailResponses);
return ResultVOUtils.success(acceptOrderResponse);
}
/**
* 完成验收接口
*
* @param reviewFinishRequest
* @return
*/
@PostMapping("/purchase/delivery/list/updateStatus")
@Log(title = "到货单", businessType = BusinessType.UPDATE)
public BaseResponse updateStatus(@RequestBody ReviewDeliveryOrderRequest reviewFinishRequest) {
if (null == reviewFinishRequest && StrUtil.isBlank(reviewFinishRequest.getBillNo())) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL);
}
if (!reviewFinishRequest.isFinishAccept()) {
return ResultVOUtils.error(500, "未完成验收");
}
PurDeliveryEntity purDeliveryEntity = purDeliveryService.findByBillNo(reviewFinishRequest.getBillNo());
return purDeliveryService.updateReview(purDeliveryEntity);
}
/**
* 添加产品到采购单里面
*/
@PostMapping("/purchase/delivery/addOrderDetail")
@Log(title = "采购单", businessType = BusinessType.INSERT)
public BaseResponse addOrderDetail(@RequestBody PurDeliveryDetailEntity purOrderDetailEntity) {
boolean falg = purDeliveryDetailService.insert(purOrderDetailEntity);
if (falg) {
return ResultVOUtils.success("添加成功");
} else {
return ResultVOUtils.success("添加失败");
}
}
/**
* 新增计划单
*/
@AuthRuleAnnotation("")
@PostMapping("/purchase/delivery/add")
@Log(title = "计划单", businessType = BusinessType.INSERT)
public BaseResponse add() {
Long userId = customerService.getUserId();
PurDeliveryEntity purArrivalEntity = new PurDeliveryEntity();
purArrivalEntity.setCreateUser(userId + "");
purArrivalEntity.setCreateTime(new Date());
purArrivalEntity.setUpdateTime(new Date());
purArrivalEntity.setUpdateUser(userId + "");
purArrivalEntity.setSupId(getCustomerId());
purDeliveryService.insert(purArrivalEntity);
Long id = purArrivalEntity.getId();
return ResultVOUtils.success(id);
}
/**
* 删除申购单和详情
*/
@AuthRuleAnnotation("")
@PostMapping("/purchase/delivery/delOrderDetailAll")
@Log(title = "申购单", businessType = BusinessType.DELETE)
public BaseResponse delApplyDetailAll(@RequestBody PurApplyEntity purApplyEntity) {
if (purApplyEntity.getId() != null) {
purDeliveryService.deleteById(purApplyEntity.getId());
purDeliveryDetailService.deleteByOrderId(purApplyEntity.getId() + "");
} else {
return ResultVOUtils.error(999, "参数有误!");
}
return ResultVOUtils.success();
}
/**
* 修改计划详情单
*/
@RepeatSubmit()
@PostMapping("/purchase/delivery/updateDetail")
@Log(title = "计划详情单", businessType = BusinessType.UPDATE)
public BaseResponse detailEdit(@RequestBody PurDeliveryDetailEntity purDeliveryDetailEntity) {
purDeliveryDetailService.update(purDeliveryDetailEntity);
return ResultVOUtils.success("修改成功");
}
/**
* 删除采购订单
*
* @param ids 主键串
*/
@DeleteMapping("/purchase/delivery/detail/{ids}")
@Log(title = "采购订单", businessType = BusinessType.DELETE)
public BaseResponse detailRemove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
purDeliveryDetailService.deleteByIds(Arrays.asList(ids));
return ResultVOUtils.success("删除成功");
}
@Resource
PurOrderDetailService purOrderDetailService;
/**
* 添加采购订单至送货单
*/
@PostMapping("/purchase/delivery/addPlanDetailAndOrder")
@Log(title = "采购订单", businessType = BusinessType.INSERT)
public BaseResponse addPlanDetailAndOrder(@RequestBody PurDeliveryRequest purDeliveryRequest) {
List<PurOrderDetailEntity> purOrderDetailEntities = purOrderDetailService.findByOrderId(purDeliveryRequest.getPurOrderId() + "");
List<PurDeliveryDetailEntity> purDeliveryDetailEntities = purOrderDetailEntities.stream()
.map(e -> {
PurDeliveryDetailEntity d = new PurDeliveryDetailEntity();
BeanUtils.copyProperties(e, d);
return d;
})
.collect(Collectors.toList());
for (PurDeliveryDetailEntity obj : purDeliveryDetailEntities) {
obj.setOrderIdFk(purDeliveryRequest.getId() + "");
}
boolean falg = purDeliveryDetailService.insertPurDeliveryDetailEntity(purDeliveryDetailEntities);
if (falg) {
//查询申购单
return ResultVOUtils.success("添加成功");
} else {
return ResultVOUtils.success("添加失败");
}
}
}