diff --git a/Java/OrderInfoServiceImpl b/Java/OrderInfoServiceImpl new file mode 100644 index 0000000000000000000000000000000000000000..7e77afe42b27c6204e9fcc50f428873437dda07e --- /dev/null +++ b/Java/OrderInfoServiceImpl @@ -0,0 +1,785 @@ + +/** + *

+ * 客户订单服务实现类 + *

+ * @since 2020-05-14 + */ +@Service +public class OrderInfoServiceImpl extends ServiceImpl implements IOrderInfoService { + private static final Logger logger = LoggerFactory.getLogger(ManureServiceImpl.class); + + + /** + * 修改订单状态 + * + * @param orderId 订单ID + * @param status 状态 订单状态 (0:审核中,1:已审核,2:已发货,3弃单,4,退单,5 已退单)' + * @param outNumber 修改数量 + * @param warehouseId 仓库Id + * @param operationTime 操作时间 + * @return + */ + @Transactional(rollbackFor = Exception.class, isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + // 有事务则加入,没有则建立) + public ResponseResult updateOrderStatus(String orderId, String status, String serviceId, String serviceName, BigDecimal outNumber, Integer warehouseId, String operationTime) { + logger.info("修改订单状态,订单状态:{},订单ID:{},操作人Id:{},操作人姓名:{}", status, orderId, serviceId, serviceName); + //查询原订单 + OrderInfo byId = orderInfoService.getById(orderId); + if ("2".equals(status)) { + //判断是否发完货 + if (new BigDecimal(byId.getNum()).compareTo(new BigDecimal(byId.getHairNum())) == 0) + return new ResponseResult(ResponseMessage.FAIL, "该订单发货已完成,请勿重复提交!"); + + //状态不等于已发货 + if (byId.getOrderStatus() != 2) { + //发送消息提醒给负责人 + NewsUtil.saveNews("123456789", "系统通知", byId.getServiceId(), byId.getServiceName(), "订单" + byId.getOrderNum() + ",订单状态变更为已发货!"); + } + //发货状态 + byId.setOrderStatus(Integer.parseInt(status)); + //修改发货数 + byId.setHairNum(new BigDecimal(byId.getHairNum()).add(outNumber).toString()); + //查询改规格的所有进货记录,先进先出 + QueryWrapper wrapper = new QueryWrapper(); + wrapper.orderByAsc("create_time"); + wrapper.eq("remark_id", byId.getRemarkId()); + wrapper.eq("status", 0); + wrapper.eq("warehouse_id", warehouseId);//仓库 + List list = purchaseService.list(wrapper); + if (list.size() == 0) + return new ResponseResult(ResponseMessage.UPDATE_FAIL, "该规格可用库存不足,请先补货!"); + //修改商品规格总库存数 + ProductRemark byId1 = remarkService.getById(byId.getRemarkId()); + //判断库存是否小于零 + if (byId1.getInventory().subtract(outNumber).compareTo(new BigDecimal("0.00")) == -1) + return new ResponseResult(ResponseMessage.UPDATE_FAIL, "该规格可用库存不足,请先补货!"); + byId1.setInventory(byId1.getInventory().subtract(outNumber)); + remarkService.updateById(byId1); + //获取单据编码 + String billCode = voucherService.getBillCode("'" + "XSD-" + "'", "pro_stock_record", "status", 1, "'" + operationTime + "'"); + for (int i = 0; i < list.size(); i++) { + //改进货记录可用数量减去发货数 + BigDecimal subtract = list.get(i).getSurplusNum().subtract(outNumber); + //零大于进货记录可用数量减去发货数 + int num = new BigDecimal("0.00").compareTo(subtract); + //这批进货记录不够抵消 + if (num == 1) { + //发货数减去这批进货的可用数量就是还剩多少件没有抵消 + outNumber = outNumber.subtract(list.get(i).getSurplusNum()); + + //增加一条订单发货记录 + ProStockRecord pro = new ProStockRecord(); + pro.setBillCode(billCode); + pro.setNum(list.get(i).getSurplusNum());//变更数量(退货或出库数) + pro.setSurplusNum(list.get(i).getSurplusNum()); + pro.setProductId(list.get(i).getProductId());//商品Id + pro.setRemarkId(list.get(i).getRemarkId());//规格Id + pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id + pro.setStockStatus(1);//库存变化 0 加 1 减 + pro.setOrderId(orderId);//订单Id + pro.setStatus(1);//0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货 + pro.setSort(i);//排序 + pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价 + pro.setIsFinish(1); + pro.setRemarks("发货记录"); + pro.setServiceId(serviceId); + pro.setServiceName(serviceName); + pro.setStockRecordId(IdUtil.simpleUUID()); + pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));//数量乘以进货单价 + pro.setDelStatus(0); + pro.setVoucherStatus(0);//未生成凭证 + pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id + pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名 + pro.setProviderId(list.get(i).getProviderId());//供应商id + pro.setProviderName(list.get(i).getProviderName());//供应商姓名 + pro.setCustomerId(byId.getCustomerId()); + pro.setCustomerName(byId.getCustomerName()); + pro.setOperationTime(operationTime); + //计算平均每个商品的价钱 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 2, BigDecimal.ROUND_HALF_UP); + pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额 + proStockRecordService.save(pro); + //将本次进货可用剩余数量设置为零 + list.get(i).setSurplusNum(new BigDecimal("0.00")); + //状态修改为已售空 + list.get(i).setStatus(1); + purchaseService.updateById(list.get(i)); + //查询客户 + Customer byId2 = customerService.getById(byId.getCustomerId()); + //客户应收款增加 + byId2.setCollectMoney(new BigDecimal(byId2.getCollectMoney()).add(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + customerService.updateById(byId2); + //增加金额变化记录 + MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord(); + moneyChangeRecord.setChangeMsg("发货记录"); + moneyChangeRecord.setChangeStatus(0);//0 增加 1 减少 + moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款', + moneyChangeRecord.setMoney(pro.getRealityMoney()); + moneyChangeRecord.setCountMoney(byId2.getCollectMoney()); + moneyChangeRecord.setObjId(byId2.getCustomerId()); + moneyChangeRecord.setObjName(byId2.getUserName()); + moneyChangeRecord.setCreateServiceId(serviceId); + moneyChangeRecord.setCreateServiceName(serviceName); + moneyChangeRecord.setCreateTime(DateUtil.now()); + moneyChangeRecord.setChangeId(pro.getStockRecordId()); + moneyChangeRecord.setBillTime(operationTime); + moneyChangeRecord.setBillCode(billCode); + moneyChangeRecordService.save(moneyChangeRecord); + + } else if (num == -1) {//本次进货可用数量大于零(表示可以抵扣完) + //修改本次进货可用数量 + list.get(i).setSurplusNum(subtract); + purchaseService.updateById(list.get(i)); + //增加一条订单发货记录 + ProStockRecord pro = new ProStockRecord(); + pro.setBillCode(billCode); + pro.setIsFinish(1);//状态修改为已售空 + pro.setNum(outNumber);//变更数量(退货或出库数) + pro.setSurplusNum(outNumber); + pro.setProductId(list.get(i).getProductId());//商品Id + pro.setRemarkId(list.get(i).getRemarkId());//规格Id + pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id + pro.setStockStatus(1);//库存变化 0 加 1 减 + pro.setOrderId(orderId);//订单Id + pro.setStatus(1);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货 + pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示 + pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价 + if (pro.getRemarks() != null && !"".equals(list.get(i).getRemarks())) { + pro.setRemarks(list.get(i).getRemarks()); + } else { + pro.setRemarks("发货记录"); + } + pro.setServiceId(serviceId); + pro.setServiceName(serviceName); + String uuid = IdUtil.simpleUUID(); + pro.setStockRecordId(uuid); + pro.setIsFinish(1); + pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));//数量乘以进货单价 + pro.setDelStatus(0); + pro.setVoucherStatus(0);//未生成凭证 + pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id + pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名 + pro.setProviderId(list.get(i).getProviderId());//供应商id + pro.setProviderName(list.get(i).getProviderName());//供应商姓名 + pro.setCustomerId(byId.getCustomerId()); + pro.setCustomerName(byId.getCustomerName()); + pro.setOperationTime(operationTime); + //计算平均每个商品的价钱 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 2, BigDecimal.ROUND_HALF_UP); + pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额 + proStockRecordService.save(pro); + //查询客户 + Customer byId2 = customerService.getById(byId.getCustomerId()); + //客户应收款增加 + byId2.setCollectMoney(new BigDecimal(byId2.getCollectMoney()).add(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + customerService.updateById(byId2); + //增加金额变化记录 + MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord(); + moneyChangeRecord.setChangeMsg("发货记录"); + moneyChangeRecord.setChangeStatus(0);//0 增加 1 减少 + moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款', + moneyChangeRecord.setMoney(pro.getRealityMoney()); + moneyChangeRecord.setCountMoney(byId2.getCollectMoney()); + moneyChangeRecord.setObjId(byId2.getCustomerId()); + moneyChangeRecord.setObjName(byId2.getUserName()); + moneyChangeRecord.setCreateServiceId(serviceId); + moneyChangeRecord.setCreateServiceName(serviceName); + moneyChangeRecord.setCreateTime(DateUtil.now()); + moneyChangeRecord.setChangeId(pro.getStockRecordId()); + moneyChangeRecord.setBillTime(operationTime); + moneyChangeRecord.setBillCode(billCode); + moneyChangeRecordService.save(moneyChangeRecord); + + break;//跳出循环 + } else if (num == 0) { //相等表示这个库存正好够 + //增加一条订单发货记录 + ProStockRecord pro = new ProStockRecord(); + + + //将本次进货可用剩余数量设置为零 + list.get(i).setSurplusNum(new BigDecimal("0.00")); + //状态修改为已售空 + list.get(i).setStatus(1); + purchaseService.updateById(list.get(i)); + pro.setIsFinish(1);//状态修改为已售空 + pro.setNum(outNumber);//变更数量(退货或出库数) + pro.setSurplusNum(outNumber); + pro.setProductId(list.get(i).getProductId());//商品Id + pro.setRemarkId(list.get(i).getRemarkId());//规格Id + pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id + pro.setStockStatus(1);//库存变化 0 加 1 减 + pro.setOrderId(orderId);//订单Id + pro.setStatus(1);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货 + pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示 + pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价 + if (pro.getRemarks() != null && !"".equals(list.get(i).getRemarks())) { + pro.setRemarks(list.get(i).getRemarks()); + } else { + pro.setRemarks("发货记录"); + } + pro.setServiceId(serviceId); + pro.setServiceName(serviceName); + String uuid = IdUtil.simpleUUID(); + pro.setStockRecordId(uuid); + pro.setIsFinish(1); + pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));//数量乘以进货单价 + pro.setDelStatus(0); + pro.setVoucherStatus(0);//未生成凭证 + pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id + pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名 + pro.setProviderId(list.get(i).getProviderId());//供应商id + pro.setProviderName(list.get(i).getProviderName());//供应商姓名 + pro.setCustomerId(byId.getCustomerId()); + pro.setCustomerName(byId.getCustomerName()); + pro.setOperationTime(operationTime); + //计算平均每个商品的价钱 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 2, BigDecimal.ROUND_HALF_UP); + pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额 + pro.setBillCode(billCode); + proStockRecordService.save(pro); + //查询客户 + Customer byId2 = customerService.getById(byId.getCustomerId()); + //客户应收款增加 + byId2.setCollectMoney(new BigDecimal(byId2.getCollectMoney()).add(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + customerService.updateById(byId2); + //增加金额变化记录 + MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord(); + moneyChangeRecord.setChangeMsg("发货记录"); + moneyChangeRecord.setChangeStatus(0);//0 增加 1 减少 + moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款', + moneyChangeRecord.setMoney(pro.getRealityMoney()); + moneyChangeRecord.setCountMoney(byId2.getCollectMoney()); + moneyChangeRecord.setObjId(byId2.getCustomerId()); + moneyChangeRecord.setObjName(byId2.getUserName()); + moneyChangeRecord.setCreateServiceId(serviceId); + moneyChangeRecord.setCreateServiceName(serviceName); + moneyChangeRecord.setCreateTime(DateUtil.now()); + moneyChangeRecord.setChangeId(pro.getStockRecordId()); + moneyChangeRecord.setBillTime(operationTime); + moneyChangeRecord.setBillCode(billCode); + moneyChangeRecordService.save(moneyChangeRecord); + + //跳出循环 + break; + } + } + + //购买数减去已发数 + BigDecimal subtract = new BigDecimal(byId.getNum()).subtract(new BigDecimal(byId.getHairNum())); + //判断是否发完货 + if (subtract.compareTo(new BigDecimal("0.00")) == 0) { + //查询该订单的所有出库记录 + QueryWrapper wrapper1 = new QueryWrapper(); + wrapper1.eq("order_id", byId.getOrderId()); + wrapper1.eq("is_finish", 1); + wrapper1.eq("del_status", 0); + List list1 = proStockRecordService.list(wrapper1); + //计算利润 + BigDecimal reduce = list1.stream() + // 将ProStockRecord对象的Money取出来map为Bigdecimal + .map(ProStockRecord::getMoney) + // 使用reduce()聚合函数,实现累加器 + .reduce(BigDecimal.ZERO, BigDecimal::add); + byId.setProfit(new BigDecimal(byId.getRealityMoney()).subtract(reduce)); + orderInfoService.updateById(byId); + } else { + orderInfoService.updateById(byId); + } + return new ResponseResult(ResponseMessage.OK); + + } else if ("5".equals(status)) { + //判断是否发完货 + if (new BigDecimal(byId.getNum()).compareTo(byId.getRetreatNum()) == 0) + return new ResponseResult(ResponseMessage.FAIL, "该订单退货已完成,请勿重复提交!"); + + + //TODO 退货将退货数量按照先进先出进行退回 + //计算退货数 + BigDecimal retreatNum = byId.getRetreatNum().add(outNumber); + //修改退货数 + byId.setRetreatNum(retreatNum); + //查询该订单订单出库记录 + QueryWrapper wrapper = new QueryWrapper(); + wrapper.orderByAsc("create_time", "sort"); + wrapper.eq("order_id", orderId); + wrapper.eq("is_finish", 1); + wrapper.eq("status", 1); + wrapper.eq("del_status", 0); + List list = proStockRecordService.list(wrapper); + //获取单据编码 + String billCode = voucherService.getBillCode("'" + "XSTHD-" + "'", "pro_stock_record", "status", 2, "'" + operationTime + "'"); + for (int i = 0; i < list.size(); i++) { + //该批次剩余可推数量 + BigDecimal subtract = list.get(i).getSurplusNum().subtract(outNumber); + //零大于发货记录可用数量减去发货数 + int num = new BigDecimal("0.00").compareTo(subtract); + //这批发货记录不够抵消 + if (num == 1) { + //增加一条订单退货记录 + ProStockRecord pro = new ProStockRecord(); + pro.setBillCode(billCode); + //修改商品规格数量 + ProductRemark byId2 = remarkService.getById(byId.getRemarkId()); + //库存数 + byId2.setInventory(byId2.getInventory().add(list.get(i).getSurplusNum())); + pro.setNum(list.get(i).getSurplusNum());//变更数量(退货或出库数) + remarkService.updateById(byId2); + + //修改进货记录进货可用数 + Purchase byId1 = purchaseService.getById(list.get(i).getPurchaseId()); + byId1.setSurplusNum(byId1.getSurplusNum().add(list.get(i).getSurplusNum())); + //修改状体为未售空 + byId1.setStatus(0); + purchaseService.updateById(byId1); + + //发货数减去这批进货的可用数量就是还剩多少件没有抵消 + outNumber = outNumber.subtract(list.get(i).getSurplusNum()); + + pro.setSurplusNum(list.get(i).getSurplusNum()); + pro.setProductId(list.get(i).getProductId());//商品Id + pro.setRemarkId(list.get(i).getRemarkId());//规格Id + pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id + pro.setStockStatus(0);//库存变化 0 加 1 减 + pro.setOrderId(orderId);//订单Id + pro.setStatus(2);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货 + pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示 + pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价 + pro.setRemarks("退货记录"); + pro.setServiceId(serviceId); + pro.setServiceName(serviceName); + pro.setStockRecordId(IdUtil.simpleUUID()); + pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP)); + pro.setVoucherStatus(0);//未生成凭证 + pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id + pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名 + pro.setProviderId(list.get(i).getProviderId());//供应商id + pro.setProviderName(list.get(i).getProviderName());//供应商姓名 + pro.setCustomerId(byId.getCustomerId()); + pro.setCustomerName(byId.getCustomerName()); + pro.setOperationTime(operationTime); + //计算平均每个商品的价钱 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP); + pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额 + proStockRecordService.save(pro); + + //将本次发货可用剩余数量设置为零 + list.get(i).setSurplusNum(new BigDecimal("0.00")); + //状态修改为已退货 + list.get(i).setIsFinish(2); + //修改为已删除 + list.get(i).setDelStatus(1); + proStockRecordService.updateById(list.get(i)); + //查询客户 + Customer customer = customerService.getById(byId.getCustomerId()); + //客户应收款减少 + customer.setCollectMoney(new BigDecimal(customer.getCollectMoney()).subtract(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + customerService.updateById(customer); + //新增一条退货单 + OrderInfo orderInfo = new OrderInfo(); + orderInfo.setOrderId(IdUtil.simpleUUID()); + orderInfo.setOrderNum(byId.getOrderNum()); + orderInfo.setServiceId(byId.getServiceId()); + orderInfo.setServiceName(byId.getServiceName()); + orderInfo.setCreateServiceId(byId.getCreateServiceId()); + orderInfo.setCreateServiceName(byId.getCreateServiceName()); + orderInfo.setCustomerId(byId.getCustomerId()); + orderInfo.setCustomerName(byId.getCustomerName()); + orderInfo.setPhone(byId.getPhone()); + orderInfo.setProvince(byId.getProvince()); + orderInfo.setCity(byId.getCity()); + orderInfo.setDistrict(byId.getDistrict()); + orderInfo.setAddress(byId.getAddress()); + orderInfo.setProductId(byId.getProductId()); + orderInfo.setProductName(byId.getProductName()); + orderInfo.setRemarkName(byId.getRemarkName()); + orderInfo.setRemarkId(byId.getRemarkId()); + orderInfo.setNum(pro.getNum().toString());//退货数 + orderInfo.setUnit(byId.getUnit()); + //计算实付金额 + BigDecimal realitymoney = (new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + + //计算金额 + BigDecimal money = (new BigDecimal(byId.getMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + //计算返点 + BigDecimal rebate = (new BigDecimal(byId.getRebate()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + + orderInfo.setMoney(money.toString()); + orderInfo.setRebate(rebate.toString()); + orderInfo.setRealityMoney(Double.parseDouble(realitymoney.toString())); + orderInfo.setPayMethod(byId.getPayMethod()); + orderInfo.setOrderStatus(7); + orderInfo.setOrderTime(operationTime); + orderInfo.setPrice(byId.getPrice()); + orderInfo.setProviderName(byId.getProviderName()); + orderInfo.setHairNum("0.00"); + orderInfo.setRetreatNum(new BigDecimal(0)); + orderInfo.setProfit(new BigDecimal(0)); + orderInfo.setGiftStatus(0); + orderInfo.setCreateTime(DateUtil.now()); + orderInfoMapper.insert(orderInfo); + + + //增加金额变化记录 + MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord(); + moneyChangeRecord.setChangeMsg("退货记录"); + moneyChangeRecord.setChangeStatus(1);//0 增加 1 减少 + moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款', + moneyChangeRecord.setMoney(pro.getRealityMoney()); + moneyChangeRecord.setCountMoney(customer.getCollectMoney()); + moneyChangeRecord.setObjId(customer.getCustomerId()); + moneyChangeRecord.setObjName(customer.getUserName()); + moneyChangeRecord.setCreateServiceId(serviceId); + moneyChangeRecord.setCreateServiceName(serviceName); + moneyChangeRecord.setCreateTime(DateUtil.now()); + moneyChangeRecord.setChangeId(pro.getStockRecordId()); + moneyChangeRecord.setBillTime(operationTime); + moneyChangeRecord.setBillCode(billCode); + moneyChangeRecordService.save(moneyChangeRecord); + + + } else if (num == -1) { + //本次进货可用数量大于零(表示可以抵扣完,还有余数) + //增加一条订单退货记录 + ProStockRecord pro = new ProStockRecord(); + pro.setBillCode(billCode); + pro.setNum(outNumber);//变更数量(退货或出库数) + pro.setSurplusNum(outNumber); + pro.setProductId(list.get(i).getProductId());//商品Id + pro.setRemarkId(list.get(i).getRemarkId());//规格Id + pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id + pro.setStockStatus(0);//库存变化 0 加 1 减 + pro.setOrderId(orderId);//订单Id + pro.setStatus(2);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货 + pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示 + pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价 + pro.setRemarks("退货记录"); + pro.setServiceId(serviceId); + pro.setServiceName(serviceName); + pro.setStockRecordId(IdUtil.simpleUUID()); + pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP)); + pro.setVoucherStatus(0);//未生成凭证 + pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id + pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名 + pro.setProviderId(list.get(i).getProviderId());//供应商id + pro.setProviderName(list.get(i).getProviderName());//供应商姓名 + pro.setCustomerId(byId.getCustomerId()); + pro.setCustomerName(byId.getCustomerName()); + pro.setOperationTime(operationTime); + //计算平均每个商品的价钱 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP); + pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额 + proStockRecordService.save(pro); + //库存充足修改库存数 + list.get(i).setSurplusNum(subtract); + proStockRecordService.updateById(list.get(i)); + + //修改进货记录进货可用数 + Purchase byId1 = purchaseService.getById(list.get(i).getPurchaseId()); + byId1.setSurplusNum(byId1.getSurplusNum().add(outNumber)); + //修改状体为未售空 + byId1.setStatus(0); + purchaseService.updateById(byId1); + + //修改商品规格数量 + ProductRemark byId2 = remarkService.getById(byId.getRemarkId()); + //库存数 + byId2.setInventory(byId2.getInventory().add(outNumber)); + remarkService.updateById(byId2); + //查询客户 + Customer customer = customerService.getById(byId.getCustomerId()); + //客户应收款减少 + customer.setCollectMoney(new BigDecimal(customer.getCollectMoney()).subtract(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + customerService.updateById(customer); + //新增一条退货单 + OrderInfo orderInfo = new OrderInfo(); + orderInfo.setOrderId(IdUtil.simpleUUID()); + orderInfo.setOrderNum(byId.getOrderNum()); + orderInfo.setServiceId(byId.getServiceId()); + orderInfo.setServiceName(byId.getServiceName()); + orderInfo.setCreateServiceId(byId.getCreateServiceId()); + orderInfo.setCreateServiceName(byId.getCreateServiceName()); + orderInfo.setCustomerId(byId.getCustomerId()); + orderInfo.setCustomerName(byId.getCustomerName()); + orderInfo.setPhone(byId.getPhone()); + orderInfo.setProvince(byId.getProvince()); + orderInfo.setCity(byId.getCity()); + orderInfo.setDistrict(byId.getDistrict()); + orderInfo.setAddress(byId.getAddress()); + orderInfo.setProductId(byId.getProductId()); + orderInfo.setProductName(byId.getProductName()); + orderInfo.setRemarkName(byId.getRemarkName()); + orderInfo.setRemarkId(byId.getRemarkId()); + orderInfo.setNum(pro.getNum().toString());//退货数 + orderInfo.setUnit(byId.getUnit()); + //计算实付金额 + BigDecimal realitymoney = (new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + + //计算金额 + BigDecimal money = (new BigDecimal(byId.getMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + //计算返点 + BigDecimal rebate = (new BigDecimal(byId.getRebate()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + + orderInfo.setMoney(money.toString()); + orderInfo.setRebate(rebate.toString()); + orderInfo.setRealityMoney(Double.parseDouble(realitymoney.toString())); + orderInfo.setPayMethod(byId.getPayMethod()); + orderInfo.setOrderStatus(7); + orderInfo.setOrderTime(operationTime); + orderInfo.setPrice(byId.getPrice()); + orderInfo.setProviderName(byId.getProviderName()); + orderInfo.setHairNum("0.00"); + orderInfo.setRetreatNum(new BigDecimal(0)); + orderInfo.setProfit(new BigDecimal(0)); + orderInfo.setGiftStatus(0); + orderInfo.setCreateTime(DateUtil.now()); + orderInfoMapper.insert(orderInfo); + + //增加金额变化记录 + MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord(); + moneyChangeRecord.setChangeMsg("退货记录"); + moneyChangeRecord.setChangeStatus(1);//0 增加 1 减少 + moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款', + moneyChangeRecord.setMoney(pro.getRealityMoney()); + moneyChangeRecord.setCountMoney(customer.getCollectMoney()); + moneyChangeRecord.setObjId(customer.getCustomerId()); + moneyChangeRecord.setObjName(customer.getUserName()); + moneyChangeRecord.setCreateServiceId(serviceId); + moneyChangeRecord.setCreateServiceName(serviceName); + moneyChangeRecord.setCreateTime(DateUtil.now()); + moneyChangeRecord.setChangeId(pro.getStockRecordId()); + moneyChangeRecord.setBillTime(operationTime); + moneyChangeRecord.setBillCode(billCode); + moneyChangeRecordService.save(moneyChangeRecord); + //跳出循环 + break; + + } else if (num == 0) { + //相等表示这个库存正好够 + //将发货可用剩余数量设置为零 + list.get(i).setSurplusNum(new BigDecimal("0.00")); + //状态修改为已退货 + list.get(i).setIsFinish(2); + //修改为已删除 + list.get(i).setDelStatus(1); + proStockRecordService.updateById(list.get(i)); + //增加一条订单购买数记录记录 + ProStockRecord pro = new ProStockRecord(); + pro.setBillCode(billCode); + pro.setNum(outNumber);//变更数量(退货或出库数) + pro.setSurplusNum(outNumber); + pro.setProductId(list.get(i).getProductId());//商品Id + pro.setRemarkId(list.get(i).getRemarkId());//规格Id + pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id + pro.setStockStatus(0);//库存变化 0 加 1 减 + pro.setOrderId(orderId);//订单Id + pro.setStatus(2);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货 + pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示 + pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价 + pro.setRemarks("退货记录"); + pro.setServiceId(serviceId); + pro.setServiceName(serviceName); + pro.setStockRecordId(IdUtil.simpleUUID()); + pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP)); + pro.setVoucherStatus(0);//未生成凭证 + pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id + pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名 + pro.setProviderId(list.get(i).getProviderId());//供应商id + pro.setProviderName(list.get(i).getProviderName());//供应商姓名 + pro.setCustomerId(byId.getCustomerId()); + pro.setCustomerName(byId.getCustomerName()); + pro.setOperationTime(operationTime); + //计算平均每个商品的价钱 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP); + pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额 + proStockRecordService.save(pro); + + //修改进货记录进货可用数 + Purchase byId1 = purchaseService.getById(list.get(i).getPurchaseId()); + byId1.setSurplusNum(byId1.getSurplusNum().add(outNumber)); + //修改状体为未售空 + byId1.setStatus(0); + purchaseService.updateById(byId1); + //修改商品规格数量 + ProductRemark byId2 = remarkService.getById(byId.getRemarkId()); + //库存数 + byId2.setInventory(byId2.getInventory().add(outNumber)); + remarkService.updateById(byId2); + //查询客户 + Customer customer = customerService.getById(byId.getCustomerId()); + //客户应收款减少 + customer.setCollectMoney(new BigDecimal(customer.getCollectMoney()).subtract(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + customerService.updateById(customer); + + //新增一条退货单 + OrderInfo orderInfo = new OrderInfo(); + orderInfo.setOrderId(IdUtil.simpleUUID()); + orderInfo.setOrderNum(byId.getOrderNum()); + orderInfo.setServiceId(byId.getServiceId()); + orderInfo.setServiceName(byId.getServiceName()); + orderInfo.setCreateServiceId(byId.getCreateServiceId()); + orderInfo.setCreateServiceName(byId.getCreateServiceName()); + orderInfo.setCustomerId(byId.getCustomerId()); + orderInfo.setCustomerName(byId.getCustomerName()); + orderInfo.setPhone(byId.getPhone()); + orderInfo.setProvince(byId.getProvince()); + orderInfo.setCity(byId.getCity()); + orderInfo.setDistrict(byId.getDistrict()); + orderInfo.setAddress(byId.getAddress()); + orderInfo.setProductId(byId.getProductId()); + orderInfo.setProductName(byId.getProductName()); + orderInfo.setRemarkName(byId.getRemarkName()); + orderInfo.setRemarkId(byId.getRemarkId()); + orderInfo.setNum(pro.getNum().toString());//退货数 + orderInfo.setUnit(byId.getUnit()); + //计算实付金额 + BigDecimal realitymoney = (new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + + //计算金额 + BigDecimal money = (new BigDecimal(byId.getMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + //计算返点 + BigDecimal rebate = (new BigDecimal(byId.getRebate()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP)) + .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP); + + orderInfo.setMoney(money.toString()); + orderInfo.setRebate(rebate.toString()); + orderInfo.setRealityMoney(Double.parseDouble(realitymoney.toString())); + orderInfo.setPayMethod(byId.getPayMethod()); + orderInfo.setOrderStatus(7); + orderInfo.setOrderTime(operationTime); + orderInfo.setPrice(byId.getPrice()); + orderInfo.setProviderName(byId.getProviderName()); + orderInfo.setHairNum("0.00"); + orderInfo.setRetreatNum(new BigDecimal(0)); + orderInfo.setProfit(new BigDecimal(0)); + orderInfo.setGiftStatus(0); + orderInfo.setCreateTime(DateUtil.now()); + orderInfoMapper.insert(orderInfo); + //增加金额变化记录 + MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord(); + moneyChangeRecord.setChangeMsg("退货记录"); + moneyChangeRecord.setChangeStatus(1);//0 增加 1 减少 + moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款', + moneyChangeRecord.setMoney(pro.getRealityMoney()); + moneyChangeRecord.setCountMoney(customer.getCollectMoney()); + moneyChangeRecord.setObjId(customer.getCustomerId()); + moneyChangeRecord.setObjName(customer.getUserName()); + moneyChangeRecord.setCreateServiceId(serviceId); + moneyChangeRecord.setCreateServiceName(serviceName); + moneyChangeRecord.setCreateTime(DateUtil.now()); + moneyChangeRecord.setChangeId(pro.getStockRecordId()); + moneyChangeRecord.setBillTime(operationTime); + moneyChangeRecord.setBillCode(billCode); + moneyChangeRecordService.save(moneyChangeRecord); + //跳出循环 + break; + } + } + //判断退货数和发货数是否一致,一致修改状态为已退货 + if (retreatNum.compareTo(new BigDecimal(byId.getHairNum())) == 0) { + //修改状态为已退货 + byId.setOrderStatus(5); + //修改利润为零 + byId.setProfit(new BigDecimal("0.00")); + } else { + //查询所剩发货记录 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.orderByAsc("create_time", "sort"); + queryWrapper.eq("order_id", orderId); + queryWrapper.eq("is_finish", 1); + queryWrapper.eq("status", 1); + queryWrapper.eq("del_status", 0); + List proStockRecords = proStockRecordService.list(queryWrapper); + //计算所剩发货记录的进货价 + BigDecimal reduce = proStockRecords.stream() + //剩余数量乘以进货单价 + .map(stockRecord -> stockRecord.getSurplusNum().multiply(stockRecord.getPurchasePrice())) + // 使用reduce()聚合函数,实现累加器 + .reduce(BigDecimal.ZERO, BigDecimal::add); + System.err.println("退货所剩利润" + reduce); + //订单实付除以订单总数等于单件实付金额 + BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP); + System.err.println("单件实付金额" + divide); + //剩余数量 + BigDecimal subtract = new BigDecimal(byId.getNum()).subtract(byId.getRetreatNum()); + System.err.println("剩余数量" + subtract); + //单件实付金额乘于剩余数量等于退货后的总实付金额 + BigDecimal multiply = divide.multiply(subtract); + System.err.println("退货后的总实付金额" + multiply); + //总实付金额减去剩余进货价等于利润 + BigDecimal subtract1 = multiply.subtract(reduce); + System.err.println("退货后的利润" + subtract1); + byId.setProfit(subtract1);//利润 + } + boolean b = orderInfoService.updateById(byId); + if (b == true) { + //查询订单 + OrderInfo byId1 = orderInfoService.getById(byId.getOrderId()); + //状态等于已退货 + if (byId1.getOrderStatus() == 5) { + //发送消息提醒给负责人 + NewsUtil.saveNews("123456789", "系统通知", byId1.getServiceId(), byId1.getServiceName(), "订单" + byId1.getOrderNum() + ",订单状态变更为已退货!"); + } + if (byId1.getFirstOrderStatus() == 1) { + //查询是否还有存在的首次订单 + QueryWrapper wrapper1 = new QueryWrapper(); + wrapper1.eq("order_time", byId1.getOrderTime()); + wrapper1.eq("customer_id", byId1.getCustomerId()); + wrapper1.eq("first_order_status", 1); + wrapper1.notIn("order_status", 3, 4, 5); + List list1 = orderInfoService.list(wrapper1); + if (list1.size() == 0) { + //没有首次订单了修改客户首次订单下单时间 + Customer customer = new Customer(); + customer.setCustomerId(byId1.getCustomerId()); + customer.setFirstOrderTime(""); + customerService.updateById(customer); + } + } + + + return new ResponseResult(ResponseMessage.OK); + } + } else { + int anInt = Integer.parseInt(status); + if (anInt != 0) { + String str = anInt == 1 ? "审核通过" : anInt == 3 ? "弃单" : anInt == 4 ? "退单" : anInt == 6 ? "已完成" : ""; + //发送消息提醒给负责人 + NewsUtil.saveNews("123456789", "系统通知", byId.getServiceId(), byId.getServiceName(), "订单" + byId.getOrderNum() + ",订单状态变更为" + str + "!"); + } + //修改订单状态 + byId.setOrderStatus(Integer.parseInt(status)); + boolean b = orderInfoService.updateById(byId); + if (byId.getFirstOrderStatus() == 1) { + //查询是否还有存在的首次订单 + QueryWrapper wrapper1 = new QueryWrapper(); + wrapper1.eq("order_time", byId.getOrderTime()); + wrapper1.eq("customer_id", byId.getCustomerId()); + wrapper1.eq("first_order_status", 1); + wrapper1.notIn("order_status", 3, 4, 5); + List list1 = orderInfoService.list(wrapper1); + if (list1.size() == 0) { + //没有首次订单了修改客户首次订单下单时间 + Customer customer = new Customer(); + customer.setCustomerId(byId.getCustomerId()); + customer.setFirstOrderTime(""); + customerService.updateById(customer); + } + } + if (b == true) + return new ResponseResult(ResponseMessage.OK); + } + return new ResponseResult(ResponseMessage.FAIL); + } + + + +}