diff --git a/.gitignore b/.gitignore index 51c7be1..ef9b967 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /.idea/ /logs/ +/mysql_mcp_server/ +/node_modules/ /target/ /.run/ diff --git a/src/main/java/com/sqx/modules/common/service/CommonInfoService.java b/src/main/java/com/sqx/modules/common/service/CommonInfoService.java index 4481694..91128e6 100644 --- a/src/main/java/com/sqx/modules/common/service/CommonInfoService.java +++ b/src/main/java/com/sqx/modules/common/service/CommonInfoService.java @@ -3,12 +3,24 @@ package com.sqx.modules.common.service; import com.sqx.common.utils.Result; import com.sqx.modules.common.entity.CommonInfo; +import java.math.BigDecimal; + +import java.math.BigDecimal; + /** * @author fang * @date 2020/7/8 */ public interface CommonInfoService { + /** + * 根据充值金额获取赠送金额 + * @param rechargeAmount 充值金额 + * @return 赠送金额 + */ + BigDecimal getRechargeBonus(BigDecimal rechargeAmount); + + /** * 保存对象 * diff --git a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java index 6094c1d..226abc1 100644 --- a/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java +++ b/src/main/java/com/sqx/modules/common/service/impl/CommonInfoServiceImpl.java @@ -7,18 +7,24 @@ import com.sqx.modules.common.entity.CommonInfo; import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.tbCoupon.entity.TbCoupon; import com.sqx.modules.tbCoupon.service.TbCouponService; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @author fang * @date 2020/7/8 */ +@Slf4j @Service public class CommonInfoServiceImpl extends ServiceImpl implements CommonInfoService { @@ -33,8 +39,93 @@ public class CommonInfoServiceImpl extends ServiceImpl bonusMap = parseRechargeBonusConfig(configValue); + + // 根据充值金额获取赠送金额 + BigDecimal bonus = bonusMap.getOrDefault(rechargeAmount, BigDecimal.ZERO); + return bonus; + } + /** + * 获取支付方式描述 + */ + private String getPayTypeDesc(Integer payType) { + switch (payType) { + case 1: + return "微信"; + case 2: + return "支付宝"; + case 3: + return "工商银行"; + default: + return "未知"; + } + } + + /** + * 解析充值赠送配置 + * @param configValue 配置值,格式为:充值金额:赠送金额,充值金额:赠送金额,... + * @return 充值金额与赠送金额的映射 + */ + private Map parseRechargeBonusConfig(String configValue) { + if (StringUtils.isBlank(configValue)) { + return Collections.emptyMap(); + } + + try { + // 按逗号分割每个配置项 + String[] configItems = configValue.split(","); + Map bonusMap = new java.util.HashMap<>(); + + for (String item : configItems) { + // 检查配置项是否包含冒号 + if (item.contains(":")) { + String[] parts = item.split(":"); + if (parts.length == 2) { + BigDecimal rechargeAmount = new BigDecimal(parts[0].trim()); + BigDecimal bonusAmount = new BigDecimal(parts[1].trim()); + bonusMap.put(rechargeAmount, bonusAmount); + } + } + } + + return bonusMap; + } catch (Exception e) { + // 解析异常时返回空映射 + return Collections.emptyMap(); + } + } } \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/pay/controller/app/AliPayController.java b/src/main/java/com/sqx/modules/pay/controller/app/AliPayController.java index d90897b..9a47cfd 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/AliPayController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/AliPayController.java @@ -170,8 +170,18 @@ public class AliPayController { //设置订单更新时间 orders.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); payOrderDao.updateById(orders); - //调用处理接口 - userMoneyDao.updateMayMoney(1, orders.getUserId(), orders.getMoney()); + // 处理充值赠送金额 + BigDecimal bonusAmount = commonInfoService.getRechargeBonus(orders.getPayMoney()); + // 计算总金额(充值金额 + 赠送金额) + BigDecimal totalAmount = orders.getMoney().add(bonusAmount); + + // 一次性更新用户余额(充值金额 + 赠送金额) + userMoneyDao.updateMayMoney(1, orders.getUserId(), totalAmount); + + // 创建交易记录列表 + List detailsList = new ArrayList<>(); + + // 添加充值记录 UserMoneyDetails userMoneyDetails = new UserMoneyDetails(); userMoneyDetails.setUserId(orders.getUserId()); userMoneyDetails.setTitle("支付宝充值"); @@ -180,7 +190,22 @@ public class AliPayController { userMoneyDetails.setMoney(orders.getMoney()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); userMoneyDetails.setCreateTime(sdf.format(new Date())); - userMoneyDetailsService.save(userMoneyDetails); + detailsList.add(userMoneyDetails); + + // 如果有赠送金额,添加赠送记录 + if (bonusAmount.compareTo(BigDecimal.ZERO) > 0) { + UserMoneyDetails bonusDetails = new UserMoneyDetails(); + bonusDetails.setUserId(orders.getUserId()); + bonusDetails.setTitle("充值赠送"); + bonusDetails.setContent("充值" + orders.getPayMoney() + "元,赠送" + bonusAmount + "元"); + bonusDetails.setType(1); + bonusDetails.setMoney(bonusAmount); + bonusDetails.setCreateTime(sdf.format(new Date())); + detailsList.add(bonusDetails); + } + + // 一次性保存所有交易记录 + userMoneyDetailsService.saveBatch(detailsList); } else if (payDetails.getType() == 2) { Orders orders = ordersDao.selectOne(new QueryWrapper().eq("orders_no", payDetails.getOrderId())); GoodsSku goodsSku = goodsSkuService.getById(orders.getSkuId()); diff --git a/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java index 4468c2c..9b20891 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java @@ -512,8 +512,18 @@ public class WxServiceImpl implements WxService { //设置订单更新时间 orders.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); payOrderDao.updateById(orders); - //调用处理接口 - userMoneyDao.updateMayMoney(1, orders.getUserId(), orders.getMoney()); + // 处理充值赠送金额 + BigDecimal bonusAmount = commonInfoService.getRechargeBonus(orders.getPayMoney()); + // 计算总金额(充值金额 + 赠送金额) + BigDecimal totalAmount = orders.getMoney().add(bonusAmount); + + // 一次性更新用户余额(充值金额 + 赠送金额) + userMoneyDao.updateMayMoney(1, orders.getUserId(), totalAmount); + + // 创建交易记录列表 + List detailsList = new ArrayList<>(); + + // 添加充值记录 UserMoneyDetails userMoneyDetails = new UserMoneyDetails(); userMoneyDetails.setUserId(orders.getUserId()); userMoneyDetails.setTitle("微信充值"); @@ -522,7 +532,22 @@ public class WxServiceImpl implements WxService { userMoneyDetails.setMoney(orders.getMoney()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); userMoneyDetails.setCreateTime(sdf.format(new Date())); - userMoneyDetailsService.save(userMoneyDetails); + detailsList.add(userMoneyDetails); + + // 如果有赠送金额,添加赠送记录 + if (bonusAmount.compareTo(BigDecimal.ZERO) > 0) { + UserMoneyDetails bonusDetails = new UserMoneyDetails(); + bonusDetails.setUserId(orders.getUserId()); + bonusDetails.setTitle("充值赠送"); + bonusDetails.setContent("充值" + orders.getPayMoney() + "元,赠送" + bonusAmount + "元"); + bonusDetails.setType(1); + bonusDetails.setMoney(bonusAmount); + bonusDetails.setCreateTime(sdf.format(new Date())); + detailsList.add(bonusDetails); + } + + // 一次性保存所有交易记录 + userMoneyDetailsService.saveBatch(detailsList); } else if (payDetails.getType() == 2) { Orders orders = ordersDao.selectOne(new QueryWrapper().eq("orders_no", payDetails.getOrderId())); GoodsSku goodsSku = goodsSkuService.getById(orders.getSkuId()); @@ -837,7 +862,18 @@ public class WxServiceImpl implements WxService { orders.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); payOrderDao.updateById(orders); //调用处理接口 - userMoneyDao.updateMayMoney(1, orders.getUserId(), orders.getMoney()); + // 处理充值赠送金额 + BigDecimal bonusAmount = commonInfoService.getRechargeBonus(orders.getPayMoney()); + // 计算总金额(充值金额 + 赠送金额) + BigDecimal totalAmount = orders.getMoney().add(bonusAmount); + + // 一次性更新用户余额(充值金额 + 赠送金额) + userMoneyDao.updateMayMoney(1, orders.getUserId(), totalAmount); + + // 创建交易记录列表 + List detailsList = new ArrayList<>(); + + // 添加充值记录 UserMoneyDetails userMoneyDetails = new UserMoneyDetails(); userMoneyDetails.setUserId(orders.getUserId()); userMoneyDetails.setTitle("微信充值"); @@ -846,7 +882,22 @@ public class WxServiceImpl implements WxService { userMoneyDetails.setMoney(orders.getMoney()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); userMoneyDetails.setCreateTime(sdf.format(new Date())); - userMoneyDetailsService.save(userMoneyDetails); + detailsList.add(userMoneyDetails); + + // 如果有赠送金额,添加赠送记录 + if (bonusAmount.compareTo(BigDecimal.ZERO) > 0) { + UserMoneyDetails bonusDetails = new UserMoneyDetails(); + bonusDetails.setUserId(orders.getUserId()); + bonusDetails.setTitle("充值赠送"); + bonusDetails.setContent("充值" + orders.getPayMoney() + "元,赠送" + bonusAmount + "元"); + bonusDetails.setType(1); + bonusDetails.setMoney(bonusAmount); + bonusDetails.setCreateTime(sdf.format(new Date())); + detailsList.add(bonusDetails); + } + + // 一次性保存所有交易记录 + userMoneyDetailsService.saveBatch(detailsList); } else if (payDetails.getType() == 2) { Orders orders = ordersDao.selectOne(new QueryWrapper().eq("orders_no", payDetails.getOrderId())); GoodsSku goodsSku = goodsSkuService.getById(orders.getSkuId()); diff --git a/src/main/resources/mapper/orders/OrdersDao.xml b/src/main/resources/mapper/orders/OrdersDao.xml index c8a26e2..75a7787 100644 --- a/src/main/resources/mapper/orders/OrdersDao.xml +++ b/src/main/resources/mapper/orders/OrdersDao.xml @@ -661,13 +661,15 @@ select u.user_id as userId,u.user_name as userName,u.avatar,u.create_time as createTime, (select ifnull(sum(o.zhi_rate),0.00) from orders o where - o.user_id = u.user_id and o.state=2 and zhi_user_id=#{userId} ) as money + o.user_id = u.user_id and o.state=2 and zhi_user_id=#{userId} ) as money, (select ifnull(sum(o.fei_rate),0.00) from orders o where - o.user_id = u.user_id and o.state=2 and fei_user_id=#{userId} ) as money + o.user_id = u.user_id and o.state=2 and fei_user_id=#{userId} ) as money, + ifnull(um.money, 0.00) as balance from tb_user u + left join user_money um on u.user_id = um.user_id where inviter_code=#{invitationCode} @@ -685,7 +687,8 @@ u.user_name AS userName, u.avatar, u.create_time AS createTime, - o.money + o.money, + ifnull(um.money, 0.00) as balance from ( SELECT ifnull(sum(fei_rate), 0.00) as money, user_id FROM orders @@ -693,6 +696,7 @@ and fei_user_id = #{userId} GROUP BY user_id) o left join tb_user u on u.user_id = o.user_id + left join user_money um on u.user_id = um.user_id ) a order by money desc