Przeglądaj źródła

国联预付款充值接口优化

liyuan 3 miesięcy temu
rodzic
commit
fac2dc4b86

+ 48 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/cnauto/AppTenant.java

@@ -0,0 +1,48 @@
+package org.springblade.salesPart.cnauto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Rain
+ */
+@Data
+@TableName("cnauto_app_tenant")
+public class AppTenant implements Serializable {
+
+
+	/**
+	 * 主键ID
+	 */
+	private Long id;
+
+	/**
+	 * 国联appId
+	 */
+	private String appId;
+
+	/**
+	 * 租户id
+	 */
+	private String tenantId;
+
+	/**
+	 * 创建人
+	 */
+	private Long createBy;
+
+	/**
+	 * 创建时间
+	 */
+	private Date createDate;
+
+	/**
+	 * 是否删除(1 删除)
+	 */
+	private Short isDelete;
+
+
+}

+ 43 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/cnauto/CnAutoMall.java

@@ -0,0 +1,43 @@
+package org.springblade.salesPart.cnauto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author Rain
+ */
+@Data
+public class CnAutoMall implements Serializable {
+
+
+	/**
+	 * appId
+	 */
+	@NotNull(message = "appId不允许为null")
+	@NotBlank(message = "appId不允许为空")
+	private String appId;
+
+	/**
+	 * 充值金额
+	 */
+	@NotNull(message = "充值金额不允许为null")
+	private BigDecimal amount;
+
+	/**
+	 * 业务时间
+	 */
+	@NotNull(message = "业务时间不允许为null")
+	@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date businessDate;
+
+
+
+}

+ 19 - 18
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/controller/DuoDuoOpenApiController.java

@@ -1,18 +1,25 @@
 package org.springblade.salesPart.duoduo.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.cnauto.AppTenant;
+import org.springblade.salesPart.cnauto.CnAutoMall;
+import org.springblade.salesPart.duoduo.service.IAppTenantService;
 import org.springblade.salesPart.duoduo.util.MallSignUtil;
 import org.springblade.salesPart.funding.entity.PjpfBalanceReset;
 import org.springblade.salesPart.funding.service.IPjpfBalanceResetService;
 import org.springblade.system.entity.Tenant;
 import org.springblade.system.feign.ISysClient;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.math.BigDecimal;
