|
|
@@ -69,14 +69,46 @@ import java.util.concurrent.TimeUnit;
|
|
|
import static com.fs.hisStore.constants.UserAppsLockConstant.*;
|
|
|
|
|
|
|
|
|
-
|
|
|
@Slf4j
|
|
|
@Api("商城接口")
|
|
|
@RestController
|
|
|
-@RequestMapping(value="/store/app/storeOrder")
|
|
|
+@RequestMapping(value = "/store/app/storeOrder")
|
|
|
public class StoreOrderScrmController extends AppBaseController {
|
|
|
|
|
|
- Logger logger= LoggerFactory.getLogger(getClass());
|
|
|
+
|
|
|
+ private static final String STORE_PAY_CONF = "his.pay";
|
|
|
+ Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WxMaProperties properties;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private WxPayService wxPayService;
|
|
|
+ @Autowired
|
|
|
+ private FsStorePaymentScrmMapper fsStorePaymentMapper;
|
|
|
+ @Autowired
|
|
|
+ private IFsUserScrmService userService;
|
|
|
+ @Autowired
|
|
|
+ private IPayService payService;
|
|
|
+ @Autowired
|
|
|
+ private FSSysConfig sysConfig;
|
|
|
+ @Autowired
|
|
|
+ private IErpOrderService erpOrderService;
|
|
|
+ @Autowired
|
|
|
+ IPayService ybPayService;
|
|
|
+ @Autowired
|
|
|
+ private HuiFuService huiFuService;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("erpOrderServiceImpl")
|
|
|
+ private IErpOrderService gyOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("wdtErpOrderServiceImpl")
|
|
|
+ private IErpOrderService wdtOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("k9OrderScrmServiceImpl")
|
|
|
+ private IErpOrderService k9OrderService;
|
|
|
|
|
|
@Autowired
|
|
|
private IFsStoreOrderScrmService orderService;
|
|
|
@@ -96,59 +128,104 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
@Autowired
|
|
|
private RedissonClient redissonClient;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ConfigUtil configUtil;
|
|
|
+
|
|
|
+ //TODO 应该没用到
|
|
|
+ private IErpOrderService getErpService() {
|
|
|
+ //判断是否开启erp
|
|
|
+ IErpOrderService erpOrderService = null;
|
|
|
+ FsErpConfig erpConfig = configUtil.getErpConfig();
|
|
|
+ Integer erpOpen = erpConfig.getErpOpen();
|
|
|
+ if (erpOpen != null && erpOpen == 1) {
|
|
|
+ //判断erp类型
|
|
|
+ Integer erpType = erpConfig.getErpType();
|
|
|
+ if (erpType != null) {
|
|
|
+ if (erpType == 1) {
|
|
|
+ //管易
|
|
|
+ erpOrderService = gyOrderService;
|
|
|
+ } else if (erpType == 2) {
|
|
|
+ //旺店通
|
|
|
+ erpOrderService = wdtOrderService;
|
|
|
+ } else if (erpType == 3) {
|
|
|
+ //金博
|
|
|
+ erpOrderService = k9OrderService;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return erpOrderService;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
+ @ApiOperation("测试ERP")
|
|
|
+ @GetMapping("/test")
|
|
|
+ public R test() {
|
|
|
+ IErpOrderService erpOrderService = getErpService();
|
|
|
+// erpOrderService.addOmsOrder(172L);
|
|
|
+// k9OrderService.refundOmsOrder(172L);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @ApiOperation("测试ERP")
|
|
|
+ @GetMapping("/test2")
|
|
|
+ public R test2() {
|
|
|
+// k9OrderService.refundOmsOrder(172L);
|
|
|
+// k9OrderService.refundOmsOrder(172L);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("获取我的订单列表")
|
|
|
@GetMapping("/getMyStoreOrderList")
|
|
|
- public R getMyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request){
|
|
|
+ public R getMyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request) {
|
|
|
PageHelper.startPage(param.getPage(), param.getPageSize());
|
|
|
param.setUserId(Long.parseLong(getUserId()));
|
|
|
- List<FsMyStoreOrderListQueryVO> list=orderService.selectFsMyStoreOrderListVO(param);
|
|
|
- PageInfo<FsMyStoreOrderListQueryVO> listPageInfo=new PageInfo<>(list);
|
|
|
- return R.ok().put("data",listPageInfo);
|
|
|
+ List<FsMyStoreOrderListQueryVO> list = orderService.selectFsMyStoreOrderListVO(param);
|
|
|
+ PageInfo<FsMyStoreOrderListQueryVO> listPageInfo = new PageInfo<>(list);
|
|
|
+ return R.ok().put("data", listPageInfo);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("获取销售公司订单列表")
|
|
|
@GetMapping("/getCompanyStoreOrderList")
|
|
|
- public R getCompanyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request){
|
|
|
+ public R getCompanyStoreOrderList(FsMyStoreOrderQueryParam param, HttpServletRequest request) {
|
|
|
PageHelper.startPage(param.getPage(), param.getPageSize());
|
|
|
- List<FsMyStoreOrderListQueryVO> list=orderService.selectFsCompanyStoreOrderListVO(param);
|
|
|
- PageInfo<FsMyStoreOrderListQueryVO> listPageInfo=new PageInfo<>(list);
|
|
|
- return R.ok().put("data",listPageInfo);
|
|
|
+ List<FsMyStoreOrderListQueryVO> list = orderService.selectFsCompanyStoreOrderListVO(param);
|
|
|
+ PageInfo<FsMyStoreOrderListQueryVO> listPageInfo = new PageInfo<>(list);
|
|
|
+ return R.ok().put("data", listPageInfo);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("获取我的订单详情")
|
|
|
@GetMapping("/getMyStoreOrderById")
|
|
|
- public R getMyStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request){
|
|
|
- FsStoreOrderScrm order=orderService.selectFsStoreOrderById(orderId);
|
|
|
+ public R getMyStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request) {
|
|
|
+ FsStoreOrderScrm order = orderService.selectFsStoreOrderById(orderId);
|
|
|
order.setUserPhone(ParseUtils.parsePhone(order.getUserPhone()));
|
|
|
order.setUserAddress(ParseUtils.parseIdCard(order.getUserAddress()));
|
|
|
- List<FsStoreOrderItemVO> list=itemService.selectFsStoreOrderItemListByOrderId(orderId);
|
|
|
+ List<FsStoreOrderItemVO> list = itemService.selectFsStoreOrderItemListByOrderId(orderId);
|
|
|
//获取交易单号
|
|
|
- FsStorePaymentScrm paymentScrm=fsStorePaymentMapper.queryFsStorePaymentByOrderId(orderId);
|
|
|
+ FsStorePaymentScrm paymentScrm = fsStorePaymentMapper.queryFsStorePaymentByOrderId(orderId);
|
|
|
String transactionId = null;
|
|
|
- if(paymentScrm != null){
|
|
|
- transactionId=paymentScrm.getBankTransactionId();
|
|
|
+ if (paymentScrm != null) {
|
|
|
+ transactionId = paymentScrm.getBankTransactionId();
|
|
|
}
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
calendar.setTime(order.getCreateTime());
|
|
|
- String json=configService.selectConfigByKey("his.store");
|
|
|
- StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
|
|
|
- calendar.add(Calendar.MINUTE,config.getUnPayTime());
|
|
|
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- String payLimitTime = format.format(calendar.getTime() );
|
|
|
- FsPrescribeScrm prescribe=null;
|
|
|
- if(order.getPrescribeId()!=null){
|
|
|
- prescribe=prescribeService.selectFsPrescribeById(order.getPrescribeId());
|
|
|
+ String json = configService.selectConfigByKey("his.store");
|
|
|
+ StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
|
|
|
+ calendar.add(Calendar.MINUTE, config.getUnPayTime());
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String payLimitTime = format.format(calendar.getTime());
|
|
|
+ FsPrescribeScrm prescribe = null;
|
|
|
+ if (order.getPrescribeId() != null) {
|
|
|
+ prescribe = prescribeService.selectFsPrescribeById(order.getPrescribeId());
|
|
|
}
|
|
|
//处理是否可以申请售后
|
|
|
- Integer isAfterSales=0;
|
|
|
- if(order.getStatus().equals(OrderInfoEnum.STATUS_3.getValue())) {
|
|
|
+ Integer isAfterSales = 0;
|
|
|
+ if (order.getStatus().equals(OrderInfoEnum.STATUS_3.getValue())) {
|
|
|
//已完成订单
|
|
|
- isAfterSales=1;
|
|
|
+ isAfterSales = 1;
|
|
|
if (order.getFinishTime() != null) {
|
|
|
if (config.getStoreAfterSalesDay() != null && config.getStoreAfterSalesDay() > 0) {
|
|
|
//判断完成时间是否超过指定时间
|
|
|
@@ -160,9 +237,8 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- else if(order.getStatus()==1||order.getStatus()==2){
|
|
|
- isAfterSales=1;
|
|
|
+ } else if (order.getStatus() == 1 || order.getStatus() == 2) {
|
|
|
+ isAfterSales = 1;
|
|
|
}
|
|
|
|
|
|
// 计算总优惠金额 = 优惠券优惠金额 + 立减金优惠金额
|
|
|
@@ -176,38 +252,38 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
// 将总优惠金额设置到deductionPrice字段中
|
|
|
order.setDeductionPrice(totalDiscountPrice);
|
|
|
|
|
|
- return R.ok().put("isAfterSales",isAfterSales).put("order",order).put("items",list).put("payLimitTime",payLimitTime).put("prescribe",prescribe).put("transactionId",transactionId);
|
|
|
+ return R.ok().put("isAfterSales", isAfterSales).put("order", order).put("items", list).put("payLimitTime", payLimitTime).put("prescribe", prescribe).put("transactionId", transactionId);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("获取订单")
|
|
|
@GetMapping("/getStoreOrderById")
|
|
|
- public R getStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request){
|
|
|
- FsStoreOrderScrm order=orderService.selectFsStoreOrderById(orderId);
|
|
|
+ public R getStoreOrderById(@RequestParam("orderId") Long orderId, HttpServletRequest request) {
|
|
|
+ FsStoreOrderScrm order = orderService.selectFsStoreOrderById(orderId);
|
|
|
|
|
|
order.setUserPhone(ParseUtils.parsePhone(order.getUserPhone()));
|
|
|
order.setUserAddress(ParseUtils.parseIdCard(order.getUserAddress()));
|
|
|
|
|
|
- String json=configService.selectConfigByKey("his.store");
|
|
|
- StoreConfig config=JSONUtil.toBean(json,StoreConfig.class);
|
|
|
+ String json = configService.selectConfigByKey("his.store");
|
|
|
+ StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
calendar.setTime(order.getCreateTime());
|
|
|
- calendar.add(Calendar.MINUTE,config.getUnPayTime());
|
|
|
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- String payLimitTime = format.format(calendar.getTime() );
|
|
|
- FsStoreProductPackageScrm productPackage=null;
|
|
|
- if(order.getIsPackage()!=null&&order.getIsPackage()==1){
|
|
|
- productPackage= productPackageService.selectFsStoreProductPackageById(order.getPackageId());
|
|
|
+ calendar.add(Calendar.MINUTE, config.getUnPayTime());
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String payLimitTime = format.format(calendar.getTime());
|
|
|
+ FsStoreProductPackageScrm productPackage = null;
|
|
|
+ if (order.getIsPackage() != null && order.getIsPackage() == 1) {
|
|
|
+ productPackage = productPackageService.selectFsStoreProductPackageById(order.getPackageId());
|
|
|
}
|
|
|
- return R.ok().put("order",order).put("productPackage",productPackage).put("payLimitTime",payLimitTime);
|
|
|
+ return R.ok().put("order", order).put("productPackage", productPackage).put("payLimitTime", payLimitTime);
|
|
|
}
|
|
|
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("确认订单")
|
|
|
@PostMapping("/confirm")
|
|
|
- public R confirm(@Validated @RequestBody FsStoreConfirmOrderParam param, HttpServletRequest request){
|
|
|
- R result = orderService.confirmOrder(Long.parseLong(getUserId()),param);
|
|
|
+ public R confirm(@Validated @RequestBody FsStoreConfirmOrderParam param, HttpServletRequest request) {
|
|
|
+ R result = orderService.confirmOrder(Long.parseLong(getUserId()), param);
|
|
|
// 计算商品原价总价
|
|
|
BigDecimal totalPrice = BigDecimal.ZERO;
|
|
|
String orderKey = (String) result.get("orderKey");
|
|
|
@@ -226,33 +302,33 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
result.put("totalPrice", totalPrice);
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
@Login
|
|
|
@ApiOperation("计算订单金额")
|
|
|
@PostMapping("/computed")
|
|
|
- public R computed(@Validated @RequestBody FsStoreOrderComputedParam param, HttpServletRequest request){
|
|
|
- FsStoreOrderComputeDTO dto=orderService.computedOrder(Long.parseLong(getUserId()),param);
|
|
|
- return R.ok().put("data",dto);
|
|
|
+ public R computed(@Validated @RequestBody FsStoreOrderComputedParam param, HttpServletRequest request) {
|
|
|
+ FsStoreOrderComputeDTO dto = orderService.computedOrder(Long.parseLong(getUserId()), param);
|
|
|
+ return R.ok().put("data", dto);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("创建订单")
|
|
|
@PostMapping("/create")
|
|
|
- public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request){
|
|
|
- String userId= getUserId();
|
|
|
+ public R create(@Validated @RequestBody FsStoreOrderCreateParam param, HttpServletRequest request) {
|
|
|
+ String userId = getUserId();
|
|
|
log.info("开始创建订单,登录用户id:{}", userId);
|
|
|
param.setIsUserApp(false);
|
|
|
- return orderService.createOrder(Long.parseLong(getUserId()),param);
|
|
|
+ return orderService.createOrder(Long.parseLong(getUserId()), param);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("支付")
|
|
|
@PostMapping("/pay")
|
|
|
- public R pay(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param)
|
|
|
- {
|
|
|
+ public R pay(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param) {
|
|
|
Long orderId = param.getOrderId();
|
|
|
logger.info("开始处理支付请求, 订单号: {}, 支付类型: {}", orderId, param.getPayType());
|
|
|
|
|
|
- RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY,orderId));
|
|
|
+ RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY, orderId));
|
|
|
R result = null;
|
|
|
|
|
|
try {
|
|
|
@@ -288,8 +364,8 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
public R cancelPay(@Validated @RequestBody FsStoreOrderPayParam param) {
|
|
|
Long orderId = param.getOrderId();
|
|
|
|
|
|
- logger.info("用户取消支付 订单号: {},支付类型",param.getOrderId());
|
|
|
- RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY,orderId));
|
|
|
+ logger.info("用户取消支付 订单号: {},支付类型", param.getOrderId());
|
|
|
+ RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY, orderId));
|
|
|
try {
|
|
|
boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
|
|
|
|
|
|
@@ -323,7 +399,7 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
public R editPayType(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param) {
|
|
|
Long orderId = param.getOrderId();
|
|
|
logger.info("开始处理修改支付类型请求, 订单号: {}, 新支付类型: {}", orderId, param.getPayType());
|
|
|
- RLock lock = redissonClient.getLock(String.format(LOCK_KEY_EDIT_PAY_TYPE,orderId));
|
|
|
+ RLock lock = redissonClient.getLock(String.format(LOCK_KEY_EDIT_PAY_TYPE, orderId));
|
|
|
R result = null;
|
|
|
try {
|
|
|
boolean locked = lock.tryLock(100, 10000, TimeUnit.MILLISECONDS);
|
|
|
@@ -355,7 +431,7 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
public R payRemain(HttpServletRequest request, @Validated @RequestBody FsStoreOrderPayParam param) {
|
|
|
Long orderId = param.getOrderId();
|
|
|
logger.info("开始处理支付尾款请求, 订单号: {}, 支付类型: {}", orderId, param.getPayType());
|
|
|
- RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY_REMAIN,orderId));
|
|
|
+ RLock lock = redissonClient.getLock(String.format(LOCK_KEY_PAY_REMAIN, orderId));
|
|
|
R result = null;
|
|
|
try {
|
|
|
boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
|
|
|
@@ -377,131 +453,275 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
logger.debug("支付尾款锁已释放, 订单号: {}", orderId);
|
|
|
}
|
|
|
}
|
|
|
- return result;
|
|
|
+ return R.error("无支付类型");
|
|
|
}
|
|
|
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("亲友支付")
|
|
|
@PostMapping("/otherPayment")
|
|
|
- public R otherPayment(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request){
|
|
|
- Long orderId = param.getOrderId();
|
|
|
- logger.info("开始处理亲友支付请求, 订单号: {}", orderId);
|
|
|
-
|
|
|
- String lockKey = String.format(LOCK_KEY_PAY,orderId);
|
|
|
- RLock lock = redissonClient.getLock(lockKey);
|
|
|
- R result = null;
|
|
|
-
|
|
|
+ @Transactional
|
|
|
+ public R otherPayment(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request) {
|
|
|
+ final WxMaService wxService = WxMaConfiguration.getMaService(properties.getConfigs().get(0).getAppid());
|
|
|
try {
|
|
|
- boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
|
|
|
-
|
|
|
- if (!locked) {
|
|
|
- logger.warn("订单正在处理中,获取锁失败, 订单号: {}", orderId);
|
|
|
- return R.error("订单正在处理中,请勿重复提交");
|
|
|
+ String ip = IpUtil.getRequestIp();
|
|
|
+ WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
|
|
|
+ FsUserScrm user = userService.selectFsUserByMaOpenId(session.getOpenid());
|
|
|
+ if (user == null) {
|
|
|
+ //创建
|
|
|
+ user = new FsUserScrm();
|
|
|
+ user.setUsername("");
|
|
|
+ user.setNickname("微信用户");
|
|
|
+ user.setStatus(1);
|
|
|
+ user.setMaOpenId(session.getOpenid());
|
|
|
+ user.setUnionId(session.getUnionid());
|
|
|
+ user.setIsWeixinAuth(0);
|
|
|
+ user.setLastIp(ip);
|
|
|
+ user.setCreateTime(new Date());
|
|
|
+ userService.insertFsUser(user);
|
|
|
+ }
|
|
|
+ FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
|
|
|
+ if (order == null) {
|
|
|
+ return R.error("订单不存在");
|
|
|
+ }
|
|
|
+ if (order.getStatus() != OrderInfoEnum.STATUS_0.getValue()) {
|
|
|
+ return R.error("此订单不能支付");
|
|
|
+ }
|
|
|
+ if (order.getPayMoney().compareTo(new BigDecimal(0)) < 1) {
|
|
|
+ return R.error("此订单没有可支付的金额");
|
|
|
}
|
|
|
|
|
|
- result = orderService.otherPayment(param);
|
|
|
+ String orderId = redisCache.getCacheObject("isPaying:" + order.getId());
|
|
|
+ if (StringUtils.isNotEmpty(orderId) && orderId.equals(order.getId().toString())) {
|
|
|
+ return R.error("正在支付中...");
|
|
|
+ }
|
|
|
|
|
|
- } catch (InterruptedException e) {
|
|
|
- logger.error("获取支付锁的过程被中断, 订单号: {}", orderId, e);
|
|
|
- Thread.currentThread().interrupt();
|
|
|
- return R.error("支付处理被中断,请稍后重试");
|
|
|
- } catch (Throwable e) {
|
|
|
- logger.error("亲友支付过程中发生异常, 订单号: {}", orderId, e);
|
|
|
- throw e;
|
|
|
- } finally {
|
|
|
- if (lock != null && lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- logger.debug("支付锁已释放, 订单号: {}", orderId);
|
|
|
+ String json = configService.selectConfigByKey(STORE_PAY_CONF);
|
|
|
+ FsPayConfigScrm fsPayConfig = JSON.parseObject(json, FsPayConfigScrm.class);
|
|
|
+ String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
|
|
|
+ //易宝支付
|
|
|
+ FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
|
|
|
+ storePayment.setCompanyId(order.getCompanyId());
|
|
|
+ storePayment.setCompanyUserId(order.getCompanyUserId());
|
|
|
+ storePayment.setStatus(0);
|
|
|
+ storePayment.setPayCode(payCode);
|
|
|
+ storePayment.setPayMode(fsPayConfig.getType());
|
|
|
+ storePayment.setPayMoney(order.getPayMoney());
|
|
|
+ storePayment.setCreateTime(new Date());
|
|
|
+ storePayment.setPayTypeCode("weixin");
|
|
|
+ storePayment.setBusinessType(2);
|
|
|
+ storePayment.setRemark("商城订单支付");
|
|
|
+ storePayment.setOpenId(session.getOpenid());
|
|
|
+ storePayment.setUserId(user.getUserId());
|
|
|
+ storePayment.setBusinessOrderId(order.getId().toString());
|
|
|
+ storePayment.setOrderId(order.getId());
|
|
|
+ fsStorePaymentMapper.insertFsStorePayment(storePayment);
|
|
|
+
|
|
|
+ if (fsPayConfig.getType().equals("hf")) {
|
|
|
+ HuiFuCreateOrder o = new HuiFuCreateOrder();
|
|
|
+ o.setTradeType("T_MINIAPP");
|
|
|
+ o.setOpenid(user.getMaOpenId());
|
|
|
+ o.setReqSeqId("store-" + storePayment.getPayCode());
|
|
|
+ o.setTransAmt(storePayment.getPayMoney().toString());
|
|
|
+ o.setGoodsDesc("商城订单支付");
|
|
|
+ HuifuCreateOrderResult result = huiFuService.createOrder(o);
|
|
|
+ if (result.getResp_code() != null && (result.getResp_code().equals("00000000") || result.getResp_code().equals("00000100"))) {
|
|
|
+
|
|
|
+ FsStorePaymentScrm mt = new FsStorePaymentScrm();
|
|
|
+ mt.setPaymentId(storePayment.getPaymentId());
|
|
|
+ mt.setTradeNo(result.getHf_seq_id());
|
|
|
+ fsStorePaymentMapper.updateFsStorePayment(mt);
|
|
|
+ redisCache.setCacheObject("isPaying:" + order.getId(), order.getId().toString(), 1, TimeUnit.MINUTES);
|
|
|
+ Map<String, Object> resultMap = JSON.parseObject(result.getPay_info(), new TypeReference<Map<String, Object>>() {
|
|
|
+ });
|
|
|
+ String s = (String) resultMap.get("package");
|
|
|
+ resultMap.put("packageValue", s);
|
|
|
+ return R.ok().put("result", resultMap);
|
|
|
+ } else {
|
|
|
+ return R.error(result.getResp_desc());
|
|
|
+ }
|
|
|
+ } else if (fsPayConfig.getType().equals("wx")) {
|
|
|
+ //创建微信订单
|
|
|
+ WxPayConfig payConfig = new WxPayConfig();
|
|
|
+ payConfig.setAppId(fsPayConfig.getAppId());
|
|
|
+ payConfig.setMchId(fsPayConfig.getWxMchId());
|
|
|
+ payConfig.setMchKey(fsPayConfig.getWxMchKey());
|
|
|
+ payConfig.setSubAppId(org.apache.commons.lang3.StringUtils.trimToNull(null));
|
|
|
+ payConfig.setSubMchId(org.apache.commons.lang3.StringUtils.trimToNull(null));
|
|
|
+ payConfig.setKeyPath(null);
|
|
|
+ payConfig.setNotifyUrl(fsPayConfig.getNotifyUrlScrm());
|
|
|
+ wxPayService.setConfig(payConfig);
|
|
|
+ WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
|
|
|
+ orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
|
|
|
+ orderRequest.setBody("商城订单支付");
|
|
|
+ orderRequest.setOutTradeNo("store-" + storePayment.getPayCode());
|
|
|
+ orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
|
|
|
+ //orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(money));//测试
|
|
|
+ orderRequest.setTradeType("JSAPI");
|
|
|
+ orderRequest.setSpbillCreateIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
|
|
|
+ //调用统一下单接口,获取"预支付交易会话标识"
|
|
|
+ try {
|
|
|
+ WxPayMpOrderResult orderResult = wxPayService.createOrder(orderRequest);
|
|
|
+ return R.ok().put("result", orderResult).put("type", "wx").put("isPay", 0);
|
|
|
+ } catch (WxPayException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new CustomException("支付失败" + e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
+ } catch (WxErrorException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return R.error(e.getMessage());
|
|
|
}
|
|
|
-
|
|
|
- return result;
|
|
|
+ return R.error("无支付类型");
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("亲友支付")
|
|
|
@PostMapping("/otherPaymentRemain")
|
|
|
@Transactional
|
|
|
- public R otherPaymentRemain(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request){
|
|
|
- Long orderId = param.getOrderId();
|
|
|
- logger.info("开始处理亲友支付请求, 订单号: {}", orderId);
|
|
|
- String lockKey = String.format(LOCK_KEY_PAY,orderId);
|
|
|
- RLock lock = redissonClient.getLock(lockKey);
|
|
|
- R result = null;
|
|
|
+ public R otherPaymentRemain(@Validated @RequestBody FsStoreOrderOtherPayParam param, HttpServletRequest request) {
|
|
|
+ final WxMaService wxService = WxMaConfiguration.getMaService(properties.getConfigs().get(0).getAppid());
|
|
|
try {
|
|
|
- boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
|
|
|
-
|
|
|
- if (!locked) {
|
|
|
- logger.warn("订单正在处理中,获取锁失败, 订单号: {}", orderId);
|
|
|
- return R.error("订单正在处理中,请勿重复提交");
|
|
|
+ String ip = IpUtil.getRequestIp();
|
|
|
+ WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
|
|
|
+ FsUserScrm user = userService.selectFsUserByMaOpenId(session.getOpenid());
|
|
|
+ if (user == null) {
|
|
|
+ //创建
|
|
|
+ user = new FsUserScrm();
|
|
|
+ user.setUsername("");
|
|
|
+ user.setNickname("微信用户");
|
|
|
+ user.setStatus(1);
|
|
|
+ user.setMaOpenId(session.getOpenid());
|
|
|
+ user.setUnionId(session.getUnionid());
|
|
|
+ user.setIsWeixinAuth(0);
|
|
|
+ user.setLastIp(ip);
|
|
|
+ user.setCreateTime(new Date());
|
|
|
+ userService.insertFsUser(user);
|
|
|
+ }
|
|
|
+ FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
|
|
|
+ if (order == null) {
|
|
|
+ return R.error("订单不存在");
|
|
|
+ }
|
|
|
+ if (order.getStatus() != OrderInfoEnum.STATUS_2.getValue()) {
|
|
|
+ return R.error("待收货订单可申请支付尾款");
|
|
|
+ }
|
|
|
+ if (order.getPayType().equals(1)) {
|
|
|
+ return R.error("此订单已支付");
|
|
|
+ }
|
|
|
+ //只有顺风才可以付尾
|
|
|
+ if (!order.getDeliverySn().trim().equals("SF")) {
|
|
|
+ return R.error("只有顺丰物流支持尾款支付");
|
|
|
}
|
|
|
|
|
|
- result = orderService.otherPaymentRemain(param);
|
|
|
-
|
|
|
- } catch (InterruptedException e) {
|
|
|
- logger.error("获取亲友支付锁的过程被中断, 订单号: {}", orderId, e);
|
|
|
- Thread.currentThread().interrupt();
|
|
|
- return R.error("支付处理被中断,请稍后重试");
|
|
|
- } catch (Throwable e) {
|
|
|
- logger.error("亲友支付过程中发生异常, 订单号: {}", orderId, e);
|
|
|
- throw e;
|
|
|
- } finally {
|
|
|
- if (lock != null && lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- logger.debug("亲友支付锁已释放, 订单号: {}", orderId);
|
|
|
+ if (!order.getIsPayRemain().equals(0)) {
|
|
|
+ return R.error("此订单已支付");
|
|
|
}
|
|
|
+ String payCode = IdUtil.getSnowflake(0, 0).nextIdStr();
|
|
|
+ String json = configService.selectConfigByKey(STORE_PAY_CONF);
|
|
|
+ FsPayConfigScrm fsPayConfig = JSON.parseObject(json, FsPayConfigScrm.class);
|
|
|
+ FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
|
|
|
+ storePayment.setCompanyId(order.getCompanyId());
|
|
|
+ storePayment.setCompanyUserId(order.getCompanyUserId());
|
|
|
+ storePayment.setStatus(0);
|
|
|
+ storePayment.setPayMode(fsPayConfig.getType());
|
|
|
+ storePayment.setPayCode(payCode);
|
|
|
+ storePayment.setPayMoney(order.getPayDelivery());
|
|
|
+ storePayment.setCreateTime(new Date());
|
|
|
+ storePayment.setPayTypeCode("weixin");
|
|
|
+ storePayment.setBusinessType(2);
|
|
|
+ storePayment.setRemark("商城订单尾款支付");
|
|
|
+ storePayment.setOpenId(user.getRealName());
|
|
|
+ storePayment.setUserId(user.getUserId());
|
|
|
+ storePayment.setBusinessOrderId(order.getId().toString());
|
|
|
+ storePayment.setOrderId(order.getId());
|
|
|
+ storePayment.setIsPayRemain(1);
|
|
|
+ fsStorePaymentMapper.insertFsStorePayment(storePayment);
|
|
|
+
|
|
|
+ if (fsPayConfig.getType().equals("hf")) {
|
|
|
+ HuiFuCreateOrder o = new HuiFuCreateOrder();
|
|
|
+ o.setTradeType("T_MINIAPP");
|
|
|
+ o.setOpenid(user.getMaOpenId());
|
|
|
+ o.setReqSeqId("store-" + storePayment.getPayCode());
|
|
|
+ o.setTransAmt(storePayment.getPayMoney().toString());
|
|
|
+ o.setGoodsDesc("商城订单支付");
|
|
|
+ HuifuCreateOrderResult result = huiFuService.createOrder(o);
|
|
|
+ if (result.getResp_code() != null && (result.getResp_code().equals("00000000") || result.getResp_code().equals("00000100"))) {
|
|
|
+
|
|
|
+ FsStorePaymentScrm mt = new FsStorePaymentScrm();
|
|
|
+ mt.setPaymentId(storePayment.getPaymentId());
|
|
|
+ mt.setTradeNo(result.getHf_seq_id());
|
|
|
+ fsStorePaymentMapper.updateFsStorePayment(mt);
|
|
|
+ redisCache.setCacheObject("isPaying:" + order.getId(), order.getId().toString(), 1, TimeUnit.MINUTES);
|
|
|
+ Map<String, Object> resultMap = JSON.parseObject(result.getPay_info(), new TypeReference<Map<String, Object>>() {
|
|
|
+ });
|
|
|
+ String s = (String) resultMap.get("package");
|
|
|
+ resultMap.put("packageValue", s);
|
|
|
+ return R.ok().put("result", resultMap);
|
|
|
+ } else {
|
|
|
+ return R.error(result.getResp_desc());
|
|
|
+ }
|
|
|
+ } else if (fsPayConfig.getType().equals("wx")) {
|
|
|
+ //创建微信订单
|
|
|
+ WxPayConfig payConfig = new WxPayConfig();
|
|
|
+ payConfig.setAppId(fsPayConfig.getAppId());
|
|
|
+ payConfig.setMchId(fsPayConfig.getWxMchId());
|
|
|
+ payConfig.setMchKey(fsPayConfig.getWxMchKey());
|
|
|
+ payConfig.setSubAppId(org.apache.commons.lang3.StringUtils.trimToNull(null));
|
|
|
+ payConfig.setSubMchId(org.apache.commons.lang3.StringUtils.trimToNull(null));
|
|
|
+ payConfig.setKeyPath(null);
|
|
|
+ payConfig.setNotifyUrl(fsPayConfig.getNotifyUrlScrm());
|
|
|
+ wxPayService.setConfig(payConfig);
|
|
|
+ WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
|
|
|
+ orderRequest.setOpenid(user.getMaOpenId());//公众号支付提供用户openid
|
|
|
+ orderRequest.setBody("商城订单支付");
|
|
|
+ orderRequest.setOutTradeNo("store-" + storePayment.getPayCode());
|
|
|
+ orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(storePayment.getPayMoney().toString()));//测试
|
|
|
+ //orderRequest.setTotalFee(WxPayUnifiedOrderRequest.yuanToFen(money));//测试
|
|
|
+ orderRequest.setTradeType("JSAPI");
|
|
|
+ orderRequest.setSpbillCreateIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
|
|
|
+ //调用统一下单接口,获取"预支付交易会话标识"
|
|
|
+ try {
|
|
|
+ WxPayMpOrderResult orderResult = wxPayService.createOrder(orderRequest);
|
|
|
+ return R.ok().put("result", orderResult).put("type", "wx").put("isPay", 0);
|
|
|
+ } catch (WxPayException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new CustomException("支付失败" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (WxErrorException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return R.error(e.getMessage());
|
|
|
}
|
|
|
-
|
|
|
- return result;
|
|
|
+ return R.error("无支付类型");
|
|
|
}
|
|
|
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("取消订单")
|
|
|
@PostMapping("/cancelOrder")
|
|
|
- public R cancelOrder( @Validated @RequestBody FsStoreOrderCancelParam param, HttpServletRequest request){
|
|
|
-
|
|
|
- Long orderId = param.getOrderId();
|
|
|
- logger.info("开始处理取消订单请求, 订单号: {}", orderId);
|
|
|
-
|
|
|
- RLock lock = redissonClient.getLock(String.format(LOCK_KEY_CANCEL,orderId));
|
|
|
- R result = null;
|
|
|
-
|
|
|
- try {
|
|
|
- boolean locked = lock.tryLock(100, 30000, TimeUnit.MILLISECONDS);
|
|
|
- if (!locked) {
|
|
|
- throw new CustomException("订单正在处理中,请勿重复提交");
|
|
|
- }
|
|
|
- FsStoreOrderScrm order = orderService.selectFsStoreOrderById(orderId);
|
|
|
- if (ObjectUtil.isNull(order)) {
|
|
|
- throw new CustomException("订单不存在");
|
|
|
- }
|
|
|
- if (order.getStatus() != 0) {
|
|
|
- throw new CustomException("非法操作");
|
|
|
- }
|
|
|
- orderService.cancelOrder(orderId);
|
|
|
-
|
|
|
- result = R.ok("操作成功");
|
|
|
- } catch (Exception e) {
|
|
|
- logger.error("取消订单失败, 订单号: {}", orderId, e);
|
|
|
- throw new CustomException("取消订单过程中发生错误");
|
|
|
- } finally {
|
|
|
- if (lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- }
|
|
|
+// @Log(title = "取消订单", businessType = BusinessType.UPDATE)
|
|
|
+ public R cancelOrder(@Validated @RequestBody FsStoreOrderCancelParam param, HttpServletRequest request) {
|
|
|
+ FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
|
|
|
+ if (ObjectUtil.isNull(order)) {
|
|
|
+ throw new CustomException("订单不存在");
|
|
|
}
|
|
|
- return result;
|
|
|
+ if (order.getStatus() != 0) {
|
|
|
+ throw new CustomException("非法操作");
|
|
|
+ }
|
|
|
+ orderService.cancelOrder(param.getOrderId());
|
|
|
+
|
|
|
+ return R.ok("操作成功");
|
|
|
}
|
|
|
+
|
|
|
@Login
|
|
|
@ApiOperation("物流查询")
|
|
|
@PostMapping("/getExpress")
|
|
|
- public R getExpress( @Validated @RequestBody FsStoreOrderExpressParam param, HttpServletRequest request){
|
|
|
- FsStoreOrderScrm order=orderService.selectFsStoreOrderById(param.getOrderId());
|
|
|
+ public R getExpress(@Validated @RequestBody FsStoreOrderExpressParam param, HttpServletRequest request) {
|
|
|
+ FsStoreOrderScrm order = orderService.selectFsStoreOrderById(param.getOrderId());
|
|
|
if (ObjectUtil.isNull(order)) {
|
|
|
throw new CustomException("订单不存在");
|
|
|
}
|
|
|
- if (order.getStatus() <2) {
|
|
|
+ if (order.getStatus() < 2) {
|
|
|
throw new CustomException("未发货订单不能查询");
|
|
|
}
|
|
|
return orderService.getExpress(order);
|
|
|
@@ -511,38 +731,28 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
@Login
|
|
|
@ApiOperation("确认套餐订单")
|
|
|
@PostMapping("/confirmPackageOrder")
|
|
|
- public R confirmPackageOrder(@Validated @RequestBody FsStoreConfirmPackageIdOrderParam param, HttpServletRequest request){
|
|
|
- return orderService.confirmPackageOrder(Long.parseLong(getUserId()),param);
|
|
|
+ public R confirmPackageOrder(@Validated @RequestBody FsStoreConfirmPackageIdOrderParam param, HttpServletRequest request) {
|
|
|
+ return orderService.confirmPackageOrder(Long.parseLong(getUserId()), param);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("计算套餐订单")
|
|
|
@PostMapping("/computedPackageOrder")
|
|
|
- public R computedPackageOrder(@Validated @RequestBody FsStoreComputedPackageIdOrderParam param, HttpServletRequest request){
|
|
|
- return orderService.computedPackageOrder(Long.parseLong(getUserId()),param);
|
|
|
+ public R computedPackageOrder(@Validated @RequestBody FsStoreComputedPackageIdOrderParam param, HttpServletRequest request) {
|
|
|
+ return orderService.computedPackageOrder(Long.parseLong(getUserId()), param);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("创建订单")
|
|
|
@PostMapping("/createPackageOrder")
|
|
|
- public R createPackageOrder(@Validated @RequestBody FsStorePackageOrderCreateParam param, HttpServletRequest request){
|
|
|
- return orderService.createPackageOrder(Long.parseLong(getUserId()),param);
|
|
|
+ public R createPackageOrder(@Validated @RequestBody FsStorePackageOrderCreateParam param, HttpServletRequest request) {
|
|
|
+ return orderService.createPackageOrder(Long.parseLong(getUserId()), param);
|
|
|
}
|
|
|
|
|
|
@Login
|
|
|
@ApiOperation("完成订单")
|
|
|
@PostMapping("/finishOrder")
|
|
|
- public R finishOrder( @Validated @RequestBody FsStoreOrderFinishParam param, HttpServletRequest request){
|
|
|
- if(StringUtils.isNotEmpty(param.getTransactionId())){
|
|
|
- if(param.getOrderId() == null || param.getOrderId() == 0){
|
|
|
- //根据交易单号获取订单ID
|
|
|
- FsStorePaymentScrm fsStorePaymentScrm=fsStorePaymentMapper.queryFsStorePaymentByBusinessOrderId(param.getTransactionId());
|
|
|
- if(fsStorePaymentScrm == null){
|
|
|
- return R.error("操作失败,交易单号未找到订单信息!");
|
|
|
- }
|
|
|
- param.setOrderId(fsStorePaymentScrm.getOrderId());
|
|
|
- }
|
|
|
- }
|
|
|
+ public R finishOrder(@Validated @RequestBody FsStoreOrderFinishParam param, HttpServletRequest request) {
|
|
|
return orderService.finishOrder(param.getOrderId());
|
|
|
}
|
|
|
|
|
|
@@ -550,18 +760,13 @@ public class StoreOrderScrmController extends AppBaseController {
|
|
|
@Login
|
|
|
@ApiOperation("获取订单总数")
|
|
|
@GetMapping("/getOrderCount")
|
|
|
- public R getOrderCount( HttpServletRequest request){
|
|
|
- Integer count0=orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()),0);
|
|
|
- Integer count1=orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()),1);
|
|
|
- Integer count2=orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()),2);
|
|
|
- Integer afterSalesCount=afterSalesService.selectFsStoreAfterSalesCount(Long.parseLong(getUserId()),0);
|
|
|
- return R.ok().put("count0",count0).put("count1",count1).put("count2",count2).put("afterSalesCount",afterSalesCount);
|
|
|
+ public R getOrderCount(HttpServletRequest request) {
|
|
|
+ Integer count0 = orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()), 0);
|
|
|
+ Integer count1 = orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()), 1);
|
|
|
+ Integer count2 = orderService.selectFsStoreOrderCount(Long.parseLong(getUserId()), 2);
|
|
|
+ Integer afterSalesCount = afterSalesService.selectFsStoreAfterSalesCount(Long.parseLong(getUserId()), 0);
|
|
|
+ return R.ok().put("count0", count0).put("count1", count1).put("count2", count2).put("afterSalesCount", afterSalesCount);
|
|
|
}
|
|
|
|
|
|
- @Login
|
|
|
- @ApiOperation("获取确认收货类型")
|
|
|
- @GetMapping("/queryReceiptType")
|
|
|
- public R queryReceiptType(){
|
|
|
- return orderService.queryReceiptType();
|
|
|
- }
|
|
|
-}
|
|
|
+
|
|
|
+}
|