feat(订单): 添加审批支付类型支持
在订单服务中添加审批支付类型处理逻辑,包括: 1. 修改QyUserService接口及相关实现,支持按企业ID查询管理员 2. 扩展支付方式描述和订单提交参数 3. 实现审批支付流程,包括创建审批记录和发送企业微信通知
This commit is contained in:
parent
59d8ff188a
commit
4da0d35be4
|
@ -175,7 +175,7 @@ public class AssetApplicationService {
|
|||
.findFirst().orElse(null);
|
||||
QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, postAssetApprovalCommand.getCorpid());
|
||||
// 获取用户ID
|
||||
List<String> adminUserIds = qyUserService.selectAdminUserIds();
|
||||
List<String> adminUserIds = qyUserService.selectAdminUserIds(postAssetApprovalCommand.getCorpid());
|
||||
String toUser = String.join("|", adminUserIds);
|
||||
String toparty = "";
|
||||
String totag = "";
|
||||
|
|
|
@ -46,11 +46,12 @@ public interface QyUserMapper extends BaseMapper<QyUserEntity> {
|
|||
"LEFT JOIN sys_user su ON suqy.sys_user_id = su.user_id " +
|
||||
"LEFT JOIN sys_role sr ON su.role_id = sr.role_id " +
|
||||
"WHERE qu.deleted = 0 " +
|
||||
"AND qu.corpid = #{corpid}" +
|
||||
"AND suqy.deleted = 0 " +
|
||||
"AND su.deleted = 0 " +
|
||||
"AND sr.deleted = 0 " +
|
||||
"AND sr.role_key = 'admin'")
|
||||
List<String> selectAdminUserIds();
|
||||
List<String> selectAdminUserIds(@Param("corpid") String corpid);
|
||||
|
||||
@Select("SELECT SUM(balance) AS balance, SUM(use_balance) AS useBalance, SUM(balance_limit) AS balanceLimit " +
|
||||
"FROM qy_user " +
|
||||
|
|
|
@ -27,7 +27,7 @@ public interface QyUserService extends IService<QyUserEntity> {
|
|||
|
||||
QyUserEntity getUserByUserIdAndCorpid(String userid, String corpid);
|
||||
|
||||
List<String> selectAdminUserIds();
|
||||
List<String> selectAdminUserIds(String corpid);
|
||||
|
||||
QyUserStatsDTO selectTotalBalance(String corpid);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.agileboot.domain.qywx.userQySys.db.SysUserQyUserMapper;
|
|||
import com.agileboot.domain.system.user.db.SysUserEntity;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
@ -55,8 +56,8 @@ public class QyUserServiceImpl extends ServiceImpl<QyUserMapper, QyUserEntity> i
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectAdminUserIds() {
|
||||
return baseMapper.selectAdminUserIds();
|
||||
public List<String> selectAdminUserIds(String corpid) {
|
||||
return baseMapper.selectAdminUserIds(corpid);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -361,7 +361,7 @@ public class ReturnApprovalApplicationService {
|
|||
.findFirst().orElse(null);
|
||||
QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, authCorpInfo.getCorpid());
|
||||
// 获取用户ID
|
||||
List<String> adminUserIds = qyUserService.selectAdminUserIds();
|
||||
List<String> adminUserIds = qyUserService.selectAdminUserIds(command.getCorpid());
|
||||
String toUser = String.join("|", adminUserIds);
|
||||
String toparty = "";
|
||||
String totag = "";
|
||||
|
|
|
@ -17,10 +17,21 @@ import com.agileboot.domain.cabinet.smartCabinet.db.SmartCabinetEntity;
|
|||
import com.agileboot.domain.cabinet.smartCabinet.db.SmartCabinetService;
|
||||
import com.agileboot.domain.common.command.BulkOperationCommand;
|
||||
import com.agileboot.domain.mqtt.MqttService;
|
||||
import com.agileboot.domain.qywx.accessToken.AccessTokenApplicationService;
|
||||
import com.agileboot.domain.qywx.accessToken.db.QyAccessTokenEntity;
|
||||
import com.agileboot.domain.qywx.api.QywxApiUtil;
|
||||
import com.agileboot.domain.qywx.api.response.NewsArticle;
|
||||
import com.agileboot.domain.qywx.authCorpInfo.AuthCorpInfoApplicationService;
|
||||
import com.agileboot.domain.qywx.authCorpInfo.db.QyAuthCorpInfoEntity;
|
||||
import com.agileboot.domain.qywx.user.db.QyUserEntity;
|
||||
import com.agileboot.domain.qywx.user.db.QyUserService;
|
||||
import com.agileboot.domain.shop.approval.command.AddReturnApprovalCommand;
|
||||
import com.agileboot.domain.shop.approval.command.UpdateReturnApprovalCommand;
|
||||
import com.agileboot.domain.shop.approval.model.ReturnApprovalModel;
|
||||
import com.agileboot.domain.shop.approval.model.ReturnApprovalModelFactory;
|
||||
import com.agileboot.domain.shop.goods.db.ShopGoodsEntity;
|
||||
import com.agileboot.domain.shop.goods.db.ShopGoodsService;
|
||||
import com.agileboot.domain.shop.goods.model.GoodsModel;
|
||||
import com.agileboot.domain.shop.order.command.SubmitOrderCommand;
|
||||
import com.agileboot.domain.shop.order.db.*;
|
||||
import com.agileboot.domain.shop.order.db.dto.OrderWithGoodsDTO;
|
||||
|
@ -41,6 +52,7 @@ import com.agileboot.domain.shop.paymentOperationLog.command.AddPaymentOperation
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
@ -50,6 +62,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
|
@ -71,6 +84,10 @@ public class OrderApplicationService {
|
|||
private final CabinetCellOperationModelFactory cabinetCellOperationModelFactory;
|
||||
private final PaymentOperationLogApplicationService paymentOperationLogApplicationService;
|
||||
private final CabinetMainboardService cabinetMainboardService;
|
||||
private final ReturnApprovalModelFactory modelFactory;
|
||||
private final AuthCorpInfoApplicationService authCorpInfoApplicationService;
|
||||
private final AccessTokenApplicationService accessTokenApplicationService;
|
||||
private final QyUserService qyUserService;
|
||||
|
||||
public PageDTO<OrderWithGoodsDTO> getOrderList(SearchShopOrderQuery<OrderWithGoodsDTO> query) {
|
||||
Page<OrderWithGoodsDTO> page = orderService.getOrderList(query);
|
||||
|
@ -195,8 +212,75 @@ public class OrderApplicationService {
|
|||
handlePaymentSuccess(orderModel.getOrderId(), Integer.valueOf(amountInFen.toPlainString()),
|
||||
"balance-" + orderModel.getOrderId(), DateUtil.formatDateTime(new Date()));
|
||||
return new CreateOrderResult(orderModel.getOrderId(), orderModel.getTotalAmount(), null, qyUser.getBalance());
|
||||
} else if (Objects.equals(command.getPaymentType(), "approval")) {
|
||||
submitAssetApproval(orderModel, goodsList, command.getCorpid(), command.getName());
|
||||
return new CreateOrderResult(orderModel.getOrderId(), orderModel.getTotalAmount(), null, BigDecimal.valueOf(0));
|
||||
}else {
|
||||
throw new ApiException(ErrorCode.Client.COMMON_REQUEST_PARAMETERS_INVALID, "无效的支付类型");
|
||||
}
|
||||
}
|
||||
|
||||
private void submitAssetApproval(OrderModel orderModel, List<ShopOrderGoodsEntity> orderGoodsList, String corpid, String name) {
|
||||
ShopOrderGoodsEntity firstOrderGoods = orderGoodsList.get(0);
|
||||
// 设置商品价格并初始化审批状态
|
||||
AddReturnApprovalCommand command = new AddReturnApprovalCommand();
|
||||
command.initBaseEntity();
|
||||
command.setGoodsId(firstOrderGoods.getGoodsId());
|
||||
command.setOrderId(orderModel.getOrderId());
|
||||
command.setReturnImages(command.getReturnImages());
|
||||
command.setReturnRemark(command.getReturnRemark());
|
||||
command.setStatus(1);
|
||||
command.setCreatorId(0L);
|
||||
command.setCreateTime(new Date());
|
||||
command.setUpdaterId(0L);
|
||||
command.setUpdateTime(new Date());
|
||||
command.setDeleted(false);
|
||||
|
||||
// 执行业务逻辑
|
||||
ReturnApprovalModel returnApprovalModel = modelFactory.create();
|
||||
returnApprovalModel.loadAddCommand(command);
|
||||
returnApprovalModel.insert();
|
||||
|
||||
// 更新订单商品状态
|
||||
orderGoodsList.forEach(orderGoods -> {
|
||||
orderGoods.setStatus(5);
|
||||
orderGoods.setApprovalId(returnApprovalModel.getApprovalId());
|
||||
orderGoodsService.updateById(orderGoods);
|
||||
});
|
||||
|
||||
// 如果商品免审批,则自动审批
|
||||
|
||||
// 发送审核消息
|
||||
try {
|
||||
String appid = "QWTONG_YS_WXSHOP";
|
||||
List<QyAuthCorpInfoEntity> authCorpInfoList = authCorpInfoApplicationService.getByAppid(appid);
|
||||
QyAuthCorpInfoEntity authCorpInfo = authCorpInfoList.stream()
|
||||
.filter(a -> command.getCorpid().equals(a.getCorpid()))
|
||||
.findFirst().orElse(null);
|
||||
QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, authCorpInfo.getCorpid());
|
||||
// 获取用户ID
|
||||
List<String> adminUserIds = qyUserService.selectAdminUserIds(corpid);
|
||||
String toUser = String.join("|", adminUserIds);
|
||||
String toparty = "";
|
||||
String totag = "";
|
||||
List<NewsArticle> articles = new ArrayList<>();
|
||||
NewsArticle article = new NewsArticle();
|
||||
article.setTitle("耗材领用申请通知");
|
||||
article.setDescription("领用商品:" + firstOrderGoods.getGoodsName());
|
||||
if (orderGoodsList.size() > 1) {
|
||||
article.setDescription(name + " 申请领用" + firstOrderGoods.getGoodsName() + "等" + orderGoodsList.size() + "件商品");
|
||||
} else {
|
||||
article.setDescription(name + " 申请领用" + firstOrderGoods.getGoodsName());
|
||||
}
|
||||
article.setPicurl(firstOrderGoods.getCoverImg());
|
||||
article.setUrl("http://wxshop.ab98.cn/shop-api/api/shop/qy/wechatAuth");
|
||||
articles.add(article);
|
||||
|
||||
QywxApiUtil.sendNewsMessage(accessToken.getAccessToken(), Integer.valueOf(authCorpInfo.getAgentid()),
|
||||
toUser, toparty, totag, articles);
|
||||
} catch (Exception e) {
|
||||
log.error("发送退货审核通知失败", e);
|
||||
}
|
||||
throw new ApiException(ErrorCode.Client.COMMON_REQUEST_PARAMETERS_INVALID, "无效的支付类型");
|
||||
}
|
||||
|
||||
private WxJsApiPreCreateRequest buildPaymentRequest(OrderModel orderModel) {
|
||||
|
@ -242,6 +326,7 @@ public class OrderApplicationService {
|
|||
|
||||
// 保存订单商品
|
||||
goodsModel.insert();
|
||||
BeanUtils.copyProperties(goodsModel, goods);
|
||||
|
||||
// 扣减库存
|
||||
// 改为收到支付成功后扣减库存
|
||||
|
|
|
@ -19,9 +19,12 @@ public class SubmitOrderCommand {
|
|||
@ApiModelProperty("订单主体信息")
|
||||
private ShopOrderEntity order;
|
||||
|
||||
@ApiModelProperty("支付类型 wechat:微信 balance:余额")
|
||||
@ApiModelProperty("支付类型 wechat:微信 balance:余额 approval:审批")
|
||||
private String paymentType;
|
||||
|
||||
@ApiModelProperty("领用说明")
|
||||
private String applyRemark;
|
||||
|
||||
@ApiModelProperty("订单商品明细列表")
|
||||
private List<ShopOrderGoodsEntity> goodsList;
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ public class ShopOrderEntity extends BaseEntity<ShopOrderEntity> {
|
|||
@TableField("is_deduct_stock")
|
||||
private Integer isDeductStock;
|
||||
|
||||
@ApiModelProperty("支付方式")
|
||||
@ApiModelProperty("支付方式 wechat:微信 balance:余额 approval:审批")
|
||||
@TableField("payment_method")
|
||||
private String paymentMethod;
|
||||
|
||||
|
|
Loading…
Reference in New Issue