+import java.util.Objects;
 
 
 /**
@@ -24,38 +31,32 @@ import javax.validation.Valid;
 @AllArgsConstructor
 public class DuoDuoOpenApiController {
 
-	private final IPjpfBalanceResetService balanceResetService;
 
-	 private  final ISysClient sysClient;
+
+	 private final IAppTenantService appTenantService;
+
 
 
 
 	@PostMapping("customerRechargeMsg")
-	public R<Boolean> customerRechargeMsg(@RequestHeader("sign") String sign,
+	public R<String> customerRechargeMsg(@RequestHeader("sign") String sign,
 										  @RequestHeader("timestamp") Long timestamp,
-										  @RequestHeader("companyCode") String companyCode,
-										  @RequestBody @Valid PjpfBalanceReset pjpfBalanceReset) {
-		boolean verify = MallSignUtil.verify(sign, timestamp, companyCode);
+										  @RequestHeader("appid") String appId,
+										  @RequestBody @Valid CnAutoMall cnAutoMallVo) {
+		boolean verify = MallSignUtil.verify(sign, timestamp, appId);
 		if (!verify) {
 			return R.fail("签名验证失败");
 		}
-		R<Tenant> tenant = sysClient.getTenant(pjpfBalanceReset.getTenantId());
-		if (!tenant.isSuccess() || ObjectUtil.isEmpty(tenant.getData())) {
-			return R.fail("客户不存在");
-		}
-		pjpfBalanceReset.setDate(DateUtil.now());
-		pjpfBalanceReset.setSysNo("CZ" + DateUtil.format(pjpfBalanceReset.getDate(), DateUtil.PATTERN_DATETIME));
-		boolean saveStatus = balanceResetService.save(pjpfBalanceReset);
-		if (!saveStatus) {
-			return R.fail("接收到款数据失败");
+		if (!Objects.equals(cnAutoMallVo.getAppId(), appId)) {
+			return R.fail("签名appId与参数appId不一致");
 		}
-		return R.success("接收到款数据成功");
+		return appTenantService.customerRechargeMsg(cnAutoMallVo);
 	}
 
 
 	@PostMapping("sign")
-	public R<byte[]> sign(@RequestHeader("timestamp") Long timestamp, @RequestHeader("companyCode") String companyCode) {
-		return R.data(MallSignUtil.sign(timestamp, companyCode));
+	public R<byte[]> sign(@RequestHeader("timestamp") Long timestamp, @RequestHeader("appid") String appId) {
+		return R.data(MallSignUtil.sign(timestamp, appId));
 	}
 
 

+ 129 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/impl/AppTenantServiceImpl.java

@@ -0,0 +1,129 @@
+package org.springblade.salesPart.duoduo.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tenant.annotation.TenantIgnore;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.cnauto.AppTenant;
+import org.springblade.salesPart.cnauto.CnAutoMall;
+import org.springblade.salesPart.duoduo.mapper.AppTenantMapper;
+import org.springblade.salesPart.duoduo.service.IAppTenantService;
+import org.springblade.salesPart.funding.entity.PjpfBalanceReset;
+import org.springblade.salesPart.funding.entity.PjpfFunding;
+import org.springblade.salesPart.funding.entity.PjpfFundingItem;
+import org.springblade.salesPart.funding.mapper.PjpfBalanceResetMapper;
+import org.springblade.salesPart.funding.mapper.PjpfFundingItemMapper;
+import org.springblade.salesPart.funding.mapper.PjpfFundingMapper;
+import org.springblade.salesPart.funding.service.IPjpfBalanceResetService;
+import org.springblade.system.entity.Tenant;
+import org.springblade.system.feign.ISysClient;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author Rain
+ */
+@Service
+@AllArgsConstructor
+public class AppTenantServiceImpl extends ServiceImpl<AppTenantMapper, AppTenant> implements IAppTenantService {
+
+
+	private final PjpfBalanceResetMapper pjpfBalanceResetMapper;
+
+	private final ISysClient sysClient;
+
+	private final AppTenantMapper appTenantMapper;
+
+	private final PjpfFundingMapper pjpfFundingMapper;
+
+	private final PjpfFundingItemMapper pjpfFundingItemMapper;
+
+
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@TenantIgnore
+	public R<String> customerRechargeMsg(CnAutoMall cnAutoMallVo) {
+		AppTenant appTenant = appTenantMapper.selectOne(new LambdaQueryWrapper<AppTenant>()
+			.eq(AppTenant::getAppId, cnAutoMallVo.getAppId()).eq(AppTenant::getIsDelete, 0)
+			.orderByDesc(AppTenant::getCreateDate).last(" limit 1"));
+		if (ObjectUtils.isEmpty(appTenant)) {
+			return R.fail("appId不存在, 请联系相关人员添加");
+		}
+		R<Tenant> tenant = sysClient.getTenant(appTenant.getTenantId());
+		if (!tenant.isSuccess() || ObjectUtil.isEmpty(tenant.getData())) {
+			return R.fail("该客户未在轮胎商城注册,请联系相关人员");
+		}
+		if (BigDecimal.ZERO.compareTo(cnAutoMallVo.getAmount()) >= 0) {
+			return R.fail("充值金额不能小于等于0");
+		}
+		Date nowDate = DateUtil.now();
+		PjpfBalanceReset pjpfBalanceReset = new PjpfBalanceReset();
+		pjpfBalanceReset.setDate(nowDate);
+		pjpfBalanceReset.setSysNo("CZ" + DateUtil.format(pjpfBalanceReset.getDate(), DateUtil.PATTERN_DATETIME));
+		pjpfBalanceReset.setAmount(cnAutoMallVo.getAmount());
+		pjpfBalanceReset.setBusinessDate(cnAutoMallVo.getBusinessDate());
+		pjpfBalanceReset.setTenantId(appTenant.getTenantId());
+		pjpfBalanceReset.setCreateUser(1721359277215502338L);
+		pjpfBalanceReset.setUpdateUser(1721359277215502338L);
+		pjpfBalanceReset.setCreateTime(nowDate);
+		pjpfBalanceReset.setUpdateTime(nowDate);
+		pjpfBalanceReset.setConfirmingPersonDate(nowDate);
+		pjpfBalanceReset.setConfirmingPersonId(1721359277215502338L);
+		pjpfBalanceReset.setConfirmingPersonName("系统自动确认");
+		pjpfBalanceReset.setStatus(1);
+		int insertCount = pjpfBalanceResetMapper.insert(pjpfBalanceReset);
+		if (insertCount <= 0) {
+			return R.fail("充值预付款失败,请联系相关人员");
+		}
+		PjpfFunding funding = pjpfFundingMapper.selectOne(new LambdaQueryWrapper<PjpfFunding>()
+			.eq(PjpfFunding::getTenantId, appTenant.getTenantId()).eq(PjpfFunding::getIsDeleted, 0)
+			.orderByDesc(PjpfFunding::getCreateTime).last(" limit 1"));
+		if (ObjectUtils.isEmpty(funding)) {
+			throw new NullPointerException("该客户没有融资账户,请联系相关人员排查");
+		}
+		PjpfFundingItem fundingItem = new PjpfFundingItem();
+		fundingItem.setPid(funding.getId());
+		fundingItem.setTenantId(appTenant.getTenantId());
+		fundingItem.setCreateTime(new Date());
+		fundingItem.setCreateUser(1721359277215502338L);
+		fundingItem.setCreateUserName("系统充值");
+		fundingItem.setCreateDept(1123598813738675201L);
+		fundingItem.setCreateDeptName("接口充值");
+		fundingItem.setType("充值");
+		fundingItem.setSrcId(pjpfBalanceReset.getId());
+		fundingItem.setSrcNo(pjpfBalanceReset.getSysNo());
+		fundingItem.setAmount(pjpfBalanceReset.getAmount());
+		pjpfFundingItemMapper.insert(fundingItem);
+		if (funding.getBondAmount().compareTo(funding.getPaidAlreadyBondAmount()) > 0) {
+			BigDecimal amountSub = funding.getBondAmount().subtract(funding.getPaidAlreadyBondAmount());
+			if (pjpfBalanceReset.getAmount().compareTo(amountSub) > 0) {
+				BigDecimal amount = pjpfBalanceReset.getAmount().subtract(amountSub);
+				funding.setPaidAlreadyBondAmount(funding.getBondAmount());
+				funding.setAvailableAmount(funding.getAvailableAmount().add(amount));
+			} else if (pjpfBalanceReset.getAmount().compareTo(amountSub) == 0) {
+				funding.setPaidAlreadyBondAmount(funding.getBondAmount());
+			} else if (pjpfBalanceReset.getAmount().compareTo(amountSub) < 0) {
+				BigDecimal amount = amountSub.subtract(pjpfBalanceReset.getAmount());
+				funding.setPaidAlreadyBondAmount(funding.getPaidAlreadyBondAmount().add(amount));
+			}
+		} else {
+			funding.setAvailableAmount(funding.getAvailableAmount().add(pjpfBalanceReset.getAmount()));
+		}
+		funding.setUpdateTime(nowDate);
+		funding.setUpdateUser(1721359277215502338L);
+		funding.setUpdateUserName("系统充值");
+		pjpfFundingMapper.updateById(funding);
+		return R.success("充值成功");
+	}
+
+
+}

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/mapper/AppTenantMapper.java

