Browse Source

2024年10月16日17:27:54

纪新园 1 year ago
parent
commit
e07f079e80
13 changed files with 227 additions and 63 deletions
  1. 5 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java
  2. 15 9
      blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/service/impl/BFeesServiceImpl.java
  3. 15 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java
  4. 4 8
      blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java
  5. 7 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java
  6. 10 7
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java
  7. 9 3
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java
  8. 21 1
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java
  9. 8 5
      blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java
  10. 1 0
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java
  11. 99 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  12. 1 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/payMethod/PayServiceImpl.java
  13. 32 28
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

+ 5 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java

@@ -373,6 +373,11 @@ public class PjOrder implements Serializable {
 	 */
 	@ApiModelProperty(value = "任务是否审核通过")
 	private String taskWhetherAdopt;
+	/**
+	 * 微信支付订单号
+	 */
+	@ApiModelProperty(value = "微信支付订单号")
+	private String chnltrxid;
 
 	/**
 	 * 行数

+ 15 - 9
blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/service/impl/BFeesServiceImpl.java

@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -73,9 +72,9 @@ public class BFeesServiceImpl extends ServiceImpl<FeesMapper, BFees> implements
 		String deptId = "";
 		String deptName = "";
 		//获取部门ids对应中文名
-		if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
-			deptId = deptUtils.getDeptPid()+"";
-			R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid()+"");
+		if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
+			deptId = deptUtils.getDeptPid() + "";
+			R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
 			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
 				deptName = String.join(",", res.getData());
 			}
@@ -90,11 +89,18 @@ public class BFeesServiceImpl extends ServiceImpl<FeesMapper, BFees> implements
 				.eq(BFees::getCnName, bFees.getCnName())) > 0) {
 				throw new RuntimeException("名称已存在");
 			}
-			if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
+			if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
 				bFees.setCreateDept(deptId);
 				bFees.setCreateDeptName(deptName);
 			}
 		} else {
+			if (baseMapper.selectCount(new LambdaQueryWrapper<BFees>()
+				.eq(BFees::getTenantId, AuthUtil.getTenantId())
+				.eq(BFees::getIsDeleted, 0)
+				.apply("id != " + bFees.getId())
+				.eq(BFees::getCnName, bFees.getCnName())) > 0) {
+				throw new RuntimeException("名称已存在");
+			}
 			bFees.setUpdateUser(AuthUtil.getUserId());
 			bFees.setUpdateTime(new Date());
 			bFees.setUpdateUserName(AuthUtil.getUserName());
@@ -111,7 +117,7 @@ public class BFeesServiceImpl extends ServiceImpl<FeesMapper, BFees> implements
 				bFeesTypes.setCreateTime(new Date());
 				bFeesTypes.setCreateUser(AuthUtil.getUserId());
 				bFeesTypes.setCreateUserName(AuthUtil.getUserName());
-				if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
+				if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
 					bFeesTypes.setCreateDept(deptId);
 					bFeesTypes.setCreateDeptName(deptName);
 				}
@@ -170,9 +176,9 @@ public class BFeesServiceImpl extends ServiceImpl<FeesMapper, BFees> implements
 				bFees.setCreateUser(AuthUtil.getUserId());
 				bFees.setCreateUserName(AuthUtil.getUserName());
 				//获取部门ids对应中文名
-				if (ObjectUtils.isNotNull(deptUtils.getDeptPid()+"")) {
-					bFees.setCreateDept(deptUtils.getDeptPid()+"");
-					R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid()+"");
+				if (ObjectUtils.isNotNull(deptUtils.getDeptPid() + "")) {
+					bFees.setCreateDept(deptUtils.getDeptPid() + "");
+					R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
 					if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
 						bFees.setCreateDeptName(String.join(",", res.getData()));
 					}

+ 15 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -2245,6 +2245,21 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		} else {
 			detail.setFilesList(new ArrayList<>());
 		}
+		List<Amends> amendsList = amendsMapper.selectList(new LambdaQueryWrapper<Amends>()
+			.eq(Amends::getTenantId, AuthUtil.getTenantId())
+			.eq(Amends::getIsDeleted, 0)
+			.eq(Amends::getStatus, 3)
+			.eq(Amends::getOrigId, detail.getId()));
+		if (!amendsList.isEmpty()) {
+			List<Long> ids = amendsList.stream().map(Amends::getId).distinct().collect(Collectors.toList());
+			detail.setFeeCenterAmendList(feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+				.eq(FeeCenter::getIsDeleted, 0)
+				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+				.in(FeeCenter::getPid, ids)
+			));
+		} else {
+			detail.setFeeCenterAmendList(new ArrayList<>());
+		}
 		return detail;
 	}
 

+ 4 - 8
blade-service/blade-los/src/main/java/org/springblade/los/check/service/impl/AuditProecessServiceImpl.java

@@ -235,23 +235,19 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, L
 						+ " 提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
 				}else if ("贸易代理单据审核".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的贸易代理审核,业务单号:" + auditProecessDTO.getBillNo() + ","
-						+ "单据日期:" + billsDate + ",请审核。"
+					message.setMessageBody("您有新的贸易代理审核,业务单号:" + auditProecessDTO.getBillNo()  + ",请审核。"
 						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
 				} else if ("贸易代理货款付费申请".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的贸易代理货款付费申请,业务单号:" + auditProecessDTO.getBillNo() + ","
-						+ "单据日期:" + billsDate + ",请审核。"
+					message.setMessageBody("您有新的贸易代理货款付费申请,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
 						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
 				} else if ("贸易代理货款收费确认".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的贸易代理货款收费待确认,业务单号:" + auditProecessDTO.getBillNo() + ","
-						+ "单据日期:" + billsDate + ",请审核。"
+					message.setMessageBody("您有新的贸易代理货款收费待确认,业务单号:" + auditProecessDTO.getBillNo() + ",请审核。"
 						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
 				} else if ("贸易代理货款付费确认".equals(auditProecess.getProcessType())) {
-					message.setMessageBody("您有新的贸易代理货款付费待确认,业务单号:" + auditProecessDTO.getBillNo() + ","
-						+ "单据日期:" + billsDate + ",请审核。"
+					message.setMessageBody("您有新的贸易代理货款付费待确认,业务单号:" + auditProecessDTO.getBillNo()+",请审核。"
 						+ "提交人:" + auditProecessDTO.getSendName() + "  " + "提交时间" + simpleDateFormat.format(auditProecessDTO.getSendTime())
 					);
 				}

+ 7 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -364,7 +364,13 @@ public class FinAccBillsController extends BladeController {
 						finAccBillsVOList.add(item);
 					}
 				} else {
-					finAccBillsVOList.add(item);
+					if (new BigDecimal("0.00").compareTo(item.getAppliedInvoiceCurrentStlAmount()) != 0) {
+						finAccBillsVOList.add(item);
+					}
+					if (new BigDecimal("0.00").compareTo(item.getAppliedCurrentStlAmount()) != 0) {
+						finAccBillsVOList.add(item);
+					}
+//					finAccBillsVOList.add(item);
 				}
 			} else if ("3".equals(type)) {
 				if (new BigDecimal("0.00").compareTo(item.getAppliedInvoiceCurrentAmount()) != 0) {

+ 10 - 7
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -943,6 +943,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				item.setUnsettledAmount(item.getAmount().subtract(item.getStlTtlAmount()));
 				/*-----------------------账单数据处理 收--------------------------- */
 				if ("D".equals(item.getDc())) {
+					if (finAccBills.getStlAmountDr().compareTo(finAccBills.getAmountDr()) > 0 ||
+						finAccBills.getStlAmountDrUsd().compareTo(finAccBills.getAmountDrUsd()) > 0
+					) {
+						throw new RuntimeException("结算金额大于账单金额,操作失败");
+					}
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().add(item.getCurrentStlAmount().add(item.getCurrentStlDiscount())));
 						finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(item.getCurrentStlAmount().add(item.getCurrentStlDiscount())));
