trading-order-admin/src/main/java/com/yami/trading/admin/controller/user/UserController.java
@@ -15,6 +15,7 @@ import com.yami.trading.common.constants.Constants; import com.yami.trading.common.domain.Result; import com.yami.trading.common.util.IPHelper; import com.yami.trading.security.common.manager.PasswordManager; import com.yami.trading.security.common.util.SecurityUtils; import com.yami.trading.security.common.enums.SysTypeEnum; import com.yami.trading.security.common.manager.TokenStore; @@ -60,6 +61,9 @@ @Autowired PermissionFacade permissionFacade; @Autowired PasswordManager passwordManager; @PostMapping("list") @ApiOperation("列表") @@ -115,7 +119,7 @@ public Result restLoginPasswrod(@Valid @RequestBody RestLoginPasswrodModel model) { sysUserService.checkGooleAuthCode(Long.valueOf(model.getGoogleAuthCode())); sysUserService.checkSafeWord(model.getLoginSafeword()); userService.restLoginPasswrod(model.getUserId(), model.getPassword()); userService.restLoginPasswrod(model.getUserId(), passwordManager.decryptPassword(model.getPassword())); return Result.ok(null); } @@ -134,7 +138,7 @@ public Result restSafePassword(@Valid @RequestBody RestSafePasswordModel model) { sysUserService.checkGooleAuthCode(Long.valueOf(model.getGoogleAuthCode())); sysUserService.checkSafeWord(model.getLoginSafeword()); userService.restSafePassword(model.getUserId(), model.getNewSafeword()); userService.restSafePassword(model.getUserId(), passwordManager.decryptPassword(model.getNewSafeword())); return Result.ok(null); } trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiBankCardController.java
@@ -499,7 +499,8 @@ // c2cOrder.setUnreadMsg(unreadMsg.intValue()); // } if (StringUtils.isNotEmpty(c2cOrder.getMethodImg())) { String path = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=" + c2cOrder.getMethodImg(); //String path = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=" + c2cOrder.getMethodImg(); String path = Constants.IMAGES_HTTP + c2cOrder.getMethodImg(); c2cOrder.setMethodImg(path); } // 多语言 trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cOrderController.java
@@ -26,8 +26,10 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @RestController @Slf4j @@ -232,4 +234,183 @@ return resultObject; } @RequestMapping(action + "pay_finish.action") public Object pay_finish(HttpServletRequest request) { String order_no = request.getParameter("order_no"); String safe_password = request.getParameter("safe_password"); Result resultObject = new Result(); boolean lock = false; try { String partyId = SecurityUtils.getCurrentUserId(); if (null == partyId) { throw new BusinessException("请重新登录"); } User party = userService.getById(partyId); if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) { throw new BusinessException("无权限"); } if (!userService.checkLoginSafeword(partyId, safe_password)) { throw new BusinessException("资金密码错误"); } if (!party.isEnabled()) { return Result.succeed("User is locked"); } C2cOrder order = this.c2cOrderService.get(order_no); if (null == order) { throw new BusinessException("订单不存在"); } if (partyId.equals(order.getPartyId())) { // 用户操作 if (!"buy".equals(order.getDirection())) { throw new BusinessException("用户不能支付卖单"); } } else if (partyId.equals(order.getC2cUserPartyId())) { // 承兑商操作 if (!"sell".equals(order.getDirection())) { throw new BusinessException("承兑商不能支付买单"); } } else { throw new BusinessException("无权限"); } if (!"0".equals(order.getState())) { throw new BusinessException("订单不是未付款状态"); } if (!C2cOrderLock.add(order_no)) { throw new BusinessException(1, "请稍后再试"); } lock = true; order.setState("1"); order.setPayTime(new Date()); this.c2cOrderService.updateById(order); if (Arrays.asList("0", "1").contains(order.getState())) { // 只有未付款和已付款的订单存入redis redisTemplate.opsForValue().set(RedisKeys.C2C_ORDER_NO + order.getOrderNo(), order); } else { redisTemplate.delete(RedisKeys.C2C_ORDER_NO + order.getOrderNo()); } // 订单自动取消时间和确认收款超时时间(0未付款/1已付款) Map<String, Long> map = (Map<String, Long>) redisTemplate.opsForValue().get(RedisKeys.C2C_ORDER_NO_EXPIRE_TIME); if (null == map) { map = new ConcurrentHashMap<String, Long>(); } if (!Arrays.asList("0", "1").contains(order.getState())) { map.remove(order.getOrderNo() + "_auto_cancel"); map.remove(order.getOrderNo() + "_expire"); } else { if (Arrays.asList("0").contains(order.getState())) { map.put(order.getOrderNo() + "_auto_cancel", order.getCreateTime().getTime() + (long) order.getExpireTime() * 60 * 1000); map.put(order.getOrderNo() + "_expire", order.getCreateTime().getTime() + (long) order.getExpireTime() * 60 * 1000 * 2); } else if (Arrays.asList("1").contains(order.getState())) { map.put(order.getOrderNo() + "_auto_cancel", order.getCreateTime().getTime() + (long) order.getExpireTime() * 60 * 1000); map.put(order.getOrderNo() + "_expire", order.getPayTime().getTime() + (long) order.getExpireTime() * 60 * 1000); } } this.redisTemplate.opsForValue().set(RedisKeys.C2C_ORDER_NO_EXPIRE_TIME, map); resultObject.setCode(0); } catch (BusinessException e) { resultObject.setCode(1); resultObject.setMsg(e.getMessage()); log.error("error: {}", e.getMessage()); } catch (Throwable t) { resultObject.setCode(1); //resultObject.setMsg("程序错误"); resultObject.setMsg(t.getMessage()); log.error("error:", t); } finally { if (lock) { ThreadUtils.sleep(100); C2cOrderLock.remove(order_no); } } return resultObject; } /** * 订单放行 */ @RequestMapping(action + "order_pass.action") public Object order_pass(HttpServletRequest request) { String order_no = request.getParameter("order_no"); String safe_password = request.getParameter("safe_password"); Result resultObject = new Result(); boolean lock = false; try { String partyId = SecurityUtils.getCurrentUserId(); if (null == partyId) { throw new BusinessException("请重新登录"); } User party = userService.getById(partyId); if (Constants.SECURITY_ROLE_TEST.equals(party.getRoleName())) { throw new BusinessException("无权限"); } if (!C2cOrderLock.add(order_no)) { throw new BusinessException(1, "请稍后再试"); } lock = true; if (!userService.checkLoginSafeword(partyId, safe_password)) { throw new BusinessException("资金密码错误"); } if (!party.isEnabled()) { return Result.succeed("User is locked"); } C2cOrder order = this.c2cOrderService.get(order_no); if (null == order || !order.getPartyId().equals(partyId)) { throw new BusinessException("订单不存在"); } if ("0".equals(order.getState())) { throw new BusinessException("待付款的订单无法放行"); } if ("3".equals(order.getState())) { throw new BusinessException("订单已完成,无法放行"); } if ("4".equals(order.getState())) { throw new BusinessException("订单已取消,无法放行"); } this.c2cOrderService.saveOrderPass(order); resultObject.setCode(0); } catch (BusinessException e) { resultObject.setCode(1); resultObject.setMsg(e.getMessage()); log.error("error:{}", e.getMessage()); } catch (Throwable t) { resultObject.setCode(1); //resultObject.setMsg("程序错误"); resultObject.setMsg(t.getMessage()); log.error("error:", t); } finally { if (lock) { ThreadUtils.sleep(100); C2cOrderLock.remove(order_no); } } return resultObject; } } trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiC2cUserController.java
New file @@ -0,0 +1,171 @@ package com.yami.trading.api.controller; import java.text.DecimalFormat; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import com.yami.trading.admin.controller.c2c.C2cUserController; import com.yami.trading.bean.c2c.C2cAdvert; import com.yami.trading.bean.c2c.C2cUser; import com.yami.trading.bean.c2c.C2cUserParamBaseSet; import com.yami.trading.bean.model.C2cPaymentMethodConfig; import com.yami.trading.bean.model.C2cTranslate; import com.yami.trading.bean.model.User; import com.yami.trading.common.constants.Constants; import com.yami.trading.common.exception.BusinessException; import com.yami.trading.common.exception.YamiShopBindException; import com.yami.trading.common.util.Arith; import com.yami.trading.common.util.StringUtils; import com.yami.trading.common.web.ResultObject; import com.yami.trading.service.c2c.*; import com.yami.trading.service.user.UserService; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * C2C承兑商 */ @RestController @Slf4j public class ApiC2cUserController { private Logger logger = LoggerFactory.getLogger(C2cUserController.class); @Autowired private C2cUserService c2cUserService; @Autowired private C2cUserParamBaseSetService c2cUserParamBaseSetService; @Autowired private C2cAdvertService c2cAdvertService; @Autowired private C2cPaymentMethodConfigService c2cPaymentMethodConfigService; @Autowired private C2cTranslateService c2cTranslateService; @Autowired UserService userService; private final String action = "/api/c2cUser!"; /** * 获取 承兑商 详情 */ @RequestMapping(action + "get.action") public Object get(HttpServletRequest request) { String c2c_user_id = request.getParameter("c2c_user_id"); String language = request.getParameter("language"); ResultObject resultObject = new ResultObject(); try { Map<String, Object> result = new HashMap<String, Object>(); C2cUser c2cUser = this.c2cUserService.getById(c2c_user_id); if (null == c2cUser) { throw new BusinessException("承兑商不存在"); } C2cUserParamBaseSet paramBaseSet = this.c2cUserParamBaseSetService.getByPartyId(c2cUser.getC2cUserPartyId()); if (null == paramBaseSet) { throw new BusinessException("承兑商参数基础设置不存在"); } if (StringUtils.isNotEmpty(c2cUser.getHeadImg())) { String path = Constants.IMAGES_HTTP + c2cUser.getHeadImg(); c2cUser.setHeadImg(path); } User party = userService.getById(c2cUser.getC2cUserPartyId()); if (null == party) { throw new YamiShopBindException("承兑商的用户信息不存在"); } DecimalFormat df = new DecimalFormat("#.########"); c2cUser.setThirtyDaysOrder(paramBaseSet.getThirtyDaysOrder() + c2cUser.getThirtyDaysOrder()); c2cUser.setThirtyDaysOrderRatio(0 != paramBaseSet.getThirtyDaysOrderRatio() ? paramBaseSet.getThirtyDaysOrderRatio() : c2cUser.getThirtyDaysOrderRatio()); c2cUser.setThirtyDaysPassAverageTime(0 != paramBaseSet.getThirtyDaysPassAverageTime() ? paramBaseSet.getThirtyDaysPassAverageTime() : c2cUser.getThirtyDaysPassAverageTime()); c2cUser.setThirtyDaysPayAverageTime(0 != paramBaseSet.getThirtyDaysPayAverageTime() ? paramBaseSet.getThirtyDaysPayAverageTime() : c2cUser.getThirtyDaysPayAverageTime()); c2cUser.setThirtyDaysAmount(Double.valueOf(df.format(Arith.add(paramBaseSet.getThirtyDaysAmount(), c2cUser.getThirtyDaysAmount()))).doubleValue()); c2cUser.setBuyAmount(Double.valueOf(df.format(Arith.add(paramBaseSet.getBuyAmount(), c2cUser.getBuyAmount()))).doubleValue()); c2cUser.setSellAmount(Double.valueOf(df.format(Arith.add(paramBaseSet.getSellAmount(), c2cUser.getSellAmount()))).doubleValue()); c2cUser.setTotalAmount(Double.valueOf(df.format(Arith.add(paramBaseSet.getTotalAmount(), c2cUser.getTotalAmount()))).doubleValue()); c2cUser.setAccountCreateDays(paramBaseSet.getAccountCreateDays() + c2cUser.getAccountCreateDays()); c2cUser.setFirstExchangeDays(paramBaseSet.getFirstExchangeDays() + c2cUser.getFirstExchangeDays()); c2cUser.setExchangeUsers(paramBaseSet.getExchangeUsers() + c2cUser.getExchangeUsers()); c2cUser.setBuySuccessOrders(paramBaseSet.getBuySuccessOrders() + c2cUser.getBuySuccessOrders()); c2cUser.setSellSuccessOrders(paramBaseSet.getSellSuccessOrders() + c2cUser.getSellSuccessOrders()); c2cUser.setTotalSuccessOrders(paramBaseSet.getTotalSuccessOrders() + c2cUser.getTotalSuccessOrders()); c2cUser.setAppraiseGood(paramBaseSet.getAppraiseGood() + c2cUser.getAppraiseGood()); c2cUser.setAppraiseBad(paramBaseSet.getAppraiseBad() + c2cUser.getAppraiseBad()); c2cUser.setOrderMailNoticeOpen(1 == paramBaseSet.getOrderMailNoticeOpen() || 1 == c2cUser.getOrderMailNoticeOpen() ? 1 : 0); c2cUser.setOrderSmsNoticeOpen(1 == paramBaseSet.getOrderSmsNoticeOpen() || 1 == c2cUser.getOrderSmsNoticeOpen() ? 1 : 0); c2cUser.setOrderAppNoticeOpen(1 == paramBaseSet.getOrderAppNoticeOpen() || 1 == c2cUser.getOrderAppNoticeOpen() ? 1 : 0); c2cUser.setAppealMailNoticeOpen(1 == paramBaseSet.getAppealMailNoticeOpen() || 1 == c2cUser.getAppealMailNoticeOpen() ? 1 : 0); c2cUser.setAppealSmsNoticeOpen(1 == paramBaseSet.getAppealSmsNoticeOpen() || 1 == c2cUser.getAppealSmsNoticeOpen() ? 1 : 0); c2cUser.setAppealAppNoticeOpen(1 == paramBaseSet.getAppealAppNoticeOpen() || 1 == c2cUser.getAppealAppNoticeOpen() ? 1 : 0); c2cUser.setChatAppNoticeOpen(1 == paramBaseSet.getChatAppNoticeOpen() || 1 == c2cUser.getChatAppNoticeOpen() ? 1 : 0); c2cUser.setSecurityMailNoticeOpen(1 == paramBaseSet.getSecurityMailNoticeOpen() || 1 == c2cUser.getSecurityMailNoticeOpen() ? 1 : 0); c2cUser.setSecuritySmsNoticeOpen(1 == paramBaseSet.getSecuritySmsNoticeOpen() || 1 == c2cUser.getSecuritySmsNoticeOpen() ? 1 : 0); c2cUser.setSecurityAppNoticeOpen(1 == paramBaseSet.getSecurityAppNoticeOpen() || 1 == c2cUser.getSecurityAppNoticeOpen() ? 1 : 0); Map<String, Object> partyMap = new HashMap<String, Object>(); partyMap.put("phoneAuthority", paramBaseSet.getPhoneAuthority()); partyMap.put("emailAuthority", paramBaseSet.getEmailAuthority()); partyMap.put("kycAuthority", paramBaseSet.getKycAuthority()); partyMap.put("kycHighlevelAuthority", paramBaseSet.getKycHighlevelAuthority()); List<C2cAdvert> adverts = this.c2cAdvertService.getByC2cUserId(c2c_user_id); for (int i = 0; i < adverts.size(); i++) { C2cAdvert adv = adverts.get(i); if (null != adv) { if (StringUtils.isNotEmpty(adv.getPayType())) { List<String> pay_type = new LinkedList<String>(); String[] types = adv.getPayType().split(","); for (String type : types) { C2cPaymentMethodConfig method = this.c2cPaymentMethodConfigService.get(type.trim()); if (null != method) { C2cTranslate trans = this.c2cTranslateService.get(method.getMethodName(), language); if (null != trans) { pay_type.add(trans.getTranslate()); } else { pay_type.add(method.getMethodName()); } } } adv.setPayTypeName(String.join(",", pay_type)); } } } result.put("c2c_user", c2cUser); result.put("party", partyMap); result.put("advert", adverts); resultObject.setData(result); } catch (BusinessException e) { resultObject.setCode("1"); resultObject.setMsg(e.getMessage()); } catch (Throwable t) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", t); } return resultObject; } }