@@ -0,0 +1,10 @@
+package org.springblade.salesPart.duoduo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.salesPart.cnauto.AppTenant;
+
+/**
+ * @author Rain
+ */
+public interface AppTenantMapper extends BaseMapper<AppTenant> {
+}

+ 17 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/mapper/AppTenantMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.salesPart.duoduo.mapper.AppTenantMapper">
+
+    <resultMap id="appTenantResultMap" type="org.springblade.salesPart.cnauto.AppTenant">
+            <id property="id" column="id"/>
+            <result property="appId" column="app_id"/>
+            <result property="tenantId" column="tenant_id"/>
+            <result property="createBy" column="create_by"/>
+            <result property="createDate" column="create_date"/>
+            <result property="isDelete" column="is_delete"/>
+    </resultMap>
+
+
+</mapper>

+ 21 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/service/IAppTenantService.java

@@ -0,0 +1,21 @@
+package org.springblade.salesPart.duoduo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.cnauto.AppTenant;
+import org.springblade.salesPart.cnauto.CnAutoMall;
+
+
+/**
+ * @author Rain
+ */
+public interface IAppTenantService extends IService<AppTenant> {
+
+	/**
+	 * 充值消息
+	 *
+	 * @param cnAutoMallVo 参数
+	 * @return 结果
+	 */
+	R<String> customerRechargeMsg(CnAutoMall cnAutoMallVo);
+}

+ 4 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/util/MallSignUtil.java

@@ -22,18 +22,18 @@ public class MallSignUtil {
 	private static final RSA RSA_SIGN = new RSA(PRIVATE_KEY, PUBLIC_KEY);
 
 
-	public static boolean verify(String signStr, Long timestamp, String companyCode) {
+	public static boolean verify(String signStr, Long timestamp, String appId) {
 		Sign sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA);
 		sign.setPublicKey(RSA_SIGN.getPublicKey());
-		String data = companyCode + timestamp;
+		String data = appId + "-" + timestamp;
 		byte[] signBytes = Base64.decode(signStr);
 		return sign.verify(data.getBytes(), signBytes);
 	}
 
-	public static byte[] sign(Long timestamp, String companyCode) {
+	public static byte[] sign(Long timestamp, String appId) {
 		Sign sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA);
 		sign.setPrivateKey(RSA_SIGN.getPrivateKey());
-		return sign.sign(companyCode + timestamp);
+		return sign.sign(appId + "-" + timestamp);
 	}