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

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;
2 years ago
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;
2 years ago
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")
2 years ago
@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")
2 years ago
@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")
2 years ago
@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")
2 years ago
@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")
2 years ago
@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")
2 years ago
@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")
2 years ago
@Log(title = "计划详情单", businessType = BusinessType.UPDATE)
public BaseResponse detailEdit(@RequestBody PurDeliveryDetailEntity purDeliveryDetailEntity) {
purDeliveryDetailService.update(purDeliveryDetailEntity);
return ResultVOUtils.success("修改成功");
}
/**
*
*
* @param ids
*/
@DeleteMapping("/purchase/delivery/detail/{ids}")
2 years ago
@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")
2 years ago
@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("添加失败");
}
}
}