Bladeren bron

老师提现

liweifan 3 jaren geleden
bovenliggende
commit
fd7956ae2f
30 gewijzigde bestanden met toevoegingen van 528 en 825 verwijderingen
  1. 0 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  2. 5 12
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ContractTemplateController.java
  3. 1 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ContractTemplateDao.java
  4. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysUserContractRecordDao.java
  5. 0 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOpenContractRecordDao.java
  6. 0 102
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOpenContractRecord.java
  7. 3 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ContractTypeEnum.java
  8. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  9. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OpenContractEnum.java
  10. 0 79
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/WithdrawalProperties.java
  11. 143 26
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java
  12. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ContractTemplateService.java
  13. 0 47
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LingXinService.java
  14. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserContractRecordService.java
  15. 1 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  16. 139 139
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractTemplateServiceImpl.java
  17. 0 236
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LingXinServiceImpl.java
  18. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserContractRecordServiceImpl.java
  19. 2 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  20. 17 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  21. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java
  22. 8 7
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ContractTemplateMapper.xml
  23. 11 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserContractRecordMapper.xml
  24. 6 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  25. 1 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysUserContractRecordController.java
  26. 94 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java
  27. 0 28
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherSysUserContractRecordController.java
  28. 5 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java
  29. 0 96
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java
  30. 2 2
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/Payment.java

