diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java index 56997a0..8857ccb 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/asset/AssetApplicationService.java @@ -175,7 +175,7 @@ public class AssetApplicationService { .findFirst().orElse(null); QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, postAssetApprovalCommand.getCorpid()); // 获取用户ID - List adminUserIds = qyUserService.selectAdminUserIds(); + List adminUserIds = qyUserService.selectAdminUserIds(postAssetApprovalCommand.getCorpid()); String toUser = String.join("|", adminUserIds); String toparty = ""; String totag = ""; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java index 24f27d1..1ca1834 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserMapper.java @@ -46,11 +46,12 @@ public interface QyUserMapper extends BaseMapper { "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 selectAdminUserIds(); + List selectAdminUserIds(@Param("corpid") String corpid); @Select("SELECT SUM(balance) AS balance, SUM(use_balance) AS useBalance, SUM(balance_limit) AS balanceLimit " + "FROM qy_user " + diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java index e347f99..e4b7bac 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserService.java @@ -27,7 +27,7 @@ public interface QyUserService extends IService { QyUserEntity getUserByUserIdAndCorpid(String userid, String corpid); - List selectAdminUserIds(); + List selectAdminUserIds(String corpid); QyUserStatsDTO selectTotalBalance(String corpid); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java index 475efad..5659a5b 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/qywx/user/db/QyUserServiceImpl.java @@ -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 i } @Override - public List selectAdminUserIds() { - return baseMapper.selectAdminUserIds(); + public List selectAdminUserIds(String corpid) { + return baseMapper.selectAdminUserIds(corpid); } @Override diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java index b986f4f..3965f59 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/approval/ReturnApprovalApplicationService.java @@ -361,7 +361,7 @@ public class ReturnApprovalApplicationService { .findFirst().orElse(null); QyAccessTokenEntity accessToken = accessTokenApplicationService.getByAppid(appid, authCorpInfo.getCorpid()); // 获取用户ID - List adminUserIds = qyUserService.selectAdminUserIds(); + List adminUserIds = qyUserService.selectAdminUserIds(command.getCorpid()); String toUser = String.join("|", adminUserIds); String toparty = ""; String totag = ""; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java index 49b56bd..8a7ecbd 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/OrderApplicationService.java @@ -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 getOrderList(SearchShopOrderQuery query) { Page 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 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 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 adminUserIds = qyUserService.selectAdminUserIds(corpid); + String toUser = String.join("|", adminUserIds); + String toparty = ""; + String totag = ""; + List 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); // 扣减库存 // 改为收到支付成功后扣减库存 diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/command/SubmitOrderCommand.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/command/SubmitOrderCommand.java index 6a0c701..ef157ac 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/command/SubmitOrderCommand.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/command/SubmitOrderCommand.java @@ -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 goodsList; diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java index ef2ed13..6bfbf85 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderEntity.java @@ -85,7 +85,7 @@ public class ShopOrderEntity extends BaseEntity { @TableField("is_deduct_stock") private Integer isDeductStock; - @ApiModelProperty("支付方式") + @ApiModelProperty("支付方式 wechat:微信 balance:余额 approval:审批") @TableField("payment_method") private String paymentMethod;