@@ -965,6 +970,11 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				/*-----------------------账单数据处理 收--------------------------- */
 				/*-----------------------账单数据处理 付--------------------------- */
 				else if ("C".equals(item.getDc())) {
+					if (finAccBills.getStlAmountCr().compareTo(finAccBills.getAmountCr()) > 0 ||
+						finAccBills.getStlAmountCrUsd().compareTo(finAccBills.getAmountCrUsd()) > 0
+					) {
+						throw new RuntimeException("结算金额大于账单金额,操作失败");
+					}
 					if ("CNY".equals(item.getCurCode())) {
 						finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
 						finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(item.getCurrentStlAmount()));
@@ -985,13 +995,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 					}
 				}
 				/*-----------------------账单数据处理 付--------------------------- */
-				if (finAccBills.getStlAmountCr().compareTo(finAccBills.getAmountCr()) > 0 ||
-					finAccBills.getStlAmountCrUsd().compareTo(finAccBills.getAmountCrUsd()) > 0 ||
-					finAccBills.getStlAmountDr().compareTo(finAccBills.getAmountDr()) > 0 ||
-					finAccBills.getStlAmountDrUsd().compareTo(finAccBills.getAmountDrUsd()) > 0
-				) {
-					throw new RuntimeException("结算金额大于账单金额,操作失败");
-				}
 				if (status) {
 					finAccBills.setIsCleared(9);
 				} else {

+ 9 - 3
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -1607,16 +1607,22 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 		} else {
 			return R.data(mapList);
 		}
