فهرست منبع

2023年1月3日17:57:33

纪新园 2 سال پیش
والد
کامیت
b1983f297c

+ 211 - 4
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -9,22 +9,38 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.time.DateUtils;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.FeesDesc;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IFeesDescClient;
+import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 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;
+import org.springblade.finance.vojo.Acc;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderFiles;
+import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.service.IOrderFilesService;
+import org.springblade.purchase.sales.service.IOrderItemsService;
 import org.springblade.purchase.sales.service.IOrderService;
+import org.springblade.stock.feign.IStockGoodsClient;
+import org.springblade.stock.vo.StockGoodsVO;
+import org.springblade.system.cache.ParamCache;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.math.BigDecimal;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.util.*;
+
+import static org.springblade.common.constant.TenantConstant.*;
 
 @NonDS
 @ApiIgnore()
@@ -34,8 +50,26 @@ public class OrderDescClient implements IOrderDescClient {
 
 	private final IOrderService iOrderService;
 
+	private final IOrderItemsService iOrderItemsService;
+
 	private final IOrderFilesService iOrderFilesService;
 
+	private IStockGoodsClient stockGoodsClient;
+
+	private final IFinanceClient financeClient;//财务
+
+	private final IFeesDescClient feesDescClient;//费用
+
+	/**
+	 * 获取客户信息
+	 */
+	private ICorpsDescClient corpsDescClient;
+
+	/**
+	 * 生成系统编号
+	 */
+	private ISerialClient serialClient;
+
 	@Override
 	@PostMapping(UPDATE_ORDER)
 	public R updateOrder(Order order) {
@@ -61,6 +95,9 @@ public class OrderDescClient implements IOrderDescClient {
 				}
 			}
 		}
+		if (ParamCache.getValue(APPROVAL_PROCESS).equals("1") && 6 == order.getStatus()) {
+			iOrderService.collectHairGoods(order);
+		}
 		iOrderService.updateById(order);
 
 		return R.success("操作成功");
@@ -183,5 +220,175 @@ public class OrderDescClient implements IOrderDescClient {
 		return iOrderService.corpAnalysis(order);
 	}
 