+ 0 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -75,7 +75,6 @@ public class TokenController extends BaseController {
     public SysUser queryUserInfo() {
 		AuthUser authUser = SecurityUtils.getUser();
 		if(authUser != null){
-			SysUser sysUser = userService.get(authUser.getUserId());
 			return userService.get(authUser.getUserId());
 		}
 		return null;

+ 5 - 12
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ContractTemplateController.java

@@ -1,18 +1,16 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -53,13 +51,8 @@ public class ContractTemplateController extends BaseController {
 	@ApiOperation("查询最新启用的协议模板")
 	@GetMapping(value = "/queryLatestContractTemplate")
 	@PreAuthorize("@pcs.hasPermissions('contractTemplate/queryLatestContractTemplate')")
-	public HttpResponseResult<ContractTemplate> queryLatestContractTemplate() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-
-		if (sysUser == null || sysUser.getId() == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return succeed(contractTemplateService.queryLatestContractTemplate(null, null));
+	public HttpResponseResult<ContractTemplate> queryLatestContractTemplate(@ApiParam(value = "业务类型 REGISTER 注册 COURSES 课程购买 PRODUCT 产品 WITHDRAW 提现", required = true) @RequestParam("contractType") ContractTypeEnum contractType) {
+		return succeed(contractTemplateService.queryLatestContractTemplate(contractType));
 	}
 
 	@ApiOperation("新增")

+ 1 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ContractTemplateDao.java

@@ -13,13 +13,7 @@ public interface ContractTemplateDao extends BaseDAO<Integer, ContractTemplate>
 
 	List<ContractTemplateDto> queryPageList(Map<String, Object> params);
 	
-	/**
-	 * 获取最新协议模板
-	 * @param owner
-	 * @param type
-	 * @return
-	 */
-	ContractTemplate queryLatestContractTemplate(@Param("owner") String owner, @Param("type") String type);
+	ContractTemplate queryLatestContractTemplate( @Param("type") String type);
 	
 	int disableContract(@Param("owner") String owner, @Param("type") String type);
 	

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysUserContractRecordDao.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -16,5 +17,6 @@ public interface SysUserContractRecordDao extends BaseMapper<SysUserContractReco
 
     int insertBatch(@Param("entities") List<SysUserContractRecord> entities);
 
+    Boolean checkContractSign(@Param("userId")Long userId,@Param("contractType") String contractType);
 }
 

+ 0 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOpenContractRecordDao.java

@@ -1,9 +0,0 @@
-package com.yonge.cooleshow.biz.dal.dao;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.yonge.cooleshow.biz.dal.entity.UserOpenContractRecord;
-
-
-public interface UserOpenContractRecordDao extends BaseMapper<UserOpenContractRecord>{
-
-}

+ 0 - 102
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOpenContractRecord.java

@@ -1,102 +0,0 @@
-package com.yonge.cooleshow.biz.dal.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-
-/**
- * 用户签署三方协议记录表
- */
-@TableName("user_open_contract_record")
-@ApiModel(value = "UserOpenContractRecord对象", description = "用户签署三方协议记录表")
-public class UserOpenContractRecord implements Serializable {
-	private static final long serialVersionUID = 1L;
-    @ApiModelProperty("主键 ")
-    @TableId(value = "id_", type = IdType.AUTO)
-    private Long id;
-    @ApiModelProperty("用户id ")
-	@TableField(value = "user_id_")
-    private Long userId;
-    @ApiModelProperty("业务类型 lingxinpay 灵薪付 ")
-	@TableField(value = "biz_type_")
-    private String bizType;
-    @ApiModelProperty("协议地址 ")
-	@TableField(value = "url_")
-    private String url;
-    @ApiModelProperty("合同编号 ")
-	@TableField(value = "contract_no_")
-    private String contractNo;
-    @ApiModelProperty("备注 ")
-	@TableField(value = "remark_")
-    private String remark;
-    @ApiModelProperty("创建时间 ")
-	@TableField(value = "created_time_")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date createdTime;
-
-	public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-    
-	public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-    
-	public String getBizType() {
-        return bizType;
-    }
-
-    public void setBizType(String bizType) {
-        this.bizType = bizType;
-    }
-    
-	public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-    
-	public String getContractNo() {
-        return contractNo;
-    }
-
-    public void setContractNo(String contractNo) {
-        this.contractNo = contractNo;
-    }
-    
-	public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-    
-	public Date getCreatedTime() {
-        return createdTime;
-    }
-
-    public void setCreatedTime(Date createdTime) {
-        this.createdTime = createdTime;
-    }
-    
-}

+ 3 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ContractTypeEnum.java

@@ -10,7 +10,8 @@ public enum ContractTypeEnum implements BaseEnum<String, ContractTypeEnum> {
 
     REGISTER("REGISTER","注册"),
     COURSES("COURSES","课程购买"),
-    PRODUCT("PRODUCT","产品")
+    PRODUCT("PRODUCT","产品"),
+    WITHDRAW("WITHDRAW","用户提现")
     ;
 
     @EnumValue
@@ -18,7 +19,7 @@ public enum ContractTypeEnum implements BaseEnum<String, ContractTypeEnum> {
 
     private String desc;
 
-    private ContractTypeEnum(String code,String desc) {
+    ContractTypeEnum(String code,String desc) {
         this.code = code;
         this.desc = desc;
     }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -80,6 +80,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_STYLE_VIDEO_SUCCESS("TEACHER_STYLE_VIDEO_SUCCESS","个人风采审核通过"),
     TEACHER_STYLE_VIDEO_FAIL("TEACHER_STYLE_VIDEO_FAIL","个人风采审核失败"),
 
+    TEACHER_WITHDRAW_SUCCESS("TEACHER_WITHDRAW_SUCCESS","老师提现成功"),
+
     //------短信模板------
     SMS_BUY_LIVE("SMS_BUY_LIVE","直播课购买成功"),
     SMS_LIVE_COMPLETION_SUCCESS("SMS_LIVE_COMPLETION_SUCCESS","直播课成课"),

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OpenContractEnum.java

@@ -0,0 +1,32 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum OpenContractEnum implements BaseEnum<String, OpenContractEnum> {
+
+    lingxinpay("灵薪付")
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    OpenContractEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+}

+ 0 - 79
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/WithdrawalProperties.java

@@ -1,79 +0,0 @@
-package com.yonge.cooleshow.biz.dal.props;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties(prefix = "withdrawal")
-public class WithdrawalProperties {
-    //提现服务提供方 lingxinpay 灵薪付
-    private String openType;
-    //第三方url
-    private String apiUrl;
-    //商户号
-    private String memberNo;
-    //第三方公钥
-    private String publicKey;
-    //第三方私钥
-    private String privateKey;
-    //MD5加密的key
-    private String md5Key;
-    //回调地址
-    private String notifyUrl;
-
-    public String getOpenType() {
-        return openType;
-    }
-
-    public void setOpenType(String openType) {
-        this.openType = openType;
-    }
-
-    public String getApiUrl() {
-        return apiUrl;
-    }
-
-    public void setApiUrl(String apiUrl) {
-        this.apiUrl = apiUrl;
-    }
-
-    public String getMemberNo() {
-        return memberNo;
-    }
-
-    public void setMemberNo(String memberNo) {
-        this.memberNo = memberNo;
-    }
-
-    public String getPublicKey() {
-        return publicKey;
-    }
-
-    public void setPublicKey(String publicKey) {
-        this.publicKey = publicKey;
-    }
-
-    public String getPrivateKey() {
-        return privateKey;
-    }
-
-    public void setPrivateKey(String privateKey) {
-        this.privateKey = privateKey;
-    }
-
-    public String getMd5Key() {
-        return md5Key;
-    }
-
-    public void setMd5Key(String md5Key) {
-        this.md5Key = md5Key;
-    }
-
-    public String getNotifyUrl() {
-        return notifyUrl;
-    }
-
-    public void setNotifyUrl(String notifyUrl) {
-        this.notifyUrl = notifyUrl;
-    }
-}

+ 143 - 26
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java

@@ -1,7 +1,8 @@
 package com.yonge.cooleshow.biz.dal.sdk;
 
 import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.biz.dal.props.WithdrawalProperties;
+import com.alibaba.fastjson.JSONPath;
+import com.yonge.toolset.base.exception.ThirdpartyException;
 import com.yonge.toolset.thirdparty.lingxinpay.Md5EncryptUtils;
 import com.yonge.toolset.thirdparty.lingxinpay.RSA;
 import com.yonge.toolset.utils.date.DateUtil;
@@ -9,7 +10,7 @@ import com.yonge.toolset.utils.http.HttpUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
@@ -25,8 +26,119 @@ import java.util.Map;
 public class WithdrawSdk {
     private static final Logger logger = LoggerFactory.getLogger(WithdrawSdk.class);
 
-    @Autowired
-    private WithdrawalProperties withdrawalProperties;
+    // 商户号
+    @Value("${withdraw.memberNo}")
+    private String memberNo;
+    // 模板协议号
+    @Value("${withdraw.contractNo}")
+    private String contractNo;
+    @Value("${withdraw.md5Key}")
+    private String md5Key;
+    @Value("${withdraw.publicKey}")
+    private String publicKey;
+    //签署协议回调地址
+    @Value("${withdraw.contractNotifyUrl}")
+    private String contractNotifyUrl;
+    //签署协议url
+    @Value("${withdraw.contractApiUrl}")
+    private String contractApiUrl;
+    //提现回调地址
+    @Value("${withdraw.notifyUrl}")
+    private String notifyUrl;
+    //提现第三方url
+    @Value("${withdraw.apiUrl}")
+    private String apiUrl;
+
+    /**
+     * 签署协议
+     *
+     * @param realName 真实姓名
+     * @param idcard   身份证号
+     * @param mobileNo 手机号
+     * @param serialNo 唯一标识
+     * @return
+     */
+    public boolean signContract(String realName, String idcard, String mobileNo, String serialNo) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("signType", "RSA");
+        jsonObject.put("service", "bpotop.zx.contract");
+        jsonObject.put("charset", "UTF-8");
+        jsonObject.put("version", "1.0");
+        jsonObject.put("createTime", DateUtil.format(new Date(), DateUtil.DEFAULT_PATTERN));
+
+        jsonObject.put("outMemberNo", memberNo);// 公司商户号
+        jsonObject.put("serialNo", serialNo);// 流水号(商户唯一标识)
+        jsonObject.put("contractNo", contractNo);// 合同模板号
+        jsonObject.put("notifyUrl", contractNotifyUrl);// 返回结果异步通知地址
+
+        JSONObject jsonObject2 = new JSONObject();
+        jsonObject2.put("name", realName);
+        jsonObject2.put("phone", mobileNo);
+        jsonObject2.put("identityId", idcard);
+        jsonObject2.put("citizenship", "0");
+        jsonObject2.put("signTime", DateUtil.format(new Date(), DateUtil.DEFAULT_PATTERN));
+        jsonObject.put("contractSignInfo", jsonObject2);
+        String jsonStr = JSONObject.toJSONString(jsonObject);
+
+        try {
+            String encryptStr = RSA.encryptPub(jsonStr, publicKey);
+            jsonObject.put("sign", encryptStr);
+        } catch (Exception e) {
+            logger.error("加密失败", e);
+            throw new ThirdpartyException("加密失败:{}", e.getMessage());
+        }
+        logger.info("[合同签署]请求参数:{}", jsonObject.toJSONString());
+        try {
+            String s = HttpUtil.postForHttp(contractApiUrl + "/api/signContract", jsonObject.toJSONString(), null);
+            logger.info("请求[合同签署]响应参数:{}", s);
+
+            jsonObject = JSONObject.parseObject(s);
+            if (StringUtils.equals(jsonObject.getString("return_code"), "T")) {
+                return true;
+            }
+            throw new ThirdpartyException("合同签署失败:{}", jsonObject.getString("content"));
+        } catch (IOException e) {
+            logger.error("请求[合同签署]接口报错", e);
+            throw new ThirdpartyException("请求[合同签署]接口报错:{}", e.getMessage());
+        }
+    }
+
+    /**
+     * 查询协议
+     *
+     * @param serialNo 唯一标识
+     * @return
+     */
+    public String querySignContractResult(String serialNo) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("outMemberNo", memberNo);
+        jsonObject.put("serialNo", serialNo);
+        jsonObject.put("contractNo", contractNo);
+        try {
+            String encryptStr = RSA.encryptPub(JSONObject.toJSONString(jsonObject), publicKey);
+            jsonObject.put("sign", encryptStr);
+        } catch (Exception e) {
+            logger.error("加密失败", e);
+            throw new ThirdpartyException("加密失败:{}", e.getMessage());
+        }
+        jsonObject.put("signType", "RSA");
+        jsonObject.put("service", "bpotop.zx.contract");
+        jsonObject.put("charset", "UTF-8");
+        jsonObject.put("version", "1.0");
+        jsonObject.put("createTime", DateUtil.format(new Date(), DateUtil.DEFAULT_PATTERN));
+        try {
+            String s = HttpUtil.postForHttp(contractApiUrl + "/api/queryContractInfo", jsonObject.toJSONString(), null);
+            logger.info("[合同查询]响应参数:{}", s);
+
+            jsonObject = JSONObject.parseObject(s);
+            if (StringUtils.equals(jsonObject.getString("return_code"), "T")) {
+                return (String) JSONPath.eval(jsonObject, "$.content.contractUrl");
+            }
+        } catch (IOException e) {
+            logger.error("请求[合同查询]接口报错", e);
+        }
+        return null;
+    }
 
     /**
      * 单笔提现
@@ -43,40 +155,33 @@ public class WithdrawSdk {
     public String withdraw(String outerOrderNo, String name, String mobile, String certificateNo, Integer predictAmount,
                            String payAccount, String remark) {
         Map<String, Object> map = new HashMap<>();
-        map.put("outMemberNo", withdrawalProperties.getMemberNo());
+        map.put("outMemberNo", memberNo);
         map.put("outerOrderNo", outerOrderNo);
         map.put("name", name);
         map.put("certificateNo", certificateNo);
         map.put("predictAmount", predictAmount);
-        String signs = Md5EncryptUtils.sign(map, withdrawalProperties.getMd5Key());
+        String signs = Md5EncryptUtils.sign(map, md5Key);
 
         map.put("charset", "UTF-8");
         map.put("mobile", mobile);
         map.put("version", "1.1");
         map.put("service", "bpotop.zx.pay.order");
         map.put("Md5Key", signs);
-        map.put("notifyUrl", withdrawalProperties.getNotifyUrl());
-        //卡类型 DC 借记卡
+        map.put("notifyUrl", notifyUrl);
         map.put("cardType", "DC");
-        //输入发放类型(0:工资,1:奖金,2:绩效,3:劳务,4:个人经营所得,5:其他)
-        map.put("salaryType", 4);
-        map.put("projectName", name + DateUtil.format(new Date(), DateUtil.DEFAULT_PATTERN) + "提现");
-        //支付类型(1:银行卡,2:支付宝,4:微信) 以实际业务为准
-        map.put("payType", 1);
-        //卡属性:(C:对私)
+        map.put("salaryType", "4");
+        map.put("projectName", name + "-" + DateUtil.getStrDate());
+        map.put("payType", "1");
         map.put("cardAttribute", "C");
         map.put("payAccount", payAccount);
-        if (StringUtils.isNotBlank(remark)) {
-            map.put("remark", remark);
-        }
         String jsonStr = JSONObject.toJSONString(map);
 
         //签名
         JSONObject mapParam = new JSONObject();
         try {
             //使用公钥加密
-            String encryptStr = RSA.encryptPub(jsonStr, withdrawalProperties.getPublicKey());
-            mapParam.put("outMemberNo", withdrawalProperties.getMemberNo());
+            String encryptStr = RSA.encryptPub(jsonStr, publicKey);
+            mapParam.put("outMemberNo", memberNo);
             mapParam.put("signType", "RSA");
             mapParam.put("sign", encryptStr);
             logger.info("单笔请求请求参数:{}", JSONObject.toJSONString(mapParam));
@@ -86,7 +191,7 @@ public class WithdrawSdk {
 
         //发送
         try {
-            String resultJsonStr = HttpUtil.postForHttp(withdrawalProperties.getApiUrl() + "/bpotop_trade/single", JSONObject.toJSONString(mapParam), null);
+            String resultJsonStr = HttpUtil.postForHttp(apiUrl + "/bpotop_trade/single", JSONObject.toJSONString(mapParam), null);
             logger.info("单笔请求返回参数:{}", resultJsonStr);
             return resultJsonStr;
         } catch (IOException e) {
@@ -101,23 +206,35 @@ public class WithdrawSdk {
      * @param outerOrderNo 商户唯一订单号
      * @throws Exception
      */
-    public void query(String outerOrderNo) throws Exception {
+    public String query(String outerOrderNo) {
         Map<String, Object> requestMap = new HashMap<>();
-        requestMap.put("outMemberNo", withdrawalProperties.getMemberNo());
+        requestMap.put("outMemberNo", memberNo);
         requestMap.put("outerOrderNo", outerOrderNo);
         requestMap.put("service", "bpotop.zx.pay.order");
         requestMap.put("version", "1.0");
         requestMap.put("signType", "RSA");
         requestMap.put("charset", "UTF-8");
         String jsonStr = JSONObject.toJSONString(requestMap);
-        String encryptStr = RSA.encryptPub(jsonStr, withdrawalProperties.getPublicKey());
+        String encryptStr = null;
+        try {
+            encryptStr = RSA.encryptPub(jsonStr, publicKey);
+        } catch (Exception e) {
+            throw new ThirdpartyException("加密失败:{}", e.getMessage());
+        }
 
         Map<String, Object> requestMap2 = new HashMap<>();
-        requestMap2.put("outMemberNo", withdrawalProperties.getMemberNo());
+        requestMap2.put("outMemberNo", memberNo);
         requestMap2.put("sign", encryptStr);
         logger.info("单笔查询请求参数:{}", JSONObject.toJSONString(requestMap2));
-        String resultJsonStr = HttpUtil.postForHttp(withdrawalProperties.getApiUrl() + "/bpotop_trade/order_query", JSONObject.toJSONString(requestMap2), null);
-        logger.info("单笔查询响应参数:{}", resultJsonStr);
+        String resultJsonStr = null;
+        try {
+            resultJsonStr = HttpUtil.postForHttp(apiUrl + "/bpotop_trade/order_query", JSONObject.toJSONString(requestMap2), null);
+            logger.info("单笔查询响应参数:{}", resultJsonStr);
+            return resultJsonStr;
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
     }
 
 }

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ContractTemplateService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.yonge.cooleshow.biz.dal.dto.ContractTemplateDto;
 import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.mybatis.service.BaseService;
@@ -31,11 +32,10 @@ public interface ContractTemplateService extends BaseService<Integer, ContractTe
 	
 	/**
 	 * 查询最新协议模板
-	 * @param owner
-	 * @param type
+	 * @param contractType
 	 * @return
 	 */
-	ContractTemplate queryLatestContractTemplate(String owner, String type);
+	ContractTemplate queryLatestContractTemplate(ContractTypeEnum contractType);
 	
 	boolean createContractTemplate(ContractTemplate contractTemplate);
 	

+ 0 - 47
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LingXinService.java

@@ -1,47 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service;
-
-/**
- * @author: cy
- * @date: 2022/5/18 14:52
- */
-public interface LingXinService {
-    /**
-     * 签署协议
-     *
-     * @param realName 真实姓名
-     * @param idcard   身份证号
-     * @param mobileNo 手机号
-     * @param serialNo 唯一标识
-     * @return
-     */
-    boolean signContract(String realName, String idcard, String mobileNo, String serialNo);
-
-    /**
-     * 查询协议
-     *
-     * @param serialNo 唯一标识
-     * @return
-     */
-    String querySignContractResult(String serialNo);
-
-    /**
-     * 单笔提现
-     *
-     * @param outerOrderNo  唯一单号
-     * @param name          收款方姓名
-     * @param mobile        收款方电话
-     * @param certificateNo 收款方身份证号
-     * @param predictAmount 应发金额(单位为:分,范围: 1~10000000000)
-     * @param payAccount    收款方银行卡号
-     * @return
-     */
-    String withdraw(String outerOrderNo, String name, String mobile, String certificateNo, Integer predictAmount, String payAccount);
-
-    /**
-     * 查询接口
-     *
-     * @param outerOrderNo 商户唯一订单号
-     * @throws Exception
-     */
-    String query(String outerOrderNo);
-}

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserContractRecordService.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.SysUserContractRecordDao;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * 用户协议记录表-一个用户一种协议一个版本一条记录(SysUserContractRecord)表服务接口
@@ -13,5 +15,13 @@ import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
 public interface SysUserContractRecordService extends IService<SysUserContractRecord> {
 
     SysUserContractRecordDao getDao();
+
+    /**
+     * 查询用户是否签署协议
+     * @param userId
+     * @param contractType
+     * @return
+     */
+    HttpResponseResult<Boolean> checkContractSign(Long userId, ContractTypeEnum contractType);
 }
 

+ 1 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java

@@ -2,14 +2,11 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
-import com.yonge.cooleshow.biz.dal.dto.req.UserSetReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
@@ -128,4 +125,5 @@ public interface TeacherService extends IService<Teacher> {
      * @return
      */
     IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId);
+
 }

+ 139 - 139
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractTemplateServiceImpl.java

@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -27,150 +28,149 @@ import com.yonge.toolset.utils.collection.MapUtil;
 @Service
 public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, ContractTemplate> implements ContractTemplateService {
 
-	@Autowired
-	private ContractTemplateDao contractTemplateDao;
+    @Autowired
+    private ContractTemplateDao contractTemplateDao;
 
-	@Autowired
-	private RedissonClient redissonClient;
+    @Autowired
+    private RedissonClient redissonClient;
 
-	private final static String LOCK_NAME = "contract_template";
+    private final static String LOCK_NAME = "contract_template";
 
-	@Override
-	public BaseDAO<Integer, ContractTemplate> getDAO() {
-		return contractTemplateDao;
-	}
+    @Override
+    public BaseDAO<Integer, ContractTemplate> getDAO() {
+        return contractTemplateDao;
+    }
+
+    @Override
+    public PageInfo<ContractTemplateDto> queryPageList(QueryInfo queryInfo) {
+        PageInfo<ContractTemplateDto> pageInfo = new PageInfo<ContractTemplateDto>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<ContractTemplateDto> dataList = null;
+        int count = this.findCount(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = contractTemplateDao.queryPageList(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<ContractTemplateDto>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 
-	@Override
-	public PageInfo<ContractTemplateDto> queryPageList(QueryInfo queryInfo) {
-		PageInfo<ContractTemplateDto> pageInfo = new PageInfo<ContractTemplateDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
+    @Override
+    @Transactional
+    public boolean enableContract(Integer id, Long userId) {
+        ContractTemplate contractTemplate = contractTemplateDao.get(id);
+
+        if (contractTemplate == null) {
+            throw new BizException("未查询到协议模板");
+        }
+
+        if (contractTemplate.getStatus()) {
+            return true;
+        }
+
+        RLock lock = redissonClient.getLock(LOCK_NAME);
+
+        try {
+            if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
+
+                Integer maxVersion = contractTemplateDao.queryMaxVersion();
+                int version = maxVersion == null ? 1 : maxVersion + 1;
+
+                contractTemplate.setVersion(version);
+
+                contractTemplateDao.disableContract(contractTemplate.getOwner(), contractTemplate.getType());
+
+                Date date = new Date();
+
+                contractTemplate.setStatus(true);
+                contractTemplate.setUpdateTime(date);
+                contractTemplate.setModifyBy(userId);
+
+                contractTemplateDao.update(contractTemplate);
+
+                return true;
+            }
+        } catch (InterruptedException e) {
+            throw new BizException("锁获取失败:{}", e.getMessage());
+        } finally {
+            lock.unlock();
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean updateContractVersion() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public ContractTemplate queryLatestContractTemplate(ContractTypeEnum contractType) {
+        ContractTemplate ContractTemplate = contractTemplateDao.queryLatestContractTemplate(contractType.getCode());
+        return ContractTemplate;
+    }
+
+    @Override
+    @Transactional
+    public boolean createContractTemplate(ContractTemplate ContractTemplate) {
+
+        RLock lock = redissonClient.getLock(LOCK_NAME);
+
+        try {
+            if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
+
+                Integer maxVersion = contractTemplateDao.queryMaxVersion();
+                int version = maxVersion == null ? 1 : maxVersion + 1;
+
+                ContractTemplate.setVersion(version);
+                Date date = new Date();
+                ContractTemplate.setCreateTime(date);
+                ContractTemplate.setUpdateTime(date);
+                insert(ContractTemplate);
+
+                return true;
+            }
+        } catch (InterruptedException e) {
+            throw new BizException("锁获取失败:{}", e.getMessage());
+        } finally {
+            lock.unlock();
+        }
+
+        return false;
+    }
+
+    @Override
+    @Transactional
+    public boolean updateContractTempalte(ContractTemplate ContractTemplate) {
+
+        RLock lock = redissonClient.getLock(LOCK_NAME);
+
+        try {
+            if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
+                Integer maxVersion = contractTemplateDao.queryMaxVersion();
+                int version = maxVersion == null ? 1 : maxVersion + 1;
+
+                ContractTemplate.setVersion(version);
+                Date date = new Date();
+                ContractTemplate.setUpdateTime(date);
 
-		List<ContractTemplateDto> dataList = null;
-		int count = this.findCount(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = contractTemplateDao.queryPageList(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<ContractTemplateDto>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
+                update(ContractTemplate);
+                return true;
+            }
+        } catch (InterruptedException e) {
+            throw new BizException("锁获取失败:{}", e.getMessage());
+        } finally {
+            lock.unlock();
+        }
 
-	@Override
-	@Transactional
-	public boolean enableContract(Integer id, Long userId) {
-		ContractTemplate contractTemplate = contractTemplateDao.get(id);
-
-		if (contractTemplate == null) {
-			throw new BizException("未查询到协议模板");
-		}
-
-		if (contractTemplate.getStatus()) {
-			return true;
-		}
-
-		RLock lock = redissonClient.getLock(LOCK_NAME);
-
-		try {
-			if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
-
-				Integer maxVersion = contractTemplateDao.queryMaxVersion();
-				int version = maxVersion == null ? 1 : maxVersion + 1;
-
-				contractTemplate.setVersion(version);
-
-				contractTemplateDao.disableContract(contractTemplate.getOwner(), contractTemplate.getType());
-
-				Date date = new Date();
-
-				contractTemplate.setStatus(true);
-				contractTemplate.setUpdateTime(date);
-				contractTemplate.setModifyBy(userId);
-
-				contractTemplateDao.update(contractTemplate);
-
-				return true;
-			}
-		} catch (InterruptedException e) {
-			throw new BizException("锁获取失败:{}", e.getMessage());
-		} finally {
-			lock.unlock();
-		}
-
-		return false;
-	}
-
-	@Override
-	public boolean updateContractVersion() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public ContractTemplate queryLatestContractTemplate(String owner, String type) {
-		ContractTemplate ContractTemplate = contractTemplateDao.queryLatestContractTemplate(owner, type);
-
-		return ContractTemplate;
-	}
-
-	@Override
-	@Transactional
-	public boolean createContractTemplate(ContractTemplate ContractTemplate) {
-
-		RLock lock = redissonClient.getLock(LOCK_NAME);
-
-		try {
-			if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
-
-				Integer maxVersion = contractTemplateDao.queryMaxVersion();
-				int version = maxVersion == null ? 1 : maxVersion + 1;
-
-				ContractTemplate.setVersion(version);
-				Date date = new Date();
-				ContractTemplate.setCreateTime(date);
-				ContractTemplate.setUpdateTime(date);
-				insert(ContractTemplate);
-
-				return true;
-			}
-		} catch (InterruptedException e) {
-			throw new BizException("锁获取失败:{}", e.getMessage());
-		} finally {
-			lock.unlock();
-		}
-
-		return false;
-	}
-
-	@Override
-	@Transactional
-	public boolean updateContractTempalte(ContractTemplate ContractTemplate) {
-
-		RLock lock = redissonClient.getLock(LOCK_NAME);
-
-		try {
-			if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
-				Integer maxVersion = contractTemplateDao.queryMaxVersion();
-				int version = maxVersion == null ? 1 : maxVersion + 1;
-
-				ContractTemplate.setVersion(version);
-				Date date = new Date();
-				ContractTemplate.setUpdateTime(date);
-
-				update(ContractTemplate);
-				return true;
-			}
-		} catch (InterruptedException e) {
-			throw new BizException("锁获取失败:{}", e.getMessage());
-		} finally {
-			lock.unlock();
-		}
-
-		return false;
-	}
+        return false;
+    }
 
 }

+ 0 - 236
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LingXinServiceImpl.java

@@ -1,236 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.JSONPath;
-import com.yonge.cooleshow.biz.dal.service.LingXinService;
-import com.yonge.toolset.base.exception.ThirdpartyException;
-import com.yonge.toolset.thirdparty.lingxinpay.Md5EncryptUtils;
-import com.yonge.toolset.thirdparty.lingxinpay.RSA;
-import com.yonge.toolset.utils.date.DateUtil;
-import com.yonge.toolset.utils.http.HttpUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author: cy
- * @date: 2022/5/18 14:54
- */
-@Service("lingXinService")
-public class LingXinServiceImpl implements LingXinService {
-    private static final Logger logger = LoggerFactory.getLogger(LingXinServiceImpl.class);
-
-    @Value("${withdraw.publicKey}")
-    private String publicKey;
-    @Value("${withdraw.md5Key}")
-    private String md5Key;
-    @Value("${withdraw.memberNo}")
-    private String memberNo;// 商户号
-    @Value("${withdraw.contractNo}")
-    private String contractNo;// 模板协议号
-    @Value("${withdraw.contractNotifyUrl}")
-    private String contractNotifyUrl;//签署协议回调地址
-    @Value("${withdraw.contractApiUrl}")
-    private String contractApiUrl;//签署协议url
-    @Value("${withdraw.notifyUrl}")
-    private String notifyUrl;//提现回调地址
-    @Value("${withdraw.apiUrl}")
-    private String apiUrl;//提现第三方url
-
-    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
-    /**
-     * 签署协议
-     *
-     * @param realName 真实姓名
-     * @param idcard   身份证号
-     * @param mobileNo 手机号
-     * @param serialNo 唯一标识
-     * @return
-     */
-    public boolean signContract(String realName, String idcard, String mobileNo, String serialNo) {
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("signType", "RSA");
-        jsonObject.put("service", "bpotop.zx.contract");
-        jsonObject.put("charset", "UTF-8");
-        jsonObject.put("version", "1.0");
-        jsonObject.put("createTime", sdf.format(new Date()));
-
-        jsonObject.put("outMemberNo", memberNo);// 公司商户号
-        jsonObject.put("serialNo", serialNo);// 流水号(商户唯一标识)
-        jsonObject.put("contractNo", contractNo);// 合同模板号
-        jsonObject.put("notifyUrl", contractNotifyUrl);// 返回结果异步通知地址
-
-        JSONObject jsonObject2 = new JSONObject();
-        jsonObject2.put("name", realName);
-        jsonObject2.put("phone", mobileNo);
-        jsonObject2.put("identityId", idcard);
-        jsonObject2.put("citizenship", "0");
-        jsonObject2.put("signTime", sdf.format(new Date()));
-        jsonObject.put("contractSignInfo", jsonObject2);
-        String jsonStr = JSONObject.toJSONString(jsonObject);
-
-        try {
-            String encryptStr = RSA.encryptPub(jsonStr, publicKey);
-            jsonObject.put("sign", encryptStr);
-        } catch (Exception e) {
-            logger.error("加密失败", e);
-            throw new ThirdpartyException("加密失败:{}", e.getMessage());
-        }
-        logger.info("[合同签署]请求参数:{}", jsonObject.toJSONString());
-        try {
-            String s = HttpUtil.postForHttp(contractApiUrl + "/api/signContract", jsonObject.toJSONString(), null);
-            logger.info("请求[合同签署]响应参数:{}", s);
-
-            jsonObject = JSONObject.parseObject(s);
-            if (StringUtils.equals(jsonObject.getString("return_code"), "T")) {
-                return true;
-            }
-            throw new ThirdpartyException("合同签署失败:{}", jsonObject.getString("content"));
-        } catch (IOException e) {
-            logger.error("请求[合同签署]接口报错", e);
-            throw new ThirdpartyException("请求[合同签署]接口报错:{}", e.getMessage());
-        }
-    }
-
-    /**
-     * 查询协议
-     *
-     * @param serialNo 唯一标识
-     * @return
-     */
-    public String querySignContractResult(String serialNo) {
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("outMemberNo", memberNo);
-        jsonObject.put("serialNo", serialNo);
-        jsonObject.put("contractNo", contractNo);
-        try {
-            String encryptStr = RSA.encryptPub(JSONObject.toJSONString(jsonObject), publicKey);
-            jsonObject.put("sign", encryptStr);
-        } catch (Exception e) {
-            logger.error("加密失败", e);
-            throw new ThirdpartyException("加密失败:{}", e.getMessage());
-        }
-        jsonObject.put("signType", "RSA");
-        jsonObject.put("service", "bpotop.zx.contract");
-        jsonObject.put("charset", "UTF-8");
-        jsonObject.put("version", "1.0");
-        jsonObject.put("createTime", sdf.format(new Date()));
-        try {
-            String s = HttpUtil.postForHttp(contractApiUrl + "/api/queryContractInfo", jsonObject.toJSONString(), null);
-            logger.info("[合同查询]响应参数:{}", s);
-
-            jsonObject = JSONObject.parseObject(s);
-            if (StringUtils.equals(jsonObject.getString("return_code"), "T")) {
-                return (String) JSONPath.eval(jsonObject, "$.content.contractUrl");
-            }
-        } catch (IOException e) {
-            logger.error("请求[合同查询]接口报错", e);
-        }
-        return null;
-    }
-
-    /**
-     * 单笔提现
-     *
-     * @param outerOrderNo  商户唯一订单号
-     * @param name          收款方姓名(银行预留姓名等)
-     * @param mobile        收款方电话
-     * @param certificateNo 收款方身份证号
-     * @param predictAmount 应发金额(单位为:分,范围: 1~10000000000)
-     * @param payAccount    收款方账号(银行卡号/支付宝账号 /open_id)以实际业务为准
-     * @return
-     */
-    public String withdraw(String outerOrderNo, String name, String mobile, String certificateNo, Integer predictAmount,
-                           String payAccount) {
-        Map<String, Object> map = new HashMap<>();
-        map.put("outMemberNo", memberNo);
-        map.put("outerOrderNo", outerOrderNo);
-        map.put("name", name);
-        map.put("certificateNo", certificateNo);
-        map.put("predictAmount", predictAmount);
-        String signs = Md5EncryptUtils.sign(map, md5Key);
-
-        map.put("charset", "UTF-8");
-        map.put("mobile", mobile);
-        map.put("version", "1.1");
-        map.put("service", "bpotop.zx.pay.order");
-        map.put("Md5Key", signs);
-        map.put("notifyUrl", notifyUrl);
-        map.put("cardType", "DC");
-        map.put("salaryType", "4");
-        map.put("projectName", name + "-" + DateUtil.getStrDate());
-        map.put("payType", "1");
-        map.put("cardAttribute", "C");
-        map.put("payAccount", payAccount);
-        String jsonStr = JSONObject.toJSONString(map);
-
-        //签名
-        JSONObject mapParam = new JSONObject();
-        try {
-            //使用公钥加密
-            String encryptStr = RSA.encryptPub(jsonStr, publicKey);
-            mapParam.put("outMemberNo", memberNo);
-            mapParam.put("signType", "RSA");
-            mapParam.put("sign", encryptStr);
-            logger.info("单笔请求请求参数:{}", JSONObject.toJSONString(mapParam));
-        } catch (Exception e) {
-            logger.info("加密失败:{}", e);
-        }
-
-        //发送
-        try {
-            String resultJsonStr = HttpUtil.postForHttp(apiUrl + "/bpotop_trade/single", JSONObject.toJSONString(mapParam), null);
-            logger.info("单笔请求返回参数:{}", resultJsonStr);
-            return resultJsonStr;
-        } catch (IOException e) {
-            logger.info("发送失败:{}", e);
-        }
-        return null;
-    }
-
-    /**
-     * 查询接口
-     *
-     * @param outerOrderNo 商户唯一订单号
-     * @throws Exception
-     */
-    public String query(String outerOrderNo) {
-        Map<String, Object> requestMap = new HashMap<>();
-        requestMap.put("outMemberNo", memberNo);
-        requestMap.put("outerOrderNo", outerOrderNo);
-        requestMap.put("service", "bpotop.zx.pay.order");
-        requestMap.put("version", "1.0");
-        requestMap.put("signType", "RSA");
-        requestMap.put("charset", "UTF-8");
-        String jsonStr = JSONObject.toJSONString(requestMap);
-        String encryptStr = null;
-        try {
-            encryptStr = RSA.encryptPub(jsonStr, publicKey);
-        } catch (Exception e) {
-            throw new ThirdpartyException("加密失败:{}", e.getMessage());
-        }
-
-        Map<String, Object> requestMap2 = new HashMap<>();
-        requestMap2.put("outMemberNo", memberNo);
-        requestMap2.put("sign", encryptStr);
-        logger.info("单笔查询请求参数:{}", JSONObject.toJSONString(requestMap2));
-        String resultJsonStr = null;
-        try {
-            resultJsonStr = HttpUtil.postForHttp(apiUrl + "/bpotop_trade/order_query", JSONObject.toJSONString(requestMap2), null);
-            logger.info("单笔查询响应参数:{}", resultJsonStr);
-            return resultJsonStr;
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-}

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserContractRecordServiceImpl.java

@@ -3,8 +3,10 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.SysUserContractRecordDao;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.ContractTemplateService;
 import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -30,10 +32,15 @@ public class SysUserContractRecordServiceImpl extends ServiceImpl<SysUserContrac
         return this.baseMapper;
     }
 
+    @Override
+    public HttpResponseResult<Boolean> checkContractSign(Long userId, ContractTypeEnum contractType) {
+        return HttpResponseResult.succeed(getDao().checkContractSign(userId, contractType.getCode()));
+    }
+
     /**
      * 校验当前用户签署的协议是否是最新版本
      */
-    public void checkContractRecord(Long userId,String type) {
+    public void checkContractRecord(Long userId, String type) {
         //根据人员id及协议类型查询最新协议记录
         //查询对应类型的最新的协议
         //对比当前类型及人员id的协议版本

+ 2 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
@@ -14,10 +15,6 @@ import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
-import com.yonge.cooleshow.biz.dal.enums.TeacherTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
@@ -380,4 +377,5 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         List<MyFens> teacherVos = baseMapper.queryMyFans(page, teacherId);
         return page.setRecords(teacherVos);
     }
+
 }

+ 17 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java

@@ -3,13 +3,10 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
 import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
 import com.yonge.cooleshow.biz.dal.enums.*;
-import com.yonge.cooleshow.biz.dal.props.WithdrawalProperties;
 import com.yonge.cooleshow.biz.dal.sdk.WithdrawSdk;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.UserBankCardDao;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
@@ -23,15 +20,12 @@ import com.yonge.cooleshow.biz.dal.vo.res.WithdrawalInfoRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
-import com.yonge.toolset.utils.easyexcel.ErrMsg;
-import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
-import com.yonge.toolset.utils.easyexcel.ExcelException;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.string.StringUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.UserWithdrawal;
 import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
@@ -39,11 +33,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserWithdrawalDao;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.DigestUtils;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.*;
 
 
@@ -58,9 +49,9 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     @Autowired
     private SysConfigService sysConfigService;
     @Autowired
-    private WithdrawalProperties withdrawalProperties;
-    @Autowired
     private WithdrawSdk withdrawSdk;
+    @Autowired
+    private SysMessageService sysMessageService;
 
     @Override
     public UserWithdrawalVo detail(Long id) {
@@ -191,6 +182,18 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         updateById(detail);
     }
 
+    private void successSend(Long userId, String phone) {
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, phone);
+        try {
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_WITHDRAW_SUCCESS.getCode());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE,
+                    receivers, null, 0, url, ClientEnum.STUDENT.getCode());
+        } catch (Exception e) {
+            log.error("会员到期3天极光消息推送异常,userId={}", userId);
+        }
+    }
+
    /* @Override
     @Transactional(rollbackFor = Exception.class)
     public void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId) {
@@ -296,7 +299,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         userWithdrawal.setAmount(withdrawalReq.getAmountWithdrawal());
         userWithdrawal.setPlantformFee(withdrawalServiceFee);
         userWithdrawal.setBankCardId(bankCardVo.getId());
-        userWithdrawal.setOpenType(withdrawalProperties.getOpenType());
+        userWithdrawal.setOpenType(OpenContractEnum.lingxinpay.getCode());
         userWithdrawal.setStatus(TradeStatusEnum.pending);
         userWithdrawal.setCreateTime(new Date());
         userWithdrawal.setUpdateTime(new Date());

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -18,6 +18,15 @@ public class UserOrderDetailVo extends UserOrderDetail {
     @ApiModelProperty("订单id ")
     private Long orderId;
 
+    @ApiModelProperty("头像 ")
+    private String avatar;
+
+    @ApiModelProperty("用户名 ")
+    private String username;
+
+    @ApiModelProperty("星级 ")
+    private Double starGrade;
+
     @ApiModelProperty(value = "冗余字段,用于传递参数用")
     private Object bizParam;
 
@@ -37,6 +46,30 @@ public class UserOrderDetailVo extends UserOrderDetail {
         this.orderId = orderId;
     }
 
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Double getStarGrade() {
+        return starGrade;
+    }
+
+    public void setStarGrade(Double starGrade) {
+        this.starGrade = starGrade;
+    }
+
     public Object getBizParam() {
         return bizParam;
     }

+ 8 - 7
cooleshow-user/user-biz/src/main/resources/config/mybatis/ContractTemplateMapper.xml

@@ -139,13 +139,14 @@
 	</select>
 	
 	<select id="queryLatestContractTemplate" resultMap="BaseResultMap" parameterType="map">
-		SELECT * FROM contract_template where status_ = 1
-		<if test="type != null">
-			and type_ = #{type}
-		</if>
-		<if test="owner != null">
-			and owner_ = #{owner}
-		</if>
+		SELECT a.* FROM (
+			select
+				type_,MAX(version_) as version_
+			from contract_template where status_ = 1 and type_ = #{type}
+			group by type_
+		) t
+		left join contract_template a on t.type_ = a.type_ and t.version_ = a.version_
+		where a.type_ = #{type}
 	</select>
 	
 	<update id="disableContract" parameterType="map">

+ 11 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserContractRecordMapper.xml

@@ -28,4 +28,15 @@
         </foreach>
     </insert>
 
+    <select id="checkContractSign" resultType="java.lang.Boolean">
+        select count(1) from (
+            select
+                type_,MAX(version_) as version_
+            from contract_template where status_ = 1 and type_ = #{contractType}  group by type_
+        ) t
+        left join contract_template a on t.type_ = a.type_ and t.version_ = a.version_
+        left join sys_user_contract_record b on a.id_ = b.contract_id_
+        where b.user_id_ = #{userId}
+    </select>
+
 </mapper>

+ 6 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -84,8 +84,13 @@
 
     <select id="getOrderDetilListByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
         SELECT
-            <include refid="baseColumns" />
+            <include refid="baseColumns" />,
+            u.avatar_ as avatar,
+            u.username_ as username,
+            a.star_grade_ as starGrade
         FROM user_order_detail t
+        left join sys_user u on t.merch_id_ = u.id_
+        left join teacher_total a on t.merch_id_ = a.user_id_
         where t.order_no_ = #{orderNo}
     </select>
 

+ 1 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentSysUserContractRecordController.java → cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysUserContractRecordController.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.student.controller;
 
-import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
 import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
 import org.springframework.web.bind.annotation.*;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -17,7 +16,7 @@ import javax.annotation.Resource;
 @Api(tags = "用户协议记录表-一个用户一种协议一个版本一条记录")
 @RestController
 @RequestMapping("/sysUserContractRecord")
-public class StudentSysUserContractRecordController extends BaseController {
+public class SysUserContractRecordController extends BaseController {
     /**
      * 服务对象
      */

+ 94 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java

@@ -0,0 +1,94 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
+import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
+import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.biz.dal.sdk.WithdrawSdk;
+import com.yonge.cooleshow.biz.dal.service.ContractTemplateService;
+import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.service.IdGeneratorService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 用户协议记录表-一个用户一种协议一个版本一条记录(SysUserContractRecord)表控制层
+ *
+ * @author hgw
+ * @since 2022-05-07 15:04:05
+ */
+@Api(tags = "用户协议记录表-一个用户一种协议一个版本一条记录")
+@RestController
+@RequestMapping("/sysUserContractRecord")
+public class SysUserContractRecordController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private ContractTemplateService contractTemplateService;
+    @Resource
+    private SysUserContractRecordService sysUserContractRecordService;
+    @Autowired
+    private WithdrawSdk withdrawSdk;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+
+    @ApiOperation("判断用户是否签署协议")
+    @GetMapping(value = "/checkContractSign", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public HttpResponseResult<Boolean> checkContractSign(@ApiParam(value = "业务类型 REGISTER 注册 COURSES 课程购买 PRODUCT 产品 WITHDRAW 提现", required = true) @RequestParam("contractType") ContractTypeEnum contractType) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return sysUserContractRecordService.checkContractSign(user.getId(), contractType);
+    }
+
+    @ApiOperation("签署协议")
+    @GetMapping(value = "/sign", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+
+
+    public HttpResponseResult<Boolean> sign(
+            @ApiParam(value = "模板id", required = true) @RequestParam("templateId") Integer templateId) {
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        String userType = "";
+        boolean flag = false;
+
+        Long contractNo = idGeneratorService.generatorId("contractNo");
+
+        ContractTemplate contractTemplate = contractTemplateService.get(templateId);
+        if (ContractTypeEnum.WITHDRAW.getCode().equals(contractTemplate.getType())) {
+            //签署提现协议
+            userType = SysUserType.TEACHER.getCode();
+
+            flag = withdrawSdk.signContract(user.getRealName(), user.getIdCardNo(), user.getPhone(), contractNo.toString());
+        }
+
+        if (flag) {
+            SysUserContractRecord contractRecord = new SysUserContractRecord();
+            contractRecord.setUserId(user.getId());
+            contractRecord.setUserType(userType);
+            contractRecord.setContractId(contractTemplate.getId());
+            contractRecord.setContractNo(contractNo.toString());
+            sysUserContractRecordService.save(contractRecord);
+        }
+        return HttpResponseResult.succeed(true);
+    }
+
+
+}
+

+ 0 - 28
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherSysUserContractRecordController.java

@@ -1,28 +0,0 @@
-package com.yonge.cooleshow.teacher.controller;
-
-import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * 用户协议记录表-一个用户一种协议一个版本一条记录(SysUserContractRecord)表控制层
- *
- * @author hgw
- * @since 2022-05-07 15:04:05
- */
-@Api(tags = "用户协议记录表-一个用户一种协议一个版本一条记录")
-@RestController
-@RequestMapping("/sysUserContractRecord")
-public class TeacherSysUserContractRecordController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Resource
-    private SysUserContractRecordService sysUserContractRecordService;
-
-}
-

+ 5 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserWithdrawalController.java

@@ -7,7 +7,6 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.WithdrawalReq;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
-import com.yonge.cooleshow.biz.dal.props.WithdrawalProperties;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
@@ -28,6 +27,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
@@ -53,8 +53,8 @@ public class UserWithdrawalController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
-    @Autowired
-    private WithdrawalProperties withdrawalProperties;
+    @Value("${withdraw.privateKey}")
+    private String privateKey;
 
     @PostMapping("/getWithdrawalInfo")
     @ApiOperation(value = "查询提现页面信息")
@@ -76,6 +76,7 @@ public class UserWithdrawalController extends BaseController {
         return userWithdrawalService.withdrawal(user, withdrawalReq);
     }
 
+
     @PostMapping("/withdrawalPage")
     @ApiOperation(value = "提现记录")
     @ApiImplicitParams({
@@ -131,7 +132,7 @@ public class UserWithdrawalController extends BaseController {
                 throw new Exception();
             }
             Map<String, Object> map = JSONObject.parseObject(content);
-            String jsonStr = RSA.decryptPri((String) map.get("sign"), withdrawalProperties.getPrivateKey());
+            String jsonStr = RSA.decryptPri((String) map.get("sign"), privateKey);
             log.info("jsonStr:{}", jsonStr);
 
             Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);

+ 0 - 96
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/WithdrawController.java

@@ -1,96 +0,0 @@
-package com.yonge.cooleshow.teacher.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
-import com.yonge.cooleshow.biz.dal.service.LingXinService;
-import com.yonge.cooleshow.biz.dal.service.UserWithdrawalCallbackService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.toolset.thirdparty.lingxinpay.RSA;
-import com.yonge.cooleshow.biz.dal.sdk.WithdrawSdk;
-import com.yonge.toolset.utils.json.JsonUtil;
-import io.swagger.annotations.Api;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * @Description: 提现回调
- * @Author: cy
- * @Date: 2022/5/9
- */
-@RestController
-@RequestMapping("/withdraw")
-@Api(value = "提现回调", tags = "提现回调")
-public class WithdrawController extends BaseController {
-    private final static Logger log = LoggerFactory.getLogger(WithdrawController.class);
-
-    @Value("${withdraw.privateKey}")
-    private String privateKey;//商户自己生成的私钥
-
-    @Autowired
-    private UserWithdrawalCallbackService callbackService;
-
-    /**
-     * 异步回调接收
-     *
-     * @param content
-     * @param request
-     * @return
-     */
-    @PostMapping("/callback")
-    public String test(@RequestBody String content, HttpServletRequest request) {
-        System.out.println(privateKey);
-        log.info("交易回调请求地址:{} 请求参数:{}", request.getRemoteAddr(), content);
-        try {
-            if (StringUtils.isBlank(content)) {
-                throw new Exception();
-            }
-            Map<String, Object> map = JSONObject.parseObject(content);
-            String jsonStr = RSA.decryptPri((String) map.get("sign"), privateKey);
-            log.info("jsonStr:{}", jsonStr);
-
-            Map<String, Object> withdrawRecord = JSONObject.parseObject(jsonStr);
-            UserWithdrawalCallback callback = JsonUtil.toJavaObject(withdrawRecord, UserWithdrawalCallback.class);
-            callbackService.insertCallback(callback);
-        } catch (Exception e) {
-            log.error("解密失败e:{}", e);
-            return "failed";
-        }
-        return "success";
-    }
-
-    /**
-     * 提现测试接口
-     * @param remark
-     * @return
-     */
-    @GetMapping("/test")
-    public String a(String remark) {
-        WithdrawSdk withdraw = new WithdrawSdk();
-        //输入商户订单号
-        String outerOrderNo = UUID.randomUUID().toString().substring(0, 12);
-        System.out.println("商户订单号:" + outerOrderNo);
-        //输入收款人手机号
-        String name = "何亮";
-        //输入收款人姓名
-        String mobile = "17600220933";
-        //输入收款人身份证号
-        String certificateNo = "130423199206192818";
-        //输入转账金额(单位分)
-        Integer predictAmount = 1;
-        //输入收款人账号
-        String payAccount = "6228480018864836772";
-
-        String requestParam = withdraw.withdraw(outerOrderNo, name, mobile, certificateNo, predictAmount,
-                payAccount, remark);
-        log.info("单笔请求返回参数:{}", requestParam);
-        return requestParam;
-    }
-}

+ 2 - 2
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/Payment.java

@@ -14,13 +14,13 @@ import java.util.Map;
  */
 public class Payment extends Base {
     /***
-     * 三方支付流水号(请求后才有)
+     * 三方支付流水号(请求后才有) 查询订单必传
      * @author liweifan
      * @updateTime 2022/3/31 11:00
      */
     private String id;
     /***
-     * 支付订单号(必填)
+     * 支付订单号(必填) 查询订单必传
      * @author liweifan
      * @updateTime 2022/3/31 11:00
      */