提交 ba450561 作者: 张小凤

payment(add)

上级 7257442b
...@@ -19,11 +19,6 @@ ...@@ -19,11 +19,6 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
...@@ -76,22 +71,12 @@ ...@@ -76,22 +71,12 @@
<version>3.0.0</version> <version>3.0.0</version>
<!--<scope>compile</scope>--> <!--<scope>compile</scope>-->
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.32</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.mmc.payment.common; package com.mmc.payment.common;
import com.alibaba.fastjson.JSONObject;
import com.mmc.payment.config.AuthHandler; import com.mmc.payment.config.AuthHandler;
import com.mmc.payment.exception.BizException;
import com.mmc.payment.jwt.JwtConstant; import com.mmc.payment.jwt.JwtConstant;
import com.mmc.payment.model.dto.BaseAccountDTO; import com.mmc.payment.model.dto.BaseAccountDTO;
import com.mmc.payment.model.dto.CurrentUserDTO; import com.mmc.payment.model.dto.CurrentUserDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -18,6 +22,8 @@ public abstract class BaseController { ...@@ -18,6 +22,8 @@ public abstract class BaseController {
@Autowired @Autowired
private AuthHandler authHandler; private AuthHandler authHandler;
@Autowired
private StringRedisTemplate stringRedisTemplate;
/** /**
* 获取当前用户 * 获取当前用户
* *
...@@ -35,7 +41,12 @@ public abstract class BaseController { ...@@ -35,7 +41,12 @@ public abstract class BaseController {
* 获取当前登录账号信息 * 获取当前登录账号信息
*/ */
public BaseAccountDTO getCurrentAccount(HttpServletRequest request) { public BaseAccountDTO getCurrentAccount(HttpServletRequest request) {
String token = request.getHeader(JwtConstant.TOKENKEY); String token = request.getHeader("token");
return authHandler.getCurrentAccount(token); String json = stringRedisTemplate.opsForValue().get(token);
if (StringUtils.isBlank(json)){
throw new BizException(ResultEnum.LOGIN_ACCOUNT_STATUS_ERROR);
}
BaseAccountDTO baseAccountDTO= JSONObject.parseObject(json, BaseAccountDTO.class);
return baseAccountDTO;
} }
} }
...@@ -395,7 +395,9 @@ public enum ResultEnum implements BaseErrorInfoInterface { ...@@ -395,7 +395,9 @@ public enum ResultEnum implements BaseErrorInfoInterface {
HELP_FAIL_ERROR("2009", "不能给自己助力哦!"), HELP_FAIL_ERROR("2009", "不能给自己助力哦!"),
ALREADY_BINDING_ERROR("2010", "优惠券已被绑定"), ALREADY_BINDING_ERROR("2010", "优惠券已被绑定"),
ALREADY_DIVIDE_ERROR("2011", "订单已分成"), ALREADY_DIVIDE_ERROR("2011", "订单已分成"),
DIVIDE_OBJ_NOT_EXIST("2012", "先点击确认添加分成对象"); DIVIDE_OBJ_NOT_EXIST("2012", "先点击确认添加分成对象"),
THE_REQUEST_IS_NOT_AUTHENTICATED("2013","请求未经过鉴权"),
THE_TOKEN_IS_INVALID("2014","token失效") ;;
/** /**
* 错误码 * 错误码
......
package com.mmc.payment.common;
import lombok.Data;
import java.io.Serializable;
/**
* @Author small
* @Date 2023/5/29 10:38
* @Version 1.0
*/
@Data
public class Tenant implements Serializable {
/**
* 用户id
*/
private Integer userId;
/**
* 所在机构id
*/
private Integer tenantId;
/**
* 用户名称
*/
private String userName;
/**
* 管理机构id集合
*/
private String tenantIds;
/**
* 菜单路由路径集合
*/
private String token;
/**
* 角色id
*/
private Integer roleId;
/**
* 角色类型,1超管 2其他角色
*/
private Integer roleType;
public Tenant(String userName) {
this.userId = userId;
this.tenantId = tenantId;
this.userName = userName;
this.tenantIds = tenantIds;
this.token = token;
this.roleId = roleId;
this.roleType = roleType;
}
/**
* userid相同,认为是同个用户
*
* @param o
* @return
*/
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof Tenant) {
Tenant tenant = (Tenant) o;
return getUserId().equals(tenant.getUserId());
} else {
return false;
}
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + getUserId().hashCode();
return result;
}
}
package com.mmc.payment.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Author small
* @Date 2023/5/29 10:39
* @Version 1.0
*/
@Data
@ConfigurationProperties(prefix = "audience")
@Component
public class Audience {
private String clientId;
private String base64Secret;
private String name;
private long expiresSecond;
}
...@@ -17,15 +17,12 @@ import java.util.*; ...@@ -17,15 +17,12 @@ import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* @Author small * @Author small @Date 2023/5/23 19:22 @Version 1.0
* @Date 2023/5/23 19:22
* @Version 1.0
*/ */
@Component @Component
public class AuthHandler { public class AuthHandler {
@Autowired @Autowired private StringRedisTemplate stringRedisTemplate;
private StringRedisTemplate stringRedisTemplate;
/** /**
* 获取当前用户 * 获取当前用户
...@@ -33,16 +30,14 @@ public class AuthHandler { ...@@ -33,16 +30,14 @@ public class AuthHandler {
* @param request * @param request
* @return * @return
*/ */
// public CurrentUserDTO getCurrentUser(HttpServletRequest request) { // public CurrentUserDTO getCurrentUser(HttpServletRequest request) {
// // 登录未做好-统一通过此方法获取当前用户信息 // // 登录未做好-统一通过此方法获取当前用户信息
// Integer id = Integer.parseInt(request.getHeader(JwtConstant.USERIDKEY).toString()); // Integer id = Integer.parseInt(request.getHeader(JwtConstant.USERIDKEY).toString());
// Integer roleId = Integer.parseInt(request.getHeader(JwtConstant.ROLEIDKEY).toString()); // Integer roleId = Integer.parseInt(request.getHeader(JwtConstant.ROLEIDKEY).toString());
// return CurrentUserDTO.builder().id(id).roleId(roleId).build(); // return CurrentUserDTO.builder().id(id).roleId(roleId).build();
// } // }
/** /** 获取当前登录账号信息 */
* 获取当前登录账号信息
*/
public BaseAccountDTO getCurrentAccount(String token) { public BaseAccountDTO getCurrentAccount(String token) {
// 获取登录的基本信息 // 获取登录的基本信息
String json = stringRedisTemplate.opsForValue().get(token); String json = stringRedisTemplate.opsForValue().get(token);
...@@ -52,36 +47,46 @@ public class AuthHandler { ...@@ -52,36 +47,46 @@ public class AuthHandler {
BaseAccountDTO account = JsonUtil.parseJsonToObj(json, BaseAccountDTO.class); BaseAccountDTO account = JsonUtil.parseJsonToObj(json, BaseAccountDTO.class);
// 如果是PC管理端-获取部门缓存信息 // 如果是PC管理端-获取部门缓存信息
if (JwtConstant.SXTB_ACCOUNT_TOKEN.equals(account.getTokenPort())) { /* if (JwtConstant.SXTB_ACCOUNT_TOKEN.equals(account.getTokenPort())) {
account.getCompanyInfo().setCompanys(this.getCompanys(account.getCompanyInfo().getId())); account.getCompanyInfo().setCompanys(this.getCompanys(account.getCompanyInfo().getId()));
} }*/
return account; return account;
} }
public String addLoginCache(Integer userId, Integer roleId, String tokenType, BaseAccountDTO loginInfo) { public String addLoginCache(
Integer userId, Integer roleId, String tokenType, BaseAccountDTO loginInfo) {
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> map = new HashMap<String, Object>();
map.put(JwtConstant.USERIDKEY, userId); map.put(JwtConstant.USERIDKEY, userId);
map.put(JwtConstant.ROLEIDKEY, roleId); map.put(JwtConstant.ROLEIDKEY, roleId);
map.put(JwtConstant.TOKEN_TYPE, tokenType); map.put(JwtConstant.TOKEN_TYPE, tokenType);
String token = JwtUtil.createJwt(map); String token = JwtUtil.createJwt(map);
loginInfo.setTokenPort(tokenType); // loginInfo.setTokenPort(tokenType);
// 缓存登录token-jwt // 缓存登录token-jwt
stringRedisTemplate.opsForValue().set( stringRedisTemplate
RedisConstant.createLoginTokenKey(tokenType, roleId.toString(), userId.toString()), token, .opsForValue()
JwtConstant.EXPIRATION, TimeUnit.MILLISECONDS); .set(
RedisConstant.createLoginTokenKey(tokenType, roleId.toString(), userId.toString()),
token,
JwtConstant.EXPIRATION,
TimeUnit.MILLISECONDS);
// 平台PC管理端登录保存-单位的id及无限下级id集合 // 平台PC管理端登录保存-单位的id及无限下级id集合
if (JwtConstant.SXTB_ACCOUNT_TOKEN.equals(tokenType)) { if (JwtConstant.SXTB_ACCOUNT_TOKEN.equals(tokenType)) {
if (loginInfo.getCompanyInfo() != null && !CollectionUtils.isEmpty(loginInfo.getCompanyInfo().getCompanys())) { /* if (loginInfo.getCompanyInfo() != null && !CollectionUtils.isEmpty(loginInfo.getCompanyInfo().getCompanys())) {
List<Integer> companys = loginInfo.getCompanyInfo().getCompanys(); List<Integer> companys = loginInfo.getCompanyInfo().getCompanys();
this.refreshCompanys(companys, loginInfo.getCompanyInfo().getId()); this.refreshCompanys(companys, loginInfo.getCompanyInfo().getId());
// 置为null--省内存 // 置为null--省内存
loginInfo.getCompanyInfo().setCompanys(null); loginInfo.getCompanyInfo().setCompanys(null);
} }*/
} }
// 缓存登录对象 // 缓存登录对象
stringRedisTemplate.opsForValue().set(token, JsonUtil.parseObjToJson(loginInfo), JwtConstant.EXPIRATION, stringRedisTemplate
.opsForValue()
.set(
token,
JsonUtil.parseObjToJson(loginInfo),
JwtConstant.EXPIRATION,
TimeUnit.MILLISECONDS); TimeUnit.MILLISECONDS);
return token; return token;
} }
...@@ -94,16 +99,16 @@ public class AuthHandler { ...@@ -94,16 +99,16 @@ public class AuthHandler {
*/ */
public void refreshCompanys(List<Integer> companys, Integer companyId) { public void refreshCompanys(List<Integer> companys, Integer companyId) {
String key = RedisConstant.getCompanyChildKey(companyId); String key = RedisConstant.getCompanyChildKey(companyId);
stringRedisTemplate.opsForValue().set( stringRedisTemplate
key, JsonUtil.parseObjToJson(companys), .opsForValue()
JwtConstant.EXPIRATION, TimeUnit.MILLISECONDS); .set(key, JsonUtil.parseObjToJson(companys), JwtConstant.EXPIRATION, TimeUnit.MILLISECONDS);
} }
public List<Integer> getCompanys(Integer companyId) { public List<Integer> getCompanys(Integer companyId) {
String key = RedisConstant.getCompanyChildKey(companyId); String key = RedisConstant.getCompanyChildKey(companyId);
if (stringRedisTemplate.hasKey(key)) { if (stringRedisTemplate.hasKey(key)) {
String json = stringRedisTemplate.opsForValue().get(key); String json = stringRedisTemplate.opsForValue().get(key);
if(!StringUtils.isEmpty(json)) { if (!StringUtils.isEmpty(json)) {
List<Integer> list = JSONArray.parseArray(json, Integer.class); List<Integer> list = JSONArray.parseArray(json, Integer.class);
return list; return list;
} }
...@@ -112,7 +117,12 @@ public class AuthHandler { ...@@ -112,7 +117,12 @@ public class AuthHandler {
} }
public void updateLoginCache(String token, BaseAccountDTO loginInfo) { public void updateLoginCache(String token, BaseAccountDTO loginInfo) {
stringRedisTemplate.opsForValue().set(token, JsonUtil.parseObjToJson(loginInfo), JwtConstant.EXPIRATION, stringRedisTemplate
.opsForValue()
.set(
token,
JsonUtil.parseObjToJson(loginInfo),
JwtConstant.EXPIRATION,
TimeUnit.MILLISECONDS); TimeUnit.MILLISECONDS);
} }
...@@ -133,7 +143,10 @@ public class AuthHandler { ...@@ -133,7 +143,10 @@ public class AuthHandler {
* @return * @return
*/ */
public boolean isDisableToken(String token) { public boolean isDisableToken(String token) {
List<String> disableTokens = stringRedisTemplate.opsForList().range(RedisConstant.DISABLE_TOKEN_LIST, 0, -1);// 需要强制失效的token List<String> disableTokens =
stringRedisTemplate
.opsForList()
.range(RedisConstant.DISABLE_TOKEN_LIST, 0, -1); // 需要强制失效的token
return (!CollectionUtils.isEmpty(disableTokens) && disableTokens.contains(token)); return (!CollectionUtils.isEmpty(disableTokens) && disableTokens.contains(token));
} }
...@@ -150,33 +163,39 @@ public class AuthHandler { ...@@ -150,33 +163,39 @@ public class AuthHandler {
} }
public String getUserToken(Integer userAccountId, Integer roleId, String tokenType) { public String getUserToken(Integer userAccountId, Integer roleId, String tokenType) {
String token = stringRedisTemplate.opsForValue() String token =
.get(RedisConstant.createLoginTokenKey(tokenType, roleId.toString(), userAccountId.toString()));// 查询他的token stringRedisTemplate
.opsForValue()
.get(
RedisConstant.createLoginTokenKey(
tokenType, roleId.toString(), userAccountId.toString())); // 查询他的token
return token; return token;
} }
public void disableOneToken(Integer userAccountId, Integer roleId, String tokenType) { public void disableOneToken(Integer userAccountId, Integer roleId, String tokenType) {
String token = this.getUserToken(userAccountId, roleId, tokenType);// 查询他的token String token = this.getUserToken(userAccountId, roleId, tokenType); // 查询他的token
if (!StringUtils.isEmpty(token)) { if (!StringUtils.isEmpty(token)) {
stringRedisTemplate.opsForList().leftPush(RedisConstant.DISABLE_TOKEN_LIST, token);// 加入token失效列表 stringRedisTemplate
.opsForList()
.leftPush(RedisConstant.DISABLE_TOKEN_LIST, token); // 加入token失效列表
} }
String cacheLoginKey = RedisConstant.createLoginCacheKey(tokenType, userAccountId); String cacheLoginKey = RedisConstant.createLoginCacheKey(tokenType, userAccountId);
stringRedisTemplate.delete(cacheLoginKey);// 删除登录信息 stringRedisTemplate.delete(cacheLoginKey); // 删除登录信息
} }
public void disableListToken(List<Integer> userAccountIds, Integer roleId, String tokenType) { public void disableListToken(List<Integer> userAccountIds, Integer roleId, String tokenType) {
Set<String> tokenKeyList = stringRedisTemplate Set<String> tokenKeyList =
.keys(RedisConstant.tokenPreFix(tokenType, roleId.toString()) + "*");// 模糊查询所有key stringRedisTemplate.keys(
RedisConstant.tokenPreFix(tokenType, roleId.toString()) + "*"); // 模糊查询所有key
if (!CollectionUtils.isEmpty(tokenKeyList)) { if (!CollectionUtils.isEmpty(tokenKeyList)) {
List<String> tokenList = stringRedisTemplate.opsForValue().multiGet(tokenKeyList); List<String> tokenList = stringRedisTemplate.opsForValue().multiGet(tokenKeyList);
stringRedisTemplate.opsForList().leftPushAll(RedisConstant.DISABLE_TOKEN_LIST, tokenList); stringRedisTemplate.opsForList().leftPushAll(RedisConstant.DISABLE_TOKEN_LIST, tokenList);
} }
userAccountIds.forEach(id -> { userAccountIds.forEach(
id -> {
String cacheLoginKey = RedisConstant.createLoginCacheKey(tokenType, id); String cacheLoginKey = RedisConstant.createLoginCacheKey(tokenType, id);
stringRedisTemplate.delete(cacheLoginKey); stringRedisTemplate.delete(cacheLoginKey);
}); });
} }
} }
package com.mmc.payment.config;
import com.mmc.payment.common.Tenant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
/**
* @Author small
* @Date 2023/5/29 10:38
* @Version 1.0
*/
@Slf4j
public class TenantContext {
private static ThreadLocal<Tenant> tenantHolder = new ThreadLocal<>();
public static void setTenant(Tenant tenant) {
tenantHolder.set(tenant);
}
public static Tenant getTenant() {
return tenantHolder.get();
}
public static Integer getUserId() {
return getTenant().getUserId();
}
public static Integer getTenantId() {
return getTenant().getTenantId();
}
public static Integer getRoleId() {
return getTenant().getRoleId();
}
public static boolean exists() {
return getTenant() != null;
}
public static void clear() {
tenantHolder.remove();
}
public static Tenant buildTenant( String accountNo ) {
if (StringUtils.isBlank(accountNo)) {
log.error("登录信息[accountNo]获取异常");
return null;
}
return new Tenant(accountNo);
}
/**
* valid tenantId is correct
*/
private static boolean validNumeric(String number) {
return StringUtils.isNotEmpty(number) && StringUtils.isNumeric(number);
}
}
...@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -14,6 +14,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses; import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore; import springfox.documentation.annotations.ApiIgnore;
...@@ -21,72 +22,77 @@ import javax.servlet.http.HttpServletRequest; ...@@ -21,72 +22,77 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* @Author small * @Author small @Date 2023/5/24 9:53 @Version 1.0
* @Date 2023/5/24 9:53
* @Version 1.0
*/ */
@Api(tags = { "消耗-现金-接口" }) @Api(tags = {"现金管理"})
@RestController @RestController
@RequestMapping("/repocash/") @RequestMapping("/repocash/")
public class RepoCashController { public class RepoCashController extends BaseController {
@Autowired @Autowired private RepoCashService repoCashService;
private RepoCashService repoCashService;
@Autowired private StringRedisTemplate stringRedisTemplate;
@ApiOperation(value = "web-订单支付")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = PayCashResultDTO.class)})
@PostMapping("orderPayment")
public PayCashResultDTO orderPayment(HttpServletRequest request, @RequestParam String orderNo) {
return repoCashService.orderPayment(this.getCurrentAccount(request), orderNo);
}
@ApiOperation(value = "支付订单-充值扣款") @ApiOperation(value = "支付订单-充值扣款")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = PayCashResultDTO.class) }) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = PayCashResultDTO.class)})
@ApiIgnore @ApiIgnore
@PostMapping("PayCashOrder") @PostMapping("PayCashOrder")
public PayCashResultDTO feignPayCashOrder(@RequestBody RepoOrderPayVO orderPay) { public PayCashResultDTO feignPayCashOrder(@RequestBody RepoOrderPayVO orderPay) {
return repoCashService.payCashOrder(orderPay); return repoCashService.payCashOrder(orderPay);
} }
@ApiIgnore
@ApiOperation(value = "当前用户剩余的余额") @ApiOperation(value = "当前用户剩余的余额")
@GetMapping("RemainingBalance") @GetMapping("RemainingBalance")
public BigDecimal RemainingBalance(@RequestParam(value = "repoAccountId",required = true) Integer repoAccountId) { public BigDecimal RemainingBalance(
@RequestParam(value = "repoAccountId", required = true) Integer repoAccountId) {
String s = stringRedisTemplate.opsForValue().get("R2023052814538712");
return repoCashService.RemainingBalance(repoAccountId); return repoCashService.RemainingBalance(repoAccountId);
} }
@ApiOperation(value = "余额变更-分页-列表") @ApiOperation(value = "余额变更-分页-列表")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = RepoCashDTO.class) }) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = RepoCashDTO.class)})
@PostMapping("listPageCash") @PostMapping("listPageCash")
public ResultBody listPageCash(@RequestBody RepoCashQO param) { public ResultBody listPageCash(@RequestBody RepoCashQO param) {
return ResultBody.success(repoCashService.listPageRepoCash(param)); return ResultBody.success(repoCashService.listPageRepoCash(param));
} }
@ApiOperation(value = "余额变更-修改备注") @ApiOperation(value = "余额变更-修改备注")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) }) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("updateCashRemark") @GetMapping("updateCashRemark")
public ResultBody updateCashRemark(@RequestParam Integer id, @RequestParam() String remark) { public ResultBody updateCashRemark(@RequestParam Integer id, @RequestParam() String remark) {
repoCashService.updateCashRemark(id, remark); repoCashService.updateCashRemark(id, remark);
return ResultBody.success(); return ResultBody.success();
} }
@ApiOperation(value = "v1.0.1-NO现金-充值") @ApiOperation(value = "v1.0.1Yes-现金-充值")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) }) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@RepeatSubmit @RepeatSubmit
@PostMapping("reqCash") @PostMapping("reqCash")
public ResultBody reqCash(HttpServletRequest request, @RequestBody RepoCashVO param) { public ResultBody reqCash(HttpServletRequest request, @RequestBody RepoCashVO param) {
return repoCashService.reqCash(null, param); return repoCashService.reqCash(this.getCurrentAccount(request), param);
//repoCashService.reqCash(this.getCurrentAccount(request), param);
} }
@ApiOperation(value = "v1.0.1-NO现金-手动扣除") @ApiOperation(value = "v1.0.1-Yes现金-手动扣除")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) }) @ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@RepeatSubmit @RepeatSubmit
@PostMapping("dedCash") @PostMapping("dedCash")
public ResultBody dedCash(HttpServletRequest request, @RequestBody RepoCashVO param) { public ResultBody dedCash(HttpServletRequest request, @RequestBody RepoCashVO param) {
//repoCashService.dedCash(this.getCurrentAccount(request), param) return repoCashService.dedCash(this.getCurrentAccount(request), param);
return repoCashService.dedCash(null, param);
} }
@ApiOperation(value = "feign-查询退款金额") @ApiIgnore
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = RepoCashDTO.class) }) @ApiOperation(value = "查询退款金额")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = RepoCashDTO.class)})
@GetMapping("feignRefundInfo") @GetMapping("feignRefundInfo")
public RepoCashDTO feignRefundInfo(@RequestParam String refundNo) { public RepoCashDTO feignRefundInfo(@RequestParam String refundNo) {
return repoCashService.getRefundInfo(refundNo); return repoCashService.getRefundInfo(refundNo);
} }
} }
...@@ -9,9 +9,7 @@ import java.math.BigDecimal; ...@@ -9,9 +9,7 @@ import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
* @Author small * @Author small @Date 2023/5/24 10:10 @Version 1.0
* @Date 2023/5/24 10:10
* @Version 1.0
*/ */
@Mapper @Mapper
public interface RepoCashDao { public interface RepoCashDao {
...@@ -32,4 +30,6 @@ public interface RepoCashDao { ...@@ -32,4 +30,6 @@ public interface RepoCashDao {
BigDecimal RemainingBalance(Integer repoAccountId); BigDecimal RemainingBalance(Integer repoAccountId);
void updateWalletAmt(Integer repoAccountId, BigDecimal addAmt, BigDecimal addPaid); void updateWalletAmt(Integer repoAccountId, BigDecimal addAmt, BigDecimal addPaid);
void orderPayment(RepoCashDO repoCashDO);
} }
package com.mmc.payment.entity;
import com.mmc.payment.model.dto.KdnExpDTO;
import com.mmc.payment.model.dto.OrderReceiptDTO;
import com.mmc.payment.model.dto.OrderRefundDTO;
import com.mmc.payment.model.dto.OrderVcuDTO;
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;
import java.util.List;
/**
* @Author small @Date 2023/5/29 13:55 @Version 1.0
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
// @ApiModel(value = "com.mmc.csf.model.dto.OrderInfoDTO", description = "云仓订单DTO")
public class OrderInfoDO implements Serializable {
private static final long serialVersionUID = 1572467108563651846L;
@ApiModelProperty(value = "ID")
private Integer id;
@ApiModelProperty(value = "订单编号")
private String orderNo;
@ApiModelProperty(value = "商品ID")
private Integer wareInfoId;
@ApiModelProperty(value = "商品编号")
private String wareNo;
@ApiModelProperty(value = "商品标题")
private String wareTitle;
@ApiModelProperty(value = "商品图片")
private String wareImg;
@ApiModelProperty(value = "套餐(sku)ID")
private Integer skuInfoId;
@ApiModelProperty(value = "套餐(sku)名称")
private String skuTitle;
@ApiModelProperty(value = "购买用户ID")
private Integer repoAccountId;
@ApiModelProperty(value = "用户UID")
private String uid;
@ApiModelProperty(value = "买家name")
private String buyerName;
@ApiModelProperty(value = "买家电话")
private String buyerPhone;
@ApiModelProperty(value = "单价")
private BigDecimal unitPrice;
@ApiModelProperty(value = "购买的商品数量")
private Integer wareNum;
@ApiModelProperty(value = "应付款金额")
private BigDecimal shouldPay;
@ApiModelProperty(value = "实收款金额")
private BigDecimal actualPay;
@ApiModelProperty(value = "订单类型:0租赁 100购买")
private Integer orderType;
@ApiModelProperty(value = "押金")
private BigDecimal deposit;
@ApiModelProperty(value = "租金总金额")
private BigDecimal rentPrice;
@ApiModelProperty(value = "租约开始日")
private Date startDate;
@ApiModelProperty(value = "租约结束日")
private Date endDate;
@ApiModelProperty(value = "付款天数")
private Integer payDay;
@ApiModelProperty(value = "交易状态:查订单状态字典")
private String tranStatus;
@ApiModelProperty(value = "减库方式 0:买家拍下减库存 1:卖家付款减库存")
private Integer exWare;
@ApiModelProperty(value = "用户备注")
private String remark;
@ApiModelProperty(value = "平台人员备注")
private String pfRemark;
@ApiModelProperty(value = "关闭原因")
private String shutReason;
@ApiModelProperty(value = "交易编号")
private String payNo;
@ApiModelProperty(value = "支付时间")
private Date payTime;
@ApiModelProperty(value = "发货时间")
private Date sendWareTime;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "物流信息/收货地址信息")
private OrderReceiptDTO receipt;
@ApiModelProperty(value = "退款单详情信息,无则为null")
private OrderRefundDTO orderRefund;
@ApiModelProperty(value = "发货-物流动态,无则为null")
private KdnExpDTO express;
@ApiModelProperty(value = "退货-物流动态,无则为null")
private KdnExpDTO refundExpress;
@ApiModelProperty(value = "质检详情,无则为null")
private List<OrderVcuDTO> vcus;
@ApiModelProperty(value = "归还时间")
private Date returnTime;
@ApiModelProperty(value = "优惠券id", example = "221")
private Integer couponId;
@ApiModelProperty(value = "规格id", example = "1")
private Integer specsId;
@ApiModelProperty(value = "余额", example = "4")
private BigDecimal balance;
}
package com.mmc.payment.filter;
/**
* @Author small
* @Date 2023/5/29 10:36
* @Version 1.0
*/
import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** 登录认证 */
public interface AuthFilter extends Filter {
/** 拦截前 */
public boolean before(HttpServletRequest request, HttpServletResponse response);
/** 通过拦截后 */
public boolean after();
}
package com.mmc.payment.filter;
import com.alibaba.fastjson2.JSON;
import com.mmc.payment.common.ResultBody;
import com.mmc.payment.common.ResultEnum;
import com.mmc.payment.common.Tenant;
import com.mmc.payment.config.Audience;
import com.mmc.payment.config.TenantContext;
import com.mmc.payment.model.dto.UserAccountDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @Author small
* @Date 2023/5/29 10:36
* @Version 1.0
*/
@Slf4j
@Component
@WebFilter(filterName = "AuthSignatureFilter", urlPatterns = "/*")
public class AuthSignatureFilter implements AuthFilter {
@Autowired
private Audience audience;
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 无需登录白名单
*/
private static final String[] IGNORE_URLS = {"/payment/swagger/swagger-resources","/payment/swagger/v2/api-docs","/payment/swagger/doc.html"};
/*无需加密狗无需登录白名单*/
private static final String[] USE_KEY = {"/crm/account/loginByUsbKey"};
/**
* 请求方式预请求方式值
*/
private static final String REQUEST_METHOD_OPTIONS_VALUE = "OPTIONS";
public static final String SWAGGER_URL_PREFIX = "/payment/swagger";
@Override
public void init(FilterConfig filterConfig) {
log.info(" filter name is 'AuthSignatureFilter' init success");
}
/**
* 过滤器前置处理
*
* @param request
* @param response
* @return
*/
@Override
public boolean before(HttpServletRequest request, HttpServletResponse response) {
String url = request.getRequestURI();
// 忽略以下url请求,白名单路径以及swagger路径
if (!ArrayUtils.contains(IGNORE_URLS, url)
&& !ArrayUtils.contains(USE_KEY, url) && !url.startsWith("/payment/webjars") && !url.startsWith(SWAGGER_URL_PREFIX)) {
if (REQUEST_METHOD_OPTIONS_VALUE.equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
return false;
} else {
String token = request.getHeader("token");
if (null==token){
response(response, ResultBody.error(ResultEnum.THE_REQUEST_IS_NOT_AUTHENTICATED));
return false;
}
String s = stringRedisTemplate.opsForValue().get(token);
if (null==s){
response(response,ResultBody.error(ResultEnum.THE_TOKEN_IS_INVALID));
return false;
}
UserAccountDTO userAccountDTO = JSON.parseObject(s, UserAccountDTO.class);
try {
Tenant tenant = TenantContext.buildTenant(userAccountDTO.getAccountNo());
if (tenant!=null){
TenantContext.setTenant(tenant);
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return true;
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
if (!before(request, response)) {
return;
}
chain.doFilter(req, res);
after();
}
/**
* 过滤器后置处理
*
* @return
*/
@Override
public boolean after() {
TenantContext.clear(); // 上下文清理
return true;
}
private static final String APPLICATION_JSON_UTF8 = "application/json;charset=UTF-8";
public static void response(HttpServletResponse response, ResultBody resultBody) {
response.setContentType(APPLICATION_JSON_UTF8);
try {
response
.getWriter()
.write(JSON.toJSONString(ResultBody.error(resultBody.getCode(), resultBody.getMessage())));
} catch (IOException e) {
log.error(e.getMessage());
}
}
private static String toString(Object obj) {
if (null == obj) {
return "";
}
return obj.toString();
}
@Override
public void destroy() {
}
}
package com.mmc.payment.model.dto; package com.mmc.payment.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
...@@ -10,59 +9,34 @@ import lombok.NoArgsConstructor; ...@@ -10,59 +9,34 @@ import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
/** /**
* @Author small * @Author small @Date 2023/5/23 19:15 @Version 1.0
* @Date 2023/5/23 19:15
* @Version 1.0
*/ */
@Builder @Builder
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
//@ApiModel(value = "com.mmc.csf.model.dto.BaseAccountDTO", description = "登录信息DTO") // @ApiModel(value = "com.mmc.csf.model.dto.BaseAccountDTO", description = "登录信息DTO")
public class BaseAccountDTO implements Serializable { public class BaseAccountDTO implements Serializable {
private static final long serialVersionUID = -2979712090903806216L; private static final long serialVersionUID = -2979712090903806216L;
private Integer id;
private String uid;
private String accountPhone;
private String accountNo;
private String accountName;
private String tokenPort;
@ApiModelProperty(value = "角色ID")
private Integer roleId;
@ApiModelProperty(value = "是否为管理角色:0否 1是")
private Integer admin;// 是否为管理角色
@ApiModelProperty(value = "是否为运营角色:0否 1是")
private Integer operate;
@ApiModelProperty(value = "是否PMC发货专员:0否 1是")
private Integer pmc;
@ApiModelProperty(value = "单位信息")
private CompanyCacheDTO companyInfo;// 单位信息
public BaseAccountDTO(RepoAccountDTO account) { @ApiModelProperty(value = "token")
this.id = account.getId(); private String token;
this.accountName = account.getAccountName();
this.uid = account.getUid();
this.accountPhone = account.getPhoneNum();
}
@ApiModelProperty(value = "账号id")
private Integer userAccountId;
@ApiModelProperty(value = "账号")
private String accountNo;
/** @ApiModelProperty(value = "账号uid")
* 是否为科比特超级管理员单位(是:无单位资源限制 否:只能看当前和下级单位的资源) private String uid;
* @return
*/
public boolean isManage() {
if(this.getCompanyInfo()==null){
return false;
}
if(this.getCompanyInfo().getManage()==null){
return false;
}
return this.getCompanyInfo().getManage() == 1;
}
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "用户名称")
private String userName;
@ApiModelProperty(value = "用户昵称")
private String nickName;
} }
...@@ -3,7 +3,6 @@ package com.mmc.payment.model.vo; ...@@ -3,7 +3,6 @@ package com.mmc.payment.model.vo;
import com.mmc.payment.common.Create; import com.mmc.payment.common.Create;
import com.mmc.payment.common.Refund; import com.mmc.payment.common.Refund;
import com.mmc.payment.common.Share; import com.mmc.payment.common.Share;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
...@@ -16,34 +15,49 @@ import java.math.BigDecimal; ...@@ -16,34 +15,49 @@ import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
* @Author small * @Author small @Date 2023/5/24 10:04 @Version 1.0
* @Date 2023/5/24 10:04
* @Version 1.0
*/ */
@Builder @Builder
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
//@ApiModel(value = "com.mmc.csf.model.vo.RepoCashVO", description = "现金变更VO") // @ApiModel(value = "com.mmc.csf.model.vo.RepoCashVO", description = "现金变更VO")
public class RepoCashVO implements Serializable { public class RepoCashVO implements Serializable {
private static final long serialVersionUID = 1828354753495845609L; private static final long serialVersionUID = 1828354753495845609L;
@ApiModelProperty(value = "用户ID")
@NotNull(message = "用户ID不能为空", groups = { Create.class }) /* @ApiModelProperty(value = "用户ID")
private Integer repoAccountId; @NotNull(
@ApiModelProperty(value = "订单ID") message = "用户ID不能为空",
@NotNull(message = "orderRefundId不能为空", groups = { Refund.class }) groups = {Create.class})
private Integer repoAccountId;*/
/* @ApiModelProperty(value = "订单ID")
@NotNull(
message = "orderRefundId不能为空",
groups = {Refund.class})
private Integer orderRefundId; private Integer orderRefundId;
@ApiModelProperty(value = "返租订单ID") @ApiModelProperty(value = "返租订单ID")
@NotNull(message = "shareOrderId不能为空", groups = { Share.class }) @NotNull(
private Integer shareOrderId; message = "shareOrderId不能为空",
groups = {Share.class})
private Integer shareOrderId;*/
@ApiModelProperty(value = "变动金额") @ApiModelProperty(value = "变动金额")
@NotNull(message = "变动金额不能为空", groups = { Create.class, Refund.class }) @NotNull(
message = "变动金额不能为空",
groups = {Create.class, Refund.class})
private BigDecimal amtPaid; private BigDecimal amtPaid;
@ApiModelProperty(value = "凭证图片集合") @ApiModelProperty(value = "凭证图片集合")
private List<String> voucher; private List<String> voucher;
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
private String remark; private String remark;
@ApiModelProperty(value = "操作人员密码") @ApiModelProperty(value = "操作人员密码")
@NotNull(message = "变动金额不能为空", groups = { Refund.class, Share.class }) @NotNull(
message = "变动金额不能为空",
groups = {Refund.class, Share.class})
private String authPwd; private String authPwd;
} }
...@@ -17,35 +17,41 @@ import java.util.Map; ...@@ -17,35 +17,41 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* @Author small * @Author small @Date 2023/5/23 19:12 @Version 1.0
* @Date 2023/5/23 19:12
* @Version 1.0
*/ */
@Service @Service
public class RepoAccountServiceImpl implements RepoAccountService { public class RepoAccountServiceImpl implements RepoAccountService {
@Autowired @Autowired private RepoAccountDao repoAccountDao;
private RepoAccountDao repoAccountDao;
@Override @Override
public PageResult listPagePayManager(RepoAccountQO param, BaseAccountDTO cuser) { public PageResult listPagePayManager(RepoAccountQO param, BaseAccountDTO cuser) {
if(!cuser.isManage()){ /*if(!cuser.isManage()){
param.setCompanys(cuser.getCompanyInfo().getCompanys()); param.setCompanys(cuser.getCompanyInfo().getCompanys());
} }*/
int count = repoAccountDao.countPagePayManager(param); int count = repoAccountDao.countPagePayManager(param);
if (count == 0) { if (count == 0) {
return PageResult.buildPage(param.getPageNo(), param.getPageSize(), count); return PageResult.buildPage(param.getPageNo(), param.getPageSize(), count);
} }
Integer pageNo = param.getPageNo(); Integer pageNo = param.getPageNo();
param.buildCurrentPage(); param.buildCurrentPage();
List<RepoAccountDTO> data = repoAccountDao.listPagePayManager(param).stream().map(d -> { List<RepoAccountDTO> data =
repoAccountDao.listPagePayManager(param).stream()
.map(
d -> {
d.buildName(); d.buildName();
return d.buildRepoAccountDTO(); return d.buildRepoAccountDTO();
}).collect(Collectors.toList()); })
List<Integer> accountIds = data.stream().map(RepoAccountDTO::getId).collect(Collectors.toList()); .collect(Collectors.toList());
List<Integer> accountIds =
data.stream().map(RepoAccountDTO::getId).collect(Collectors.toList());
param.setAccountIds(accountIds); param.setAccountIds(accountIds);
// List<RepoWalletDTO> wallets = repoPayServletClient.feignListWalletInfo(param); // List<RepoWalletDTO> wallets = repoPayServletClient.feignListWalletInfo(param);
List<RepoWalletDTO> wallets = listWalletInfo(param); List<RepoWalletDTO> wallets = listWalletInfo(param);
Map<Integer, RepoWalletDTO> mapWallet = wallets.stream() Map<Integer, RepoWalletDTO> mapWallet =
.collect(Collectors.toMap(RepoWalletDTO::getRepoAccountId, wallet -> wallet, (k1, k2) -> k2)); wallets.stream()
.collect(
Collectors.toMap(
RepoWalletDTO::getRepoAccountId, wallet -> wallet, (k1, k2) -> k2));
for (RepoAccountDTO ac : data) { for (RepoAccountDTO ac : data) {
if (mapWallet.containsKey(ac.getId())) { if (mapWallet.containsKey(ac.getId())) {
ac.setCashAmt(mapWallet.get(ac.getId()).getCashAmt()); ac.setCashAmt(mapWallet.get(ac.getId()).getCashAmt());
...@@ -55,16 +61,16 @@ public class RepoAccountServiceImpl implements RepoAccountService { ...@@ -55,16 +61,16 @@ public class RepoAccountServiceImpl implements RepoAccountService {
return PageResult.buildPage(pageNo, param.getPageSize(), count, data); return PageResult.buildPage(pageNo, param.getPageSize(), count, data);
} }
public List<RepoWalletDTO> listWalletInfo(RepoAccountQO param) { public List<RepoWalletDTO> listWalletInfo(RepoAccountQO param) {
if (CollectionUtils.isEmpty(param.getAccountIds())) { if (CollectionUtils.isEmpty(param.getAccountIds())) {
return java.util.Collections.emptyList(); return java.util.Collections.emptyList();
} }
List<RepoWalletDO> wallets = repoAccountDao.listWalletInfo(param); List<RepoWalletDO> wallets = repoAccountDao.listWalletInfo(param);
return wallets.stream().map(d -> { return wallets.stream()
.map(
d -> {
return d.buildRepoWalletDTO(); return d.buildRepoWalletDTO();
}).collect(Collectors.toList()); })
.collect(Collectors.toList());
} }
} }
package com.mmc.payment.service.Impl; package com.mmc.payment.service.Impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mmc.payment.common.*; import com.mmc.payment.common.*;
import com.mmc.payment.config.RepoCashMethod; import com.mmc.payment.config.RepoCashMethod;
import com.mmc.payment.dao.RepoCashDao; import com.mmc.payment.dao.RepoCashDao;
...@@ -14,10 +15,10 @@ import com.mmc.payment.model.vo.RepoOrderPayVO; ...@@ -14,10 +15,10 @@ import com.mmc.payment.model.vo.RepoOrderPayVO;
import com.mmc.payment.service.RepoCashService; import com.mmc.payment.service.RepoCashService;
import io.jsonwebtoken.lang.Collections; import io.jsonwebtoken.lang.Collections;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -28,19 +29,16 @@ import java.util.Map; ...@@ -28,19 +29,16 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* @Author small * @Author small @Date 2023/5/24 10:06 @Version 1.0
* @Date 2023/5/24 10:06
* @Version 1.0
*/ */
@Service @Service
public class RepoCashServiceImpl implements RepoCashService { public class RepoCashServiceImpl implements RepoCashService {
@Autowired @Autowired private RepoCashDao repoCashDao;
private RepoCashDao repoCashDao;
@Autowired private RestTemplate restTemplate;
@Autowired @Autowired private StringRedisTemplate stringRedisTemplate;
private RestTemplate restTemplate;
/* @Autowired /* @Autowired
private RepoWalletDao repoWalletDao;*/ private RepoWalletDao repoWalletDao;*/
...@@ -50,6 +48,9 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -50,6 +48,9 @@ public class RepoCashServiceImpl implements RepoCashService {
@Autowired @Autowired
private RepoServletClient repoServletClient;*/ private RepoServletClient repoServletClient;*/
@Value("${userapp.url}")
private String userAppUrl;
@Override @Override
public PageResult listPageRepoCash(RepoCashQO param) { public PageResult listPageRepoCash(RepoCashQO param) {
int count = repoCashDao.countPagePFRepoCash(param); int count = repoCashDao.countPagePFRepoCash(param);
...@@ -65,20 +66,28 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -65,20 +66,28 @@ public class RepoCashServiceImpl implements RepoCashService {
userIds.add(d.getCreateUser()); userIds.add(d.getCreateUser());
} }
} }
List<RepoCashDTO> data = list.stream().map(d -> { List<RepoCashDTO> data =
list.stream()
.map(
d -> {
return d.buildRepoCashDTO(); return d.buildRepoCashDTO();
}).collect(Collectors.toList()); })
.collect(Collectors.toList());
UserAccountQO uq = UserAccountQO.builder().userIds(userIds).build(); UserAccountQO uq = UserAccountQO.builder().userIds(userIds).build();
List<UserAccountDTO> users = null; List<UserAccountDTO> users = null;
//批量获取用户信息 // 批量获取用户信息
// userServletClient.feignListUserAccountById(uq); // userServletClient.feignListUserAccountById(uq);
// 远程调用非当前接口 // 远程调用非当前接口
ResponseEntity<String> response = ResponseEntity<String> response =
restTemplate.getForEntity("http://localhost:35150/userapp/user-account/feignGetUserSimpleInfo?userAccountId=1"+ userIds,String.class); restTemplate.getForEntity(
"http://localhost:35150/userapp/user-account/feignGetUserSimpleInfo?userAccountId=1"
+ userIds,
String.class);
String body = response.getBody(); String body = response.getBody();
Map<Integer, UserAccountDTO> mapUser = users.stream() Map<Integer, UserAccountDTO> mapUser =
.collect(Collectors.toMap(UserAccountDTO::getId, ud -> ud, (k1, k2) -> k2)); users.stream().collect(Collectors.toMap(UserAccountDTO::getId, ud -> ud, (k1, k2) -> k2));
data.forEach(d -> { data.forEach(
d -> {
if (mapUser.containsKey(d.getCreateUser())) { if (mapUser.containsKey(d.getCreateUser())) {
d.setOpNo(mapUser.get(d.getCreateUser()).getAccountNo()); d.setOpNo(mapUser.get(d.getCreateUser()).getAccountNo());
d.setOpName(mapUser.get(d.getCreateUser()).getUserName()); d.setOpName(mapUser.get(d.getCreateUser()).getUserName());
...@@ -100,23 +109,22 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -100,23 +109,22 @@ public class RepoCashServiceImpl implements RepoCashService {
return ResultBody.error(ResultEnum.AMT_PAID_VERITY_ERROR); return ResultBody.error(ResultEnum.AMT_PAID_VERITY_ERROR);
} }
// 密码认证 // 密码认证
ResultBody body =null; // getResultBody(cuser, cash);
//userServletClient.feignAuthUserPwd(cuser.getId(), cash.getAuthPwd());
/*if (!ResultEnum.SUCCESS.getResultCode().equals(body.getCode())) {
return body;
}*/
// 用户信息 // 用户信息
//RepoAccountDTO account = null; // RepoAccountDTO account = null;
//repoServletClient.feignAccountSimpleInfo(cash.getRepoAccountId()); // repoServletClient.feignAccountSimpleInfo(cash.getRepoAccountId());
ResponseEntity<String> response = ResponseEntity<String> response =
restTemplate.getForEntity("http://localhost:35150/userapp/user-account/feignGetUserSimpleInfo?userAccountId=1",String.class); restTemplate.getForEntity(
String body1 = response.getBody(); userAppUrl
UserAccountSimpleDTO account = JSON.parseObject(body1, UserAccountSimpleDTO.class); + "user-account/feignGetUserSimpleInfo?userAccountId="
+ cuser.getUserAccountId(),
String.class);
UserAccountSimpleDTO account = JSON.parseObject(response.getBody(), UserAccountSimpleDTO.class);
if (account == null) { if (account == null) {
return ResultBody.error(ResultEnum.FEIGN_REPOUSER_SERVLET_ERROR); return ResultBody.error(ResultEnum.FEIGN_REPOUSER_SERVLET_ERROR);
} }
RepoWalletDO wallet = repoCashDao.getRepoWalletInfo(cuser.getUserAccountId());
RepoWalletDO wallet = repoCashDao.getRepoWalletInfo(cash.getRepoAccountId());
if (wallet == null) { if (wallet == null) {
return ResultBody.error(ResultEnum.WALLET_NOT_FIND_ERROR); return ResultBody.error(ResultEnum.WALLET_NOT_FIND_ERROR);
} }
...@@ -132,21 +140,38 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -132,21 +140,38 @@ public class RepoCashServiceImpl implements RepoCashService {
rc.setPayNo(CodeUtil.createRepoCashNo()); rc.setPayNo(CodeUtil.createRepoCashNo());
rc.setPayMethod(RepoCashMethod.REG.getCode()); rc.setPayMethod(RepoCashMethod.REG.getCode());
rc.setAmtPaid(cash.getAmtPaid()); rc.setAmtPaid(cash.getAmtPaid());
BigDecimal newCashAmt = (wallet.getCashAmt().add(cash.getAmtPaid())).setScale(2, BigDecimal.ROUND_DOWN); BigDecimal newCashAmt =
(wallet.getCashAmt().add(cash.getAmtPaid())).setScale(2, BigDecimal.ROUND_DOWN);
rc.setCashAmt(newCashAmt); rc.setCashAmt(newCashAmt);
rc.setPayTime(cdate); rc.setPayTime(cdate);
String voucher = Collections.isEmpty(cash.getVoucher()) ? null : String.join(",", cash.getVoucher()); String voucher =
Collections.isEmpty(cash.getVoucher()) ? null : String.join(",", cash.getVoucher());
rc.setVoucher(voucher); rc.setVoucher(voucher);
rc.setRemark(cash.getRemark()); rc.setRemark(cash.getRemark());
rc.setCreateTime(cdate); rc.setCreateTime(cdate);
rc.setCreateUser(cuser.getUserAccountId());
//rc.setCreateUser(cuser.getId());
rc.setCreateUser(1);
repoCashDao.insertRepoCash(rc); repoCashDao.insertRepoCash(rc);
repoCashDao.updateRepoWalletAmt(account.getId(), rc.getAmtPaid()); repoCashDao.updateRepoWalletAmt(account.getId(), rc.getAmtPaid());
return ResultBody.success(); return ResultBody.success();
} }
/* private String getResultBody(BaseAccountDTO cuser, RepoCashVO cash) {
ResponseEntity<String> response =
restTemplate.getForEntity(
userAppUrl
+ "back-user/feignAuthUserPwd?authPwd="
+ cash.getAuthPwd()
+ "&id="
+ +cuser.getUserAccountId(),
String.class);
ResultBody body = JSON.parseObject(response.getBody(), ResultBody.class);
*/
/* if (!ResultEnum.SUCCESS.getResultCode().equals(body.getCode())) {
return body;
}*/
/*
}*/
@Override @Override
public ResultBody dedCash(BaseAccountDTO cuser, RepoCashVO cash) { public ResultBody dedCash(BaseAccountDTO cuser, RepoCashVO cash) {
// 金额范围验证 // 金额范围验证
...@@ -154,24 +179,28 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -154,24 +179,28 @@ public class RepoCashServiceImpl implements RepoCashService {
return ResultBody.error(ResultEnum.AMT_PAID_VERITY_ERROR); return ResultBody.error(ResultEnum.AMT_PAID_VERITY_ERROR);
} }
// 密码认证 // 密码认证
ResultBody body =null; ResultBody body = null;
//userServletClient.feignAuthUserPwd(cuser.getId(), cash.getAuthPwd()); // userServletClient.feignAuthUserPwd(cuser.getId(), cash.getAuthPwd());
/*if (!ResultEnum.SUCCESS.getResultCode().equals(body.getCode())) { /*if (!ResultEnum.SUCCESS.getResultCode().equals(body.getCode())) {
return body; return body;
}*/ }*/
// 用户信息 // 用户信息
// RepoAccountDTO account =null; // RepoAccountDTO account =null;
//repoServletClient.feignAccountSimpleInfo(cash.getRepoAccountId()); // repoServletClient.feignAccountSimpleInfo(cash.getRepoAccountId());
ResponseEntity<String> response = ResponseEntity<String> response =
restTemplate.getForEntity("http://localhost:35150/userapp/user-account/feignGetUserSimpleInfo?userAccountId=1",String.class); restTemplate.getForEntity(
userAppUrl
+ "user-account/feignGetUserSimpleInfo?userAccountId="
+ cuser.getUserAccountId(),
String.class);
String body1 = response.getBody(); String body1 = response.getBody();
UserAccountSimpleDTO account = JSON.parseObject(body1, UserAccountSimpleDTO.class); UserAccountSimpleDTO account = JSON.parseObject(body1, UserAccountSimpleDTO.class);
if (account == null) { if (account == null) {
return ResultBody.error(ResultEnum.FEIGN_REPOUSER_SERVLET_ERROR); return ResultBody.error(ResultEnum.FEIGN_REPOUSER_SERVLET_ERROR);
} }
RepoWalletDO wallet =repoCashDao.getRepoWalletInfo(cash.getRepoAccountId()); RepoWalletDO wallet = repoCashDao.getRepoWalletInfo(cuser.getUserAccountId());
if (wallet == null) { if (wallet == null) {
return ResultBody.error(ResultEnum.WALLET_NOT_FIND_ERROR); return ResultBody.error(ResultEnum.WALLET_NOT_FIND_ERROR);
} }
...@@ -187,16 +216,16 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -187,16 +216,16 @@ public class RepoCashServiceImpl implements RepoCashService {
rc.setPayNo(CodeUtil.createRepoCashNo()); rc.setPayNo(CodeUtil.createRepoCashNo());
rc.setPayMethod(RepoCashMethod.HANDLER.getCode()); rc.setPayMethod(RepoCashMethod.HANDLER.getCode());
rc.setAmtPaid(cash.getAmtPaid().multiply(BigDecimal.valueOf(-1))); rc.setAmtPaid(cash.getAmtPaid().multiply(BigDecimal.valueOf(-1)));
BigDecimal newCashAmt = (wallet.getCashAmt().subtract(cash.getAmtPaid())).setScale(2, BigDecimal newCashAmt =
BigDecimal.ROUND_DOWN); (wallet.getCashAmt().subtract(cash.getAmtPaid())).setScale(2, BigDecimal.ROUND_DOWN);
rc.setCashAmt(newCashAmt); rc.setCashAmt(newCashAmt);
rc.setPayTime(cdate); rc.setPayTime(cdate);
String voucher = Collections.isEmpty(cash.getVoucher()) ? null : String.join(",", cash.getVoucher()); String voucher =
Collections.isEmpty(cash.getVoucher()) ? null : String.join(",", cash.getVoucher());
rc.setVoucher(voucher); rc.setVoucher(voucher);
rc.setRemark(cash.getRemark()); rc.setRemark(cash.getRemark());
rc.setCreateTime(cdate); rc.setCreateTime(cdate);
// rc.setCreateUser(cuser.getId()); rc.setCreateUser(cuser.getUserAccountId());
rc.setCreateUser(1);
repoCashDao.insertRepoCash(rc); repoCashDao.insertRepoCash(rc);
repoCashDao.updateRepoWalletAmt(account.getId(), rc.getAmtPaid()); repoCashDao.updateRepoWalletAmt(account.getId(), rc.getAmtPaid());
return ResultBody.success(); return ResultBody.success();
...@@ -204,7 +233,7 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -204,7 +233,7 @@ public class RepoCashServiceImpl implements RepoCashService {
@Override @Override
public RepoCashDTO getRefundInfo(String refundNo) { public RepoCashDTO getRefundInfo(String refundNo) {
RepoCashDO refund=repoCashDao.getRefundCashInfo(refundNo); RepoCashDO refund = repoCashDao.getRefundCashInfo(refundNo);
return refund == null ? null : refund.buildRepoCashDTO(); return refund == null ? null : refund.buildRepoCashDTO();
} }
...@@ -214,23 +243,38 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -214,23 +243,38 @@ public class RepoCashServiceImpl implements RepoCashService {
} }
@Override @Override
public PayCashResultDTO orderPayment(BaseAccountDTO currentAccount, String orderNo) {
String s = stringRedisTemplate.opsForValue().get(orderNo);
RepoCashDO repoCashDO = JSONObject.parseObject(s, RepoCashDO.class);
repoCashDao.orderPayment(JSONObject.parseObject(s, RepoCashDO.class));
if (!currentAccount.getUserAccountId().equals(currentAccount.getUserAccountId())) {
return PayCashResultDTO.error(
ResultEnum.WALLET_NOT_FIND_ERROR.getResultCode(),
ResultEnum.WALLET_NOT_FIND_ERROR.getResultMsg());
}
return null;
}
@Override
public PayCashResultDTO payCashOrder(RepoOrderPayVO orderPay) { public PayCashResultDTO payCashOrder(RepoOrderPayVO orderPay) {
BaseAccountDTO account = orderPay.getAccount(); BaseAccountDTO account = orderPay.getAccount();
OrderInfoDTO orderInfo = orderPay.getOrderInfo(); OrderInfoDTO orderInfo = orderPay.getOrderInfo();
RepoWalletDO wallet = repoCashDao.getRepoWalletInfo(account.getId()); RepoWalletDO wallet = repoCashDao.getRepoWalletInfo(account.getUserAccountId());
if (wallet == null) { if (wallet == null) {
return PayCashResultDTO.error(ResultEnum.WALLET_NOT_FIND_ERROR.getResultCode(), return PayCashResultDTO.error(
ResultEnum.WALLET_NOT_FIND_ERROR.getResultCode(),
ResultEnum.WALLET_NOT_FIND_ERROR.getResultMsg()); ResultEnum.WALLET_NOT_FIND_ERROR.getResultMsg());
} }
BigDecimal amtPaid = orderInfo.getShouldPay(); BigDecimal amtPaid = orderInfo.getShouldPay();
if (amtPaid.compareTo(wallet.getCashAmt()) > 0) { if (amtPaid.compareTo(wallet.getCashAmt()) > 0) {
return PayCashResultDTO.error(ResultEnum.WALLET_CASH_NOT_ENOUGH_ERROR.getResultCode(), return PayCashResultDTO.error(
ResultEnum.WALLET_CASH_NOT_ENOUGH_ERROR.getResultCode(),
ResultEnum.WALLET_CASH_NOT_ENOUGH_ERROR.getResultMsg()); ResultEnum.WALLET_CASH_NOT_ENOUGH_ERROR.getResultMsg());
} }
Date cdate = new Date(); Date cdate = new Date();
RepoCashDO cash = orderInfo.buildRepoCashDO(); RepoCashDO cash = orderInfo.buildRepoCashDO();
cash.setRepoAccountId(account.getId()); cash.setRepoAccountId(account.getUserAccountId());
cash.setPayNo(CodeUtil.createRepoCashNo()); cash.setPayNo(CodeUtil.createRepoCashNo());
cash.setPayMethod(RepoCashMethod.RENT.getCode()); cash.setPayMethod(RepoCashMethod.RENT.getCode());
cash.setAmtPaid(amtPaid.multiply(BigDecimal.valueOf(-1))); cash.setAmtPaid(amtPaid.multiply(BigDecimal.valueOf(-1)));
...@@ -238,9 +282,7 @@ public class RepoCashServiceImpl implements RepoCashService { ...@@ -238,9 +282,7 @@ public class RepoCashServiceImpl implements RepoCashService {
cash.setPayTime(cdate); cash.setPayTime(cdate);
cash.setCreateTime(cdate); cash.setCreateTime(cdate);
repoCashDao.insertRepoCash(cash); repoCashDao.insertRepoCash(cash);
repoCashDao.updateWalletAmt(account.getId(), cash.getAmtPaid(), amtPaid); repoCashDao.updateWalletAmt(account.getUserAccountId(), cash.getAmtPaid(), amtPaid);
return PayCashResultDTO.success(amtPaid, cash.getPayNo()); return PayCashResultDTO.success(amtPaid, cash.getPayNo());
} }
} }
...@@ -12,9 +12,7 @@ import com.mmc.payment.model.vo.RepoOrderPayVO; ...@@ -12,9 +12,7 @@ import com.mmc.payment.model.vo.RepoOrderPayVO;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* @Author small * @Author small @Date 2023/5/24 10:06 @Version 1.0
* @Date 2023/5/24 10:06
* @Version 1.0
*/ */
public interface RepoCashService { public interface RepoCashService {
PageResult listPageRepoCash(RepoCashQO param); PageResult listPageRepoCash(RepoCashQO param);
...@@ -35,5 +33,7 @@ public interface RepoCashService { ...@@ -35,5 +33,7 @@ public interface RepoCashService {
BigDecimal RemainingBalance(Integer uid); BigDecimal RemainingBalance(Integer uid);
PayCashResultDTO orderPayment(BaseAccountDTO currentAccount, String orderNo);
PayCashResultDTO payCashOrder(RepoOrderPayVO orderPay); PayCashResultDTO payCashOrder(RepoOrderPayVO orderPay);
} }
...@@ -34,3 +34,7 @@ mount: ...@@ -34,3 +34,7 @@ mount:
directory: D:@javaVolume@ directory: D:@javaVolume@
userapp:
url: http://localhost:35150/userapp/
...@@ -6,43 +6,43 @@ ...@@ -6,43 +6,43 @@
<resultMap id="repoWalletResultMap" <resultMap id="repoWalletResultMap"
type="com.mmc.payment.entity.RepoWalletDO"> type="com.mmc.payment.entity.RepoWalletDO">
<id property="id" column="id" /> <id property="id" column="id"/>
<result property="repoAccountId" column="repo_account_id" /> <result property="repoAccountId" column="repo_account_id"/>
<result property="cashAmt" column="cash_amt" /> <result property="cashAmt" column="cash_amt"/>
<result property="cashPaid" column="cash_paid" /> <result property="cashPaid" column="cash_paid"/>
<result property="cashFreeze" column="cash_freeze" /> <result property="cashFreeze" column="cash_freeze"/>
<result property="rcdRebateAmt" column="rcd_rebate_amt" /> <result property="rcdRebateAmt" column="rcd_rebate_amt"/>
<result property="rebateWdl" column="rebate_wdl" /> <result property="rebateWdl" column="rebate_wdl"/>
<result property="rebateFreeze" column="rebate_freeze" /> <result property="rebateFreeze" column="rebate_freeze"/>
<result property="remark" column="remark" /> <result property="remark" column="remark"/>
<result property="updateTime" column="create_time" /> <result property="updateTime" column="create_time"/>
<result property="createTime" column="update_time" /> <result property="createTime" column="update_time"/>
</resultMap> </resultMap>
<resultMap id="repoCashResultMap" <resultMap id="repoCashResultMap"
type="com.mmc.payment.entity.RepoCashDO"> type="com.mmc.payment.entity.RepoCashDO">
<id property="id" column="id" /> <id property="id" column="id"/>
<result property="repoAccountId" column="repo_account_id" /> <result property="repoAccountId" column="repo_account_id"/>
<result property="uid" column="uid" /> <result property="uid" column="uid"/>
<result property="accountName" column="account_name" /> <result property="accountName" column="account_name"/>
<result property="orderInfoId" column="order_info_id" /> <result property="orderInfoId" column="order_info_id"/>
<result property="orderNo" column="order_no" /> <result property="orderNo" column="order_no"/>
<result property="skuInfoId" column="sku_info_id" /> <result property="skuInfoId" column="sku_info_id"/>
<result property="skuTitle" column="sku_title" /> <result property="skuTitle" column="sku_title"/>
<result property="wareInfoId" column="ware_info_id" /> <result property="wareInfoId" column="ware_info_id"/>
<result property="wareNo" column="ware_no" /> <result property="wareNo" column="ware_no"/>
<result property="wareTitle" column="ware_title" /> <result property="wareTitle" column="ware_title"/>
<result property="payNo" column="pay_no" /> <result property="payNo" column="pay_no"/>
<result property="payMethod" column="pay_method" /> <result property="payMethod" column="pay_method"/>
<result property="amtPaid" column="amt_paid" /> <result property="amtPaid" column="amt_paid"/>
<result property="cashAmt" column="cash_amt" /> <result property="cashAmt" column="cash_amt"/>
<result property="payTime" column="pay_time" /> <result property="payTime" column="pay_time"/>
<result property="voucher" column="voucher" /> <result property="voucher" column="voucher"/>
<result property="refundNo" column="refund_no" /> <result property="refundNo" column="refund_no"/>
<result property="remark" column="remark" /> <result property="remark" column="remark"/>
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time"/>
<result property="updateUser" column="update_user" /> <result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time"/>
<result property="createUser" column="create_user" /> <result property="createUser" column="create_user"/>
</resultMap> </resultMap>
<select id="getRefundCashInfo" resultMap="repoCashResultMap" <select id="getRefundCashInfo" resultMap="repoCashResultMap"
parameterType="Integer"> parameterType="Integer">
...@@ -59,17 +59,13 @@ ...@@ -59,17 +59,13 @@
<insert id="insertRepoCash" useGeneratedKeys="true" <insert id="insertRepoCash" useGeneratedKeys="true"
keyProperty="id" parameterType="com.mmc.payment.entity.RepoCashDO"> keyProperty="id" parameterType="com.mmc.payment.entity.RepoCashDO">
insert into repo_cash insert into repo_cash
( (repo_account_id, uid, account_name, order_info_id, order_no, sku_info_id, sku_title,
repo_account_id,uid,account_name,order_info_id,order_no,sku_info_id,sku_title, ware_info_id, ware_no, ware_title, pay_no, pay_method, amt_paid, cash_amt, pay_time, remark,
ware_info_id,ware_no,ware_title,pay_no,pay_method,amt_paid,cash_amt,pay_time,remark, voucher, refund_no, update_time, update_user, create_time, create_user)
voucher,refund_no,update_time,update_user,create_time,create_user values (#{repoAccountId}, #{uid}, #{accountName}, #{orderInfoId}, #{orderNo}, #{skuInfoId}, #{skuTitle},
) #{wareInfoId}, #{wareNo}, #{wareTitle}, #{payNo}, #{payMethod}, #{amtPaid}, #{cashAmt}, #{payTime},
values #{remark},
( #{voucher}, #{refundNo}, #{updateTime}, #{updateUser}, #{createTime}, #{createUser})
#{repoAccountId},#{uid},#{accountName},#{orderInfoId},#{orderNo},#{skuInfoId},#{skuTitle},
#{wareInfoId},#{wareNo},#{wareTitle},#{payNo},#{payMethod},#{amtPaid},#{cashAmt},#{payTime},#{remark},
#{voucher},#{refundNo},#{updateTime},#{updateUser},#{createTime},#{createUser}
)
</insert> </insert>
<update id="updateCashRemark"> <update id="updateCashRemark">
...@@ -138,12 +134,18 @@ ...@@ -138,12 +134,18 @@
</select> </select>
<select id="getRepoWalletInfo" resultMap="repoWalletResultMap"> <select id="getRepoWalletInfo" resultMap="repoWalletResultMap">
select select w.id,
w.id,w.repo_account_id,w.cash_amt,w.cash_freeze, w.repo_account_id,
w.cash_paid,w.rcd_rebate_amt,w.rebate_wdl,w.rebate_freeze,w.create_time,w.update_time w.cash_amt,
w.cash_freeze,
w.cash_paid,
w.rcd_rebate_amt,
w.rebate_wdl,
w.rebate_freeze,
w.create_time,
w.update_time
from repo_wallet w from repo_wallet w
where where w.repo_account_id = #{repoAccountId}
w.repo_account_id = #{repoAccountId}
</select> </select>
<update id="updateRepoWalletAmt"> <update id="updateRepoWalletAmt">
...@@ -153,7 +155,9 @@ ...@@ -153,7 +155,9 @@
</update> </update>
<select id="RemainingBalance" resultType="java.math.BigDecimal"> <select id="RemainingBalance" resultType="java.math.BigDecimal">
select cash_amt from repo_wallet where repo_account_id=#{repoAccountId} select cash_amt
from repo_wallet
where repo_account_id = #{repoAccountId}
</select> </select>
<update id="updateWalletAmt"> <update id="updateWalletAmt">
...@@ -163,4 +167,17 @@ ...@@ -163,4 +167,17 @@
where repo_account_id = #{repoAccountId} where repo_account_id = #{repoAccountId}
</update> </update>
<insert id="orderPayment" useGeneratedKeys="true"
keyProperty="id" parameterType="com.mmc.payment.entity.RepoCashDO">
insert into repo_cash
(repo_account_id, uid, account_name, order_info_id, order_no, sku_info_id, sku_title,
ware_info_id, ware_no, ware_title, pay_no, pay_method, amt_paid, cash_amt, pay_time, remark,
voucher, refund_no, update_time, update_user, create_time, create_user)
values (#{repoAccountId}, #{uid}, #{accountName}, #{orderInfoId}, #{orderNo}, #{skuInfoId}, #{skuTitle},
#{wareInfoId}, #{wareNo}, #{wareTitle}, #{payNo}, #{payMethod}, #{amtPaid}, #{cashAmt}, #{payTime},
#{remark},
#{voucher}, #{refundNo}, #{updateTime}, #{updateUser}, #{createTime}, #{createUser})
</insert>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论