|
|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|