提交 cb5118ae 作者: zhenjie

Merge branch 'develop'

......@@ -28,22 +28,20 @@ public class PayWalletDTO implements Serializable {
private String userName;
@ApiModelProperty(value = "云享金余额")
private BigDecimal cashAmt;
@ApiModelProperty(value = "已消耗云享金")
private BigDecimal cashPaid;
@ApiModelProperty(value = "云享金总金额")
private BigDecimal totalCash;
@ApiModelProperty(value = "已冻结云享金")
private BigDecimal cashFreeze;
@ApiModelProperty(value = "佣金余额")
private BigDecimal salaryAmt;
@ApiModelProperty(value = "已消耗佣金")
private BigDecimal salaryPaid;
@ApiModelProperty(value = "已冻结佣金")
private BigDecimal salaryFreeze;
@ApiModelProperty(value = "佣金总额度")
private BigDecimal totalSalary;
@ApiModelProperty(value = "已提现的金额")
private BigDecimal rebateWdl;
@ApiModelProperty(value = "提现冻结金额")
private BigDecimal wdlFreeze;
@ApiModelProperty(value = "冻结总额")
private BigDecimal totalFreeze;
@ApiModelProperty(value = "总金额")
......
package com.mmc.iuav.user.model.dto.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author 作者 lw
* @version 创建时间:2023.8.28 11:08:54
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WithdrawalApplyDTO implements Serializable {
private static final long serialVersionUID = -5782430067900145219L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "申请人的用户ID")
private Integer userAccountId;
@ApiModelProperty(value = "申请金额")
private BigDecimal applyAmt;
@ApiModelProperty(value = "申请状态: 0平台处理中 1提现成功 2提现失败")
private Integer applyStatus;
@ApiModelProperty(value = "开户人")
private String empName;
@ApiModelProperty(value = "开户银行-支行名称")
private String bankName;
@ApiModelProperty(value = "收款账号")
private String payAccount;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "流水编号")
private String outerTradeNo;
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "提现方式-微信(wechat)-支付宝(alipay)-银行卡(bank_card)", required = true, example = "wechat")
private String settleType;
@ApiModelProperty(value = "处理信息")
private String tradeResult;
@ApiModelProperty(value = "apply 提现申请 await待发放 handle交易中 success 交易成功 failure 交易失败")
private String tradeStatus;
@ApiModelProperty(value = "创建时间")
private Date createTime;
}
package com.mmc.iuav.user.model.dto.xzsz;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @Author LW
* @date 2023/8/29 14:25
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UsableCashPoolingDTO {
@ApiModelProperty(value = "商户企业名称")
private String companyName;
@ApiModelProperty(value = "可用余额(含税费金额)")
private String taxFundName;
@ApiModelProperty(value = "税源地名称")
private BigDecimal availableBalance;
@ApiModelProperty(value = "交易渠道")
private String tradesChannel;
}
package com.mmc.iuav.user.model.fdd.dto;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author:zhenjie Date:2022/9/2
* time:14:34
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@ApiModel(value = "com.mmc.csf.fdd.dto.AppEVerifyInfoDTO", description = "小程序用户企业认证DTO")
public class FddVerifyInfoDTO implements Serializable {
private static final long serialVersionUID = 4194664180348523961L;
private Integer id;
private Integer userFddId;
private String customerId;
private String transactionNo;
private String url;
private Integer deleted;
private Date createTime;
private Date updateTime;
}
package com.mmc.iuav.user.model.fdd.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:53
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserFddDTO implements Serializable {
private static final long serialVersionUID = -4952516407490131779L;
private Integer id;
private String unionId;
private String customerId;
private Integer personVerifyStatus;
private Integer entVerifyStatus;
private Integer accountType;
private Date createTime;
private Date updateTime;
}
package com.mmc.iuav.user.model.fdd.req;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* author:zhenjie
* Date:2022/7/27
* time:14:29
*/
@Data
@NoArgsConstructor
public class NECertReq implements Serializable {
private static final long serialVersionUID = 6174142180495289363L;
private String name;
private String value;
}
package com.mmc.iuav.user.model.fdd.resp;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* author:zhenjie
* Date:2022/7/21
* time:18:13
*/
@Data
@NoArgsConstructor
public class CompanyVerifyResp implements Serializable {
private static final long serialVersionUID = 5835274401261039702L;
private String transactionNo;
private String url;
}
package com.mmc.iuav.user.model.fdd.resp;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* author:zhenjie
* Date:2022/7/18
* time:16:00
*/
@Data
@NoArgsConstructor
public class PersonVerifyResp implements Serializable {
private static final long serialVersionUID = 7583599952872411025L;
private String transactionNo;
private String url;
}
package com.mmc.iuav.user.model.fdd.seal;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author LW
* @date 2022/8/3 16:24
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SealDetail implements Serializable {
@ApiModelProperty(value = "签章图片Base64")
private String signatureImg;
@ApiModelProperty(value = "签章编号")
private String signatureId;
@ApiModelProperty(value = "签章图片作用范围:0:非默认 1:默认章")
private Integer signatureScope;
@ApiModelProperty(value = "签章来源 0:法大大生成 1:平台上传")
private String signatureSource;
@ApiModelProperty(value = "企业或者个人 1:个人 2:企业")
private String signatureType;
}
package com.mmc.iuav.user.model.qo.wallet;
import com.mmc.iuav.group.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author 作者 lw
* @version 创建时间:2023.8.26 上午11:40:21
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WalletFlowQO implements Serializable {
private static final long serialVersionUID = -2568266056802132237L;
@ApiModelProperty(value = "用户id", hidden = true)
private Integer userAccountId;
@ApiModelProperty(value = "查询年-月")
private String yearMonth;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间", hidden = true)
private String endTime;
@ApiModelProperty(value = "状态类型")
private Integer payMethod;
@ApiModelProperty(value = "页码", required = true)
@NotNull(message = "页码不能为空", groups = {Page.class})
@Min(value = 1, groups = Page.class)
private Integer pageNo;
@ApiModelProperty(value = "每页显示数", required = true)
@NotNull(message = "每页显示数不能为空", groups = {Page.class})
@Min(value = 1, groups = Page.class)
private Integer pageSize;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
}
package com.mmc.iuav.user.model.qo.wallet;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月29日 下午2:25:08
* @explain 类说明
*/
import com.mmc.iuav.group.Freeze;
import com.mmc.iuav.group.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WithdrawalApplyQO implements Serializable {
private static final long serialVersionUID = -2185498289462506967L;
@ApiModelProperty(value = "关键字", example = "666")
private String keyword;
@ApiModelProperty(value = "开始时间", example = "2023-08-28 00:00:00")
private String startTime;
@ApiModelProperty(value = "结束时间", example = "2023-08-28 23:59:59")
private String endTime;
@ApiModelProperty(value = "状态: apply 提现申请 await待发放 handle交易中 success 交易成功 failure 交易失败", example = "0")
private String tradeStatus;
@ApiModelProperty(value = "通道标识-微信(wechat)-支付宝(alipay)-银行卡(bank_card)", required = true, example = "wechat")
private String settleType;
@ApiModelProperty(value = "页码", required = true, example = "1")
@NotNull(message = "页码不能为空", groups = {Page.class, Freeze.class})
@Min(value = 1, groups = Page.class)
private Integer pageNo;
@ApiModelProperty(value = "每页显示数", required = true, example = "10")
@NotNull(message = "每页显示数不能为空", groups = {Page.class, Freeze.class})
@Min(value = 1, groups = Page.class)
private Integer pageSize;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
}
......@@ -73,4 +73,8 @@ public class UserAccountVO implements Serializable {
private Integer auditStatus;
@ApiModelProperty(value = "总积分 null表示无积分")
private Integer totalPoints;
@ApiModelProperty(value = "小猪算账电签状态:0否,1是")
private Integer xzAuthStatus;
@ApiModelProperty(value = "是否关注公众号")
private Integer subStatus;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Author LW
* @date 2023/8/26 15:42
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class WithdrawalInfoVO implements Serializable {
public final static String AMT = "amt";
public final static String APPLY = "APPLY";
private static final long serialVersionUID = 2535626170303302278L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "流水编号")
private String payNo;
@ApiModelProperty(value = "操作方式")
private Integer payMethod;
@ApiModelProperty(value = "佣金变动金额(正数入账,负数扣除)")
private BigDecimal salaryAmtPaid;
@ApiModelProperty(value = "操作时间")
private Date payTime;
@ApiModelProperty(value = "操作名称")
private String name;
}
......@@ -7,11 +7,9 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
......@@ -26,60 +24,41 @@ public class WxMsgVO implements Serializable {
@ApiModelProperty(value = "用户id-仅适用云享飞客户端")
private Integer userAccountId;
@ApiModelProperty(value = "公众号的openId")
private String openId;
private String touser;
@ApiModelProperty(value = "unionId-全局通用")
private String unionId;
@ApiModelProperty(value = "模板id")
@NotNull(message = "模板id不能为空")
private String templemteId;
private String templateId;
@ApiModelProperty(value = "网页跳转连接")
private String url;
@ApiModelProperty(value = "小程序APPID")
private String wxAppltAppId;
private String wxAppletAppId;
@ApiModelProperty(value = "小程序跳转连接")
private String appletPath;
@ApiModelProperty(value = "标题")
private MsgData title;
@ApiModelProperty(value = "消息数组")
private List<MsgData> data;
@ApiModelProperty(value = "消息备注")
private MsgData remark;
@ApiModelProperty(value = "按照接口文档传数据")
private JSONObject dataObject;
public String buildMsgJson() {
JSONObject obj = new JSONObject();
obj.put("touser", this.openId);
obj.put("template_id", this.templemteId);
public String buildTemplateMsg() {
JSONObject msg = new JSONObject();
msg.put("touser", this.touser);
msg.put("template_id", this.templateId);
// 跳转页面
if (!StringUtils.isBlank(this.url)) {
obj.put("url", this.url);
msg.put("url", this.url);
}
if (!StringUtils.isBlank(this.wxAppltAppId) && !StringUtils.isBlank(this.appletPath)) {
// 跳转小程序页面设置
if (!StringUtils.isBlank(this.wxAppletAppId) && !StringUtils.isBlank(this.appletPath)) {
JSONObject mini = new JSONObject();
mini.put("appid", this.wxAppltAppId);
mini.put("appid", this.wxAppletAppId);
mini.put("pagepath", this.appletPath);
obj.put("miniprogram", mini);
}
JSONObject jd = new JSONObject();
jd.put("first", this.convertMsg(title));
if (!CollectionUtils.isEmpty(this.data)) {
for (int i = 0; i < data.size(); i++) {
String key = "keyword" + (i + 1);
jd.put(key, this.convertMsg(data.get(i)));
}
}
if (this.remark != null && !StringUtils.isBlank(this.remark.getValue())) {
jd.put("remark", this.convertMsg(this.remark));
msg.put("miniprogram", mini);
}
obj.put("data", jd);
return obj.toJSONString();
}
public JSONObject convertMsg(MsgData msg) {
JSONObject jb = new JSONObject();
jb.put("value", msg.getValue());
jb.put("color", msg.getColor());
return jb;
msg.put("data", this.dataObject);
return msg.toString();
}
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/8/21 13:40
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class XzAuthVO implements Serializable {
private static final long serialVersionUID = -6009105206194794410L;
@ApiModelProperty(value = "用户名称")
private String username;
@ApiModelProperty(value = "身份证号")
private String idCardNo;
@ApiModelProperty(value = "手机号码")
private String mobile;
@ApiModelProperty(value = "附加信息,如需4要素认证必填")
private String bankAccount;
@ApiModelProperty(value = "身份证照片人像面URL,图片必须已经通过OCR识别")
private String idCardImageFront;
@ApiModelProperty(value = "身份证照片国徽面URL,图片必须已经通过OCR识别")
private String idCardImageBack;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/8/21 20:14
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class XzWithdrawalVO implements Serializable {
private static final long serialVersionUID = -8758847907824399671L;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "回调地址")
private String notifyUrl;
@ApiModelProperty(value = "税源地id")
private String taxFundId;
@ApiModelProperty(value = "提现月份")
private String month;
@ApiModelProperty(value = "商户业务流水号(商户自行生成,全局唯一)")
private String outerTradeNo;
@ApiModelProperty(value = "自定义员工编号(商户系统中用户唯一编号)")
private String empNum;
@ApiModelProperty(value = "收款人户名")
private String empName;
@ApiModelProperty(value = "收款人手机号")
private String empPhone;
@ApiModelProperty(value = "收款人证件类型:ID_CARD")
private String licenseType;
@ApiModelProperty(value = "收款人证件号码")
private String licenseId;
@ApiModelProperty(value = "交易类型(bankcard:银行卡,alipay:支付宝,wechatpay:微信)")
private String settleType;
@ApiModelProperty(value = "收款账号,交易类型为支付宝时,为支付宝账号;交易类型为微信时,填收款用户的openid")
private String payAccount;
@ApiModelProperty(value = "收款人银行名称 (无需细到支行名称)")
private String bankName;
@ApiModelProperty(value = "服务类型,测试:销售推广;正式:市场推广")
private String positionName;
@ApiModelProperty(value = "交易金额(实际到账金额, 单位元,精确两位小数 )")
private Double payAmount;
@ApiModelProperty(value = "业务备注说明:若需要对每笔提现区分业务来源,可自行定义,后续可在SaaS后台查看,与用户到账说明无关(不能超过10个字)")
private String remarks;
@ApiModelProperty(value = "银行摘要备注(可在收款行交易明细中查看到")
private String bankRemo;
@ApiModelProperty(value = "商户自己的微信APPID,交易类型为微信时,必填")
private String wechatAppId;
}
package com.mmc.iuav.user.model.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author: lw
* @Date: 2023/8/25 10:25
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ApplyWithdrawalVO implements Serializable {
private static final long serialVersionUID = 8677383830415176214L;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "户名")
private String empName;
@ApiModelProperty(value = "手机号")
private String empPhone;
@ApiModelProperty(value = "交易类型(bankcard:银行卡,alipay:支付宝,wechatpay:微信)", required = true)
private String settleType;
@ApiModelProperty(value = "收款账号,交易类型为支付宝时,为支付宝账号;交易类型为微信时,填收款用户的openid", required = true)
private String payAccount;
@ApiModelProperty(value = "收款人银行名称 (无需细到支行名称)")
private String bankName;
@ApiModelProperty(value = "服务类型,测试:销售推广;正式:市场推广", required = true)
private String positionName;
@ApiModelProperty(value = "交易金额(实际到账金额, 单位元,精确两位小数 )", required = true)
private BigDecimal payAmount;
}
package com.mmc.iuav.user.model.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author 23214
* 飞手方钱包记录
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FlyerWalletFlowVO {
@ApiModelProperty(value = "用户ID")
private Integer userAccountId;
@ApiModelProperty(value = "支付方式 100(订单发布) 200(无人接单取消订单)300(有人接单取消订单)400(飞手抢单)500(客服判定飞手无责取消订单)600(飞手有责取消订单)700(正常结算)800(修改订单金额状态)900(飞手未确认修改金额状态)1000(飞手确认修改金额状态)")
private Integer modeOfPayment;
@ApiModelProperty(value = "云享金(需要正负)")
private BigDecimal cashAmount;
@ApiModelProperty(value = "佣金(需要正负)")
private BigDecimal salaryAmount;
@ApiModelProperty(value = "支付时间")
private Date timeOfPayment;
@ApiModelProperty(value = "操作者用户id")
private Integer operateUserAccountId;
@ApiModelProperty(value = "云享金违约金(需要正负)")
private BigDecimal yxjCashPledge;
@ApiModelProperty(value = "佣金违约金(需要正负)")
private BigDecimal salaryCashPledge;
@ApiModelProperty(value = "订单的百分比违约金(这笔钱是给发布方的)")
private BigDecimal percentagePenaltyOfOrder;
}
\ No newline at end of file
package com.mmc.iuav.user.model.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author 23214
* 发布方钱包记录
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PublisherWalletFlowVO {
@ApiModelProperty(value = "用户ID")
private Integer userAccountId;
@ApiModelProperty(value = "支付方式 100(订单发布) 200(无人接单取消订单)300(有人接单取消订单)400(飞手抢单)500(客服判定飞手无责取消订单)" +
"600(飞手有责取消订单)700(正常结算)800(修改订单金额状态)900(飞手未确认修改金额状态)1000(飞手确认修改金额状态)")
private Integer modeOfPayment;
@ApiModelProperty(value = "云享金(需要正负)注:结算时修改金额如果大于原订单,需要支付的云享金,也传这个字段")
private BigDecimal cashAmount;
@ApiModelProperty(value = "佣金(需要正负)注:结算时修改金额如果大于原订单,需要支付的佣金,也传这个字段")
private BigDecimal salaryAmount;
@ApiModelProperty(value = "支付时间")
private Date timeOfPayment;
@ApiModelProperty(value = "操作者用户id")
private Integer operateUserAccountId;
@ApiModelProperty(value = "云享金违约金(需要正负)")
private BigDecimal yxjCashPledge;
@ApiModelProperty(value = "佣金违约金(需要正负)")
private BigDecimal salaryCashPledge;
@ApiModelProperty(value = "订单的百分比违约金(这笔钱是给飞手的) (需要正负)")
private BigDecimal percentagePenaltyOfOrder;
@ApiModelProperty(value = "加急单云享金金额 (需要正负)")
private BigDecimal urgentYxjAmount;
@ApiModelProperty(value = "加急单佣金金额 (需要正负)")
private BigDecimal urgentSalaryAmount;
@ApiModelProperty(value = "置顶单云享金金额 (需要正负)")
private BigDecimal topYxjAmount;
@ApiModelProperty(value = "置顶单佣金金额 (需要正负)")
private BigDecimal topSalaryAmount;
@ApiModelProperty(value = "飞手应得订单金额 (正数)")
private BigDecimal flyerSalaryAmount;
@ApiModelProperty(value = "修改后金额(注:①飞手未确认时,后面支付的需要退的佣金那部分钱 ②飞手确认时,修改后的金额小于原佣金,需要退多余的佣金那部分钱 ③如果全部是微信支付的则不用传值)")
private BigDecimal refundSalaryAmount;
@ApiModelProperty(value = "修改后金额(注:①飞手未确认时,后面支付的需要退的云享金那部分钱 ②飞手确认时,修改后的金额小于原佣金,需要退多余的云享金那部分钱 ③如果全部是微信支付的则不用传值)")
private BigDecimal refundCashAmount;
}
\ No newline at end of file
package com.mmc.iuav.user.model.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author LW
* @date 2023/8/23 13:37
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TopUpOrderVO {
@ApiModelProperty(value = "支付用户的openid")
private String openid;
@ApiModelProperty(value = "订单编号")
private String orderNo;
@ApiModelProperty(value = "金额(分)")
private Integer amount;
@ApiModelProperty(value = "订单状态")
private String tradeState;
@ApiModelProperty(value = "交易状态描述")
private String tradeStateDesc;
}
package com.mmc.iuav.user.model.vo.wallet;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @Author LW
* @date 2023/8/21 17:59
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WalletFlowVO implements Serializable {
private static final long serialVersionUID = -8848411142632397203L;
private PublisherWalletFlowVO publisherWalletFlowVO;
private FlyerWalletFlowVO flyerWalletFlowVO;
}
......@@ -9,6 +9,8 @@ public enum ResultEnum implements BaseErrorInfoInterface {
BODY_NOT_MATCH("400", "请求的数据格式不符"),
FAIL("500", "fail"),
PARAM_ERROR("400", "参数错误"),
REQUEST_PARAM_ILLEGAL_ERROR("706", "请求参数非法"),
NOT_FOUND("404", "未找到该资源!"),
//企业认证
BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR("1000", "营业执照解析失败,请上传有效清晰的执照"),
......@@ -82,7 +84,12 @@ public enum ResultEnum implements BaseErrorInfoInterface {
WX_NOT_SEND_MSG_PARAM_ERROR("5029", "userId和openId至少一个不为空"),
APPLET_USER_ACCESS_TOKE_ERROR("5031", "获取accessToken签名校验失败"),
WX_NOT_REL_ERROR("5028", "获取微信公众号用户信息失败"),
DELETE_PASS_ERROR("5029", "已通过认证的不可删除");
DELETE_PASS_ERROR("5029", "已通过认证的不可删除"),
// 提现相关
WITHDRAWAL_APPLY_STATUS_ERROR("40001", "审批状态有误"),
WITHDRAWAL_INFO_NOT_FIND_ERROR("40002", "提现申请单信息不存在"),
WITHDRAWAL_REPEAT_CHECK_ERROR("40003", "提现申请单已被审批,切勿重复审批。");
/**
* 错误码
......
......@@ -85,6 +85,28 @@
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>com.mmc.iuav.cms</groupId>
<artifactId>piggy-settlement</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/piggy-settlement-sdk-1.7.0.jar</systemPath>
</dependency>
<dependency>
<groupId>com.mmc.csf.fdd</groupId>
<artifactId>self-innovate</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/fdd-verify-process-1.8.5.jar</systemPath>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.5</version>
</dependency>
</dependencies>
<build>
......@@ -92,6 +114,9 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
......
......@@ -37,4 +37,28 @@ public class UserSystemConstant {
@Value("${third-party.qcc.secret-key}")
private String qccSecretKey;
@Value("${third-party.xzsz.appKey}")
private String xzAppKey;
@Value("${third-party.xzsz.appSecret}")
private String xzAppSecret;
@Value("${third-party.xzsz.aes}")
private String xzAes;
@Value("${third-party.xzsz.domain}")
private String xzDomain;
@Value("${third-party.xzsz.position}")
private String xzPosition;
@Value("${third-party.xzsz.taxFundId}")
private String taxFundId;
@Value("${third-party.xzsz.authNotify}")
private String authNotify;
@Value("${third-party.xzsz.withdrawNotify}")
private String withdrawNotify;
}
package com.mmc.iuav.user.constant;
import org.springframework.stereotype.Component;
/**
* @author: zj
* @Date: 2023/5/16 16:02
......@@ -20,6 +18,7 @@ public class WxConstant {
public static final String IUAV_MINI_PROGRAM_ACCESS_TOKEN = "IUAV_MINI_PROGRAM_ACCESS_TOKEN";
public static final String IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN = "IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN";
public static final String SHARE_FLY_SUB_ACCESS_TOKEN = "SHARE_FLY_SUB_ACCESS_TOKEN";
public static final String SHARE_FLY_SUB_STABLE_ACCESS_TOKEN = "SHARE_FLY_SUB_STABLE_ACCESS_TOKEN";
}
package com.mmc.iuav.user.constant.fdd;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author:zhenjie Date:2022/7/16
* time:14:58
*/
@Component
public class FddConnectConstant {
public static String APP_ID;
public static String APP_KEY;
public static String VERSION;
public static String HOST;
public static String MMC_URL;
public FddConnectConstant(@Value("${fdd.appid}") String appid, @Value("${fdd.appkey}") String appkey,
@Value("${fdd.version}") String version, @Value("${fdd.host}") String host,
@Value("${fdd.mmc-url}") String mmcUrl) {
APP_ID = appid;
APP_KEY = appkey;
VERSION = version;
HOST = host;
MMC_URL = mmcUrl;
}
}
package com.mmc.iuav.user.constant.fdd;
import org.springframework.stereotype.Component;
/**
* author:zhenjie
* Date:2022/7/22
* time:11:07
*/
@Component
public class FddConstant {
public static final String CODE = "code";
public static final String DATA = "data";
public static final String SUCCESS = "1";
public static final String MSG = "msg";
public static final String SIGNATURE_ID = "signature_id";
public static final String UPLOAD_FILE = "uploadFile/";
//企业实名认证异步回调
// public static final String NOTIFY_E_CERT_RES = "fddservlet/fdd/notifyECertRes";
//企业实名认证同步回调
public static final String RETURN_E_CERT_RES = "fddservlet/fdd/returnECertRes";
//小程序企业实名认证异步回调
public static final String NOTIFY_E_CERT_RES = "fdd/notifyECertRes";
//签署合同异步回调
public static final String NOTIFY_STAMP = "fddservlet/contract/notifyStamp";
public static final String UAV_NOTIFY_STAMP = "fddservlet/uav/contract/notifyStamp";
public static final String APP_ID = "appId";
public static final String CUSTOMER_ID = "customerId";
public static final String STATUS = "status";
public static final String SERIAL_NO = "serialNo";
public static final String SIGN = "sign";
public static final String UID_REGEX = "[-|_]";
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.WxMsgVO;
import com.mmc.iuav.user.service.WxService;
import com.mmc.iuav.user.util.WxApiUtil;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -48,6 +50,21 @@ public class WxController extends BaseController {
return ResultBody.success(wxService.createUrlLink(path, query));
}
@ApiOperation(value = "验证服务器URL是否有效")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = String.class)})
@GetMapping("wxSendMessage")
public void checkService(@RequestParam String signature, @RequestParam String timestamp, @RequestParam String nonce,
@RequestParam String echostr, HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
System.out.println("#############验证服务器URL是否有效-START--################");
boolean bs = WxApiUtil.checkSignature(signature, timestamp, nonce);
System.out.println("输出:" + bs + "---" + echostr);
System.out.println("#############验证服务器URL是否有效-END--################");
out.println(bs ? echostr : null);
}
@ApiOperation(value = "监控微信公众号的事件变化通知", hidden = true)
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = String.class)})
@PostMapping("wxSendMessage")
......@@ -60,10 +77,38 @@ public class WxController extends BaseController {
out.println(msg);
}
@ApiOperation(value = "发送消息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = String.class)})
@PostMapping("send")
public ResultBody send(@RequestBody WxMsgVO ws) {
return wxService.sendSubTemplateMsg(ws);
}
@ApiOperation(value = "生成小程序码")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("getAppletQRCode")
public ResultBody getAppletQRCode(@ApiParam(value = "小程序路径", example = "pages/welcome/index") @RequestParam String page, @ApiParam(value = "参数", example = "name=123&sex=456") @RequestParam String scene) {
return wxService.getUnLimitedQRCode(page, scene);
}
@ApiOperation(value = "查询rid信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("rid")
public ResultBody rid(@RequestParam String rid) throws Exception {
return wxService.rid(rid);
}
@ApiOperation(value = "同步微信公众号用户")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("moveSubUserToTest")
public ResultBody moveSubUserToTest() {
return wxService.moveSubUserToTest();
}
@ApiOperation(value = "同步微信公众号用户unionId")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("moveSubUserUnionIdToTest")
public ResultBody moveSubUserUnionIdToTest() {
return wxService.moveSubUserUnionIdToTest();
}
}
package com.mmc.iuav.user.controller.fdd;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.model.fdd.dto.FddVerifyInfoDTO;
import com.mmc.iuav.user.model.fdd.dto.UserFddDTO;
import com.mmc.iuav.user.model.fdd.resp.CompanyVerifyResp;
import com.mmc.iuav.user.model.fdd.resp.PersonVerifyResp;
import com.mmc.iuav.user.service.fdd.UserFddAuthService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @author:lw Date:2022/9/1
* time:15:44
*/
@Api(tags = {"fdd用户认证" })
@RestController
@RequestMapping("/fdd/")
public class UserFddAuthController extends BaseController {
@Autowired
private UserFddAuthService userFddAuthService;
@ApiOperation(value = "注册法大大账号")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = String.class)})
@ApiIgnore
@GetMapping("register")
public String register(@ApiParam(value = "唯一标识当类型为1的时候传openid 当为2的时候传id") @RequestParam String uid, @ApiParam(value = "账号类型 1个人 2企业") @RequestParam String accountType) {
return userFddAuthService.register(uid, accountType);
}
@ApiOperation(value = "获取个人实名认证地址")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = PersonVerifyResp.class)})
@GetMapping("getPersonVerifyUrl")
public ResultBody getPersonVerifyUrl(HttpServletRequest request) {
return userFddAuthService.getPersonVerifyUrl(this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "获取企业实名认证url")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = CompanyVerifyResp.class)})
@GetMapping("getCompanyVerifyUrl")
public ResultBody getCompanyVerifyUrl(@ApiParam(value = "端口:0小程序 1后台") @RequestParam Integer port, HttpServletRequest request) {
return userFddAuthService.getCompanyVerifyUrl(port, this.getUserLoginInfoFromRedis(request));
}
@ApiOperation(value = "异步处理企业实名认证")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@ApiIgnore
@PostMapping("notifyECertRes")
public ResultBody notifyECertRes(@RequestParam Map<String, String> map) {
return userFddAuthService.notifyECertRes(map);
}
@ApiOperation(value = "获取(企业/个人)实名认证信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = FddVerifyInfoDTO.class)})
@GetMapping("findCompanyCertInfo")
public ResultBody findCompanyCertInfo(@ApiParam(value = "端口:0小程序 1后台") @RequestParam Integer port, @ApiParam(value = "企业:2 个人:1") Integer flag, HttpServletRequest request) {
return userFddAuthService.findCompanyCertInfo(port, flag, this.getUserLoginInfoFromRedis(request));
}
@ApiOperation(value = "获取认证信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserFddDTO.class)})
@GetMapping("getAppUserFddInfo")
public ResultBody<UserFddDTO> getAppUserFddInfo(@ApiParam(value = "端口:0小程序 1后台") @RequestParam Integer port, HttpServletRequest request) {
return userFddAuthService.getAppUserFddInfo(port, this.getUserLoginInfoFromRedis(request));
}
@ApiOperation(value = "通过uuid下载文件")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("getFileByUuid")
public ResultBody getFileByUuid(@RequestParam String uuid, @RequestParam(required = false) String docType) {
return userFddAuthService.getFileByUuid(uuid, docType);
}
}
......@@ -2,14 +2,14 @@ package com.mmc.iuav.user.controller.wallet;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.entity.wallet.UserBillingDetailVO;
import com.mmc.iuav.user.model.dto.wallet.PayWalletDTO;
import com.mmc.iuav.user.model.qo.wallet.WalletFlowQO;
import com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO;
import com.mmc.iuav.user.model.vo.wallet.WalletFlowVO;
import com.mmc.iuav.user.service.wallet.PayWalletService;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
......@@ -30,24 +30,51 @@ public class PayWalletController extends BaseController {
@ApiOperation(value = "获取当前用户消费(钱包)信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = PayWalletDTO.class)})
@GetMapping("getCurrentUserPayWalletInfo")
public ResultBody getCurrentUserPayWalletInfo(HttpServletRequest request) {
public ResultBody<PayWalletDTO> getCurrentUserPayWalletInfo(HttpServletRequest request) {
return payWalletService.getPayWalletInfo(this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
@ApiOperation(value = "获取用户消费(钱包)信息")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = PayWalletDTO.class)})
@GetMapping("getPayWalletInfo")
public ResultBody getPayWalletInfo(
public ResultBody<PayWalletDTO> getPayWalletInfo(
@ApiParam(value = "用户userAccountId", required = true) @RequestParam Integer userAccountId) {
return ResultBody.success(payWalletService.getPayWalletInfo(userAccountId));
}
@ApiOperation(value = "feign-初始化钱包")
@ApiOperation(value = "feign-云享金充值增加金额")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@ApiIgnore
@GetMapping("feignInitPayWallet")
public ResultBody feignInitPayWallet(@RequestParam Integer userAccountId) {
return payWalletService.initPayWallet(userAccountId);
@PostMapping("feignTopUpCash")
public ResultBody feignTopUpCash(@RequestBody TopUpOrderVO topUpOrderVO) {
return payWalletService.feignTopUpCash(topUpOrderVO);
}
@ApiOperation(value = "feign-钱包流水记录")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("feignWalletFlow")
public ResultBody feignWalletFlow(@RequestBody WalletFlowVO walletFlowVO) {
return payWalletService.feignWalletFlow(walletFlowVO);
}
@ApiOperation(value = "feign-钱包流水记录不带token")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("feignWalletFlowNO")
public ResultBody feignWalletFlowNO(@RequestBody WalletFlowVO walletFlowVO) {
return payWalletService.feignWalletFlow(walletFlowVO);
}
@ApiOperation(value = "用户账单明细")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserBillingDetailVO.class)})
@PostMapping("customerBillingDetail")
public ResultBody<UserBillingDetailVO> customerBillingDetail(HttpServletRequest request, @RequestBody WalletFlowQO walletFlowQO) {
return payWalletService.customerBillingDetail(this.getUserLoginInfoFromRedis(request).getUserAccountId(), walletFlowQO);
}
@ApiOperation(value = "账单详情")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserBillingDetailVO.class)})
@GetMapping("billingDetails")
public ResultBody<UserBillingDetailVO> billingDetails(@ApiParam(value = "ID", required = true) @RequestParam Integer id,
@ApiParam(value = "详情类型", required = true) @RequestParam String detailType) {
return payWalletService.billingDetails(id, detailType);
}
}
package com.mmc.iuav.user.controller.wallet;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.entity.wallet.UserBillingDetailVO;
import com.mmc.iuav.user.model.dto.wallet.WithdrawalApplyDTO;
import com.mmc.iuav.user.model.qo.wallet.WalletFlowQO;
import com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO;
import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.WithdrawalService;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author: zj
* @Date: 2023/8/23 15:58
*/
@Slf4j
@Api(tags = "提现相关")
@RequestMapping("/withdrawal/")
@RestController
public class WithdrawalController extends BaseController {
@Autowired
private WithdrawalService withdrawalService;
@ApiOperation(value = "提现申请")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("apply")
public ResultBody apply(@RequestBody ApplyWithdrawalVO applyWithdrawalVO, HttpServletRequest request) {
return withdrawalService.apply(applyWithdrawalVO, this.getUserLoginInfoFromRedis(request).getUserAccountId());
}
// @ApiOperation(value = "个人提现明细列表-V1")
// @ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserBillingDetailVO.class)})
// @PostMapping("withdrawalList")
// public ResultBody<UserBillingDetailVO> withdrawalList(HttpServletRequest request, @RequestBody WalletFlowQO walletFlowQO) {
// return withdrawalService.withdrawalList(this.getUserLoginInfoFromRedis(request).getUserAccountId(), walletFlowQO);
// }
@ApiOperation(value = "个人提现明细列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserBillingDetailVO.class)})
@PostMapping("withdrawalList")
public ResultBody<UserBillingDetailVO> withdrawalList(HttpServletRequest request, @RequestBody WalletFlowQO walletFlowQO) {
return withdrawalService.withdrawalList(this.getUserLoginInfoFromRedis(request).getUserAccountId(), walletFlowQO);
}
@ApiOperation(value = "PC端-提现管理-分页查询")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = WithdrawalApplyDTO.class)})
@PostMapping("listPageWithdrawalApply")
public ResultBody<WithdrawalApplyDTO> listPageWithdrawalApply(
@ApiParam(value = "提现管理查询QO", required = true) @RequestBody WithdrawalApplyQO param) {
return ResultBody.success(withdrawalService.listPageWithdrawalApply(param));
}
@ApiOperation(value = "PC端-提现管理-审批")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("approveWithdrawalApply")
public ResultBody approveWithdrawalApply(@ApiParam(value = "申请单ID", required = true) @RequestParam Integer id,
@ApiParam(value = "状态: 0提现申请中 1审批通过 2审批未通过", required = true) @RequestParam Integer applyStatus,
@ApiParam(value = "备注") String remark,
HttpServletRequest request) {
return ResultBody.success(withdrawalService.approveWithdrawalApply(id, applyStatus, this.getUserLoginInfoFromRedis(request).getUserAccountId(), remark));
}
}
package com.mmc.iuav.user.controller.xzsz;
import cn.hutool.json.JSONObject;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.controller.BaseController;
import com.mmc.iuav.user.model.vo.XzAuthVO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.service.xzsz.XzService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author: zj
* @Date: 2023/8/20 14:01
*/
@Slf4j
@Api(tags = "小猪算账api")
@RequestMapping("/xz/")
@RestController
public class XzController extends BaseController {
@Autowired
private XzService xzService;
@ApiOperation(value = "税源地公司信息查询-V2")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("getTaxFundList")
public ResultBody getTaxFundList() {
return xzService.getTaxFundList();
}
@ApiOperation(value = "资金池汇总余额查询-V2")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("getCashPooling")
public ResultBody getCashPooling() {
return xzService.getCashPooling();
}
@ApiOperation(value = "查询税源地可用资金-V2")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("getUsableCashPooling")
public ResultBody getUsableCashPooling() {
return ResultBody.success(xzService.getUsableCashPooling());
}
@ApiOperation(value = "签约状态查询")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("getContractScope")
public ResultBody getContractScope(@RequestBody XzAuthVO xzAuthVO) {
return ResultBody.success(xzService.getContractScope(xzAuthVO));
}
@ApiOperation(value = "发起合同签署")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("hasKeyByUrl")
public ResultBody hasKeyByUrl(HttpServletRequest request) {
return ResultBody.success(xzService.hasKeyByUrl(this.getUserLoginInfoFromRedis(request)));
}
@ApiOperation(value = "查询签署结果")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("getSignedResult")
public ResultBody getSignedResult(@RequestBody XzAuthVO xzAuthVO) {
return ResultBody.success(com.alibaba.fastjson2.JSONObject.toJSONString(xzService.getSignedResult(xzAuthVO)));
}
@ApiOperation(value = "在线浏览合同")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("viewContract")
public ResultBody viewContract(@RequestParam String documentId) {
return ResultBody.success(xzService.viewContract(documentId));
}
@ApiOperation(value = "刷脸数据删除")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("clearTestFace")
public ResultBody clearTestFace(@RequestParam String name, @RequestParam String idCard) {
return xzService.clearTestFace(name, idCard);
}
@ApiOperation(value = "特殊单笔提现上报")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("singleSubmitLimit")
public ResultBody singleSubmitLimit(@RequestBody XzWithdrawalVO xzWithdrawalVO) {
return ResultBody.success(xzService.singleSubmitLimit(xzWithdrawalVO));
}
@ApiOperation(value = "单笔提现上报")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("singleSubmit")
public ResultBody singleSubmit(@RequestBody XzWithdrawalVO xzWithdrawalVO) {
return ResultBody.success(xzService.singleSubmit(xzWithdrawalVO));
}
@ApiOperation(value = "查询提现结果")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("querySingleTrade")
public ResultBody querySingleTrade(@RequestParam String outerTradeNo) {
return ResultBody.success(xzService.querySingleTrade(outerTradeNo));
}
@ApiOperation(value = "查询单笔交易回单")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("querySingleReceipt")
public ResultBody querySingleReceipt(@RequestParam String frontLogNo) {
return xzService.querySingleReceipt(frontLogNo);
}
@ApiOperation(value = "签署结果回调")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("xzAuthNotify")
public String xzAuthNotify(@RequestBody JSONObject notify) {
return xzService.xzAuthNotify(notify);
}
@ApiOperation(value = "回调通知(单笔)")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("xzWithdrawNotify")
public String xzWithdrawNotify(@RequestBody JSONObject notify) {
return xzService.xzWithdrawNotify(notify);
}
}
......@@ -165,4 +165,7 @@ public interface UserServiceDao {
* @return
*/
List<UserAccountDO> getUserAccountByPhoneNum(String phoneNum);
UserAccountDO getUserAccountInfoByOpenId(String openid);
}
package com.mmc.iuav.user.dao.fdd;
import com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO;
import com.mmc.iuav.user.entity.fdd.UserFddDO;
import org.apache.ibatis.annotations.Mapper;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:46
*/
@Mapper
public interface UserFddAuthDao {
UserFddDO checkRegisterFdd(String unionId, Integer flag);
void insertAppUserFdd(UserFddDO userFddDO);
FddVerifyInfoDO getVerifyUrl(String customerId);
void insertVerifyInfo(FddVerifyInfoDO verifyInfoDO1);
void updateCompanyCertStatus(String customerId, String status);
UserFddDO getAppUserFddInfo(String unionId);
// void insertAppUserFdd(UserFddDO appUserFddDO1);
//
// AppEVerifyInfoDO getCompanyVerifyUrl(String customerId);
//
// void insertAppEVerifyInfo(AppEVerifyInfoDO appEVerifyInfoDO1);
//
// void updateCompanyCertStatus(String customerId, String status);
//
//
// List<UserFddDO> feignGetAppUserFddInfo(List<String> unionIds);
//
// UserFddDO getAppUserFddInfoByCustomerId(String customerId);
}
package com.mmc.iuav.user.dao.wallet;
import com.mmc.iuav.user.entity.XzWithdrawalApplyDO;
import com.mmc.iuav.user.entity.wallet.PayLogDO;
import com.mmc.iuav.user.entity.wallet.PayWalletDO;
import com.mmc.iuav.user.entity.wallet.WithdrawalLogDO;
import com.mmc.iuav.user.model.qo.wallet.WalletFlowQO;
import com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author LW
......@@ -13,4 +21,30 @@ public interface PayWalletDao {
PayWalletDO getPayWalletByUser(Integer userAccountId);
void insertPayWalletInfo(PayWalletDO wallet);
void insertPayLogDO(PayLogDO payWalletDO);
int updatePayWallet(PayWalletDO updatePayWallet);
List<PayLogDO> getPayLog(WalletFlowQO param);
int countPayLog(WalletFlowQO param);
PayLogDO getPayLogById(Integer id);
void insertWithdrawalLog(WithdrawalLogDO withdrawalLogDO);
List<XzWithdrawalApplyDO> getWithdrawalListByUserAccountId(WalletFlowQO param);
XzWithdrawalApplyDO getWithdrawalApplyByIdOrOuterTradeNo(@Param(value = "id") Integer id, @Param(value = "outerTradeNo") String outerTradeNo);
List<WithdrawalLogDO> listPayWithdrawalLog(Integer id);
int countPayWithdrawalLog(WalletFlowQO param);
int countWithdrawalApply(WithdrawalApplyQO param);
List<XzWithdrawalApplyDO> listPageWithdrawalApply(WithdrawalApplyQO param);
int updateWithdrawalApply(XzWithdrawalApplyDO apply);
}
package com.mmc.iuav.user.dao.xzsz;
import com.mmc.iuav.user.entity.XzWithdrawalApplyDO;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: zj
* @Date: 2023/8/23 16:10
*/
@Mapper
public interface WithdrawalDao {
void insertWithdrawalApply(XzWithdrawalApplyDO xzWithdrawalApplyDO);
}
package com.mmc.iuav.user.dao.xzsz;
import com.mmc.iuav.user.entity.XzAuthDO;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: zj
* @Date: 2023/8/21 16:24
*/
@Mapper
public interface XzDao {
int addAuth(XzAuthDO authDO);
XzAuthDO getXzAuthByUserAccountId(Integer userAccountId);
}
......@@ -44,6 +44,8 @@ public class UserAccountDO implements Serializable {
private Integer cityCode;
private Integer districtCode;
private Integer xzAuthStatus;
private Integer companyAuthStatus;
private String companyName;
private Integer leader;
......@@ -111,6 +113,7 @@ public class UserAccountDO implements Serializable {
.userRcdVO(this.userRcdDO == null ? null : this.userRcdDO.buildUserRcdVO())
.leader(this.leader)
.realNameAuthStatus(this.realNameAuthStatus)
.xzAuthStatus(this.xzAuthStatus)
.auditStatus(this.auditStatus)
.totalPoints(this.totalPoints)
.build();
......
package com.mmc.iuav.user.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/8/21 15:50
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class XzAuthDO implements Serializable {
private static final long serialVersionUID = 48590767645438311L;
private Integer id;
private Integer userAccountId;
private String name;
private String idCardNo;
private String mobile;
private String bankAccount;
private String subsidiary_name;
private String document_id;
private String customParams;
private String contract_url;
private Integer deleted;
private Date create_time;
private Integer xzAuthStatus;
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.entity.wallet.UserBillingDetailVO;
import com.mmc.iuav.user.enums.SettleTypeEnum;
import com.mmc.iuav.user.enums.XzEnums;
import com.mmc.iuav.user.model.dto.wallet.WithdrawalApplyDTO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
import com.mmc.iuav.user.util.PrivacyUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/8/23 16:17
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class XzWithdrawalApplyDO implements Serializable {
private static final long serialVersionUID = 7891653696372539753L;
private Integer id;
private Integer userAccountId;
private Integer applyStatus;
private String bankName;
private String bankRemo;
private String empNum;
private String empName;
private String empPhone;
private String licenseId;
private String licenseType;
private String month;
private String notifyUrl;
private String outerTradeNo;
private String payAccount;
private Double payAmount;
private String positionName;
private String remarks;
private String settleType;
private String taxFundId;
private String wechatAppId;
private String tradeStatus;
private String tradeTime;
private String frontLogNo;
private String tradeFailCode;
private String tradeResult;
private String submitStatus;
private String errorCode;
private Date payTime;
private String errorMessage;
private BigDecimal chargeAmount;
private Date createTime;
private String remark;
private Integer approveUser;
private Date approveTime;
public XzWithdrawalApplyDO(XzWithdrawalVO xzWithdrawalVO) {
this.userAccountId = xzWithdrawalVO.getUserAccountId();
this.notifyUrl = xzWithdrawalVO.getNotifyUrl();
this.taxFundId = xzWithdrawalVO.getTaxFundId();
this.month = xzWithdrawalVO.getMonth();
this.outerTradeNo = xzWithdrawalVO.getOuterTradeNo();
this.empName = xzWithdrawalVO.getEmpName();
this.empPhone = xzWithdrawalVO.getEmpPhone();
this.empNum = xzWithdrawalVO.getEmpNum();
this.licenseId = xzWithdrawalVO.getLicenseId();
this.licenseType = xzWithdrawalVO.getLicenseType();
this.settleType = xzWithdrawalVO.getSettleType();
this.payAmount = xzWithdrawalVO.getPayAmount();
this.payAccount = xzWithdrawalVO.getSettleType().equals(SettleTypeEnum.BANK.getCode()) ?
xzWithdrawalVO.getPayAccount() : xzWithdrawalVO.getWechatAppId();
this.bankName = xzWithdrawalVO.getBankName();
this.positionName = xzWithdrawalVO.getPositionName();
this.remarks = xzWithdrawalVO.getRemarks();
this.bankRemo = xzWithdrawalVO.getBankRemo();
}
public XzWithdrawalApplyDO(ApplyWithdrawalVO applyWithdrawalVO) {
this.userAccountId = applyWithdrawalVO.getUserAccountId();
this.bankName = applyWithdrawalVO.getBankName();
this.settleType = applyWithdrawalVO.getSettleType();
this.payAccount = applyWithdrawalVO.getPayAccount();
this.positionName = applyWithdrawalVO.getPositionName();
this.payAmount = applyWithdrawalVO.getPayAmount().doubleValue();
}
public UserBillingDetailVO buildUserBillingDetailVO() {
payAccount = PrivacyUtil.encryptBankAcct(payAccount);
String name = "提现";
if (this.tradeStatus.equals(XzEnums.apply.getCode())) {
name = XzEnums.apply.getName();
} else if (this.tradeStatus.equals(XzEnums.await.getCode())) {
name = XzEnums.await.getName();
} else if (this.tradeStatus.equals(XzEnums.handle.getCode())) {
name = XzEnums.handle.getName();
} else if (this.tradeStatus.equals(XzEnums.failure.getCode())) {
name = XzEnums.failure.getName();
} else if (this.tradeStatus.equals(XzEnums.success.getCode())) {
name = XzEnums.success.getName();
} else if (this.applyStatus == 2) {
name = "提现审批未通过";
}
BigDecimal salaryAmtPaid;
if (this.tradeStatus.equals(XzEnums.failure.getCode()) || this.applyStatus == 2) {
salaryAmtPaid = new BigDecimal(payAmount);
} else {
salaryAmtPaid = new BigDecimal(payAmount).negate();
}
return UserBillingDetailVO.builder().userAccountId(userAccountId)
.payNo(outerTradeNo).payTime(payTime).account(payAccount).name(name).id(id)
.salaryAmtPaid(salaryAmtPaid).tradeResult(tradeResult).build();
}
public WithdrawalApplyDTO buildWithdrawalApplyDTO() {
return WithdrawalApplyDTO.builder().id(id).userAccountId(userAccountId).applyAmt(new BigDecimal(payAmount))
.applyStatus(applyStatus).empName(empName).bankName(bankName).payAccount(payAccount)
.remark(remark).outerTradeNo(outerTradeNo).tradeStatus(tradeStatus).phoneNum(empPhone).settleType(settleType)
.tradeResult(tradeResult).createTime(createTime).build();
}
}
package com.mmc.iuav.user.entity.fdd;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author:zhenjie Date:2022/7/22
* time:11:33
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FddVerifyInfoDO implements Serializable {
private static final long serialVersionUID = 7766546708723743143L;
private Integer id;
private Integer userFddId;
private String customerId;
private String transactionNo;
private String url;
private Integer deleted;
private Date createTime;
private Date updateTime;
}
package com.mmc.iuav.user.entity.fdd;
import com.mmc.iuav.user.model.fdd.dto.UserFddDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:51
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserFddDO implements Serializable {
private static final long serialVersionUID = -6432171445803296265L;
private Integer id;
private String unionId;
private String customerId;
private Integer personVerifyStatus;
private Integer entVerifyStatus;
private Integer accountType;
private Date createTime;
private Date updateTime;
public UserFddDTO buildUserFddDTO() {
return UserFddDTO.builder().id(this.id).unionId(this.unionId).customerId(this.customerId).personVerifyStatus(this.personVerifyStatus)
.entVerifyStatus(this.entVerifyStatus).accountType(this.accountType).createTime(this.createTime).updateTime(this.updateTime).build();
}
}
package com.mmc.iuav.user.entity.wallet;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
......@@ -9,6 +14,9 @@ import java.util.Date;
* @author makejava
* @since 2023-08-18 16:18:01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PayLogDO implements Serializable {
private static final long serialVersionUID = 752682324297846133L;
......@@ -26,17 +34,18 @@ public class PayLogDO implements Serializable {
*/
private String payNo;
/**
* 0手动变更(大于0充值or小于0扣除) 100订单扣除 150订单冻结 200订单完成 250提现扣除
* 支付方式 100(订单发布) 200(无人接单取消订单)300(有人接单取消订单)400(飞手抢单)500(客服判定飞手无责取消订单)
* 600(飞手有责取消订单)700(正常结算)800(修改订单金额状态)900(飞手未确认修改金额状态)1000(飞手确认修改金额状态)1100(充值) 1200(提现)
*/
private Integer payMethod;
/**
* 云享金变动金额(正数充值,负数扣除)
*/
private Double cashAmtPaid;
private BigDecimal cashAmtPaid;
/**
* 佣金变动金额(正数入账,负数扣除)
*/
private Double salaryAmtPaid;
private BigDecimal salaryAmtPaid;
/**
* 支付时间
*/
......@@ -54,102 +63,12 @@ public class PayLogDO implements Serializable {
private Date updateTime;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserAccountId() {
return userAccountId;
}
public void setUserAccountId(Integer userAccountId) {
this.userAccountId = userAccountId;
}
public Integer getOrderNo() {
return orderNo;
}
public void setOrderNo(Integer orderNo) {
this.orderNo = orderNo;
}
public String getPayNo() {
return payNo;
}
public void setPayNo(String payNo) {
this.payNo = payNo;
}
public Integer getPayMethod() {
return payMethod;
}
public void setPayMethod(Integer payMethod) {
this.payMethod = payMethod;
}
public Double getCashAmtPaid() {
return cashAmtPaid;
}
public void setCashAmtPaid(Double cashAmtPaid) {
this.cashAmtPaid = cashAmtPaid;
}
public Double getSalaryAmtPaid() {
return salaryAmtPaid;
}
public void setSalaryAmtPaid(Double salaryAmtPaid) {
this.salaryAmtPaid = salaryAmtPaid;
}
public Date getPayTime() {
return payTime;
}
public void setPayTime(Date payTime) {
this.payTime = payTime;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Integer getOperateUser() {
return operateUser;
}
public void setOperateUser(Integer operateUser) {
this.operateUser = operateUser;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
public UserBillingDetailVO buildUserBillingDetailVO() {
return UserBillingDetailVO.builder().userAccountId(userAccountId).payNo(payNo)
.payTime(payTime).payMethod(payMethod).cashAmtPaid(cashAmtPaid)
.salaryAmtPaid(salaryAmtPaid).name(name).id(id).build();
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
......@@ -53,6 +53,13 @@ public class PayWalletDO implements Serializable {
*/
private BigDecimal salaryFreeze;
private BigDecimal wxCashFreeze;
/**
* 提现冻结
*/
private BigDecimal wdlFreeze;
/**
* 提现总额
*/
......@@ -65,9 +72,8 @@ public class PayWalletDO implements Serializable {
public PayWalletDTO buildPayWalletDTO() {
return PayWalletDTO.builder().id(this.id).userAccountId(this.userAccountId)
.cashAmt(this.cashAmt).cashFreeze(this.cashFreeze)
.cashPaid(this.cashPaid).salaryAmt(this.salaryAmt)
.salaryFreeze(this.salaryFreeze).salaryPaid(this.salaryPaid)
.rebateWdl(this.salaryWdl).build();
.salaryAmt(this.salaryAmt).salaryFreeze(this.salaryFreeze.add(this.wdlFreeze))
.rebateWdl(this.salaryWdl).wdlFreeze(this.wdlFreeze).build();
}
public void defaultValue() {
......@@ -78,6 +84,7 @@ public class PayWalletDO implements Serializable {
this.salaryPaid = BigDecimal.ZERO;
this.salaryFreeze = BigDecimal.ZERO;
this.salaryWdl = BigDecimal.ZERO;
this.wxCashFreeze = BigDecimal.ZERO;
}
}
package com.mmc.iuav.user.entity.wallet;
import com.mmc.iuav.user.enums.RebateMethod;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Author LW
* @date 2023/8/24 14:37
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserBillingDetailVO implements Serializable {
private static final long serialVersionUID = -113701726830167312L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "用户id")
private Integer userAccountId;
@ApiModelProperty(value = "流水编号")
private String payNo;
@ApiModelProperty(value = "操作方式")
private Integer payMethod;
@ApiModelProperty(value = "云享金变动金额(正数充值,负数扣除)")
private BigDecimal cashAmtPaid;
@ApiModelProperty(value = "佣金变动金额(正数入账,负数扣除)")
private BigDecimal salaryAmtPaid;
@ApiModelProperty(value = "操作时间")
private Date payTime;
@ApiModelProperty(value = "操作名称")
private String name;
@ApiModelProperty(value = "交易说明")
private String tradeResult;
@ApiModelProperty(value = "到账账户")
private String account;
@ApiModelProperty(value = "处理进度")
private List<Schedule> schedules;
public void buildSchedules(List<WithdrawalLogDO> list) {
this.schedules = new ArrayList<Schedule>();
for (WithdrawalLogDO d : list) {
if (RebateMethod.PENDING.getCode().equals(d.getPayMethod().toString())) {
Schedule sd = new Schedule();
sd.setTitle(RebateMethod.PENDING.getStatus());
sd.setAcTime(d.getPayTime());
sd.setActive(1);
this.schedules.add(sd);
} else if (RebateMethod.SUCCESS.getCode().equals(d.getPayMethod().toString())) {
Schedule sd = new Schedule();
sd.setTitle(RebateMethod.SUCCESS.getStatus());
sd.setAcTime(d.getPayTime());
sd.setActive(1);
this.schedules.add(sd);
} else if (RebateMethod.FAIL.getCode().equals(d.getPayMethod().toString())) {
Schedule sd = new Schedule();
sd.setTitle(RebateMethod.FAIL.getStatus());
sd.setAcTime(d.getPayTime());
sd.setActive(1);
this.schedules.add(sd);
}
}
if (this.schedules.size() == 1) {
Schedule sd = new Schedule();
sd.setTitle(RebateMethod.SUCCESS.getStatus());
sd.setActive(0);
this.schedules.add(sd);
}
}
public static class Schedule {
private String title;
private Date acTime;
private Integer active;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getAcTime() {
return acTime;
}
public void setAcTime(Date acTime) {
this.acTime = acTime;
}
public Integer getActive() {
return active;
}
public void setActive(Integer active) {
this.active = active;
}
}
}
package com.mmc.iuav.user.entity.wallet;
import com.mmc.iuav.user.enums.WithdrawalMethod;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* (WithdrawalLogDO)实体类
*
* @author makejava
* @since 2023-08-25 16:57:13
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WithdrawalLogDO implements Serializable {
private static final long serialVersionUID = 757884073681912750L;
private Integer id;
/**
* 用户id
*/
private Integer userAccountId;
/**
* 支付流水号(T202109031615XXXX)XXXX随机数
*/
private String payNo;
/**
* 150:提现冻结 200:提现成功 250:提现失败
*/
private Integer payMethod;
/**
* 流水时间
*/
private Date payTime;
/**
* 提现申请id
*/
private Integer xzWithdrawalApplyId;
private String typeName;
/**
* 提现冻结
*/
private BigDecimal salaryFreeze;
private BigDecimal salaryPaid;
private Date createTime;
private Date updateTime;
public UserBillingDetailVO buildUserBillingDetailVO() {
if (payMethod.equals(WithdrawalMethod.TXDJ.getCode())) {
this.typeName = WithdrawalMethod.TXDJ.getName();
}
if (payMethod.equals(WithdrawalMethod.TXCG.getCode())) {
this.typeName = WithdrawalMethod.TXCG.getName();
}
if (payMethod.equals(WithdrawalMethod.TXSB.getCode())) {
this.typeName = WithdrawalMethod.TXSB.getName();
}
return UserBillingDetailVO.builder().id(id).userAccountId(userAccountId)
.payMethod(payMethod).payTime(payTime).salaryAmtPaid(salaryFreeze == null ? salaryPaid : salaryFreeze)
.payNo(payNo).name(typeName).build();
}
}
package com.mmc.iuav.user.enums;
/**
* @Author LW
* @date 2023/8/19 18:53
* 概要:
*/
public enum PayMethodEnums {
PUBLISH_ORDER(100, "订单发布"),
CANCEL_ORDER_TAKING(200, "未接单时取消订单"),
RECEIVED_ORDER_CANCEL(300, "已接单取消订单"),
FLYING_ORDER_TAKING(400, "飞手抢单"),
CUSTOMER_SERVICE_CANCEL_ORDER(500, "客服判定飞手无责取消订单"),
FLYER_CANCEL_ORDER(600, "飞手有责取消订单"),
NORMAL_SETTLEMENT(700, "正常结算"),
MODIFY_THE_ORDER(800, "修改订单金额状态(大于)"),
FLYING_HAND_NOT_CONFIRMED_GT(900, "飞手未确认修改金额大于原订单状态"),
FLYING_HAND_CONFIRM_LT(1000, "飞手确认修改金额小于原订单状态"),
USER_TOP_UP(1100, "充值");
PayMethodEnums(Integer code, String method) {
this.code = code;
this.method = method;
}
private Integer code;
private String method;
public Integer getCode() {
return this.code;
}
public String getMethod() {
return this.method;
}
}
package com.mmc.iuav.user.enums;
/**
* @author 作者 lw
* @version 创建时间:2023.8.26 下午5:29:24
* @explain 类说明
*/
public enum RebateMethod {
PENDING("150", "提现申请"), SUCCESS("200", "提现到账"), FAIL("250", "提现失败");
RebateMethod(String code, String status) {
this.code = code;
this.status = status;
}
private String code;
private String status;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
package com.mmc.iuav.user.enums;
/**
* @author: zj
* @Date: 2023/8/23 16:50
*/
public enum SettleTypeEnum {
ALIPAY("alipay", "支付宝"), WECHAT("wechatpay", "微信"), BANK("bankcard", "银行卡");
SettleTypeEnum(String code, String status) {
this.code = code;
this.status = status;
}
private String code;
private String status;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
package com.mmc.iuav.user.enums;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月29日 下午2:43:14
* @explain 类说明
*/
public enum WithdrawalApplyStatus {
TXSQ(0, "提现申请中"), TXCG(1, "提现成功"), TXSB(2, "提现失败");
private Integer code;
private String name;
WithdrawalApplyStatus(Integer code, String name) {
this.code = code;
this.name = name;
}
public void setCode(Integer code) {
this.code = code;
}
public Integer getCode() {
return this.code;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
package com.mmc.iuav.user.enums;
/**
* @author 作者 LW
* @version 创建时间:2023.8.26 10:56
* @explain 类说明
*/
public enum WithdrawalMethod {
TXDJ(150, "提现冻结"), TXCG(200, "提现成功"), TXSB(250, "提现失败");
private Integer code;
private String name;
WithdrawalMethod(Integer code, String name) {
this.code = code;
this.name = name;
}
public void setCode(Integer code) {
this.code = code;
}
public Integer getCode() {
return this.code;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
package com.mmc.iuav.user.enums;
/**
* @author 作者 LW
* @version 创建时间:2023.8.26 10:56
* @explain 类说明
*/
public enum XzEnums {
submit_result("submitResult", "上报结果通知"), trade_result("tradeResult", "交易结果通知"),
await("await", "待发放"), handle("handle", "交易中"), success("success", "提现成功"),
failure("failure", "提现失败"), is_success("isSuccess", "交易是否成功"), T("T", "回调code"), F("F", "回调code"),
apply("apply", "提现申请"), cancel("cancel", "撤销"), pay("pay", "支付"), refund("refund", "退款");
private String code;
private String name;
XzEnums(String code, String name) {
this.code = code;
this.name = name;
}
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return this.code;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
package com.mmc.iuav.user.mq;
import com.mmc.iuav.user.mq.constant.RabbitmqConstant;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
......@@ -14,7 +15,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class FanoutExchangeConfig {
@Bean
public FanoutExchange fanoutExchange(){
public FanoutExchange fanoutExchange() {
return new FanoutExchange(RabbitmqConstant.USER_INFO_UPDATE_FANOUT_EXCHANGE);
}
......
package com.mmc.iuav.user.mq;
package com.mmc.iuav.user.mq.constant;
/**
* @author: zj
......@@ -8,4 +8,20 @@ public class RabbitmqConstant {
public final static String USER_INFO_UPDATE_FANOUT_EXCHANGE = "USER_INFO_UPDATE_FANOUT_EXCHANGE";
public final static String USER_INFO_UPDATE_FANOUT_FORUM_QUEUE = "USER_INFO_UPDATE_FANOUT_FORUM_QUEUE";
/**
* 用户充值订单交换机
*/
public final static String USER_TOP_UP_DIRECT_EXCHANGE = "USER_TOP_UP_DIRECT_EXCHANGE";
/**
* 充值订单队列、routing_key
*/
public final static String USER_TOP_UP_DIRECT_QUEUE = "USER_TOP_UP_DIRECT_QUEUE";
public final static String USER_TOP_UP_ROUTING_KEY = "USER_TOP_UP_ROUTING_KEY";
/**
* 充值成功队列、routing_key
*/
public final static String USER_TOP_UP_SUCCESS_QUEUE = "USER_TOP_UP_SUCCESS_QUEUE";
public final static String USER_TOP_UP_SUCCESS_ROUTING_KEY = "USER_TOP_UP_SUCCESS_ROUTING_KEY";
}
......@@ -3,7 +3,7 @@ package com.mmc.iuav.user.mq.impl;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.mq.MqProducer;
import com.mmc.iuav.user.mq.RabbitmqConstant;
import com.mmc.iuav.user.mq.constant.RabbitmqConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.mmc.iuav.user.mq.listener;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO;
import com.mmc.iuav.user.mq.constant.RabbitmqConstant;
import com.mmc.iuav.user.service.wallet.PayWalletService;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @Author LW
* @date 2023/6/29 10:35 概要:
*/
@Slf4j
@Component
public class OrderMqConsumer {
@Resource
PayWalletService payWalletService;
@RabbitListener(queues = RabbitmqConstant.USER_TOP_UP_SUCCESS_QUEUE)
public void subscribeDirectQueue(@Payload String topUpOrder, Channel channel, Message message) {
TopUpOrderVO topUpOrderVO = JSONObject.parseObject(topUpOrder, TopUpOrderVO.class);
log.info("<==========用户充值成功消费开始:订单信息是---->{}==========>", topUpOrderVO);
payWalletService.feignTopUpCash(topUpOrderVO);
log.info("<==========用户充值成功消费结束==========>");
}
}
......@@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletRequest;
public interface WxService {
/**
* 小程序登录调用接口
*
* @param wxLoginVO
* @return
*/
......@@ -21,6 +22,7 @@ public interface WxService {
/**
* pc扫码登录
*
* @param wxLoginVO
* @return
*/
......@@ -28,36 +30,49 @@ public interface WxService {
/**
* 获取AccessToken
*
* @return
*/
String getAccessToken();
/**
* 获取稳定AccessToken
*
* @return
*/
String getStableAccessToken() throws Exception;
/**
* 获取公众号AccessToken
*
* @return
*/
String getSubAccessToken();
/**
* 获取公众号稳定版accessToken
*
* @return
*/
String getSubStableAccessToken();
/**
* 监控微信公众号的事件变化通知
*
* @param request
*/
String receiveSubAccountEvents(HttpServletRequest request);
/**
* 公众号推送模板消息-不需要用户同意
*
* @return
*/
ResultBody sendSubTemplateMsg(WxMsgVO ws);
/**
* 获取不限制的小程序码
*
* @param path
* @param scene
*/
......@@ -65,12 +80,14 @@ public interface WxService {
/**
* 小程序推送订阅号消息-需用户同意订阅
*
* @param appletMsgVO
*/
ResultBody sendAppletMsg(AppletMsgVO appletMsgVO);
/**
* 生成小程序链接
*
* @param path
* @param query
* @return
......@@ -85,4 +102,10 @@ public interface WxService {
* @return
*/
String getUserPhoneNumber(Integer id, String code);
ResultBody rid(String rid) throws Exception;
ResultBody moveSubUserToTest();
ResultBody moveSubUserUnionIdToTest();
}
package com.mmc.iuav.user.service.fdd;
/**
* author:zhenjie
* Date:2022/7/16
* time:15:30
*/
public interface FddService {
String register(String uid, String accountType);
String getApplyCert(String customerId, String transactionNo);
// ResultBody getFileByUuid(String uuid, String docType);
}
package com.mmc.iuav.user.service.fdd;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.fdd.dto.UserFddDTO;
import java.util.Map;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:46
*/
public interface UserFddAuthService {
String register(String uid, String accountType);
ResultBody getPersonVerifyUrl(Integer userAccountId);
ResultBody getCompanyVerifyUrl(Integer port, LoginSuccessDTO loginSuccessDTO);
ResultBody notifyECertRes(Map<String, String> map);
ResultBody findCompanyCertInfo(Integer port, Integer flag, LoginSuccessDTO loginSuccessDTO);
String replaceUnableString(String uid);
ResultBody<UserFddDTO> getAppUserFddInfo(Integer port, LoginSuccessDTO loginSuccessDTO);
ResultBody getFileByUuid(String uuid, String docType);
// List<UserFddDTO> feignGetAppUserFddInfo(List<String> unionId);
}
......@@ -18,6 +18,7 @@ import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.qo.LoginUserQO;
import com.mmc.iuav.user.model.vo.*;
import com.mmc.iuav.user.service.*;
import com.mmc.iuav.user.service.wallet.PayWalletService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -25,6 +26,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.TimeUnit;
......@@ -66,8 +68,12 @@ public class AuthServiceImpl implements AuthService {
@Autowired
private AuthHandler authHandler;
@Resource
private PayWalletService payWalletService;
@Transactional
@Override
public ResultBody appletLogin(WxLoginVO wxLoginVO) {
String unionId;
String openId;
......@@ -101,6 +107,8 @@ public class AuthServiceImpl implements AuthService {
userAccountDO.setSource(wxLoginVO.getSource());
userAccountService.insertUserAccount(userAccountDO);
userAccountVO = userAccountDO.buildUserAccountVO();
// 创建用户钱包
payWalletService.initPayWallet(userAccountDO.getId());
payClient.createWallet(userAccountDO.getId());
// 查询之前有没有实名过
RealNameAuthDO nameAuthByUnionId = realNameAuthDao.getRealNameAuthBakByUnionId(unionId);
......
......@@ -162,7 +162,6 @@ public class BackUserAccountServiceImpl implements BackUserAccountService {
if (companyInfoVO != null && companyInfoVO.getCompanyType().equals(CompanyTypeEnums.FRANCHISEE.getType())) {
// 加盟企业的账号,需要把对应的成员和后台账号解绑
companyService.unbindingAllUsers(companyInfoVO.getId());
companyService.deleteCompanyInfoById(companyInfoVO.getId());
}
String accountNo = "DISABLE_" + backUserAccountDO.getAccountNo() + RandomStringUtils.randomAlphanumeric(3);
backUserAccountDao.disableBackUserAccountDO(accountId, accountNo);
......
......@@ -46,6 +46,7 @@ public class RealNameAuthServiceImpl implements RealNameAuthService {
@Override
public ResultBody add(RealNameAuthVO realNameAuthVO) {
log.info("RealNameAuthVO:{}", JSONObject.toJSONString(realNameAuthVO));
RealNameAuthDO realNameAuthDO0 = realNameAuthDao.getRealNameAuthByUId(realNameAuthVO.getUserAccountId());
if (realNameAuthDO0 != null && realNameAuthDO0.getCheckStatus().equals(1)) {
return ResultBody.error(ResultEnum.REAL_NAME_PASS_ERROR);
......
......@@ -6,15 +6,11 @@ import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.controller.userpoints.config.NumberOfUserPoints;
import com.mmc.iuav.user.controller.userpoints.config.UserPointsEnum;
import com.mmc.iuav.user.dao.CooperationDao;
import com.mmc.iuav.user.dao.RealNameAuthDao;
import com.mmc.iuav.user.dao.UserServiceDao;
import com.mmc.iuav.user.dao.*;
import com.mmc.iuav.user.dao.userpoints.UserPointsDao;
import com.mmc.iuav.user.dao.userpoints.UserPointsDetailsDao;
import com.mmc.iuav.user.entity.CooperationTagDO;
import com.mmc.iuav.user.entity.RealNameAuthDO;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.UserRcdDO;
import com.mmc.iuav.user.dao.xzsz.XzDao;
import com.mmc.iuav.user.entity.*;
import com.mmc.iuav.user.entity.userpoints.UserPointsDO;
import com.mmc.iuav.user.entity.userpoints.UserPointsDetails;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
......@@ -78,6 +74,12 @@ public class UserAccountServiceImpl implements UserAccountService {
@Autowired
private RealNameAuthDao realNameAuthDao;
@Autowired
private XzDao xzDao;
@Autowired
private UserSubInfoDao userSubInfoDao;
@Override
public UserAccountVO getUserAccountInfoByUnionId(String unionId) {
......@@ -104,6 +106,7 @@ public class UserAccountServiceImpl implements UserAccountService {
RealNameAuthDTO realNameAuthDTO = nameAuthDTOResultBody.getResult();
if (realNameAuthDTO != null && realNameAuthDTO.getCheckStatus().equals(1)) {
userAccountVO.setRealNameAuthStatus(1);
userAccountVO.setUserName(realNameAuthDTO.getUserName());
}
CompanyAuthVO companyAuthVO = companyAuthService.getCompanyAuthByUId(userAccountId);
if (companyAuthVO != null) {
......@@ -116,6 +119,18 @@ public class UserAccountServiceImpl implements UserAccountService {
List<CooperationTagVO> cooperationTags = cooperationTagDOS.stream().map(CooperationTagDO::buildCooperationTagVO).collect(Collectors.toList());
userAccountVO.setCooperationTagVOS(cooperationTags);
}
XzAuthDO xzAuthDO = xzDao.getXzAuthByUserAccountId(userAccountId);
if (xzAuthDO != null) {
userAccountVO.setXzAuthStatus(xzAuthDO.getXzAuthStatus());
} else {
userAccountVO.setXzAuthStatus(0);
}
UserSubInfoDO userSubInfoDO = userSubInfoDao.getUserSubInfoByUnionId(userAccountDO.getUnionId());
if (userSubInfoDO != null && userSubInfoDO.getRegStatus().equals(1)) {
userAccountVO.setSubStatus(1);
} else {
userAccountVO.setSubStatus(0);
}
return userAccountVO;
}
......@@ -358,12 +373,26 @@ public class UserAccountServiceImpl implements UserAccountService {
}
}
@Autowired
private CompanyDao companyDao;
@Override
public ResultBody disableAppAccount(Integer userAccountId) {
userServiceDao.disableUserAccount(CodeUtil.removeUserAccount(), userAccountId);
UserAccountVO userAccountVO = new UserAccountVO();
userAccountVO.setId(userAccountId);
userAccountVO.setDeleted(1);
// 删除绑定企业信息,
// 该企业只有一人时可以直接删除,或者不是管理员时也可以直接删除,
// 是管理者时并且有多人则不能删除,提醒解绑成员后才能删除
CompanyInfoDO companyInfoDO = companyDao.getAppCompanyInfoUId(userAccountId);
if (companyInfoDO != null) {
int members = companyDao.countCompanyMembers(companyInfoDO.getId());
if (members > 1 && companyInfoDO.getLeader().equals(1)) {
return ResultBody.error("该用户是单位管理员,暂时不能删除");
}
companyDao.unbindCompanyMember(userAccountId, companyInfoDO.getId());
}
mqProducer.sentUserInfoChangedMsg(userAccountVO);
return ResultBody.success();
}
......
package com.mmc.iuav.user.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.http.HttpHelper;
import com.mmc.iuav.http.HttpsRequestUtil;
......@@ -26,6 +27,7 @@ import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -134,9 +136,39 @@ public class WxServiceImpl implements WxService {
}
@Override
public String getSubStableAccessToken() {
//token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.SHARE_FLY_SUB_STABLE_ACCESS_TOKEN);
if (StringUtils.isBlank(accessToken)) {
Map<String, String> params = new HashMap<String, String>();
params.put("grant_type", "client_credential");
params.put("appid", userSystemConstant.getWxSubAppId());
params.put("secret", userSystemConstant.getWxSubSecret());
String res = null;
try {
res = HttpsRequestUtil.httpsRequest("https://api.weixin.qq.com/cgi-bin/stable_token", "POST", null, JSONObject.toJSONString(params));
} catch (Exception e) {
e.printStackTrace();
}
JSONObject tokenResult = JSONObject.parseObject(res);
if (res.indexOf("access_token") == -1) {
log.info("获取公众号access_token有误:{}", tokenResult);
return null;
}
accessToken = tokenResult.getString("access_token");
long expiresIn = tokenResult.getLong("expires_in");
//保存进redis
stringRedisTemplate.opsForValue().set(WxConstant.SHARE_FLY_SUB_STABLE_ACCESS_TOKEN, accessToken, expiresIn, TimeUnit.SECONDS);
return accessToken;
}
return accessToken;
}
@Override
public String receiveSubAccountEvents(HttpServletRequest request) {
try {
Map<String, String> map = this.convertRequestToMap(request);
log.info("Received wx events(after convert):{}", JSONObject.toJSONString(map));
String event = map.get("Event");
if (WxConstant.subscribe.equals(event)) {
// 关注事件
......@@ -188,8 +220,8 @@ public class WxServiceImpl implements WxService {
try {
String InfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + accessToken + "&openid=" + openid
+ "&lang=zh_CN";
//String jsonStr = HttpsOpenUtil.https(InfoUrl, "GET");// 错误:{"errcode":40013,"errmsg":"invalid appid"}
String jsonStr = HttpsRequestUtil.httpsRequest(InfoUrl, "GET", null, null);
String jsonStr = HttpsRequestUtil.httpsGet(InfoUrl, null);
log.info("updateWXUserInfo:{}", jsonStr);
JSONObject obj = JSONObject.parseObject(jsonStr);
// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
Integer subscribe = obj.getInteger("subscribe");
......@@ -215,10 +247,11 @@ public class WxServiceImpl implements WxService {
public ResultBody sendSubTemplateMsg(WxMsgVO ws) {
String accessToken = null;
try {
accessToken = this.getSubAccessToken();
accessToken = this.getSubStableAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
String param = ws.buildMsgJson();
String param = ws.buildTemplateMsg();
String result = HttpHelper.httpPost(url, param);
log.info("模板消息发送结果:{}", result);
} catch (Exception e) {
log.error("accessToken获取失败:{}", e.getMessage());
return ResultBody.error(ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultCode(),
......@@ -307,4 +340,64 @@ public class WxServiceImpl implements WxService {
}
return null;
}
@Override
public ResultBody rid(String rid) throws Exception {
JSONObject param = new JSONObject();
param.put("rid", rid);
String url = "https://api.weixin.qq.com/cgi-bin/openapi/rid/get?access_token=" + this.getSubAccessToken();
String res = HttpHelper.httpPost(url, param.toString());
return ResultBody.success(res);
}
@Override
public ResultBody moveSubUserToTest() {
String accessToken = this.getSubStableAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken;
String jsonStr = HttpsRequestUtil.httpsGet(url, null);
log.info("all users:{}", jsonStr);
JSONObject obj = JSONObject.parseObject(jsonStr);
List<String> lists = JSONArray.parseArray(obj.getJSONObject("data").get("openid").toString(), String.class);
int count = 0;
for (String openid : lists) {
Integer integer = userSubInfoDao.countUserSubInfo(openid);
if (integer == 0) {
count++;
UserSubInfoDO sub = new UserSubInfoDO();
sub.setOpenId(openid);
sub.setRegStatus(1);
sub.setDeleted(0);
sub.setCreateTime(new Date());
userSubInfoDao.insertUserSubInfo(sub);
}
}
log.info("User count: {}", count);
return ResultBody.success();
}
@Override
public ResultBody moveSubUserUnionIdToTest() {
String accessToken = this.getSubStableAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&next_openid=" + "oB6kk6obNektxM62mjj9PJHPtcME";
String jsonStr = HttpsRequestUtil.httpsGet(url, null);
log.info("all users:{}", jsonStr);
JSONObject obj = JSONObject.parseObject(jsonStr);
List<String> lists = JSONArray.parseArray(obj.getJSONObject("data").get("openid").toString(), String.class);
int count = 0;
for (String openid : lists) {
UserSubInfoDO userSubInfo = userSubInfoDao.getUserSubInfo(openid);
if (userSubInfo != null) {
String InfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + accessToken + "&openid=" + openid
+ "&lang=zh_CN";
String jsonStr1 = HttpsRequestUtil.httpsGet(InfoUrl, null);
JSONObject obj1 = JSONObject.parseObject(jsonStr1);
userSubInfo.setUnionId(obj1.getString("unionid"));
userSubInfo.setRegStatus(1);
userSubInfoDao.updateUserSubInfo(userSubInfo);
}
}
log.info("User count: {}", count);
return ResultBody.success();
}
}
package com.mmc.iuav.user.service.wallet;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.qo.wallet.WalletFlowQO;
import com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO;
import com.mmc.iuav.user.model.vo.wallet.WalletFlowVO;
/**
* @Author LW
......@@ -11,4 +14,12 @@ public interface PayWalletService {
ResultBody getPayWalletInfo(Integer userAccountId);
ResultBody initPayWallet(Integer userAccountId);
ResultBody feignWalletFlow(WalletFlowVO walletFlowVO);
ResultBody feignTopUpCash(TopUpOrderVO topUpOrderVO);
ResultBody customerBillingDetail(Integer userAccountId, WalletFlowQO walletFlowQO);
ResultBody billingDetails(Integer id, String detailType);
}
package com.mmc.iuav.user.service.xzsz;
import com.mmc.iuav.page.PageResult;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.qo.wallet.WalletFlowQO;
import com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO;
import com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO;
/**
* @author: zj
* @Date: 2023/8/23 16:09
*/
public interface WithdrawalService {
ResultBody apply(ApplyWithdrawalVO applyWithdrawalVO, Integer userAccountId);
ResultBody withdrawalList(Integer userAccountId, WalletFlowQO walletFlowQO);
PageResult listPageWithdrawalApply(WithdrawalApplyQO param);
ResultBody approveWithdrawalApply(Integer id, Integer applyStatus, Integer userAccountId, String remark);
}
package com.mmc.iuav.user.service.xzsz;
import cn.hutool.json.JSONObject;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.dto.xzsz.UsableCashPoolingDTO;
import com.mmc.iuav.user.model.vo.XzAuthVO;
import com.mmc.iuav.user.model.vo.XzWithdrawalVO;
import com.mmc.iuav.user.xzsz.SingleSubmitResp;
import com.mmc.iuav.user.xzsz.WithdrawalResp;
import java.util.List;
/**
* @author: zj
* @Date: 2023/8/21 9:52
*/
public interface XzService {
ResultBody getTaxFundList();
ResultBody getCashPooling();
List<UsableCashPoolingDTO> getUsableCashPooling();
String getContractScope(XzAuthVO xzAuthVO);
String hasKeyByUrl(LoginSuccessDTO loginSuccessDTO);
String xzAuthNotify(JSONObject notify);
JSONObject getSignedResult(XzAuthVO xzAuthVO);
String viewContract(String documentId);
ResultBody clearTestFace(String name, String idCard);
SingleSubmitResp singleSubmit(XzWithdrawalVO xzWithdrawalVO);
WithdrawalResp querySingleTrade(String outerTradeNo);
ResultBody querySingleReceipt(String frontLogNo);
String xzWithdrawNotify(JSONObject notify);
SingleSubmitResp singleSubmitLimit(XzWithdrawalVO xzWithdrawalVO);
}
package com.mmc.iuav.user.util;
/**
* 正则表达式匹配
*
* @author tyg
* @date 2018年9月21日下午4:32:27
*/
public class PatternUtil {
/**
* 手机号码匹配
*/
public static final String PHONE_REG = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$";
/**
* 座机号码匹配
*/
public static final String MOBILE_REG = "^\\d{3}-\\d{8}|\\d{4}-\\d{7}$";
/**
* 汉字匹配
*/
public static final String CHIINESE_REG = "^[\\u4e00-\\u9fa5]{0,}$";
/**
* 英文和数字匹配(不区分大小写)
*/
public static final String LETTER_NUMBER_REG = "^[A-Za-z0-9]+$";
/**
* 非零开头的最多带两位小数的数字
*/
public static final String DECIMAL_REG = "^([1-9][0-9]*)+(.[0-9]{1,2})?$";
/**
* 纯数字
*/
public static final String ONLY_NUMBER_REG = "^[0-9]{1,}$";
/**
* 纯字母
*/
public static final String ONLY_LETTER_REG = "^[a-zA-Z]{1,}$";
/**
* 邮箱email
*/
public static final String EMAIL_REG = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
/**
* 日期规则
*/
public static final String DATE_YMD = "^(\\d{4}-\\d{2}-\\d{2})$";
/**
* 时间规则
*/
public static final String DATE_YMDHDS = "^(\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2})$";
/**
* 银行卡卡号位数
*/
public final static String BANK_CARD_NUMBER = "^\\d{16}|\\d{19}$";
/**
* 身份证号码位数限制
*/
public final static String ID_CARD = "^\\d{15}|(\\d{17}[0-9,x,X])$";
/**
* 是否为手机号码
*
* @param phone
* @return
* @return boolean
* @author tyg
* @date 2018年9月25日上午9:44:38
*/
public static boolean isPhone(String phone) {
return phone.matches(PHONE_REG);
}
/**
* 是否为座机号码
*
* @param mobile
* @return
* @return boolean
* @author tyg
* @date 2018年9月25日上午9:44:38
*/
public static boolean isMobile(String mobile) {
return mobile.matches(MOBILE_REG);
}
public static void main(String[] args) {
System.out.println(isPhone("13228116626"));
System.out.println(isMobile("028-63358547"));
}
}
package com.mmc.iuav.user.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
/**
* 日志辅助类,用来处理敏感信息,进行脱敏
*
* @author tyg
* @date 2018年5月5日下午4:01:22
*/
public class PrivacyUtil {
//银行账户:显示前六后四,范例:622848******4568
public static String encryptBankAcct(String bankAcct) {
if (bankAcct == null) {
return "";
}
return replaceBetween(bankAcct, 6, bankAcct.length() - 4, null);
}
//身份证号码:显示前六后四,范例:110601********2015
public static String encryptIdCard(String idCard) {
if (idCard == null) {
return "";
}
return replaceBetween(idCard, 6, idCard.length() - 4, null);
}
//客户email:显示前二后四,范例:abxx@xxx.com
public static String encryptEmail(String email) {
//判断是否为邮箱地址
if (email == null || !Pattern.matches(PatternUtil.EMAIL_REG, email)) {
return "";
}
StringBuilder sb = new StringBuilder(email);
//邮箱账号名只显示前两位
int at_position = sb.indexOf("@");
if (at_position > 2) {
sb.replace(2, at_position, StringUtils.repeat("x", at_position - 2));
}
//邮箱域名隐藏
int period_position = sb.lastIndexOf(".");
sb.replace(at_position + 1, period_position, StringUtils.repeat("x", period_position - at_position - 1));
return sb.toString();
}
//手机:显示前三后四,范例:189****3684
public static String encryptPhoneNo(String phoneNo) {
if (phoneNo == null) {
return "";
}
return replaceBetween(phoneNo, 3, phoneNo.length() - 4, null);
}
/**
* @param object 待处理对象
* @param fieldNames 需要处理的属性
* @return 将对象转换为字符串,并对敏感信息进行处理
*/
public static String encryptSensitiveInfo(Object object, String[] fieldNames) {
return encryptSensitiveInfo(object, fieldNames, null);
}
/**
* @param object 待处理对象
* @param fieldNames 需要处理的属性
* @param excludes 不需要显示的属性
* @return 将对象转换为字符串,并对敏感信息进行处理
*/
public static String encryptSensitiveInfo(Object object, String[] fieldNames, String[] excludes) {
if (fieldNames == null) {
fieldNames = new String[0];
}
//合并数组
Set<String> set = new HashSet<String>(Arrays.asList(fieldNames));
if (excludes != null) {
for (int i = 0; i < excludes.length; i++) {
set.add(excludes[i]);
}
}
//将对象转换为字符串
String str = ReflectionToStringBuilder.toStringExclude(object, set.toArray(new String[0]));
//处理敏感信息
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(sb.length() - 1);
for (int i = 0; i < fieldNames.length; i++) {
String fieldName = fieldNames[i];
try {
Field f = object.getClass().getDeclaredField(fieldName);
f.setAccessible(true);
String value = encryptSensitiveInfo(String.valueOf(f.get(object)));
if (i != 0 || sb.charAt(sb.length() - 1) != '[') {
sb.append(",");
}
sb.append(fieldName).append("=").append(value);
} catch (Exception e) {
}
}
sb.append("]");
str = sb.toString();
return str;
}
/**
* 对敏感信息进行处理。使用正则表达式判断使用哪种规则
*
* @param sourceStr 需要处理的敏感信息
* @return
* @return String
* @author tyg
* @date 2018年5月5日下午3:59:28
*/
public static String encryptSensitiveInfo(String sourceStr) {
if (sourceStr == null) {
return "";
}
if (Pattern.matches(PatternUtil.PHONE_REG, sourceStr)) {
return encryptPhoneNo(sourceStr);
} else if (Pattern.matches(PatternUtil.EMAIL_REG, sourceStr)) {
return encryptEmail(sourceStr);
} else if (Pattern.matches(PatternUtil.BANK_CARD_NUMBER, sourceStr)) {
return encryptBankAcct(sourceStr);
} else if (Pattern.matches(PatternUtil.ID_CARD, sourceStr)) {
return encryptIdCard(sourceStr);
} else {
return sourceStr;
}
}
/**
* 将字符串开始位置到结束位置之间的字符用指定字符替换
*
* @param sourceStr 待处理字符串
* @param begin 开始位置
* @param end 结束位置
* @param replacement 替换字符
* @return
*/
private static String replaceBetween(String sourceStr, int begin, int end, String replacement) {
if (sourceStr == null) {
return "";
}
if (replacement == null) {
replacement = "*";
}
int replaceLength = end - begin;
if (StringUtils.isNotBlank(sourceStr) && replaceLength > 0) {
StringBuilder sb = new StringBuilder(sourceStr);
sb.replace(begin, end, StringUtils.repeat(replacement, replaceLength));
return sb.toString();
} else {
return sourceStr;
}
}
}
\ No newline at end of file
package com.mmc.iuav.user.xzsz;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/8/22 14:26
*/
public class SingleSubmitResp {
private String isSuccess;
private String charset;
private String errorCode;
private String errorMessage;
private Data data;
public String getIsSuccess() {
return isSuccess;
}
public void setIsSuccess(String isSuccess) {
this.isSuccess = isSuccess;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public static class Data implements Serializable {
private static final long serialVersionUID = 887647888669372371L;
private String outerTradeNo;
public Data() {
}
public String getOuterTradeNo() {
return outerTradeNo;
}
public void setOuterTradeNo(String outerTradeNo) {
this.outerTradeNo = outerTradeNo;
}
}
}
package com.mmc.iuav.user.xzsz;
import java.math.BigDecimal;
/**
* @author: zj
* @Date: 2023/8/22 14:43
*/
public class WithdrawalResp {
private String isSuccess;
private String charset;
private Data data;
public String getIsSuccess() {
return isSuccess;
}
public void setIsSuccess(String isSuccess) {
this.isSuccess = isSuccess;
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public static class Data {
private String outerTradeNo;
private String notifyType;
private String empName;
private String empPhone;
private String licenseType;
private String licenseId;
private String settleType;
private String payAccount;
private String positionName;
private BigDecimal payAmount;
private String tradeStatus;
private String tradeTime;
private String frontLogNo;
private String tradeResult;
private String tradeFailCode;
public Data() {
}
public String getOuterTradeNo() {
return outerTradeNo;
}
public void setOuterTradeNo(String outerTradeNo) {
this.outerTradeNo = outerTradeNo;
}
public String getNotifyType() {
return notifyType;
}
public void setNotifyType(String notifyType) {
this.notifyType = notifyType;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getEmpPhone() {
return empPhone;
}
public void setEmpPhone(String empPhone) {
this.empPhone = empPhone;
}
public String getLicenseType() {
return licenseType;
}
public void setLicenseType(String licenseType) {
this.licenseType = licenseType;
}
public String getLicenseId() {
return licenseId;
}
public void setLicenseId(String licenseId) {
this.licenseId = licenseId;
}
public String getSettleType() {
return settleType;
}
public void setSettleType(String settleType) {
this.settleType = settleType;
}
public String getPayAccount() {
return payAccount;
}
public void setPayAccount(String payAccount) {
this.payAccount = payAccount;
}
public String getPositionName() {
return positionName;
}
public void setPositionName(String positionName) {
this.positionName = positionName;
}
public BigDecimal getPayAmount() {
return payAmount;
}
public void setPayAmount(BigDecimal payAmount) {
this.payAmount = payAmount;
}
public String getTradeStatus() {
return tradeStatus;
}
public void setTradeStatus(String tradeStatus) {
this.tradeStatus = tradeStatus;
}
public String getTradeTime() {
return tradeTime;
}
public void setTradeTime(String tradeTime) {
this.tradeTime = tradeTime;
}
public String getFrontLogNo() {
return frontLogNo;
}
public void setFrontLogNo(String frontLogNo) {
this.frontLogNo = frontLogNo;
}
public String getTradeResult() {
return tradeResult;
}
public void setTradeResult(String tradeResult) {
this.tradeResult = tradeResult;
}
public String getTradeFailCode() {
return tradeFailCode;
}
public void setTradeFailCode(String tradeFailCode) {
this.tradeFailCode = tradeFailCode;
}
}
}
......@@ -69,6 +69,28 @@ third-party:
qcc:
app-key: 5015e664848d406ab1ca4b505c3da803
secret-key: 7C4DB8CCECC148175E46392CC0A1B410
xzsz:
# appKey: 1e8e59e056be41f8a05c090964d7ce37
# appSecret: ceshihuanjingyanshizhanghao00000
# aes: 0000000000000000
# domain: https://uat.xzsz.ltd/
# position: 销售推广
# taxFundId: xxxxxxxxxxxxxxxxxxxxxxx
appKey: 37f76305f1864339adc8d6d03fbf918d
appSecret: hangzhouyunxiangfeikeji000000000
aes: '0000000000000000'
domain: https://saas.xzsz.ltd
position: 市场推广
taxFundId: 0b0376083af4435885bd5d5cd3d63053
authNotify: https://test.iuav.shop/userapp/xz/xzAuthNotify
withdrawNotify: https://test.iuav.shop/userapp/xz/xzWithdrawNotify
fdd:
appid: 407664
appkey: q146q3Cjmi7Y6BVl8jtZK9pH
version: 2
host: https://testapi.fadada.com:8443/api/
mmc-url: https://test.iuav.shop/userapp/
iuav:
pay:
......
......@@ -18,7 +18,7 @@ spring:
port: 5672
username: MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password: RTg3OUMxQzk4NzU0NDQ4RkQ1RDg4MkEzQjY4M0M3MkQxOTM2QkEyNDoxNjUyNDA4NDk0NDg4
virtual-host: /
virtual-host: dev
wx:
sub:
......@@ -38,9 +38,25 @@ third-party:
qcc:
app-key: 5015e664848d406ab1ca4b505c3da803
secret-key: 7C4DB8CCECC148175E46392CC0A1B410
xzsz:
appKey: 1e8e59e056be41f8a05c090964d7ce37
appSecret: ceshihuanjingyanshizhanghao00000
aes: '0000000000000000'
domain: https://uat.xzsz.ltd/
position: 销售推广
taxFundId: 8ae605f565884a1f9a5e91d5a661ce58
authNotify: https://test.iuav.shop/userapp/xz/xzAuthNotify
withdrawNotify: https://test.iuav.shop/userapp/xz/xzWithdrawNotify
fdd:
appid: 407664
appkey: q146q3Cjmi7Y6BVl8jtZK9pH
version: 2
host: https://testapi.fadada.com:8443/api/
mmc-url: https://test.iuav.shop/userapp/
iuav:
pay:
uri: http://127.0.0.1:8088
pms:
uri: http://127.0.0.1:8099
\ No newline at end of file
uri: http://127.0.0.1:8099
......@@ -67,6 +67,15 @@ third-party:
qcc:
app-key: 5015e664848d406ab1ca4b505c3da803
secret-key: 7C4DB8CCECC148175E46392CC0A1B410
xzsz:
appKey: 37f76305f1864339adc8d6d03fbf918d
appSecret: hangzhouyunxiangfeikeji000000000
aes: '0000000000000000'
domain: https://saas.xzsz.ltd
position: 市场推广
taxFundId: 0b0376083af4435885bd5d5cd3d63053
authNotify: https://www.iuav.shop/userapp/xz/xzAuthNotify
withdrawNotify: https://www.iuav.shop/userapp/xz/xzWithdrawNotify
iuav:
pay:
......
......@@ -76,12 +76,22 @@
</where>
</update>
<update id="disableBackUserAccountDO">
update back_user_account
set disable = 1, account_no = #{accountNo}
where disable = 0
and id = #{id}
</update>
<!--
<update id="disableBackUserAccountDO">
update back_user_account
set disable = 1,
account_no = #{accountNo}
where disable = 0
and id = #{id}
</update>
-->
<delete id="disableBackUserAccountDO">
delete
from back_user_account
where id =
#{id}
</delete>
<update id="updatePassword">
update back_user_account
......
......@@ -440,5 +440,26 @@
where phone_num = #{phoneNum}
and disable = 0
</select>
<select id="getUserAccountInfoByOpenId" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select id,
phone_num,
user_name,
nick_name,
user_img,
open_id,
union_id,
user_sex,
email,
`source`,
account_status,
remark,
port_type,
disable,
create_time,
update_time
from user_account
where open_id = #{openid}
and disable = 0
</select>
</mapper>
<?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">
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.UserSubInfoDao">
<resultMap id="userSubInfoResultMap" type="com.mmc.iuav.user.entity.UserSubInfoDO">
<id property="id" column="id" />
<result property="openId" column="open_id" />
<result property="unionId" column="union_id" />
<result property="nickName" column="nick_name" />
<result property="regStatus" column="reg_status" />
<result property="deleted" column="is_deleted" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap id="userSubInfoResultMap" type="com.mmc.iuav.user.entity.UserSubInfoDO">
<id property="id" column="id"/>
<result property="openId" column="open_id"/>
<result property="unionId" column="union_id"/>
<result property="nickName" column="nick_name"/>
<result property="regStatus" column="reg_status"/>
<result property="deleted" column="is_deleted"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<select id="getUserSubInfo" resultMap="userSubInfoResultMap" parameterType="String">
<select id="getUserSubInfo" resultMap="userSubInfoResultMap" parameterType="String">
select u.id,u.open_id,u.union_id,u.nick_name,u.reg_status,
u.is_deleted,u.create_time,u.update_time
from user_sub_info u
where u.open_id = #{openId}
</select>
<select id="getUserSubInfoById" resultMap="userSubInfoResultMap" parameterType="Integer">
<select id="getUserSubInfoById" resultMap="userSubInfoResultMap" parameterType="Integer">
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted
from user_account ua
inner join user_sub_info usi on usi.union_id=ua.union_id
where usi.is_deleted=0 and ua.is_deleted=0
and ua.user_account_id = #{userAccountId}
</select>
<select id="getUserSubInfoByUnionId" resultMap="userSubInfoResultMap" parameterType="String">
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted
<select id="getUserSubInfoByUnionId" resultMap="userSubInfoResultMap" parameterType="String">
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted,usi.reg_status
from user_sub_info usi
where usi.union_id = #{unionId} and usi.is_deleted=0
</select>
<select id="countUserSubInfo" resultType="Integer" parameterType="String">
<select id="countUserSubInfo" resultType="Integer" parameterType="String">
select count(*)
from user_sub_info u
where u.open_id = #{openId} and is_deleted = 0
</select>
<insert id="insertUserSubInfo" useGeneratedKeys="true"
keyProperty="id" parameterType="com.mmc.iuav.user.entity.UserSubInfoDO">
<insert id="insertUserSubInfo" useGeneratedKeys="true"
keyProperty="id" parameterType="com.mmc.iuav.user.entity.UserSubInfoDO">
insert into user_sub_info
(
open_id,union_id,nick_name,reg_status,is_deleted,create_time,update_time
......@@ -53,28 +53,28 @@
#{openId},#{unionId},#{nickName},#{regStatus},#{deleted},#{createTime},#{updateTime}
)
</insert>
<update id="removeUserSubInfo" parameterType="String">
<update id="removeUserSubInfo" parameterType="String">
update user_sub_info
set is_deleted = 1
where open_id = #{openId}
</update>
<update id="updateUserSubInfo"
parameterType="com.mmc.iuav.user.entity.UserSubInfoDO">
update user_sub_info
<set>
<if test="unionId != null and unionId != '' ">
union_id = #{unionId},
</if>
<if test="nickName != null">
nick_name = #{nickName},
</if>
<if test="regStatus != null">
reg_status = #{regStatus},
</if>
</set>
where open_id = #{openId}
</update>
<update id="updateUserSubInfo"
parameterType="com.mmc.iuav.user.entity.UserSubInfoDO">
update user_sub_info
<set>
<if test="unionId != null and unionId != '' ">
union_id = #{unionId},
</if>
<if test="nickName != null">
nick_name = #{nickName},
</if>
<if test="regStatus != null">
reg_status = #{regStatus},
</if>
</set>
where open_id = #{openId}
</update>
</mapper>
\ No newline at end of file
<?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="com.mmc.iuav.user.dao.fdd.UserFddAuthDao">
<resultMap id="appUserFddResultMap" type="com.mmc.iuav.user.entity.fdd.UserFddDO">
<id property="id" column="id"/>
<result property="unionId" column="union_id"/>
<result property="customerId" column="customer_id"/>
<result property="personVerifyStatus" column="person_verify_status"/>
<result property="entVerifyStatus" column="ent_verify_status"/>
<result property="accountType" column="account_type"/>
<result property="updateTime" column="update_time"/>
<result property="createTime" column="create_time"/>
</resultMap>
<insert id="insertAppUserFdd" parameterType="com.mmc.iuav.user.entity.fdd.UserFddDO"
keyProperty="id" useGeneratedKeys="true">
insert into user_fdd
(union_id, customer_id, person_verify_status, ent_verify_status, account_type, create_time)
values (#{unionId}, #{customerId}, #{personVerifyStatus}, #{entVerifyStatus}, #{accountType}, NOW())
</insert>
<insert id="insertVerifyInfo" useGeneratedKeys="true" keyProperty="id"
parameterType="com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO">
insert into fdd_verify_info
(user_fdd_id, customer_id, transaction_no, url, create_time)
values (#{userFddId}, #{customerId}, #{transactionNo}, #{url}, NOW())
</insert>
<update id="updateCompanyCertStatus">
update user_fdd
set ent_verify_status = #{status}
where customer_id = #{customerId}
</update>
<select id="checkRegisterFdd" resultType="com.mmc.iuav.user.entity.fdd.UserFddDO">
select id,
union_id,
customer_id,
person_verify_status,
ent_verify_status,
account_type,
create_time,
update_time
from user_fdd
where union_id = #{unionId}
and account_type = #{flag}
and is_deleted = 0
</select>
<select id="getVerifyUrl" resultType="com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO">
select id, user_fdd_id, customer_id, transaction_no, url, create_time, update_time
from fdd_verify_info
where customer_id = #{customerId}
</select>
<select id="getAppUserFddInfo" resultType="com.mmc.iuav.user.entity.fdd.UserFddDO">
select id, customer_id, person_verify_status, ent_verify_status, account_type, create_time, update_time
from user_fdd
where union_id = #{unionId}
</select>
</mapper>
\ No newline at end of file
<?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="com.mmc.iuav.user.dao.xzsz.WithdrawalDao">
<insert id="insertWithdrawalApply" useGeneratedKeys="true" keyProperty="id"
parameterType="com.mmc.iuav.user.entity.XzWithdrawalApplyDO">
insert into xz_withdrawal_apply (user_account_id,
bank_name,
emp_name,
emp_phone,
license_id,
license_type,
`month`,
outer_trade_no,
pay_account,
pay_amount,
position_name,
settle_type,
trade_status)
values (#{userAccountId}, #{bankName}, #{empName}, #{empPhone}, #{licenseId}, #{licenseType}, #{month},
#{outerTradeNo}, #{payAccount}, #{payAmount}, #{positionName}, #{settleType}, #{tradeStatus})
</insert>
</mapper>
\ No newline at end of file
<?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="com.mmc.iuav.user.dao.xzsz.XzDao">
<insert id="addAuth" parameterType="com.mmc.iuav.user.entity.XzAuthDO" useGeneratedKeys="true" keyProperty="id">
insert into xz_auth(user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id,
custom_params, contract_url, xz_auth_status, create_time)
values (#{userAccountId}, #{name}, #{idCardNo}, #{mobile}, #{bankAccount}, #{subsidiary_name}, #{document_id},
#{customParams}, #{contract_url}, #{xzAuthStatus}, NOW())
</insert>
<select id="getXzAuthByUserAccountId" resultType="com.mmc.iuav.user.entity.XzAuthDO">
select id,
user_account_id,
`name`,
id_card_no,
mobile,
bank_account,
subsidiary_name,
document_id,
custom_params,
contract_url,
create_time,
xz_auth_status
from xz_auth
where user_account_id = #{userAccountId}
and is_deleted = 0
</select>
</mapper>
......@@ -29,4 +29,8 @@ data-filter:
- /userapp/cooperation/appBrandMessage
- /userapp/pilot/detailPilot
- /userapp/pilot/appListPilot
- /userapp/xz/xzAuthNotify
- /userapp/xz/xzWithdrawNotify
- /userapp/pay/feignTopUpCash
- /userapp/pay/feignWalletFlowNO
......@@ -18,4 +18,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/cms
newTag: af55c66e9935fdc316c1f338ca46fe45bc16a77f
newTag: 902a215520b53a526b6a1c467371e1a4b02f89bd
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论