-		Date date = new Date();
 		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
 		for (DispatchVehicles item : dispatchVehiclesList) {
 			Bills bills = billsList.stream().filter(e -> e.getId().equals(item.getPid())).findFirst().orElse(null);
 			if (bills != null) {
 				Map<String, Object> map = new HashMap<>();
-				map.put("id", item.getId());
+				map.put("id", bills.getId());
 				map.put("mblno", bills.getMblno());
 				map.put("corpName", bills.getCorpCnName());
-				map.put("eta", formatter.format(item.getReturnDate()));
+				map.put("eta", formatter.format(bills.getEta()));
+				map.put("boxNo", item.getBoxNo());
+				map.put("returnDate", formatter.format(item.getReturnDate()));
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(item.getReturnDate());
+				calendar.add(Calendar.DAY_OF_MONTH, 5);
+				Date newDate = calendar.getTime();
+				map.put("withdrawalReminderDate", formatter.format(newDate));
 				mapList.add(map);
 			}
 			/*if (ObjectUtils.isNotNull(item.getReturnDate())) {

+ 21 - 1
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/AgentServiceImpl.java

@@ -1293,6 +1293,11 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 		if (agentList.isEmpty()) {
 			throw new RuntimeException("未查到贸易代理单据信息");
 		}
+		List<FeeCenter> feeCentersWK = feeCenterList.stream().filter(e -> "WK".equals(e.getFeeCode())).collect(Collectors.toList());
+		List<FeeCenter> feeCentersSK = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())).collect(Collectors.toList());
+		if (!feeCentersWK.isEmpty() && !feeCentersSK.isEmpty()) {
+			throw new RuntimeException("首款与尾款不能同时付费");
+		}
 		List<Long> agentIdList = agentList.stream().map(Agent::getId).distinct().collect(Collectors.toList());
 		BigDecimal firstPaidInPayment = feeCenterList.stream().filter(e -> "SFK".equals(e.getFeeCode())).map(FeeCenter::getAmountLoc)
 			.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -1689,6 +1694,18 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			throw new RuntimeException("缺少必要参数");
 		}
 		Agent declare = baseMapper.selectById(agent.getId());
+		List<FeeCenter> feeCentersList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+			.eq(FeeCenter::getStlPid, agent.getId())
+			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+			.eq(FeeCenter::getIsDeleted, 0));
+		if (feeCentersList.isEmpty()) {
+			throw new RuntimeException("未找到费用明细");
+		}
+		List<FeeCenter> feeCentersWK = feeCentersList.stream().filter(e -> "WK".equals(e.getFeeCode())).collect(Collectors.toList());
+		List<FeeCenter> feeCentersSK = feeCentersList.stream().filter(e -> "SFK".equals(e.getFeeCode())).collect(Collectors.toList());
+		if (!feeCentersWK.isEmpty() && !feeCentersSK.isEmpty()) {
+			throw new RuntimeException("首款与尾款不能同时付费");
+		}
 		Integer actId = 1123;
 		String processType = "贸易代理货款付费申请";
 		String checkType = "FFSQ-SK";
@@ -2419,6 +2436,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 					preContainers.setCntrTypeCode(items.getBoxType());
 					preContainers.setNumber(items.getQuantity());
 					preContainers.setQuantity(1);
+					preContainers.setCurCode("USD");
 					preContainers.setGrossWeight(items.getGrossWeight());
 					preContainers.setAmount(items.getAmount());
 					preContainers.setNetWeight(items.getNetWeight());
@@ -2997,6 +3015,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 			.eq(FeeCenter::getIsDeleted, 0)
 			.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 			.eq(FeeCenter::getDc, dc)
+			.apply("find_in_set(fee_code,'SXF,YDF,YFK,WK,SFK')")
 			.eq(FeeCenter::getStlStatus, 0)
 			.eq(FeeCenter::getAuditStatus, 0)
 			.in(FeeCenter::getPid, idList));
@@ -4204,7 +4223,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 						feeCenterService.removeById(feeCenter.getId());
 					}
 				} else {
-					throw new RuntimeException("未找到贸易代理应收【代收款】费用明细");
+//					throw new RuntimeException("未找到贸易代理应收【代收款】费用明细");
+					System.out.println("无差额");
 				}
 			} else {
 				System.out.println("无差额");

+ 8 - 5
blade-service/blade-los/src/main/java/org/springblade/los/trade/service/impl/InOutStorageServiceImpl.java

@@ -672,17 +672,20 @@ public class InOutStorageServiceImpl extends ServiceImpl<InOutStorageMapper, InO
 			inStorage.setUpdateUser(AuthUtil.getUserId());
 			inStorage.setUpdateUserName(AuthUtil.getUserName());
 			baseMapper.updateById(inStorage);
-			FeeCenter feeCenter = feeCenterMapper.selectOne(new LambdaQueryWrapper<FeeCenter>()
+			List<FeeCenter> feeCenter = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
 				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
 				.eq(FeeCenter::getIsDeleted, 0)
 				.eq(FeeCenter::getFeeCode, "CCF")
 				.eq(FeeCenter::getPid, inOutStorage.getPid())
 				.eq(FeeCenter::getSrcItemId, inOutStorage.getId()));
-			if (feeCenter != null) {
-				if (1 == feeCenter.getAccStatus()) {
-					throw new RuntimeException("仓储费已生成账单,撤销失败");
+			if (!feeCenter.isEmpty()) {
+				for (FeeCenter item :feeCenter){
+					if (1 == item.getAccStatus()) {
+						throw new RuntimeException("仓储费已生成账单,撤销失败");
+					}
 				}
-				feeCenterMapper.deleteById(feeCenter.getId());
+				List<Long> ids = feeCenter.stream().map(FeeCenter::getId).collect(Collectors.toList());
+				feeCenterMapper.deleteBatchIds(ids);
 			}
 			inOutStorage.setStorageDays(0);
 			inOutStorage.setStorageFeesAmount(new BigDecimal("0.00"));

+ 1 - 0
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java

@@ -652,6 +652,7 @@ public class PaymentServiceImpl implements IPaymentService {
 							selectOrder.setActualPaymentStatus(2);
 							selectOrder.setPaymentDate(new Date());
 							selectOrder.setOldTrxId(AnalysisMapUtils.getString("trxid", params));
+							selectOrder.setChnltrxid(AnalysisMapUtils.getString("chnltrxid", params));
 							selectOrder.setPaymentAmountTl(selectOrder.getTotalMoney());
 							selectOrder.setStatus(OrderTypeEnum.XSDQR.getType());
 							selectOrder.setXcxStatus(OrderTypeEnum.XSDFH.getType());

+ 99 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.salesPart.order.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,14 +30,18 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.AllArgsConstructor;
 import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+import okhttp3.*;
 import org.springblade.client.entity.Message;
 import org.springblade.client.feign.IMessageClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.pay.tonglianPayment.entity.Parameters;
 import org.springblade.pay.tonglianPayment.entity.WechatMark;
 import org.springblade.pay.tonglianPayment.fegin.IPaymentClient;
+import org.springblade.pay.tonglianPayment.fegin.ITongLianPaymentClient;
 import org.springblade.purchase.sales.entity.IntegralDetail;
 import org.springblade.purchase.sales.feign.IIntegralDetailClient;
 import org.springblade.salesPart.brand.service.IBrandFigureService;
@@ -95,6 +101,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.MathContext;
@@ -172,6 +179,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 
 	private final IShipItemsRecordService shipItemsRecordService;
 
+	private final ITongLianPaymentClient parametersService;
+
 	/**
 	 * 获取销售订单详情
 	 *
@@ -3985,7 +3994,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		} else {
 			pjShip.setStorageId(null);
 		}
-
+		pjShip.setGoodsNames(pjOrder.getGoodsNameJoin());
+		pjShip.setWhetherShippingNotice("1");
 		pjShip.setBusinesDate(new Date());
 		pjShip.setBillno(billNo);
 		pjShip.setOrdNo(pjOrder.getOrdNo());
@@ -4068,6 +4078,94 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				});
 			}
 		}
+		String stata = sysClient.getParamService("WeChat.shipping.notification");
+		if ("1".equals(stata)){
+			Parameters parameters = parametersService.getParametersOne();
+			if (ObjectUtils.isNull(parameters)) {
+				throw new SecurityException("未找到小程序信息");
+			}
+			if (ObjectUtils.isNull(parameters.getAppSecret())) {
+				throw new SecurityException("未找到小程序秘钥");
+			}
+			String appIds = parameters.getSubAppid();
+			String appSecrets = parameters.getAppSecret();
+			OkHttpClient client = new OkHttpClient();
+			//获得token
+			Request request = new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appIds + "&secret=" + appSecrets + "").build();
+			try {
+				Response responseToken = client.newCall(request).execute();
+				System.err.println("获取token返回报文:" + responseToken);
+				//如果请求成功,解析数据
+				if (responseToken.isSuccessful()) {
+					String body = responseToken.body().string();
+					System.err.println("获取token返回body:" + body);
+					//得到一个JSON对象
+					JSONObject object = JSON.parseObject(body);
+					String accessToken = object.getString("access_token");
+//					String accessToken = "85_sLvonvR6FtYMS2mR_f2Qn16zwRk_wcDe2blEC4jRmzHyb2FDBHr9JciAp6DPL5Ww3lR-cPhki2mAiotGkzD0DwbTv2C7OgVUjFHrgivduLoKHdsu7Hi9mApW5O8ONGdADASRK";
+					System.err.println("获取token返回accessToken:" + accessToken);
+					if (ObjectUtils.isNotNull(accessToken)) {
+						SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
+						Map<String, Object> map1 = new HashMap<>();
+						Map<String, Object> mapOrder = new HashMap<>();
+						mapOrder.put("order_number_type", 2);
+						mapOrder.put("mchid", parameters.getMerchantId());
+						mapOrder.put("transaction_id", pjOrder.getChnltrxid());
+						map1.put("order_key", mapOrder);
+						map1.put("delivery_mode", "UNIFIED_DELIVERY");
+						map1.put("logistics_type", "4");
+						List<Map<String, Object>> mapList = new ArrayList<>();
+						Map<String, Object> mapGoods = new HashMap<>();
+						mapGoods.put("item_desc", ObjectUtils.isNull(pjOrder.getGoodsNameJoin()) ? "" : pjOrder.getGoodsNameJoin());
+						mapList.add(mapGoods);
+						map1.put("shipping_list", mapList);
+						map1.put("upload_time", formatter.format(new Date()));
+						R<User> res = userClient.userInfoById(pjOrder.getCreateUser());
+						if (!res.isSuccess()) {
+							throw new RuntimeException("未找到客户联系人对应用户信息");
+						}
+						System.err.println("获取用户openId:" + res.getData().getOpenId());
+						Map<String, String> mapUser = new HashMap<>();
+						mapUser.put("openid", res.getData().getOpenId());
+						map1.put("payer", mapUser);
+
+						System.err.println("请求参数body:" + map1);
+						//发送发货通知
+						Request requestShip = new Request.Builder()
+							.url("https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" + accessToken)
+							.method("post", RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JsonUtil.toJson(map1)))
+							.post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JsonUtil.toJson(map1)))
+							.build();
+						try {
+							Response responsePhone = client.newCall(requestShip).execute();
+							System.err.println("发送发货通知返回内容:" + responsePhone);
+							//如果请求成功,解析数据
+							if (responsePhone.isSuccessful()) {
+								String bodyShip = responsePhone.body().string();
+								//得到一个JSON对象
+								JSONObject objectShip = JSON.parseObject(bodyShip);
+								String status = objectShip.getString("errmsg");
+								if ("ok".equals(status)) {
+									return R.data("操作成功");
+								} else {
+									throw new RuntimeException("发送失败");
+								}
+							} else {
+								throw new RuntimeException("发送失败");
+							}
+						} catch (IOException e) {
+							e.printStackTrace();
+						}
+					} else {
+						throw new RuntimeException("access_token获取失败");
+					}
+				} else {
+					throw new RuntimeException("发送失败");
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
 		// 创建线程池
 		ExecutorService executor = Executors.newSingleThreadExecutor();
 		// 启动任务并提交给线程池

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/payMethod/PayServiceImpl.java

@@ -150,6 +150,7 @@ public class PayServiceImpl implements PayService {
 						order.setActualPaymentStatus(1);
 //						order.setPaymentAmountTl(amount);
 						order.setOldTrxId(res.getData().get("trxid").toString());
+						order.setChnltrxid(res.getData().get("chnltrxid").toString());
 						//更新订单表
 						orderMapper.updateById(order);
 					}

+ 32 - 28
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -4953,43 +4953,46 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		String appSecrets = parameters.getAppSecret();
 		OkHttpClient client = new OkHttpClient();
 		//获得token
-
 		Request request = new Request.Builder().url("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appIds + "&secret=" + appSecrets + "").build();
 		try {
 			Response responseToken = client.newCall(request).execute();
+			System.err.println("获取token返回报文:" + responseToken);
 			//如果请求成功,解析数据
 			if (responseToken.isSuccessful()) {
 				String body = responseToken.body().string();
+				System.err.println("获取token返回body:" + body);
 				//得到一个JSON对象
 				JSONObject object = JSON.parseObject(body);
 				String accessToken = object.getString("access_token");
+//		String accessToken = "85_sLvonvR6FtYMS2mR_f2Qn16zwRk_wcDe2blEC4jRmzHyb2FDBHr9JciAp6DPL5Ww3lR-cPhki2mAiotGkzD0DwbTv2C7OgVUjFHrgivduLoKHdsu7Hi9mApW5O8ONGdADASRK";
+				System.err.println("获取token返回accessToken:" + accessToken);
 				if (ObjectUtils.isNotNull(accessToken)) {
+					PjOrder order = orderMapper.selectById(ship.getOrdId());
+					SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
 					Map<String, Object> map1 = new HashMap<>();
-					map1.put("logistics_type", "4");
+					Map<String, Object> mapOrder = new HashMap<>();
+					mapOrder.put("order_number_type", 2);
+					mapOrder.put("mchid", parameters.getMerchantId());
+					mapOrder.put("transaction_id", order.getChnltrxid());
+					map1.put("order_key", mapOrder);
 					map1.put("delivery_mode", "UNIFIED_DELIVERY");
-					map1.put("is_all_delivered", "");
-					map1.put("upload_time", new Date());
-					PjCorpsAttn attn = corpsAttnService.getOne(new LambdaQueryWrapper<PjCorpsAttn>()
-						.eq(PjCorpsAttn::getTenantId, AuthUtil.getTenantId())
-						.eq(PjCorpsAttn::getIsDeleted, 0)
-						.eq(PjCorpsAttn::getPid, ship.getCustomerId()));
-					if (attn == null || ObjectUtils.isNull(attn.getUserId())) {
-						throw new RuntimeException("未找到客户联系人信息");
-					}
-					R<User> res = userClient.userInfoById(attn.getUserId());
+					map1.put("logistics_type", "4");
+					List<Map<String, Object>> mapList = new ArrayList<>();
+					Map<String, Object> mapGoods = new HashMap<>();
+					mapGoods.put("item_desc", ObjectUtils.isNull(ship.getGoodsNames()) ? "" : ship.getGoodsNames());
+					mapList.add(mapGoods);
+					map1.put("shipping_list", mapList);
+					map1.put("upload_time", formatter.format(new Date()));
+					R<User> res = userClient.userInfoById(order.getCreateUser());
 					if (!res.isSuccess()) {
 						throw new RuntimeException("未找到客户联系人对应用户信息");
 					}
+					System.err.println("获取用户openId:" + res.getData().getOpenId());
 					Map<String, String> mapUser = new HashMap<>();
 					mapUser.put("openid", res.getData().getOpenId());
 					map1.put("payer", mapUser);
-					Map<String, Object> mapGoods = new HashMap<>();
-					mapGoods.put("item_desc", ship.getGoodsNames());
-					map1.put("shipping_list", mapGoods);
-					Map<String, Object> mapOrder = new HashMap<>();
-					mapOrder.put("order_number_type", 1);
-					mapOrder.put("mchid", parameters.getMerchantId());
-					map1.put("order_key", mapOrder);
+
+					System.err.println("请求参数body:" + map1);
 					//发送发货通知
 					Request requestShip = new Request.Builder()
 						.url("https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" + accessToken)
@@ -4998,23 +5001,24 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 						.build();
 					try {
 						Response responsePhone = client.newCall(requestShip).execute();
+						System.err.println("发送发货通知返回内容:" + responsePhone);
 						//如果请求成功,解析数据
 						if (responsePhone.isSuccessful()) {
 							String bodyShip = responsePhone.body().string();
 							//得到一个JSON对象
 							JSONObject objectShip = JSON.parseObject(bodyShip);
-							if (objectShip.getString("errcode").equals("0")) {
-								String status = objectShip.getString("errmsg");
-								if ("ok".equals(status)) {
-									return R.data("操作成功");
-								} else {
-									throw new RuntimeException("发送失败");
-								}
-							} else if (object.getString("errcode").equals("-1")) {
-								throw new RuntimeException("系统繁忙,此时请开发者稍候再试");
+//					if (objectShip.getString("errcode").equals("200")) {
+							String status = objectShip.getString("errmsg");
+							if ("ok".equals(status)) {
+								return R.data("操作成功");
 							} else {
 								throw new RuntimeException("发送失败");
 							}
+					/*} else if (objectShip.getString("errcode").equals("-1")) {
+						throw new RuntimeException("系统繁忙,此时请开发者稍候再试");
+					} else {
+						throw new RuntimeException(objectShip.getString("errmsg"));
+					}*/
 						} else {
 							throw new RuntimeException("发送失败");
 						}