+	@Override
+	@GetMapping(UNDER_REVIEW_TH)
+	public R underReviewTH(Long id) {
+		Order order = new Order();
+		order.setId(id);
+		order.setStatus(7);
+		order.setUpdateUser(AuthUtil.getUserId());
+		order.setUpdateTime(new Date());
+		order.setUpdateUserName(AuthUtil.getUserName());
+		iOrderService.updateById(order);
+		return R.data("操作成功");
+	}
+
+	@Override
+	@GetMapping(PASS_CANCEL_TH)
+	public R passCancelTH(Long id) {
+		Order order = new Order();
+		order.setId(id);
+		order.setStatus(8);
+		order.setUpdateUser(AuthUtil.getUserId());
+		order.setUpdateTime(new Date());
+		order.setUpdateUserName(AuthUtil.getUserName());
+		iOrderService.updateById(order);
+		return R.data("操作成功");
+	}
+
+	@Override
+	@GetMapping(PASS_CHECK_TH)
+	public R passCheckTH(Long id) {
+		Order selectOrder = iOrderService.getById(id);
+		if (ObjectUtils.isNull(selectOrder)){
+			throw new SecurityException("未查到单据信息");
+		}
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getTenantId,AuthUtil.getTenantId()).eq(Order::getIsDeleted,0).eq(Order::getId,selectOrder.getSrcId()).eq(Order::getSysNo,selectOrder.getSrcSysNo());
+		Order order = iOrderService.getOne(lambdaQueryWrapper);
+		if (ObjectUtils.isNull(order)){
+			throw new SecurityException("未查到订单信息");
+		}
+		LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderItemsLambdaQueryWrapper.eq(OrderItems::getTenantId, AuthUtil.getTenantId()).eq(OrderItems::getIsDeleted, 0).eq(OrderItems::getPid, selectOrder.getId());
+		List<OrderItems> orderItemsList1 = iOrderItemsService.list(orderItemsLambdaQueryWrapper);
+		for (OrderItems orderItems : orderItemsList1) {
+			BigDecimal stockPrice = new BigDecimal("0.00");
+			BigDecimal surplusRouteQuantity = new BigDecimal("0.00");
+			BigDecimal balanceQuantity = new BigDecimal("0.00");
+			BigDecimal balanceAmount = new BigDecimal("0.00");
+			//获取本商品库存
+			R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
+			if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+				if ("XS".equals(selectOrder.getBillType())) {
+					surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().add(orderItems.getStorageInQuantity()));
+					balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+					balanceAmount = balanceAmount.add(balanceQuantity.multiply(orderItems.getPurchasePrice(), MathContext.DECIMAL32));
+					stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+					r.getData().setOutQuantity(r.getData().getOutQuantity().add(orderItems.getStorageInQuantity()));
+					r.getData().setOutAmount(r.getData().getOutAmount().add(orderItems.getAmount()));
+				} else {
+					surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
+					balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+					balanceAmount = balanceAmount.add(balanceQuantity.multiply(orderItems.getPrice(), MathContext.DECIMAL32));
+					stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+					r.getData().setInQuantity(r.getData().getInQuantity().subtract(orderItems.getStorageInQuantity()));
+					r.getData().setInAmount(r.getData().getInAmount().subtract(orderItems.getAmount()));
+				}
+				r.getData().setSurplusRouteQuantity(surplusRouteQuantity);
+				r.getData().setBalanceQuantity(balanceQuantity);
+				r.getData().setBalanceAmount(balanceAmount);
+				r.getData().setStockPrice(stockPrice);
+				stockGoodsClient.updateStock(r.getData());
+
+			} else {
+				throw new RuntimeException("未找到库存,操作失败!");
+			}
+		}
+		order.setStatus(5);
+		iOrderService.updateById(order);
+
+		selectOrder.setStatus(5);
+		iOrderService.updateById(selectOrder);
+
+		//获取账单信息
+		Acc acc = new Acc();
+		acc.setSrcParentId(order.getId());
+		if ("CG".equals(order.getBillType())) {
+			acc.setBillType("申请");
+		} else {
+			acc.setBillType("收费");
+		}
+		acc.setTradeType("YPJ");
+		acc.setSrcType(4);
+		R<List<Acc>> r = financeClient.getAccListByCondition(acc);
+		if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+			for (Acc acc_ : r.getData()) {
+				//判断是否有结算 true 不允许撤销审核  false 删除账单信息并撤销审核
+				if (!acc_.getSettlementAmount().equals(new BigDecimal("0.00"))) {
+					BigDecimal amount = BigDecimal.ZERO;//对账金额   销售订单生成的金额  销售金额-本次使用返利金额+费用明细
+					BigDecimal quantity = BigDecimal.ZERO;//对账数量 数量为 就是轮胎条数的和
+					BigDecimal price = BigDecimal.ZERO;//对账单价
+					ApplyDTO applyDTO = new ApplyDTO();
+					applyDTO.setCompanyid(selectOrder.getBelongToCorpId());
+					applyDTO.setTradeType(selectOrder.getTradeType());
+					applyDTO.setBelongCompany(selectOrder.getBelongToCorpName());
+					applyDTO.setUrl(selectOrder.getUrl());
+					applyDTO.setPageStatus(selectOrder.getPageStatus());
+					applyDTO.setPageLabel(selectOrder.getPageLabel());
+					applyDTO.setCheckType(selectOrder.getCheckType());
+					applyDTO.setAccDate(selectOrder.getBusinesDate());
+					if ("XSTH".equals(selectOrder.getBillType())) {
+						applyDTO.setDc("C");
+						applyDTO.setBillType("付费");
+					} else if ("CGTH".equals(selectOrder.getBillType())) {
+						applyDTO.setDc("D");
+						applyDTO.setBillType("收费");
+					}
+					applyDTO.setSettlementList(new ArrayList<>());
+					amount = amount.add(acc_.getSettlementAmount());
+					quantity = quantity.add(new BigDecimal(1));
+					price = price.add(amount);
+
+					applyDTO.setSrcParentId(selectOrder.getId());
+					applyDTO.setSrcSysno(selectOrder.getSysNo());
+					applyDTO.setItemType("YPJ");
+					applyDTO.setCorpId(selectOrder.getCorpId());
+					applyDTO.setSrcId(selectOrder.getId());
+					applyDTO.setSrcFeesId(selectOrder.getId());
+					applyDTO.setCurrency("CNY");
+					applyDTO.setExchangeRate(selectOrder.getExchangeRate());
+					applyDTO.setTaxRate(BigDecimal.ZERO);
+					applyDTO.setSrcType(4);
+					applyDTO.setTradeType(selectOrder.getTradeType());
+					applyDTO.setChargeMember(selectOrder.getChargeMember());
+					applyDTO.setUnit("条");
+					applyDTO.setRemarks(selectOrder.getOrderRemark());
+					//获取费用id
+					R<FeesDesc> fees = feesDescClient.getFeesByName("货款");
+					if (fees.isSuccess() && fees.getData() != null) {
+						applyDTO.setCostType(fees.getData().getId().toString());
+					}
+					applyDTO.setQuantity(new BigDecimal(1));
+					applyDTO.setPrice(selectOrder.getDebitAmount());
+					applyDTO.setAmount(selectOrder.getDebitAmount());
+					applyDTO.setSrcDate(selectOrder.getBusinesDate());
+					applyDTO.setSrcBillNo(selectOrder.getOrderNo());
+					applyDTO.setAccSysNo(selectOrder.getSysNo());
+					applyDTO.setSrcRefno(selectOrder.getSysNo());
+					applyDTO.setRetrieval(selectOrder.getAdvanceCollectionDate());
+					applyDTO.setCorpName(selectOrder.getCorpsName());
+
+					applyDTO.setAmount(amount);
+					applyDTO.setPrice(price);
+					applyDTO.setQuantity(quantity);
+					applyDTO.setReceivedAmount(selectOrder.getCurrentAmount());
+					applyDTO.setSettlementAmount(acc_.getSettlementAmount());
+					//生成账单
+					R paymentApply = financeClient.paymentApplyParts(applyDTO);
+					if (!paymentApply.isSuccess()) {
+						throw new RuntimeException(paymentApply.getMsg());
+					}
+					if (ParamCache.getValue(PAYMENT_PARAMETER).equals("1")){
+						//微信退款
+					}
+				} else {
+					financeClient.remove(acc_.getId() + "");
+				}
+			}
+		}
+		return null;
+	}
+
 
 }