|
@@ -0,0 +1,242 @@
|
|
|
+package com.zhongzheng.modules.top.order.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.lang.Validator;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.zhongzheng.common.exception.CustomException;
|
|
|
+import com.zhongzheng.common.utils.DateUtils;
|
|
|
+import com.zhongzheng.common.utils.ToolsUtils;
|
|
|
+import com.zhongzheng.common.utils.http.HttpUtils;
|
|
|
+import com.zhongzheng.modules.order.domain.OrderGoods;
|
|
|
+import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
|
|
|
+import com.zhongzheng.modules.top.goods.domain.TopOldOrderCheckLog;
|
|
|
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderCheckLogService;
|
|
|
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
|
|
|
+import com.zhongzheng.modules.top.order.bo.TopOrderBankPayAddBo;
|
|
|
+import com.zhongzheng.modules.top.order.bo.TopOrderBankPayEditBo;
|
|
|
+import com.zhongzheng.modules.top.order.bo.TopOrderBankPayQueryBo;
|
|
|
+import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
|
|
|
+import com.zhongzheng.modules.top.order.mapper.TopOrderBankPayMapper;
|
|
|
+import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
|
|
|
+import com.zhongzheng.modules.top.order.vo.TopOrderBankPayVo;
|
|
|
+import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
|
|
|
+import com.zhongzheng.modules.top.user.service.ITopSysUserRoleService;
|
|
|
+import com.zhongzheng.modules.user.service.IUserService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.github.pagehelper.Page;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 订单网银打款Service业务层处理
|
|
|
+ *
|
|
|
+ * @author hjl
|
|
|
+ * @date 2023-05-08
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class TopOrderBankPayServiceImpl extends ServiceImpl<TopOrderBankPayMapper, TopOrderBankPay> implements ITopOrderBankPayService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderService iTopOldOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderCheckLogService iTopOldOrderCheckLogService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITopSysUserRoleService topSysUserRoleService;
|
|
|
+
|
|
|
+ @Value("${oldSys.host}")
|
|
|
+ private String OLD_SYS_HOST;
|
|
|
+
|
|
|
+ private static Logger log = LoggerFactory.getLogger(TopOrderBankPayServiceImpl.class);
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TopOrderBankPayVo queryById(Long id){
|
|
|
+ TopOrderBankPay db = this.baseMapper.selectById(id);
|
|
|
+ return BeanUtil.toBean(db, TopOrderBankPayVo.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<TopOrderBankPayVo> queryList(TopOrderBankPayQueryBo bo) {
|
|
|
+ LambdaQueryWrapper<TopOrderBankPay> lqw = Wrappers.lambdaQuery();
|
|
|
+ lqw.eq(StrUtil.isNotBlank(bo.getPaySn()), TopOrderBankPay::getPaySn, bo.getPaySn());
|
|
|
+ lqw.eq(StrUtil.isNotBlank(bo.getOrderSn()), TopOrderBankPay::getOrderSn, bo.getOrderSn());
|
|
|
+ lqw.eq(StrUtil.isNotBlank(bo.getToBankAcount()), TopOrderBankPay::getToBankAcount, bo.getToBankAcount());
|
|
|
+ lqw.like(StrUtil.isNotBlank(bo.getToBankName()), TopOrderBankPay::getToBankName, bo.getToBankName());
|
|
|
+ lqw.like(StrUtil.isNotBlank(bo.getToBankTypeName()), TopOrderBankPay::getToBankTypeName, bo.getToBankTypeName());
|
|
|
+ lqw.eq(bo.getMoney() != null, TopOrderBankPay::getMoney, bo.getMoney());
|
|
|
+ lqw.eq(StrUtil.isNotBlank(bo.getTrainOrgId()), TopOrderBankPay::getTrainOrgId, bo.getTrainOrgId());
|
|
|
+ lqw.eq(bo.getStatus() != null, TopOrderBankPay::getStatus, bo.getStatus());
|
|
|
+ lqw.eq(StrUtil.isNotBlank(bo.getParamJson()), TopOrderBankPay::getParamJson, bo.getParamJson());
|
|
|
+ lqw.eq(bo.getResultStatus() != null, TopOrderBankPay::getResultStatus, bo.getResultStatus());
|
|
|
+ return entity2Vo(this.list(lqw));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 实体类转化成视图对象
|
|
|
+ *
|
|
|
+ * @param collection 实体类集合
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<TopOrderBankPayVo> entity2Vo(Collection<TopOrderBankPay> collection) {
|
|
|
+ List<TopOrderBankPayVo> voList = collection.stream()
|
|
|
+ .map(any -> BeanUtil.toBean(any, TopOrderBankPayVo.class))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (collection instanceof Page) {
|
|
|
+ Page<TopOrderBankPay> page = (Page<TopOrderBankPay>)collection;
|
|
|
+ Page<TopOrderBankPayVo> pageVo = new Page<>();
|
|
|
+ BeanUtil.copyProperties(page,pageVo);
|
|
|
+ pageVo.addAll(voList);
|
|
|
+ voList = pageVo;
|
|
|
+ }
|
|
|
+ return voList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean insertByAddBo(TopOrderBankPayAddBo bo) {
|
|
|
+ TopOrderBankPay add = BeanUtil.toBean(bo, TopOrderBankPay.class);
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ add.setCreateTime(DateUtils.getNowTime());
|
|
|
+ add.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ return this.save(add);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean updateByEditBo(TopOrderBankPayEditBo bo) {
|
|
|
+ TopOrderBankPay update = BeanUtil.toBean(bo, TopOrderBankPay.class);
|
|
|
+ validEntityBeforeSave(update);
|
|
|
+ update.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ return this.updateById(update);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存前的数据校验
|
|
|
+ *
|
|
|
+ * @param entity 实体类数据
|
|
|
+ */
|
|
|
+ private void validEntityBeforeSave(TopOrderBankPay entity){
|
|
|
+ //TODO 做一些数据校验,如唯一约束
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
+ if(isValid){
|
|
|
+ //TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+ }
|
|
|
+ return this.removeByIds(ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean payToCompany(TopOrderBankPayAddBo bo) {
|
|
|
+ if(Validator.isEmpty(bo.getOrderSn())||Validator.isEmpty(bo.getTenantId())||Validator.isEmpty(bo.getDivideModel())){
|
|
|
+ throw new CustomException("参数错误");
|
|
|
+ }
|
|
|
+ if(Validator.isEmpty(bo.getToBankAcount())||Validator.isEmpty(bo.getToBankName())||Validator.isEmpty(bo.getToBankTypeName())){
|
|
|
+ throw new CustomException("支付参数错误");
|
|
|
+ }
|
|
|
+ //校验当前角色审核权限
|
|
|
+ List<TopSysUserRole> userRoleList = topSysUserRoleService.list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, bo.getLoginId()));
|
|
|
+ if (CollectionUtils.isEmpty(userRoleList) && !bo.getLoginName().equals("admin")) {
|
|
|
+ throw new CustomException("当前账号没有审核权限");
|
|
|
+ }
|
|
|
+ Integer checkFrom = bo.getDivideModel()+1;
|
|
|
+ List<Long> roleIds = userRoleList.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
|
|
|
+ TopOldOrderCheckLog checkLog = iTopOldOrderCheckLogService.getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
|
|
|
+ .eq(TopOldOrderCheckLog::getOrderSn, bo.getOrderSn()).eq(TopOldOrderCheckLog::getStatus, 1)
|
|
|
+ .eq(TopOldOrderCheckLog::getCheckSign, 1)
|
|
|
+ .eq(TopOldOrderCheckLog::getCheckFrom, checkFrom).last("limit 1"));
|
|
|
+ if(Validator.isEmpty(checkLog)){
|
|
|
+ throw new CustomException("审核数据错误");
|
|
|
+ }
|
|
|
+ if (!roleIds.contains(checkLog.getRoleId()) && !bo.getLoginName().equals("admin") ) {
|
|
|
+ throw new CustomException("当前账号没有审核权限");
|
|
|
+ }
|
|
|
+
|
|
|
+ TopOldOrder order = iTopOldOrderService.getOne(new LambdaQueryWrapper<TopOldOrder>()
|
|
|
+ .eq(TopOldOrder::getOrderSn, bo.getOrderSn())
|
|
|
+ .eq(TopOldOrder::getTenantId, bo.getTenantId()).last("limit 1"));
|
|
|
+ if(Validator.isEmpty(order)||order.getDivideStatus()!=5){
|
|
|
+ throw new CustomException("订单数据错误无法支付");
|
|
|
+ }
|
|
|
+
|
|
|
+ TopOldOrderCheckLog check = iTopOldOrderCheckLogService.getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
|
|
|
+ .eq(TopOldOrderCheckLog::getOrderSn, bo.getOrderSn())
|
|
|
+ .eq(TopOldOrderCheckLog::getType, 6)//分成支付
|
|
|
+ .eq(TopOldOrderCheckLog::getStatus, 1)
|
|
|
+ .eq(TopOldOrderCheckLog::getCheckFrom, checkFrom)
|
|
|
+ .eq(TopOldOrderCheckLog::getCheckSign, 1)
|
|
|
+ .eq(TopOldOrderCheckLog::getCheckStatus, 2)
|
|
|
+ .last("limit 1"));
|
|
|
+ if(Validator.isEmpty(check)){
|
|
|
+ throw new CustomException("当前订单未审核通过");
|
|
|
+ }
|
|
|
+
|
|
|
+ bo.setTrainOrgId(order.getTenantId().toString());//旧机构ID
|
|
|
+ String paySn = DateUtils.getTagOrderSn("CP");
|
|
|
+ TopOrderBankPay add = BeanUtil.toBean(bo, TopOrderBankPay.class);
|
|
|
+ add.setPaySn(paySn);
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ add.setCreateTime(DateUtils.getNowTime());
|
|
|
+ add.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ add.setResultStatus(0);
|
|
|
+ add.setPayUsername(bo.getLoginName());
|
|
|
+ BigDecimal money = null;
|
|
|
+ if(bo.getDivideModel()==1){
|
|
|
+ money =order.getDivideCompanyMoney();
|
|
|
+ }
|
|
|
+ if(bo.getDivideModel()==2){
|
|
|
+ money =order.getDivideSellerMoney();
|
|
|
+ }
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
+ String sign = ToolsUtils.EncoderByMd5(paySn+nowTime.toString()+"pubilc2022");
|
|
|
+ params.put("stamp", nowTime.toString());
|
|
|
+ params.put("sign", sign);
|
|
|
+ params.put("MainUniqueId", paySn);
|
|
|
+ params.put("ToBankAcount", bo.getToBankAcount());
|
|
|
+ params.put("ToBankName", bo.getToBankName());
|
|
|
+ params.put("ToBankTypeName", bo.getToBankTypeName());
|
|
|
+ params.put("Money", money.toString());
|
|
|
+ params.put("TrainOrgId", bo.getTrainOrgId());
|
|
|
+ if(Validator.isNotEmpty(bo.getToBankConnetNum())){
|
|
|
+ params.put("ToBankConnetNum", bo.getToBankConnetNum());
|
|
|
+ }
|
|
|
+ if(Validator.isNotEmpty(bo.getRemark())){
|
|
|
+ params.put("Remark", bo.getRemark());
|
|
|
+ }
|
|
|
+ String respone = "";
|
|
|
+ String paramStr = JSON.toJSONString(params);
|
|
|
+ add.setParamJson(paramStr);
|
|
|
+ log.info("网银支付参数" + paramStr, "");
|
|
|
+ String path = OLD_SYS_HOST+"/WitSystem/BussinessApi/NeedToPay";
|
|
|
+ try {
|
|
|
+ respone = HttpUtils.postFormBody(path, params);
|
|
|
+ if (!respone.contains("\"Status\":true")) {
|
|
|
+
|
|
|
+ throw new CustomException("同步请求错误"+respone);
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new CustomException("同步请求错误"+e.getMessage());
|
|
|
+ }
|
|
|
+ if(this.save(add)){
|
|
|
+ order.setDivideStatus(6);//支付中
|
|
|
+ iTopOldOrderService.updateById(order);
|
|
|
+ check.setCheckStatus(3);
|
|
|
+ iTopOldOrderCheckLogService.updateById(check);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|