Ver Fonte

2023年9月18日17:35:28

纪新园 há 2 anos atrás
pai
commit
37e1df2b99
14 ficheiros alterados com 387 adições e 118 exclusões
  1. 12 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ParamService.java
  2. 10 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
  3. 5 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
  4. 10 0
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/controller/TongLianPaymentController.java
  5. 78 48
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/PaymentClient.java
  6. 5 1
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/TongLianPaymentClient.java
  7. 2 0
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/IPaymentService.java
  8. 186 0
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java
  9. 27 54
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybPayService.java
  10. 33 15
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/payMethod/PayServiceImpl.java
  11. 3 0
      blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamServiceController.java
  12. 5 0
      blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
  13. 2 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/IParamServiceService.java
  14. 9 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceServiceImpl.java

+ 12 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/ParamService.java

@@ -100,5 +100,17 @@ public class ParamService implements Serializable {
 	@ApiModelProperty(value = "租户id")
 	private String tenantId;
 
+	/**
+	 * 所属公司id
+	 */
+	@ApiModelProperty(value = "所属公司id")
+	private Long salesCompanyId;
+
+	/**
+	 * 所属公司名称
+	 */
+	@ApiModelProperty(value = "所属公司名称")
+	private String salesCompanyName;
+
 
 }

+ 10 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java

