|
|
@@ -41,6 +41,7 @@ import org.springblade.common.utils.NumToWords;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.secure.utils.SecureUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.BeanUtil;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.finance.dto.ApplyDTO;
|
|
|
import org.springblade.finance.feign.IFinanceClient;
|
|
|
@@ -1351,6 +1352,152 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
return monthSales;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void approve(Long id) {
|
|
|
+ LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ orderLambdaQueryWrapper
|
|
|
+ .eq(Order::getId, id)
|
|
|
+ .eq(Order::getTenantId, AuthUtil.getTenantId());
|
|
|
+ Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
|
|
|
+ if (order == null) {
|
|
|
+ throw new SecurityException("审批通过失败");
|
|
|
+ }
|
|
|
+ if (order.getStatus() == 3) {
|
|
|
+ throw new SecurityException("订单已审批通过请勿重复审批");
|
|
|
+ }
|
|
|
+ if (order.getGenerate() == 1){
|
|
|
+ throw new SecurityException("订单已生成销售订单请勿重复审批");
|
|
|
+ }
|
|
|
+ //修改采购合同信息
|
|
|
+ Order purchase = new Order();
|
|
|
+ purchase.setId(order.getSrcId());
|
|
|
+ purchase.setOrderStatus("平台审核通过");
|
|
|
+ baseMapper.updateById(purchase);
|
|
|
+ //生成平台销售订单
|
|
|
+ Order market = new Order();
|
|
|
+ BeanUtil.copy(order,market);
|
|
|
+ market.setId(null);//id置为空
|
|
|
+ market.setSrcId(order.getId());//来源id
|
|
|
+ market.setSrcOrderNo(order.getOrderNo());//来源单号
|
|
|
+ market.setCreateUser(SecureUtil.getUserId());
|
|
|
+ market.setCreateTime(new Date());
|
|
|
+ market.setUpdateTime(null);
|
|
|
+ market.setUpdateUser(null);
|
|
|
+ market.setOrderStatus(OrderStatusEnum.ENTERING.getType());//订单状态
|
|
|
+ market.setStatus(0);//订单状态
|
|
|
+ market.setGenerate(0);
|
|
|
+ market.setBillType(OrderTypeEnum.SALES.getType());//订单类型
|
|
|
+ market.setTradeType(OrderTypeEnum.DOMESTIC.getType());//贸易类型
|
|
|
+ // 获取系统编号
|
|
|
+ R billNo = serialClient.getBillNo(market.getBillType(), market.getTradeType(), market.getBillType());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ throw new SecurityException("生成系统编号失败");
|
|
|
+ }
|
|
|
+ market.setSysNo(billNo.getData().toString());//系统编号
|
|
|
+ R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(market.getCorpId());
|
|
|
+ if (corpMessage.isSuccess()) {
|
|
|
+ R clientBillNo = serialClient.getBillNo(corpMessage.getData().getCode(), market.getTradeType(), market.getBillType());
|
|
|
+ if (!clientBillNo.isSuccess()) {
|
|
|
+ throw new SecurityException("生成订单编号失败");
|
|
|
+ }
|
|
|
+ market.setOrderNo((String) clientBillNo.getData());//销售订单号
|
|
|
+ market.setOrgOrderNo((String) clientBillNo.getData());
|
|
|
+ }
|
|
|
+ //保存销售订单信息
|
|
|
+ baseMapper.insert(market);
|
|
|
+ //保存销售订单明细信息
|
|
|
+ LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getPid,order.getId());
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getIsDeleted,0);
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getTenantId,order.getTenantId());
|
|
|
+ List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(orderItemsList)){
|
|
|
+ orderItemsList.stream().forEach(item ->{
|
|
|
+ item.setId(null);
|
|
|
+ item.setStatus(0);
|
|
|
+ item.setPid(market.getId());
|
|
|
+ item.setCreateTime(new Date());
|
|
|
+ item.setCreateUser(SecureUtil.getUserId());
|
|
|
+ item.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ orderItemsMapper.insert(item);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成毛利润 毛利额
|
|
|
+ List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", market.getId()).eq("good_type",0).eq("is_deleted", 0));
|
|
|
+ Order orderMessage = new Order();
|
|
|
+ orderMessage.setId(market.getId());
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ // 采购金额求和
|
|
|
+ BigDecimal reduce = list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity())), BigDecimal::add);
|
|
|
+ // 金额求和
|
|
|
+ BigDecimal amount = list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //毛利额 = 销售金额-采购金额-预计海运费-本次使用返利+应收费用(除包装费)
|
|
|
+ BigDecimal grossProfit = amount.subtract(reduce.add(order.getPredictOceanFreight())).subtract(order.getCreateProfit() == null ? BigDecimal.ZERO : order.getCreateProfit());
|
|
|
+ //国内主表需要总重量总体积
|
|
|
+ //总重量求和
|
|
|
+ BigDecimal cntrVolumn = list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getCntrVolumn().multiply(y.getOrderQuantity())), BigDecimal::add);
|
|
|
+ //总体积求和
|
|
|
+ BigDecimal cartonWeight = list.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y.getCartonWeight().multiply(y.getOrderQuantity())), BigDecimal::add);
|
|
|
+ // 毛利额添加应收费用(除包装费)
|
|
|
+ Long feeId = 0L;
|
|
|
+ R<FeesDesc> fees = feesDescClient.getFeesByName("包装费");
|
|
|
+ if (fees.isSuccess() && ObjectUtil.isNotEmpty(fees.getData())) {
|
|
|
+ feeId = fees.getData().getId();
|
|
|
+ }
|
|
|
+ List<OrderFees> feeList = orderFeesService.list(new LambdaQueryWrapper<OrderFees>().eq(OrderFees::getPid, order.getId()).ne(OrderFees::getItemId, feeId).eq(OrderFees::getIsDeleted, 0));
|
|
|
+ BigDecimal totalFee = feeList.stream().map(OrderFees::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ grossProfit = grossProfit.add(totalFee);
|
|
|
+
|
|
|
+ BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
|
|
|
+ if (amount.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ grossProfitRate = (grossProfit.divide(amount, RoundingMode.CEILING)).multiply(new BigDecimal(100));
|
|
|
+ }
|
|
|
+ // 毛利额
|
|
|
+ orderMessage.setGrossProfit(grossProfit);
|
|
|
+ // 毛利率
|
|
|
+ orderMessage.setGrossProfitRate(grossProfitRate);
|
|
|
+ //总重量
|
|
|
+ orderMessage.setCntrVolumn(cntrVolumn);
|
|
|
+ //总提价
|
|
|
+ orderMessage.setCartonWeight(cartonWeight);
|
|
|
+ }
|
|
|
+ baseMapper.updateById(orderMessage);
|
|
|
+ //修改代理订单信息
|
|
|
+ order.setStatus(3);
|
|
|
+ order.setGenerate(1);
|
|
|
+ order.setOrderStatus(OrderStatusEnum.PASS.getType());
|
|
|
+ baseMapper.updateById(order);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void reject(Long id) {
|
|
|
+ LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ orderLambdaQueryWrapper
|
|
|
+ .eq(Order::getId, id)
|
|
|
+ .eq(Order::getTenantId, AuthUtil.getTenantId());
|
|
|
+ Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
|
|
|
+ if (order == null) {
|
|
|
+ throw new SecurityException("未找到单据");
|
|
|
+ }
|
|
|
+ if (order.getStatus() == 0) {
|
|
|
+ throw new SecurityException("订单已驳回或未提交审批,请勿重复操作");
|
|
|
+ }
|
|
|
+ //修改代理订单信息
|
|
|
+ order.setStatus(0);
|
|
|
+ order.setIsDeleted(1);
|
|
|
+ order.setOrderStatus(OrderStatusEnum.ENTERING.getType());
|
|
|
+ baseMapper.updateById(order);
|
|
|
+ //修改采购合同信息
|
|
|
+ Order indent = new Order();
|
|
|
+ indent.setId(order.getSrcId());
|
|
|
+ indent.setOrderStatus("平台拒绝接单");
|
|
|
+ indent.setGenerate(0);//平台拒绝,代理商可以再次提交采购合同
|
|
|
+ baseMapper.updateById(indent);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 转换金额为英文大写
|
|
|
*
|