@@ -69,6 +69,7 @@ public interface ISysClient {
 	String DEPT_BY_IDS = API_PREFIX + "/selectByDeptIds";
 	String TENANT_ID_BY_APP_ID = API_PREFIX + "/tenantIdByAppId";
 	String GET_PARAM_SERVICE = API_PREFIX + "/getParamService";
+	String GET_PARAM_SERVICE_NEW = API_PREFIX + "/getParamServiceNew";
 	String GET_PARAM_SERVICE_DWT = API_PREFIX + "/getParamServiceDWT";
 	String UPDATE_BY_DEPT = API_PREFIX + "/updateByDept";
 
@@ -325,6 +326,15 @@ public interface ISysClient {
 	@GetMapping(GET_PARAM_SERVICE)
 	String getParamService(@RequestParam("paramKey") String paramKey);
 
+	/**
+	 * 获取业务参数配置
+	 *
+	 * @param paramKey 参数key
+	 * @return String
+	 */
+	@GetMapping(GET_PARAM_SERVICE_NEW)
+	String getParamServiceNew(@RequestParam("paramKey") String paramKey);
+
 
 	/**
 	 * 获取业务参数配置

+ 5 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java

@@ -171,6 +171,11 @@ public class ISysClientFallback implements ISysClient {
 	}
 
 	@Override
+	public String getParamServiceNew(String paramKey) {
+		 return "获取数据失败";
+	}
+
+	@Override
 	public String getParamServiceDWT(String paramKey, String tenantId) {
 		return "获取数据失败";
 	}

+ 10 - 0
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/controller/TongLianPaymentController.java

@@ -100,4 +100,14 @@ public class TongLianPaymentController extends BladeController {
 	}
 
 
+	/**
+	 * 微信订单回调接口 (配件-收银台)
+	 */
+	@ApiIgnore
+	@RequestMapping(value = "/cashierPaymentNotify", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
+	public void cashierPaymentNotify(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response) {
+		paymentService.cashierPaymentNotify(request,response);
+	}
+
+
 }

+ 78 - 48
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/PaymentClient.java

@@ -23,7 +23,7 @@ import org.springblade.pay.tonglianPayment.service.IWechatMarkService;
 import org.springblade.pay.tonglianPayment.utils.AnalysisMapUtils;
 import org.springblade.pay.tonglianPayment.utils.SybPayService;
 import org.springblade.purchase.sales.entity.Order;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -48,6 +48,8 @@ public class PaymentClient implements IPaymentClient {
 	 */
 	private final ICorpsDescClient corpsDescClient;
 
+	private final ISysClient sysClient;
+
 	@Override
 	public R getWeChatPayment(Order order) {
 		return paymentService.getWeChatPayment(order);
@@ -61,45 +63,64 @@ public class PaymentClient implements IPaymentClient {
 		//"https://test.allinpaygd.com/JWeb/NotifyServlet"
 		try {
 			System.out.println("支付函数数据======》" + paymentDTO.toString());
-			Map<String, String> map = service.pay(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getPaytype(),
-				paymentDTO.getBody(), paymentDTO.getRemark(), paymentDTO.getAcct(), paymentDTO.getValidtime(), paymentDTO.getNotify_url(),
-				paymentDTO.getLimit_pay(), paymentDTO.getIdno(), paymentDTO.getTruename(), paymentDTO.getAsinfo(),
-				paymentDTO.getSub_appid(), paymentDTO.getGoods_tag(), paymentDTO.getBenefitdetail(), paymentDTO.getChnlstoreid(),
-				paymentDTO.getSubbranch(), paymentDTO.getExtendparams(), paymentDTO.getCusip(), paymentDTO.getFqnum(), paymentDTO.getCusId(),
-				paymentDTO.getAppId(), paymentDTO.getOrgid(), paymentDTO.getTransactionType(), paymentDTO.getSybMdAppkey(), paymentDTO.getSybRsacusprikey(),
-				paymentDTO.getSybRsatlpubkey(), paymentDTO.getSybSmpprivatekey(), paymentDTO.getSybSmtlpubkey());
-			print(map);
-
-			Map<String, String> mapType = null;
-			if (map != null) {
-				for (Object key : map.keySet()) {
-					if (key.equals("payinfo")) {
-						mapType = JSON.parseObject((String) map.get(key), Map.class);
+			String status = sysClient.getParamServiceNew("cashier.payment");
+			if ("1".equals(status)) {
+				Map<String, String> map = service.pay(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getPaytype(),
+					paymentDTO.getBody(), paymentDTO.getRemark(), paymentDTO.getAcct(), paymentDTO.getValidtime(), paymentDTO.getNotify_url(),
+					paymentDTO.getLimit_pay(), paymentDTO.getIdno(), paymentDTO.getTruename(), paymentDTO.getAsinfo(),
+					paymentDTO.getSub_appid(), paymentDTO.getGoods_tag(), paymentDTO.getBenefitdetail(), paymentDTO.getChnlstoreid(),
+					paymentDTO.getSubbranch(), paymentDTO.getExtendparams(), paymentDTO.getCusip(), paymentDTO.getFqnum(), paymentDTO.getCusId(),
+					paymentDTO.getAppId(), paymentDTO.getOrgid(), paymentDTO.getTransactionType(), paymentDTO.getSybMdAppkey(), paymentDTO.getSybRsacusprikey(),
+					paymentDTO.getSybRsatlpubkey(), paymentDTO.getSybSmpprivatekey(), paymentDTO.getSybSmtlpubkey());
+				print(map);
+				for (Map.Entry<String, String> entry : map.entrySet()) {
+					Object key = entry.getKey();
+					Object value = entry.getValue();
+					resultObj.put(key, value);
+				}
+				Map<Object, Object> map1 = new TreeMap<>(resultObj);
+				return R.data(map1);
+			} else {
+				Map<String, String> map = service.pay(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getPaytype(),
+					paymentDTO.getBody(), paymentDTO.getRemark(), paymentDTO.getAcct(), paymentDTO.getValidtime(), paymentDTO.getNotify_url(),
+					paymentDTO.getLimit_pay(), paymentDTO.getIdno(), paymentDTO.getTruename(), paymentDTO.getAsinfo(),
+					paymentDTO.getSub_appid(), paymentDTO.getGoods_tag(), paymentDTO.getBenefitdetail(), paymentDTO.getChnlstoreid(),
+					paymentDTO.getSubbranch(), paymentDTO.getExtendparams(), paymentDTO.getCusip(), paymentDTO.getFqnum(), paymentDTO.getCusId(),
+					paymentDTO.getAppId(), paymentDTO.getOrgid(), paymentDTO.getTransactionType(), paymentDTO.getSybMdAppkey(), paymentDTO.getSybRsacusprikey(),
+					paymentDTO.getSybRsatlpubkey(), paymentDTO.getSybSmpprivatekey(), paymentDTO.getSybSmtlpubkey());
+				print(map);
+
+				Map<String, String> mapType = null;
+				if (map != null) {
+					for (Object key : map.keySet()) {
+						if (key.equals("payinfo")) {
+							mapType = JSON.parseObject((String) map.get(key), Map.class);
+						}
 					}
 				}
-			}
-			// print(map);
-			if (map == null) {
-				throw new Exception("返回数据错误");
-			}
-			String return_code = AnalysisMapUtils.getString("retcode", map);
-			String return_msg = AnalysisMapUtils.getString("retmsg", map);
-			if (return_code.equalsIgnoreCase("FAIL")) {
-				throw new RuntimeException("支付失败," + return_msg);
-			} else if (return_code.equalsIgnoreCase("SUCCESS")) {
-				// 返回数据
-				// 先生成paySign 参考https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
-				resultObj.put("appId", AnalysisMapUtils.getString("appId", mapType));
-				resultObj.put("timeStamp", AnalysisMapUtils.getString("timeStamp", mapType));
-				resultObj.put("nonceStr", AnalysisMapUtils.getString("nonceStr", mapType));
-				resultObj.put("package", AnalysisMapUtils.getString("package", mapType));
-				resultObj.put("signType", AnalysisMapUtils.getString("signType", mapType));
-				resultObj.put("partnerid", AnalysisMapUtils.getString("cusid", map));
-				resultObj.put("prepayId", AnalysisMapUtils.getString("reqsn", map));
-				String paySign = AnalysisMapUtils.getString("paySign", mapType);
-				resultObj.put("paySign", paySign);
-				resultObj.put("trxid", AnalysisMapUtils.getString("trxid", map));
-				return R.data(resultObj);
+				// print(map);
+				if (map == null) {
+					throw new Exception("返回数据错误");
+				}
+				String return_code = AnalysisMapUtils.getString("retcode", map);
+				String return_msg = AnalysisMapUtils.getString("retmsg", map);
+				if (return_code.equalsIgnoreCase("FAIL")) {
+					throw new RuntimeException("支付失败," + return_msg);
+				} else if (return_code.equalsIgnoreCase("SUCCESS")) {
+					// 返回数据
+					// 先生成paySign 参考https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
+					resultObj.put("appId", AnalysisMapUtils.getString("appId", mapType));
+					resultObj.put("timeStamp", AnalysisMapUtils.getString("timeStamp", mapType));
+					resultObj.put("nonceStr", AnalysisMapUtils.getString("nonceStr", mapType));
+					resultObj.put("package", AnalysisMapUtils.getString("package", mapType));
+					resultObj.put("signType", AnalysisMapUtils.getString("signType", mapType));
+					resultObj.put("partnerid", AnalysisMapUtils.getString("cusid", map));
+					resultObj.put("prepayId", AnalysisMapUtils.getString("reqsn", map));
+					String paySign = AnalysisMapUtils.getString("paySign", mapType);
+					resultObj.put("paySign", paySign);
+					resultObj.put("trxid", AnalysisMapUtils.getString("trxid", map));
+					return R.data(resultObj);
+				}
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -113,8 +134,8 @@ public class PaymentClient implements IPaymentClient {
 		SybPayService service = new SybPayService();
 		Map<String, String> resultObj = new TreeMap();
 		try {
-			resultObj = service.scanPay(paymentDTO.getTrxamt(),paymentDTO.getReqsn(),paymentDTO.getBody(),paymentDTO.getRemark(),
-				paymentDTO.getAuthcode(),paymentDTO.getLimit_pay(),paymentDTO.getIdno(),paymentDTO.getTruename(),paymentDTO.getAsinfo());
+			resultObj = service.scanPay(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getBody(), paymentDTO.getRemark(),
+				paymentDTO.getAuthcode(), paymentDTO.getLimit_pay(), paymentDTO.getIdno(), paymentDTO.getTruename(), paymentDTO.getAsinfo());
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -174,22 +195,22 @@ public class PaymentClient implements IPaymentClient {
 		String corpName = "";
 		String corpAddress = "";
 		if (ObjectUtils.isNotNull(userId)) {
-			CorpsAttn corpsAttn = corpsAttnClient.getUser(userId,tenantId);
+			CorpsAttn corpsAttn = corpsAttnClient.getUser(userId, tenantId);
 			if (ObjectUtils.isNotNull(corpsAttn)) {
 				CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
 				if (ObjectUtils.isNotNull(corpsDesc)) {
-					corpId = corpsDesc.getId()+"";
+					corpId = corpsDesc.getId() + "";
 					corpName = corpsDesc.getCname();
 					if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
-						corpAddress = corpsDesc.getCorpsAddrList().stream().filter(e-> "0".equals(e.getDefaultAddres()))
+						corpAddress = corpsDesc.getCorpsAddrList().stream().filter(e -> "0".equals(e.getDefaultAddres()))
 							.findFirst().orElse(new CorpsAddr()).getDetailedAddress();
 					}
 				}
 			}
 		}
-		map.put("corpId",corpId);
-		map.put("corpName",corpName);
-		map.put("corpAddress",corpAddress);
+		map.put("corpId", corpId);
+		map.put("corpName", corpName);
+		map.put("corpAddress", corpAddress);
 		return R.data(map);
 	}
 
@@ -204,8 +225,8 @@ public class PaymentClient implements IPaymentClient {
 		LambdaQueryWrapper<WechatMark> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(WechatMark::getIsDeleted, 0)
 			.eq(WechatMark::getTenantId, AuthUtil.getTenantId());
-		lambdaQueryWrapper.and(ObjectUtils.isNotNull(srcBillNo) && ObjectUtils.isNotNull(billNo),i -> i.apply( "find_in_set(src_bill_no,'" + srcBillNo + "," + billNo + "')")
-		.or().apply( "find_in_set(bill_no,'" + srcBillNo + "," + billNo + "')"));
+		lambdaQueryWrapper.and(ObjectUtils.isNotNull(srcBillNo) && ObjectUtils.isNotNull(billNo), i -> i.apply("find_in_set(src_bill_no,'" + srcBillNo + "," + billNo + "')")
+			.or().apply("find_in_set(bill_no,'" + srcBillNo + "," + billNo + "')"));
 		lambdaQueryWrapper.orderByDesc(WechatMark::getCreateTime);
 		List<WechatMark> pages = wechatMarkService.list(lambdaQueryWrapper);
 		return R.data(pages);
@@ -220,5 +241,14 @@ public class PaymentClient implements IPaymentClient {
 		}
 	}
 
+	public static void printNew(Map<Object, Object> map) {
+		System.out.println("返回数据如下:");
+		if (map != null) {
+			for (Object key : map.keySet()) {
+				System.out.println(key + ";" + map.get(key));
+			}
+		}
+	}
+
 
 }

+ 5 - 1
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/TongLianPaymentClient.java

@@ -1,6 +1,7 @@
 package org.springblade.pay.tonglianPayment.feign;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
@@ -23,7 +24,10 @@ public class TongLianPaymentClient implements ITongLianPaymentClient {
 	@Override
 	public Parameters getParametersOne() {
 		LambdaQueryWrapper<Parameters> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(Parameters::getIsDeleted, 0).eq(Parameters::getTenantId, AuthUtil.getTenantId()).eq(Parameters::getStatus, "1");
+		lambdaQueryWrapper.eq(Parameters::getIsDeleted, 0)
+			.eq(Parameters::getTenantId, AuthUtil.getTenantId())
+			.eq(ObjectUtils.isNotEmpty(AuthUtil.getDeptId()),Parameters::getSalesCompanyId, Long.parseLong(AuthUtil.getDeptId()))
+			.eq(Parameters::getStatus, "1");
 		return parametersService.getOne(lambdaQueryWrapper);
 	}
 

+ 2 - 0
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/IPaymentService.java

@@ -24,4 +24,6 @@ public interface IPaymentService {
     void callbackNnotifyMethod(HttpServletRequest request, HttpServletResponse response);
 
 	void steamProtectNotify(HttpServletRequest request, HttpServletResponse response);
+
+    void cashierPaymentNotify(HttpServletRequest request, HttpServletResponse response);
 }

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

@@ -351,6 +351,43 @@ public class PaymentServiceImpl implements IPaymentService {
 		}
 	}
 
+	@Override
+	public void cashierPaymentNotify(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			//通知传输的编码为GBK
+			request.setCharacterEncoding("UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		response.setCharacterEncoding("UTF-8");
+		TreeMap<String, String> params = NotifyServlet.getParams(request);
+
+		String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
+		// 创建线程池
+		ExecutorService executor = Executors.newSingleThreadExecutor();
+		// 启动任务并提交给线程池
+		executor.submit(() -> {
+			try {
+				cashierPayment(request, response);
+			} catch (Exception e) {
+				System.out.println("支付成功,业务处理异常,时间:" + new Date());
+				System.out.println(e.getMessage());
+				// 关闭线程池
+				executor.shutdown();
+			} finally {
+				// 关闭线程池
+				executor.shutdown();
+			}
+		});
+		// 关闭线程池
+		executor.shutdown();
+		if (Objects.equals(trxstatus, "0000")) {
+			returnMethod(response, AnalysisMapUtils.setXML("SUCCESS", "OK"));
+		} else {
+			returnMethod(response, AnalysisMapUtils.setXML("error", "OK"));
+		}
+	}
+
 	private void logicMethodQB(HttpServletRequest request, HttpServletResponse response) {
 		try {
 			//通知传输的编码为GBK
@@ -516,6 +553,155 @@ public class PaymentServiceImpl implements IPaymentService {
 		}
 	}
 
+	private void cashierPayment(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			//通知传输的编码为GBK
+			request.setCharacterEncoding("UTF-8");
+			response.setCharacterEncoding("UTF-8");
+			TreeMap<String, String> params = NotifyServlet.getParams(request);
+			String appKey;
+			System.out.println("交易返回数据:" + params);
+			WechatMark wechatMark = new WechatMark();
+
+			Parameters parameters = new Parameters();
+			parameters.setAppId(AnalysisMapUtils.getString("appid", params));
+			parameters.setCusId(AnalysisMapUtils.getString("cusid", params));
+			Parameters parametersDetails = tongLianPaymentClient.getParametersDetails(parameters);
+			if (ObjectUtils.isNull(parametersDetails)) {
+				wechatMark.setRemark("未找到租户,异常支付");
+			}
+
+			if ("RSA".equals(params.get("signtype"))) {
+				appKey = parametersDetails.getSybRsacusprikey();
+			} else if ("SM2".equals(params.get("signtype"))) {
+				appKey = parametersDetails.getSybSmtlpubkey();
+			} else {
+				appKey = parametersDetails.getSybMdAppkey();
+			}
+			// 接受到推送通知,首先验签
+			boolean isSign = SybUtil.validSign(params, appKey, params.get("signtype"));
+
+			wechatMark.setCreateTime(new Date());
+			wechatMark.setType("支付");
+			if (isSign) {
+				String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
+				if (Objects.equals(trxstatus, "0000")) {
+					wechatMark.setSrcBillNo(AnalysisMapUtils.getString("cusorderid", params));
+					wechatMark.setSerialNumber(AnalysisMapUtils.getString("trxid", params));
+					wechatMark.setAmount(new BigDecimal(Objects.requireNonNull(AnalysisMapUtils.getString("trxamt", params))).divide(new BigDecimal(100), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP));
+
+					//支付成功业务处理
+					PjOrder order = new PjOrder();
+					order.setSrcOrdNo(AnalysisMapUtils.getString("cusorderid", params));
+
+					if (ObjectUtils.isNotNull(parametersDetails)) {
+						wechatMark.setTenantId(parametersDetails.getTenantId());
+						order.setTenantId(parametersDetails.getTenantId());
+					} else {
+						wechatMark.setTenantId("000000");
+						order.setTenantId("000000");
+						wechatMark.setRemark("未找到租户,异常支付");
+					}
+
+					R<List<PjOrder>> re = ipjOrderClient.getByOrder(order);
+					if (re.isSuccess() && ObjectUtils.isNotNull(re.getData())) {
+						for (PjOrder selectOrder : re.getData()) {
+							selectOrder.setActualPaymentStatus(2);
+							selectOrder.setOldTrxId(AnalysisMapUtils.getString("trxid", params));
+							selectOrder.setPaymentAmountTl(selectOrder.getTotalMoney());
+							selectOrder.setStatus(OrderTypeEnum.XSDQR.getType());
+							selectOrder.setXcxStatus(OrderTypeEnum.XSDFH.getType());
+							wechatMark.setBillNo(selectOrder.getOrdNo());
+							wechatMark.setSalesCompanyId(selectOrder.getSalesCompanyId());
+							wechatMark.setSalesCompanyName(selectOrder.getSalesCompanyName());
+							ipjOrderClient.updateBySrcOrgId(selectOrder.getId() + "");
+							LocalDateTime now = LocalDateTime.now();
+							DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+							String formatted = now.format(formatter);
+							//给角色为财务的人发送消息
+							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服");
+							if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+								R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), parametersDetails.getTenantId(), selectOrder.getSalesCompanyId());
+								if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+									for (User datum : userList.getData()) {
+										//循环发送消息
+										Message sendMessage = new Message();
+										sendMessage.setParameter(selectOrder.getId() + "");
+										sendMessage.setUserName("外部用户");
+										sendMessage.setUserId(null);
+										sendMessage.setToUserId(datum.getId());
+										sendMessage.setToUserName(datum.getName());
+										sendMessage.setMessageType(1);
+										sendMessage.setTenantId(parametersDetails.getTenantId());
+										sendMessage.setCreateUser(null);
+										sendMessage.setCreateTime(new Date());
+										sendMessage.setUrl("/tirePartsMall/salesManagement/saleOrder/index");
+										sendMessage.setPageLabel("销售订单");
+										sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+										sendMessage.setMessageBody("您有新的外部销售订单请及时处理!单号:" + selectOrder.getOrdNo() + "时间:" + formatted);
+										R save = messageClient.save(sendMessage);
+										System.out.println("发送结果:" + save);
+										if (!save.isSuccess()) {
+											throw new SecurityException("发送消息失败");
+										}
+									}
+								}
+							}
+							if (ObjectUtils.isNotNull(selectOrder.getSalerId())) {
+								Message sendMessage = new Message();
+								sendMessage.setParameter(selectOrder.getId() + "");
+								sendMessage.setUserName("外部用户");
+								sendMessage.setUserId(null);
+								sendMessage.setToUserId(selectOrder.getSalerId());
+								sendMessage.setToUserName(selectOrder.getSalerName());
+								sendMessage.setMessageType(1);
+								sendMessage.setTenantId(parametersDetails.getTenantId());
+								sendMessage.setCreateUser(null);
+								sendMessage.setCreateTime(new Date());
+								sendMessage.setUrl("/tirePartsMall/salesManagement/saleOrder/index");
+								sendMessage.setPageLabel("销售订单");
+								sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+								sendMessage.setMessageBody("您有新的外部销售订单请及时处理!单号:" + selectOrder.getOrdNo() + "时间:" + formatted);
+								R save = messageClient.save(sendMessage);
+								System.out.println("发送结果:" + save);
+								if (!save.isSuccess()) {
+									throw new SecurityException("发送消息失败");
+								}
+							}
+
+						}
+						ipjOrderClient.updateOrder(re.getData());
+						wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付成功");
+						wechatMark.setStatus(1);
+					} else {
+						wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到单据信息,账单结算失败!");
+						wechatMark.setStatus(2);
+					}
+					if (re.isSuccess() && ObjectUtils.isNotNull(re.getData())) {
+						for (PjOrder selectOrder : re.getData()) {
+							wechatMark.setBillNo(selectOrder.getOrdNo());
+							wechatMarkService.save(wechatMark);
+						}
+					} else {
+						wechatMarkService.save(wechatMark);
+					}
+				} else {
+					//订单编号
+					wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付失败!" + "原因:" + AnalysisMapUtils.getString("errmsg", params));
+					wechatMark.setStatus(2);
+					wechatMarkService.save(wechatMark);
+				}
+			} else {
+				wechatMark.setCause("签名验证失败");
+				wechatMark.setStatus(2);
+				wechatMarkService.save(wechatMark);
+				throw new RuntimeException("签名验证失败");
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 	/**
 	 * 微信订单回调接口 (配件-新)
 	 *

+ 27 - 54
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybPayService.java

@@ -2,10 +2,10 @@ package org.springblade.pay.tonglianPayment.utils;
 
 import org.springblade.pay.tonglianPayment.dto.PaymentDTO;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
 
-
 public class SybPayService {
 
 	/**
@@ -52,8 +52,9 @@ public class SybPayService {
 		/*}*/
 		HttpConnectionUtil http = new HttpConnectionUtil(url + "/pay");
 		http.init();
-		if (!SybUtil.isEmpty(orgid))
+		if (!SybUtil.isEmpty(orgid)) {
 			params.put("orgid", orgid);
+		}
 		params.put("version", "11");
 		params.put("trxamt", String.valueOf(trxamt));
 		params.put("reqsn", reqsn);
@@ -90,17 +91,19 @@ public class SybPayService {
 		} else {*/
 		params.put("signtype", transactionType);
 		String appkey = "";
-		if (transactionType.equals("RSA"))
+		if (transactionType.equals("RSA")) {
 			//appkey = SybConstants.SYB_RSACUSPRIKEY;
 			appkey = sybRsacusprikey;
-		else if (transactionType.equals("SM2"))
+		} else if (transactionType.equals("SM2")) {
 			//appkey = SybConstants.SYB_SM2PPRIVATEKEY;
 			appkey = sybSmpprivatekey;
-		else
+		} else {
 			//appkey = SybConstants.SYB_MD5_APPKEY;
 			appkey = sybMdAppkey;
+		}
 		params.put("sign", SybUtil.unionSign(params, appkey, transactionType));
 //		}
+
 		System.out.println("请求数据===" + params);
 		byte[] bys = http.postParams(params, true);
 		System.out.println("第二步===" + bys);
@@ -109,23 +112,17 @@ public class SybPayService {
 		Map<String, String> map = handleResult(result, transactionType, sybRsacusprikey, sybSmpprivatekey, sybMdAppkey);
 		System.out.println("第四步===" + map);
 		return map;
-
 	}
 
 	public Map<String, String> cancel(long trxamt, String reqsn, String oldtrxid, String oldreqsn) throws Exception {
 		TreeMap<String, String> params = new TreeMap<String, String>();
-		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID))
+		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID)) {
 			params.put("orgid", SybConstants.SYB_ORGID);
+		}
 		String url = "";
-		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
-			params.put("cusid", SybConstants.SYB_CUSID_TEST);
-			params.put("appid", SybConstants.SYB_APPID_TEST);
-			url = SybConstants.SYB_APIURL_TEST;
-		} else {*/
 		params.put("cusid", SybConstants.SYB_CUSID);
 		params.put("appid", SybConstants.SYB_APPID);
 		url = SybConstants.SYB_APIURL;
-//		}
 		HttpConnectionUtil http = new HttpConnectionUtil(url + "/cancel");
 		http.init();
 		params.put("version", "11");
@@ -134,25 +131,15 @@ public class SybPayService {
 		params.put("oldtrxid", oldtrxid);
 		params.put("oldreqsn", oldreqsn);
 		params.put("randomstr", SybUtil.getValidatecode(8));
-		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
-			params.put("signtype", SybConstants.SIGN_TYPE_TEST);
-			String appkey = "";
-			if (SybConstants.SIGN_TYPE_TEST.equals("RSA"))
-				appkey = SybConstants.SYB_RSACUSPRIKEY_TEST;
-			else if (SybConstants.SIGN_TYPE_TEST.equals("SM2"))
-				appkey = SybConstants.SYB_SM2PPRIVATEKEY_TEST;
-			else
-				appkey = SybConstants.SYB_MD5_APPKEY_TEST;
-			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE_TEST));
-		} else {*/
 		params.put("signtype", SybConstants.SIGN_TYPE);
 		String appkey = "";
-		if (SybConstants.SIGN_TYPE.equals("RSA"))
+		if (SybConstants.SIGN_TYPE.equals("RSA")) {
 			appkey = SybConstants.SYB_RSACUSPRIKEY;
-		else if (SybConstants.SIGN_TYPE.equals("SM2"))
+		}else if (SybConstants.SIGN_TYPE.equals("SM2")) {
 			appkey = SybConstants.SYB_SM2PPRIVATEKEY;
-		else
+		}else {
 			appkey = SybConstants.SYB_MD5_APPKEY;
+		}
 		params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE));
 //		}
 		byte[] bys = http.postParams(params, true);
@@ -164,8 +151,9 @@ public class SybPayService {
 	public Map<String, String> refund(long trxamt, String reqsn, String oldtrxid, String oldreqsn, String cusId, String appId, String orgid, String transactionType, String sybMdAppkey,
 									  String sybRsacusprikey, String sybRsatlpubkey, String sybSmpprivatekey, String sybSmtlpubkey) throws Exception {
 		TreeMap<String, String> params = new TreeMap<String, String>();
-		if (!SybUtil.isEmpty(orgid))
+		if (!SybUtil.isEmpty(orgid)) {
 			params.put("orgid", orgid);
+		}
 		String url = "";
 		params.put("cusid", cusId);
 		params.put("appid", appId);
@@ -188,45 +176,29 @@ public class SybPayService {
 
 	public Map<String, String> query(String reqsn, String trxid) throws Exception {
 		TreeMap<String, String> params = new TreeMap<String, String>();
-		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID))
+		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID)) {
 			params.put("orgid", SybConstants.SYB_ORGID);
+		}
 		String url = "";
-		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
-			params.put("cusid", SybConstants.SYB_CUSID_TEST);
-			params.put("appid", SybConstants.SYB_APPID_TEST);
-			url = SybConstants.SYB_APIURL_TEST;
-		} else {*/
 		params.put("cusid", SybConstants.SYB_CUSID);
 		params.put("appid", SybConstants.SYB_APPID);
 		url = SybConstants.SYB_APIURL;
-//		}
 		HttpConnectionUtil http = new HttpConnectionUtil(url + "/query");
 		http.init();
 		params.put("version", "11");
 		params.put("reqsn", reqsn);
 		params.put("trxid", trxid);
 		params.put("randomstr", SybUtil.getValidatecode(8));
-		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
-			params.put("signtype", SybConstants.SIGN_TYPE_TEST);
-			String appkey = "";
-			if (SybConstants.SIGN_TYPE_TEST.equals("RSA"))
-				appkey = SybConstants.SYB_RSACUSPRIKEY_TEST;
-			else if (SybConstants.SIGN_TYPE_TEST.equals("SM2"))
-				appkey = SybConstants.SYB_SM2PPRIVATEKEY_TEST;
-			else
-				appkey = SybConstants.SYB_MD5_APPKEY_TEST;
-			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE_TEST));
-		} else {*/
 		params.put("signtype", SybConstants.SIGN_TYPE);
 		String appkey = "";
-		if (SybConstants.SIGN_TYPE.equals("RSA"))
+		if (SybConstants.SIGN_TYPE.equals("RSA")) {
 			appkey = SybConstants.SYB_RSACUSPRIKEY;
-		else if (SybConstants.SIGN_TYPE.equals("SM2"))
+		}else if (SybConstants.SIGN_TYPE.equals("SM2")) {
 			appkey = SybConstants.SYB_SM2PPRIVATEKEY;
-		else
+		}else {
 			appkey = SybConstants.SYB_MD5_APPKEY;
+		}
 		params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE));
-//		}
 		byte[] bys = http.postParams(params, true);
 		String result = new String(bys, "UTF-8");
 		Map<String, String> map = handleResult(result, SybConstants.SIGN_TYPE, SybConstants.SYB_RSACUSPRIKEY, SybConstants.SYB_SM2PPRIVATEKEY, SybConstants.SYB_MD5_APPKEY);
@@ -245,12 +217,13 @@ public class SybPayService {
 			TreeMap tmap = new TreeMap();
 			tmap.putAll(map);
 			String appkey = "";
-			if (transactionType.equals("RSA"))
+			if (transactionType.equals("RSA")) {
 				appkey = sybRsacusprikey;
-			else if (transactionType.equals("SM2"))
+			}else if (transactionType.equals("SM2")) {
 				appkey = sybSmpprivatekey;
-			else
+			}else {
 				appkey = sybMdAppkey;
+			}
 			if (SybUtil.validSign(tmap, appkey, transactionType)) {
 				System.out.println("签名成功");
 				return map;
@@ -303,7 +276,7 @@ public class SybPayService {
 		return map;
 	}
 
-	public Map<String, String> scanNew (PaymentDTO paymentDTO) throws Exception {
+	public Map<String, String> scanNew(PaymentDTO paymentDTO) throws Exception {
 
 		TreeMap<String, String> params = new TreeMap<String, String>();
 		if (!SybUtil.isEmpty(paymentDTO.getOrgid())) {

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

@@ -28,6 +28,7 @@ import org.springblade.pay.tonglianPayment.fegin.ITongLianPaymentClient;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.order.mapper.OrderMapper;
 import org.springblade.salesPart.order.service.IOrderService;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
@@ -54,6 +55,8 @@ public class PayServiceImpl implements PayService {
 
 	private final OrderMapper orderMapper;
 
+	private final ISysClient sysClient;
+
 	/**
 	 * 获取用户信息
 	 */
@@ -80,6 +83,9 @@ public class PayServiceImpl implements PayService {
 			throw new RuntimeException("未找到用户信息");
 		}
 		try {
+
+			String count = sysClient.getParamServiceNew("cashier.payment");
+
 			PaymentDTO paymentDTO = new PaymentDTO();
 			paymentDTO.setTrxamt(amount.multiply(new BigDecimal(100)).intValue());
 			paymentDTO.setReqsn(serialNumber);
@@ -88,7 +94,11 @@ public class PayServiceImpl implements PayService {
 			paymentDTO.setRemark("");
 			paymentDTO.setAcct(r.getData().getOpenId());
 			paymentDTO.setValidtime(parameters.getValidtime());
-			paymentDTO.setNotify_url(parameters.getNotifyUrl() + "/api/blade-pay/tongLianPayment/callbackNotify");
+			if ("1".equals(count)) {
+				paymentDTO.setNotify_url(parameters.getNotifyUrl() + "/api/blade-pay/tongLianPayment/cashierPaymentNotify");
+			}else {
+				paymentDTO.setNotify_url(parameters.getNotifyUrl() + "/api/blade-pay/tongLianPayment/callbackNotify");
+			}
 			paymentDTO.setLimit_pay("");
 			paymentDTO.setIdno("");
 			paymentDTO.setTruename("");
@@ -131,21 +141,29 @@ public class PayServiceImpl implements PayService {
 			}
 			return R.success("");*/
 			R<Map<Object, Object>> res = paymentClient.payPrepay(paymentDTO);
-			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-				for (String orderId : id.split(",")) {
-					PjOrder order = new PjOrder();
-					// 付款
-					order.setId(Long.parseLong(orderId));
-					order.setActualPaymentStatus(1);
-					order.setPaymentAmountTl(amount);
-					order.setOldTrxId(res.getData().get("trxid").toString());
-					//更新订单表
-					orderMapper.updateById(order);
+			if ("1".equals(count)) {
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					return R.data(res.getData());
+				} else {
+					throw new RuntimeException("下单失败");
+				}
+			}else{
+				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+					for (String orderId : id.split(",")) {
+						PjOrder order = new PjOrder();
+						// 付款
+						order.setId(Long.parseLong(orderId));
+						order.setActualPaymentStatus(1);
+						order.setPaymentAmountTl(amount);
+						order.setOldTrxId(res.getData().get("trxid").toString());
+						//更新订单表
+						orderMapper.updateById(order);
+					}
+					res.getData().put("id", id);
+					return R.data(res.getData());
+				} else {
+					throw new RuntimeException("下单失败");
 				}
-				res.getData().put("id", id);
-				return R.data(res.getData());
-			} else {
-				throw new RuntimeException("下单失败");
 			}
 		} catch (Exception e) {
 			e.printStackTrace();

+ 3 - 0
blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamServiceController.java

@@ -27,6 +27,8 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+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.Func;
 import org.springblade.system.entity.ParamService;
@@ -57,6 +59,7 @@ public class ParamServiceController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入paramService")
 	public R<ParamService> detail(ParamService paramService) {
+		paramService.setSalesCompanyId(Long.parseLong(SecureUtil.getDeptId()));
 		ParamService detail = paramServiceService.getOne(Condition.getQueryWrapper(paramService));
 		return R.data(detail);
 	}

+ 5 - 0
blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java

@@ -213,6 +213,11 @@ public class SysClient implements ISysClient {
 	}
 
 	@Override
+	public String getParamServiceNew(String paramKey) {
+		return paramServiceService.getValueNew(paramKey);
+	}
+
+	@Override
 	public String getParamServiceDWT(String paramKey, String tenantId) {
 		ParamService paramService = paramServiceService.getOne(new LambdaQueryWrapper<ParamService>()
 			.eq(ParamService::getParamKey, paramKey)

+ 2 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/IParamServiceService.java

@@ -40,4 +40,6 @@ public interface IParamServiceService extends IService<ParamService> {
 	IPage<ParamServiceVO> selectParamServicePage(IPage<ParamServiceVO> page, ParamServiceVO paramService);
 
 	String getValue(String paramKey);
+
+	String getValueNew(String paramKey);
 }

+ 9 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/ParamServiceServiceImpl.java

@@ -48,4 +48,13 @@ public class ParamServiceServiceImpl extends ServiceImpl<ParamServiceMapper, Par
 		return param.getParamValue();
 	}
 
+	@Override
+	public String getValueNew(String paramKey) {
+		ParamService param = this.getOne(Wrappers.<ParamService>query().lambda().eq(ParamService::getParamKey, paramKey)
+			.eq(ParamService::getTenantId, AuthUtil.getTenantId())
+			.eq(ParamService::getSalesCompanyId, AuthUtil.getDeptId())
+		);
+		return param.getParamValue();
+	}
+
 }