账户门店

This commit is contained in:
zt
2024-12-19 13:40:53 +08:00
parent 4d6e48165b
commit 6760e9cfa3
36 changed files with 431 additions and 244 deletions

View File

@ -37,7 +37,7 @@ public class CardApiImpl implements CardApi{
giftMoney = giftMoney.add(recharge.getDonateMoney()); giftMoney = giftMoney.add(recharge.getDonateMoney());
} }
wxRechargeService.wxRecharge(money, money.subtract(giftMoney),giftMoney,userId); wxRechargeService.wxRecharge(money.add(giftMoney), money,giftMoney,userId);
} }
@Override @Override

View File

@ -111,8 +111,8 @@ public class CardController {
@GetMapping("/getMoney") @GetMapping("/getMoney")
@Operation(summary = "获取余额") @Operation(summary = "获取余额")
public CommonResult<BigDecimal> getMoney() { public CommonResult<BigDecimal> getMoney(Long carteenId) {
return success(cardService.getMoney()); return success(cardService.getMoney(carteenId));
} }
@PutMapping("/rechargeByAdmin") @PutMapping("/rechargeByAdmin")
@ -125,14 +125,14 @@ public class CardController {
@GetMapping("/getCashMoney") @GetMapping("/getCashMoney")
@Operation(summary = "获取现金充值") @Operation(summary = "获取现金充值")
public CommonResult<BigDecimal> getCashMoney(Long userId) { public CommonResult<BigDecimal> getCashMoney(Long userId,Long carteenId) {
return success(cardService.getCashMoney(userId)); return success(cardService.getCashMoney(userId,carteenId));
} }
@GetMapping("/cashDraw") @GetMapping("/cashDraw")
@Operation(summary = "现金提现") @Operation(summary = "现金提现")
public CommonResult<Boolean> cashDraw(Long userId,BigDecimal money) { public CommonResult<Boolean> cashDraw(Long userId,BigDecimal money,Long carteenId) {
return success(cardService.cashDraw(userId,money)); return success(cardService.cashDraw(userId,money,carteenId));
} }

View File

@ -34,4 +34,7 @@ public class CardPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime; private LocalDateTime[] createTime;
@Schema(description = "门店", example = "23469")
private Long carteenId;
} }

View File

@ -39,4 +39,16 @@ public class CardRespVO {
@Schema(description = "消费类型") @Schema(description = "消费类型")
private String type; private String type;
private Long carteenId;
/**
* 现金金额
*/
private BigDecimal cashAmount;
/**
* 微信充值金额
*/
private BigDecimal wxAmount;
} }

View File

@ -15,5 +15,5 @@ public class RechargeVO {
private List<Long> userIds; private List<Long> userIds;
private Long groupId; private Long groupId;
private BigDecimal money; private BigDecimal money;
private Long carteenId;
} }

View File

@ -37,7 +37,7 @@ public class ExcelImportController {
private CashRechargeService cashRechargeService; private CashRechargeService cashRechargeService;
@PostMapping("/easyExcelImport") @PostMapping("/easyExcelImport")
public void importExcel(MultipartFile file, HttpServletResponse response) { public void importExcel(MultipartFile file, HttpServletResponse response,Long storeId) {
if (!file.isEmpty()) { if (!file.isEmpty()) {
//文件名称 //文件名称
int begin = Objects.requireNonNull(file.getOriginalFilename()).indexOf("."); int begin = Objects.requireNonNull(file.getOriginalFilename()).indexOf(".");
@ -52,7 +52,7 @@ public class ExcelImportController {
throw new IllegalArgumentException("文件不能为空"); throw new IllegalArgumentException("文件不能为空");
} }
try (InputStream inputStream = file.getInputStream()) { try (InputStream inputStream = file.getInputStream()) {
List<RechargeExcel> rechargeExcels = simpleRead(inputStream); List<RechargeExcel> rechargeExcels = simpleRead(inputStream,storeId);
ExcelUtils.write(response, "人员不存在.xlsx", "数据", RechargeExcel.class, ExcelUtils.write(response, "人员不存在.xlsx", "数据", RechargeExcel.class,
rechargeExcels); rechargeExcels);
} catch (IOException e) { } catch (IOException e) {
@ -63,7 +63,7 @@ public class ExcelImportController {
/** /**
* 最简单的读的监听器 * 最简单的读的监听器
*/ */
public List<RechargeExcel> simpleRead(InputStream inputStream) { public List<RechargeExcel> simpleRead(InputStream inputStream,Long storeId) {
//获取正确数据 //获取正确数据
ArrayList<RechargeExcel> successArrayList = new ArrayList<>(); ArrayList<RechargeExcel> successArrayList = new ArrayList<>();
EasyExcel.read(inputStream) EasyExcel.read(inputStream)
@ -89,7 +89,7 @@ public class ExcelImportController {
} }
List<Long> ids = new ArrayList<>(); List<Long> ids = new ArrayList<>();
ids.add(userByMobile.getId()); ids.add(userByMobile.getId());
cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney()); cashRechargeService.rechargeByAdmin(ids,null,excel.getMoney(),storeId);
} }
return notExist; return notExist;
} }

View File

@ -23,4 +23,6 @@ public class MemberGroupPageVO extends PageParam {
private Integer limitOne; private Integer limitOne;
private String mobile; private String mobile;
private Long carteenId;
} }

View File

@ -123,8 +123,8 @@ public class OrderController {
@GetMapping("/user/money") @GetMapping("/user/money")
@Operation(summary = "根据会员编号,获得会员余额,充值金额,消费金额") @Operation(summary = "根据会员编号,获得会员余额,充值金额,消费金额")
@PreAuthorize("@ss.hasPermission('member:order:query')") @PreAuthorize("@ss.hasPermission('member:order:query')")
public CommonResult<OrderMoneyRespVO> getUserMeney(@RequestParam("userId")Long userId){ public CommonResult<OrderMoneyRespVO> getUserMeney(Long userId,Long carteenId){
return CommonResult.success(orderService.getUserMeney(userId)); return CommonResult.success(orderService.getUserMeney(userId,carteenId));
} }
@GetMapping("/reduction") @GetMapping("/reduction")

View File

@ -14,10 +14,20 @@ import java.math.BigDecimal;
public class OrderMoneyRespVO { public class OrderMoneyRespVO {
//会员编号 //会员编号
private Long userId; private Long userId;
//当前余额 //当前微信余额
private BigDecimal currentMoney; private BigDecimal currentMoney;
//充值金额 //现金充值金额
private BigDecimal rechargeMoney; private BigDecimal rechargeMoney;
//消费金额 //消费金额
private BigDecimal consumeMoney; private BigDecimal consumeMoney;
//当前现金余额
private BigDecimal cashMoney;
//微信充值
private BigDecimal wxRechargeMoney;
//欠款
private BigDecimal debtMoney;
} }

View File

@ -69,8 +69,8 @@ public class AppCardController {
@GetMapping("/getMoney") @GetMapping("/getMoney")
@Operation(summary = "获取余额") @Operation(summary = "获取余额")
public CommonResult<BigDecimal> getMoney() { public CommonResult<BigDecimal> getMoney(Long carteenId) {
return success(cardService.getMoney()); return success(cardService.getMoney(carteenId));
} }
@GetMapping("/month") @GetMapping("/month")

View File

@ -1,15 +1,19 @@
package cn.iocoder.yudao.module.member.controller.app.user; package cn.iocoder.yudao.module.member.controller.app.user;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*; import cn.iocoder.yudao.module.member.controller.app.user.vo.*;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.dataobject.userexpand.UserExpandDO; import cn.iocoder.yudao.module.member.dal.dataobject.userexpand.UserExpandDO;
import cn.iocoder.yudao.module.member.service.level.MemberLevelService; import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.member.service.userexpand.UserExpandService; import cn.iocoder.yudao.module.member.service.userexpand.UserExpandService;
import cn.iocoder.yudao.module.system.api.deviceInfo.DeviceInfoApi;
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO; import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -19,7 +23,9 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -40,16 +46,34 @@ public class AppMemberUserController {
private MemberLevelService levelService; private MemberLevelService levelService;
@Resource @Resource
private UserExpandService userExpandService; private UserExpandService userExpandService;
@Resource
private MoneyService moneyService;
@Resource
private HttpServletRequest httpServletRequest;
@Resource
private DeviceInfoApi deviceInfoApi;
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得基本信息") @Operation(summary = "获得基本信息")
@PreAuthenticated @PreAuthenticated
public CommonResult<AppMemberUserInfoRespVO> getUserInfo() { public CommonResult<AppMemberUserInfoRespVO> getUserInfo(Long carteenId) {
MemberUserDO user = userService.getUser(getLoginUserId()); MemberUserDO user = userService.getUser(getLoginUserId());
MemberLevelDO level = levelService.getLevel(user.getLevelId()); MemberLevelDO level = levelService.getLevel(user.getLevelId());
UserExpandDO userExpandByuserId = userExpandService.getUserExpandByuserId(getLoginUserId()); UserExpandDO userExpandByuserId = userExpandService.getUserExpandByuserId(getLoginUserId());
AppMemberUserInfoRespVO convert = MemberUserConvert.INSTANCE.convert(user, level); AppMemberUserInfoRespVO convert = MemberUserConvert.INSTANCE.convert(user, level);
convert.setUserExpandDO(userExpandByuserId); convert.setUserExpandDO(userExpandByuserId);
if(carteenId!=null){
MoneyDO moneyDO = moneyService.getMoney(user.getId(), carteenId);
if(ObjectUtil.isNotEmpty(moneyDO)){
convert.setCashAmount(moneyDO.getCashAmount());
convert.setDebtAmount(moneyDO.getDebtAmount());
}else {
convert.setCashAmount(BigDecimal.ZERO);
convert.setDebtAmount(BigDecimal.ZERO);
}
}
return success(convert); return success(convert);
} }
@ -147,9 +171,11 @@ public class AppMemberUserController {
} }
@GetMapping("/getInfoByCardOrFace") @GetMapping("/getInfoByCardOrFace")
@Operation(summary = "获取用户绑定的卡号") @Operation(summary = "获取用户信息")
public CommonResult<Map<String,Object>> getInfoByCard(String cardId,Long mobile){ public CommonResult<Map<String,Object>> getInfoByCard(String cardId,Long mobile){
return success(userService.getInfoByCard(cardId,mobile)); String authorization = httpServletRequest.getHeader("Authorization");
Long carteen = deviceInfoApi.getCarteen(authorization);
return success(userService.getInfoByCard(cardId,mobile,carteen));
} }
@GetMapping("/getQRCode") @GetMapping("/getQRCode")
@ -157,5 +183,6 @@ public class AppMemberUserController {
public CommonResult<String> getQRCode(){ public CommonResult<String> getQRCode(){
return success(userService.getQRCode()); return success(userService.getQRCode());
} }
} }

View File

@ -85,4 +85,9 @@ public class AppMemberUserInfoRespVO {
*/ */
private BigDecimal wxAmount; private BigDecimal wxAmount;
/**
* 欠款
*/
private BigDecimal debtAmount;
} }

View File

@ -80,4 +80,8 @@ public class CardDO extends BaseDO {
* 开票编号 * 开票编号
*/ */
private String billingNum; private String billingNum;
/**
* 门店
*/
private Long carteenId;
} }

View File

@ -45,6 +45,7 @@ public interface CardMapper extends BaseMapperX<CardDO> {
.eqIfPresent(CardDO::getFlag, reqVO.getFlag()) .eqIfPresent(CardDO::getFlag, reqVO.getFlag())
.eqIfPresent(CardDO::getChangeMoney, reqVO.getChangeMoney()) .eqIfPresent(CardDO::getChangeMoney, reqVO.getChangeMoney())
.betweenIfPresent(CardDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(CardDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(CardDO::getCarteenId,reqVO.getCarteenId())
.orderByDesc(CardDO::getId)); .orderByDesc(CardDO::getId));
} }
@ -60,9 +61,10 @@ public interface CardMapper extends BaseMapperX<CardDO> {
@Select("select IFNULL(sum(change_money),0) as money,count(*) as count FROM member_card where user_id = #{userId} and flag = #{flag} and create_time BETWEEN #{startTime} and #{endTime}") @Select("select IFNULL(sum(change_money),0) as money,count(*) as count FROM member_card where user_id = #{userId} and flag = #{flag} and create_time BETWEEN #{startTime} and #{endTime}")
AppCardMonthVO selectMonth(@Param("userId") Long userId,@Param("flag") String flag, @Param("startTime") LocalDateTime startTime, @Param("endTime")LocalDateTime endTime); AppCardMonthVO selectMonth(@Param("userId") Long userId,@Param("flag") String flag, @Param("startTime") LocalDateTime startTime, @Param("endTime")LocalDateTime endTime);
@Select("select SUM(change_money) from member_card where user_id= #{userId} and flag= #{flag}") @Select("select SUM(change_money) from member_card where user_id= #{userId} and flag= #{flag} and carteen_id = #{carteenId}")
BigDecimal selectAddMoney(@Param("userId") Long userId,@Param("flag") String flag); BigDecimal selectAddMoney(@Param("userId") Long userId,@Param("flag") String flag,@Param("carteenId") Long carteenId);
@Select("select sum(change_money) from member_card where user_id= #{userId} and type= '1'")
BigDecimal selectWxMoney(@Param("userId") Long userId);
List<CardDO> selectMoneyList(List<Long> list); List<CardDO> selectMoneyList(List<Long> list);

View File

@ -60,4 +60,6 @@ public interface MemberGroupMapper extends BaseMapperX<MemberGroupDO> {
@Delete("delete from member_group_member where group_id = #{groupId}") @Delete("delete from member_group_member where group_id = #{groupId}")
void deleteAssociation(Long groupId); void deleteAssociation(Long groupId);
Long getCarteenId(Long userId);
} }

View File

@ -7,7 +7,7 @@ public interface AmountService {
void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount); void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount);
BigDecimal getAmount(Long userId); BigDecimal getAmount(Long userId,Long storeId);
BigDecimal getCashAmount(Long userId); BigDecimal getCashAmount(Long userId,Long storeId);
} }

View File

@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.rechargelog.RechargeLogDO; import cn.iocoder.yudao.module.member.dal.dataobject.rechargelog.RechargeLogDO;
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO; import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
@ -16,6 +17,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.service.appup.AppUpService; import cn.iocoder.yudao.module.member.service.appup.AppUpService;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
@ -44,7 +46,8 @@ public class AmountServiceImpl implements AmountService {
@Resource @Resource
private MemberUserMapper userMapper; private MemberUserMapper userMapper;
@Resource
private MoneyService moneyService;
@Override @Override
public void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount) { public void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount) {
@ -61,20 +64,27 @@ public class AmountServiceImpl implements AmountService {
} }
@Override @Override
public BigDecimal getAmount(Long userId) { public BigDecimal getAmount(Long userId,Long storeId) {
MemberUserDO memberUserDO = userMapper.selectById(userId); MemberUserDO memberUserDO = userMapper.selectById(userId);
if (memberUserDO == null) { if (memberUserDO == null) {
throw exception(USER_NOT_EXISTS); throw exception(USER_NOT_EXISTS);
} }
return memberUserDO.getMoney(); MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
BigDecimal cashAmount = BigDecimal.ZERO;
if (moneyDO != null) {
cashAmount = moneyDO.getCashAmount();
}
return memberUserDO.getWxAmount().add(cashAmount);
} }
@Override @Override
public BigDecimal getCashAmount(Long userId) { public BigDecimal getCashAmount(Long userId,Long storeId) {
MemberUserDO memberUserDO = userMapper.selectById(userId); MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
if (memberUserDO == null) { if (moneyDO == null) {
throw exception(USER_NOT_EXISTS); return BigDecimal.ZERO;
} }
return memberUserDO.getCashAmount(); return moneyDO.getCashAmount();
} }
} }

View File

@ -8,5 +8,5 @@ import java.util.List;
public interface CashRechargeService { public interface CashRechargeService {
void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money); void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money,Long storeId);
} }

View File

@ -2,9 +2,12 @@ package cn.iocoder.yudao.module.member.service.amount;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.math.Money;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO; import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@ -14,6 +17,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper; import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
@ -47,13 +51,15 @@ public class CashRechargeServiceImpl implements CashRechargeService {
private IntegralRefundMapper refundMapper; private IntegralRefundMapper refundMapper;
@Resource @Resource
private MemberGroupMapper memberGroupMapper; private MemberGroupMapper memberGroupMapper;
@Resource
private MoneyService moneyService;
@Resource @Resource
private StringRedisTemplate cashRechargeRedisTemplate; private StringRedisTemplate cashRechargeRedisTemplate;
@Override @Override
public void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money) { public void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money, Long storeId) {
List<Long> memberList = new ArrayList<>(); List<Long> memberList = new ArrayList<>();
if (groupId != null) { if (groupId != null) {
memberList.addAll(memberGroupMapper.getMemberList(groupId)); memberList.addAll(memberGroupMapper.getMemberList(groupId));
@ -65,7 +71,6 @@ public class CashRechargeServiceImpl implements CashRechargeService {
for (Long userId : memberList) { for (Long userId : memberList) {
BigDecimal newMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
BigDecimal cashNewAmount; BigDecimal cashNewAmount;
@ -73,24 +78,28 @@ public class CashRechargeServiceImpl implements CashRechargeService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO memberUserDO = userMapper.selectById(userId); MemberUserDO memberUserDO = userMapper.selectById(userId);
//金额变动 MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
BigDecimal oldMoney = memberUserDO.getMoney(); BigDecimal debtAmount = BigDecimal.ZERO;
System.out.println(oldMoney); if (ObjectUtil.isEmpty(moneyDO)) {
memberUserDO.setMoney(memberUserDO.getMoney().add(money)); MoneyDO add = new MoneyDO();
if (memberUserDO.getMoney().compareTo(BigDecimal.ZERO) > 0) { add.setCashAmount(money);
if (oldMoney.compareTo(BigDecimal.ZERO) > 0) { add.setDebtAmount(debtAmount);
memberUserDO.setCashAmount(memberUserDO.getCashAmount().add(money)); add.setUserId(userId);
add.setCarteenId(storeId);
moneyService.insertOne(add);
cashNewAmount = add.getCashAmount();
} else { } else {
memberUserDO.setCashAmount(memberUserDO.getMoney()); debtAmount = moneyDO.getDebtAmount();
//金额变动
money = money.add(debtAmount);
moneyDO.setCashAmount(money.add(moneyDO.getCashAmount()));
moneyDO.setDebtAmount(BigDecimal.ZERO);
cashNewAmount = moneyDO.getCashAmount();
moneyService.updateById(moneyDO);
} }
}
userMapper.updateById(memberUserDO);
newMoney = memberUserDO.getMoney();
wxNewMoney = memberUserDO.getWxAmount(); wxNewMoney = memberUserDO.getWxAmount();
giftNewMoney = memberUserDO.getGiftAmount(); giftNewMoney = memberUserDO.getGiftAmount();
cashNewAmount = memberUserDO.getCashAmount();
name = memberUserDO.getNickname(); name = memberUserDO.getNickname();
} }
@ -100,30 +109,30 @@ public class CashRechargeServiceImpl implements CashRechargeService {
add.setFlag(CardDO.ADD); add.setFlag(CardDO.ADD);
add.setChangeMoney(money); add.setChangeMoney(money);
add.setType(CostTypeEnum.ADMIN_PAY.getCode()); add.setType(CostTypeEnum.ADMIN_PAY.getCode());
add.setMoney(newMoney);
add.setCashAmount(cashNewAmount); add.setCashAmount(cashNewAmount);
add.setWxAmount(wxNewMoney); add.setWxAmount(wxNewMoney);
add.setGiftAmount(giftNewMoney); add.setGiftAmount(giftNewMoney);
add.setCarteenId(storeId);
addList.add(add); addList.add(add);
//更新缓存 //更新缓存
String redisKey = "USER_" + userId; String redisKey = "USER_" + userId;
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO(); AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
appUserInfoCardVO.setName(name); appUserInfoCardVO.setName(name);
appUserInfoCardVO.setMoney(newMoney); appUserInfoCardVO.setMoney(wxNewMoney);
cashRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO)); cashRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
} }
//处理订单 //处理订单
handleOrderCash(memberList, money); handleOrderCash(memberList, money, storeId);
//批量添加 //批量添加
cardMapper.insertBatch(addList); cardMapper.insertBatch(addList);
} }
void handleOrderCash(List<Long> userIds, BigDecimal money) { void handleOrderCash(List<Long> userIds, BigDecimal money, Long storeId) {
ArrayList<DishOrderDO> updateList = new ArrayList<>(); ArrayList<DishOrderDO> updateList = new ArrayList<>();
List<Long> refundOrder = getRefundOrder(); List<Long> refundOrder = getRefundOrder();
//查询出所有未完全支付订单 //查询出所有未完全支付订单
@ -131,7 +140,8 @@ public class CashRechargeServiceImpl implements CashRechargeService {
BigDecimal cashMoney = money; BigDecimal cashMoney = money;
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery() List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
.eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)); .eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)
.eq(DishOrderDO::getStoreId, storeId));
if (CollectionUtil.isNotEmpty(dishOrderDOS)) { if (CollectionUtil.isNotEmpty(dishOrderDOS)) {
for (DishOrderDO dishOrderDO : dishOrderDOS) { for (DishOrderDO dishOrderDO : dishOrderDOS) {

View File

@ -14,7 +14,7 @@ public interface DeductionService {
/** /**
* 现金提现 * 现金提现
*/ */
void cashDraw(Long userId, BigDecimal money,String type); void cashDraw(Long userId, BigDecimal money,String type,Long storeId);
/** /**
* 微信提现 金额单位:分 * 微信提现 金额单位:分
@ -29,19 +29,17 @@ public interface DeductionService {
/** /**
* 减免、退款 * 减免、退款
*/ */
void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount); void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount,Long storeId);
/** /**
* 超市扣款 * 超市扣款
*/ */
BigDecimal storeDeduction(BigDecimal total, Long userId); BigDecimal storeDeduction(BigDecimal total, Long userId,Long storeId);
/** /**
* 扣款 * 扣款
*/ */
void deduct(Long userId, BigDecimal money,String type); void deduct(Long userId, BigDecimal money,String type,Long storeId);
} }

View File

@ -7,12 +7,15 @@ import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo; import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import cn.iocoder.yudao.module.member.service.business.BusinessService; import cn.iocoder.yudao.module.member.service.business.BusinessService;
import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.group.MemberGroupService;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.sun.istack.NotNull; import com.sun.istack.NotNull;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -49,6 +52,9 @@ public class DeductionServiceImpl implements DeductionService {
private MemberUserService userService; private MemberUserService userService;
@Resource @Resource
private BusinessService businessService; private BusinessService businessService;
@Resource
private MoneyService moneyService;
private static final List<String> CHECK_LIST = Arrays.asList(CostTypeEnum.SHOPPING.getCode()); private static final List<String> CHECK_LIST = Arrays.asList(CostTypeEnum.SHOPPING.getCode());
@ -56,7 +62,6 @@ public class DeductionServiceImpl implements DeductionService {
public void deduction(DishOrderDO dishOrderDO) { public void deduction(DishOrderDO dishOrderDO) {
Long userId = dishOrderDO.getUserId(); Long userId = dishOrderDO.getUserId();
BigDecimal newMoney;
BigDecimal changeMoney; BigDecimal changeMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
@ -66,12 +71,12 @@ public class DeductionServiceImpl implements DeductionService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
MoneyDO moneyDO = moneyService.getMoney(dishOrderDO.getUserId(), dishOrderDO.getStoreId());
//新的总价 //新的总价
String s = deductionRedisTemplate.opsForValue().get(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId()); String s = deductionRedisTemplate.opsForValue().get(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId());
BigDecimal total = new BigDecimal(StrUtil.isBlank(s) ? "0" : s); BigDecimal total = new BigDecimal(StrUtil.isBlank(s) ? "0" : s);
//现有金额 //现有金额
BigDecimal money = user.getMoney(); //BigDecimal money = user.getMoney();
//计算减免价格 //计算减免价格
BigDecimal reductionAmount = BigDecimal.ZERO; BigDecimal reductionAmount = BigDecimal.ZERO;
if (total.compareTo(BigDecimal.ZERO) > 0) { if (total.compareTo(BigDecimal.ZERO) > 0) {
@ -90,13 +95,13 @@ public class DeductionServiceImpl implements DeductionService {
} else { } else {
total = total.subtract(reductionAmount); total = total.subtract(reductionAmount);
} }
//当前金额
BigDecimal wxAmount = user.getWxAmount(); BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount(); BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = user.getCashAmount(); BigDecimal cashAmount = moneyDO.getCashAmount();
user.setMoney(money.subtract(total));
BigDecimal money = wxAmount.add(giftAmount).add(cashAmount);
// user.setMoney(money.subtract(total));
//待支付金额 最大退款金额 //待支付金额 最大退款金额
dishOrderDO.setRefundAmount(total); dishOrderDO.setRefundAmount(total);
if (money.compareTo(BigDecimal.ZERO) <= 0) { if (money.compareTo(BigDecimal.ZERO) <= 0) {
@ -116,16 +121,17 @@ public class DeductionServiceImpl implements DeductionService {
dishOrderDO.setGiftAmount(giftAmount); dishOrderDO.setGiftAmount(giftAmount);
user.setWxAmount(BigDecimal.ZERO); user.setWxAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO); moneyDO.setCashAmount(BigDecimal.ZERO);
user.setGiftAmount(BigDecimal.ZERO); user.setGiftAmount(BigDecimal.ZERO);
moneyDO.setDebtAmount(money.subtract(total).add(moneyDO.getDebtAmount()));
} else { } else {
dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE); dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE);
//计算金额 //计算金额
if (total.compareTo(cashAmount) <= 0) { if (total.compareTo(cashAmount) <= 0) {
user.setCashAmount(cashAmount.subtract(total)); moneyDO.setCashAmount(cashAmount.subtract(total));
dishOrderDO.setCashAmount(total); dishOrderDO.setCashAmount(total);
} else { } else {
user.setCashAmount(BigDecimal.ZERO); moneyDO.setCashAmount(BigDecimal.ZERO);
dishOrderDO.setCashAmount(cashAmount); dishOrderDO.setCashAmount(cashAmount);
BigDecimal total1 = total.subtract(cashAmount); BigDecimal total1 = total.subtract(cashAmount);
if (total1.compareTo(giftAmount) <= 0) { if (total1.compareTo(giftAmount) <= 0) {
@ -141,27 +147,27 @@ public class DeductionServiceImpl implements DeductionService {
} }
} }
} }
//修改
userService.updateById(user); userService.updateById(user);
newMoney = user.getMoney(); moneyService.updateById(moneyDO);
wxNewMoney = user.getWxAmount(); wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount(); giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount(); cashNewMoney = moneyDO.getCashAmount();
changeMoney = total; changeMoney = total;
name = user.getNickname(); name = user.getNickname();
} }
//记录消费记录 //记录消费记录
CardDO cardDO = new CardDO(); CardDO cardDO = new CardDO();
cardDO.setType(TimePeriodEnum.getTimePeriod(dishOrderDO.getCreateTime())); cardDO.setType(TimePeriodEnum.getTimePeriod(dishOrderDO.getCreateTime()));
cardDO.setUserId(userId); cardDO.setUserId(userId);
cardDO.setChangeMoney(changeMoney); cardDO.setChangeMoney(changeMoney);
cardDO.setFlag(CardDO.MINUS); cardDO.setFlag(CardDO.MINUS);
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewMoney); cardDO.setCashAmount(cashNewMoney);
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setCarteenId(dishOrderDO.getStoreId());
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
@ -182,14 +188,13 @@ public class DeductionServiceImpl implements DeductionService {
} }
//更新redis //更新redis
updateRedis(userId,name,newMoney); updateRedis(userId, name, wxNewMoney);
} }
@Override @Override
public void cashDraw(Long userId, BigDecimal money, String type) { public void cashDraw(Long userId, BigDecimal money, String type, Long storeId) {
BigDecimal newMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
BigDecimal cashNewMoney; BigDecimal cashNewMoney;
@ -197,17 +202,17 @@ public class DeductionServiceImpl implements DeductionService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
if (ObjectUtil.isEmpty(user) || user.getCashAmount().compareTo(BigDecimal.ZERO) < 1 MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|| money.compareTo(user.getCashAmount()) > 0) { if (ObjectUtil.isEmpty(moneyDO) || moneyDO.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|| money.compareTo(moneyDO.getCashAmount()) > 0) {
throw exception(CASH_AMOUNT_NOT_ENOUGH); throw exception(CASH_AMOUNT_NOT_ENOUGH);
} }
user.setMoney(user.getMoney().subtract(money)); moneyDO.setCashAmount(moneyDO.getCashAmount().subtract(money));
user.setCashAmount(user.getCashAmount().subtract(money)); moneyService.updateById(moneyDO);
userService.updateById(user);
newMoney = user.getMoney();
wxNewMoney = user.getWxAmount(); wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount(); giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount(); cashNewMoney = moneyDO.getCashAmount();
name = user.getNickname(); name = user.getNickname();
} }
@ -218,18 +223,18 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setType(type); cardDO.setType(type);
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewMoney); cardDO.setCashAmount(cashNewMoney);
cardDO.setCarteenId(storeId);
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
//更新redis //更新redis
updateRedis(userId,name,newMoney); updateRedis(userId, name, wxNewMoney);
} }
@Override @Override
public void wxDraw(Integer amount, Long userId) { public void wxDraw(Integer amount, Long userId) {
BigDecimal newMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
BigDecimal cashNewMoney; BigDecimal cashNewMoney;
@ -239,9 +244,7 @@ public class DeductionServiceImpl implements DeductionService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
user.setWxAmount(user.getWxAmount().subtract(changeMoney)); user.setWxAmount(user.getWxAmount().subtract(changeMoney));
user.setMoney(user.getMoney().subtract(changeMoney));
userService.updateById(user); userService.updateById(user);
newMoney = user.getMoney();
wxNewMoney = user.getWxAmount(); wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount(); giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount(); cashNewMoney = user.getCashAmount();
@ -255,16 +258,13 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setFlag(CardDO.MINUS); cardDO.setFlag(CardDO.MINUS);
cardDO.setChangeMoney(changeMoney); cardDO.setChangeMoney(changeMoney);
cardDO.setType("7"); cardDO.setType("7");
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewMoney); cardDO.setCashAmount(cashNewMoney);
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
//更新redis //更新redis
updateRedis(userId,name,newMoney); updateRedis(userId, name, wxNewMoney);
} }
@Override @Override
@ -278,25 +278,27 @@ public class DeductionServiceImpl implements DeductionService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
BigDecimal oldMoney = user.getMoney(); MoneyDO moneyDO = moneyService.getMoney(userId, dishOrderDO.getStoreId());
user.setMoney(oldMoney.add(money));
//用户当前金额
BigDecimal wxAmount = user.getWxAmount(); BigDecimal wxAmount = user.getWxAmount();
BigDecimal cashAmount = user.getCashAmount();
BigDecimal giftAmount = user.getGiftAmount(); BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = moneyDO.getCashAmount();
BigDecimal debtAmount = moneyDO.getDebtAmount();
//订单消费金额
BigDecimal dishWxAmount = dishOrderDO.getWxAmount(); BigDecimal dishWxAmount = dishOrderDO.getWxAmount();
BigDecimal dishCashAmount = dishOrderDO.getCashAmount(); BigDecimal dishCashAmount = dishOrderDO.getCashAmount();
BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount(); BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount();
BigDecimal newMoney = money; BigDecimal newMoney = money;
if (oldMoney.compareTo(BigDecimal.ZERO) < 0) {
newMoney = user.getMoney(); if (debtAmount.compareTo(BigDecimal.ZERO) > 0) {
newMoney = debtAmount.add(newMoney);
} }
if (newMoney.compareTo(BigDecimal.ZERO) < 0) {
if (user.getMoney().compareTo(BigDecimal.ZERO) <= 0) {
user.setWxAmount(BigDecimal.ZERO); user.setWxAmount(BigDecimal.ZERO);
user.setGiftAmount(BigDecimal.ZERO); user.setGiftAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO); user.setCashAmount(BigDecimal.ZERO);
@ -308,9 +310,9 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal money1 = newMoney.subtract(dishGiftAmount); BigDecimal money1 = newMoney.subtract(dishGiftAmount);
if (money1.compareTo(dishCashAmount) <= 0) { if (money1.compareTo(dishCashAmount) <= 0) {
user.setCashAmount(cashAmount.add(money1)); moneyDO.setCashAmount(cashAmount.add(money1));
} else { } else {
user.setCashAmount(cashAmount.add(dishCashAmount)); moneyDO.setCashAmount(cashAmount.add(dishCashAmount));
BigDecimal money2 = money1.subtract(dishCashAmount); BigDecimal money2 = money1.subtract(dishCashAmount);
if (money2.compareTo(dishWxAmount) <= 0) { if (money2.compareTo(dishWxAmount) <= 0) {
user.setWxAmount(wxAmount.add(money2)); user.setWxAmount(wxAmount.add(money2));
@ -322,10 +324,10 @@ public class DeductionServiceImpl implements DeductionService {
} }
} }
userService.updateById(user); userService.updateById(user);
newMoney2 = user.getMoney(); moneyService.updateById(moneyDO);
wxNewMoney = user.getWxAmount(); wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount(); giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount(); cashNewMoney = moneyDO.getCashAmount();
name = user.getNickname(); name = user.getNickname();
} }
@ -336,19 +338,17 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setType(CostTypeEnum.REFUND.getCode()); cardDO.setType(CostTypeEnum.REFUND.getCode());
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney2);
cardDO.setCashAmount(cashNewMoney); cardDO.setCashAmount(cashNewMoney);
cardDO.setCarteenId(dishOrderDO.getStoreId());
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
//更新redis //更新redis
updateRedis(userId,name,newMoney2); updateRedis(userId, name, wxNewMoney);
} }
@Override @Override
public void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount) { public void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount, Long storeId) {
BigDecimal newMoney;
BigDecimal giftNewAmount; BigDecimal giftNewAmount;
BigDecimal cashNewAmount; BigDecimal cashNewAmount;
BigDecimal wxNewAmount; BigDecimal wxNewAmount;
@ -356,16 +356,17 @@ public class DeductionServiceImpl implements DeductionService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
user.setMoney(user.getMoney().add(money)); MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
user.setCashAmount(user.getCashAmount().add(cashAmount));
moneyDO.setCashAmount(moneyDO.getCashAmount().add(cashAmount));
user.setGiftAmount(user.getGiftAmount().add(giftAmount)); user.setGiftAmount(user.getGiftAmount().add(giftAmount));
user.setWxAmount(user.getWxAmount().add(wxAmount)); user.setWxAmount(user.getWxAmount().add(wxAmount));
userService.updateById(user); userService.updateById(user);
moneyService.updateById(moneyDO);
newMoney = user.getMoney();
wxNewAmount = user.getWxAmount(); wxNewAmount = user.getWxAmount();
giftNewAmount = user.getGiftAmount(); giftNewAmount = user.getGiftAmount();
cashNewAmount = user.getCashAmount(); cashNewAmount = moneyDO.getCashAmount();
name = user.getNickname(); name = user.getNickname();
} }
CardDO cardDO = new CardDO(); CardDO cardDO = new CardDO();
@ -373,40 +374,42 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setFlag(CardDO.ADD); cardDO.setFlag(CardDO.ADD);
cardDO.setChangeMoney(money); cardDO.setChangeMoney(money);
cardDO.setType(CostTypeEnum.REFUND.getCode()); cardDO.setType(CostTypeEnum.REFUND.getCode());
cardDO.setMoney(newMoney);
cardDO.setWxAmount(wxNewAmount); cardDO.setWxAmount(wxNewAmount);
cardDO.setCashAmount(cashNewAmount); cardDO.setCashAmount(cashNewAmount);
cardDO.setGiftAmount(giftNewAmount); cardDO.setGiftAmount(giftNewAmount);
cardDO.setCarteenId(storeId);
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
//更新redis //更新redis
updateRedis(userId,name,newMoney); updateRedis(userId, name, wxNewAmount);
} }
@Override @Override
public BigDecimal storeDeduction(BigDecimal total, @NotNull Long userId) { public BigDecimal storeDeduction(BigDecimal total, @NotNull Long userId, Long storeId) {
BigDecimal newMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
BigDecimal cashNewMoney; BigDecimal cashNewMoney;
String name; String name;
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
BigDecimal money = user.getMoney(); MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = moneyDO.getCashAmount();
BigDecimal money = wxAmount.add(giftAmount).add(cashAmount);
if (total.compareTo(money) > 0) { if (total.compareTo(money) > 0) {
return money.subtract(total); return money.subtract(total);
} }
BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = user.getCashAmount();
user.setMoney(money.subtract(total));
//计算金额 //计算金额
if (total.compareTo(cashAmount) <= 0) { if (total.compareTo(cashAmount) <= 0) {
user.setCashAmount(cashAmount.subtract(total)); moneyDO.setCashAmount(cashAmount.subtract(total));
} else { } else {
user.setCashAmount(BigDecimal.ZERO); moneyDO.setCashAmount(BigDecimal.ZERO);
BigDecimal total1 = total.subtract(cashAmount); BigDecimal total1 = total.subtract(cashAmount);
if (total1.compareTo(giftAmount) <= 0) { if (total1.compareTo(giftAmount) <= 0) {
user.setGiftAmount(giftAmount.subtract(total1)); user.setGiftAmount(giftAmount.subtract(total1));
@ -417,10 +420,11 @@ public class DeductionServiceImpl implements DeductionService {
} }
} }
userService.updateById(user); userService.updateById(user);
newMoney = user.getMoney(); moneyService.updateById(moneyDO);
wxNewMoney = user.getWxAmount(); wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount(); giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount(); cashNewMoney = moneyDO.getCashAmount();
name = user.getNickname(); name = user.getNickname();
} }
@ -428,18 +432,18 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setUserId(userId); cardDO.setUserId(userId);
cardDO.setChangeMoney(total); cardDO.setChangeMoney(total);
cardDO.setFlag(CardDO.MINUS); cardDO.setFlag(CardDO.MINUS);
cardDO.setMoney(newMoney);
cardDO.setType(CostTypeEnum.SHOPPING.getCode()); cardDO.setType(CostTypeEnum.SHOPPING.getCode());
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
cardDO.setCashAmount(cashNewMoney); cardDO.setCashAmount(cashNewMoney);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setCarteenId(storeId);
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
//更新redis //更新redis
updateRedis(userId,name,newMoney); updateRedis(userId, name, wxNewMoney);
return cardDO.getMoney(); return wxNewMoney.add(giftNewMoney).add(cashNewMoney);
} }
@ -453,8 +457,8 @@ public class DeductionServiceImpl implements DeductionService {
} }
@Override @Override
public void deduct(Long userId, BigDecimal money, String type) { public void deduct(Long userId, BigDecimal money, String type,Long storeId) {
BigDecimal newMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
BigDecimal cashNewMoney; BigDecimal cashNewMoney;
@ -462,23 +466,25 @@ public class DeductionServiceImpl implements DeductionService {
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId); MemberUserDO user = userService.getUser(userId);
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
if (user.getMoney().compareTo(money) < 0) { if (user.getMoney().compareTo(money) < 0) {
if (CHECK_LIST.contains(type)) { if (CHECK_LIST.contains(type)) {
throw exception(CASH_AMOUNT_NOT_ENOUGH); throw exception(CASH_AMOUNT_NOT_ENOUGH);
} }
user.setWxAmount(BigDecimal.ZERO); user.setWxAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO); moneyDO.setCashAmount(BigDecimal.ZERO);
user.setGiftAmount(BigDecimal.ZERO); user.setGiftAmount(BigDecimal.ZERO);
} else { } else {
BigDecimal wxAmount = user.getWxAmount(); BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount(); BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = user.getCashAmount(); BigDecimal cashAmount = moneyDO.getCashAmount();
//计算金额 //计算金额
if (money.compareTo(cashAmount) <= 0) { if (money.compareTo(cashAmount) <= 0) {
user.setCashAmount(cashAmount.subtract(money)); moneyDO.setCashAmount(cashAmount.subtract(money));
} else { } else {
user.setCashAmount(BigDecimal.ZERO); moneyDO.setCashAmount(BigDecimal.ZERO);
BigDecimal total1 = money.subtract(cashAmount); BigDecimal total1 = money.subtract(cashAmount);
if (total1.compareTo(giftAmount) <= 0) { if (total1.compareTo(giftAmount) <= 0) {
user.setGiftAmount(giftAmount.subtract(total1)); user.setGiftAmount(giftAmount.subtract(total1));
@ -489,13 +495,12 @@ public class DeductionServiceImpl implements DeductionService {
} }
} }
} }
user.setMoney(user.getMoney().subtract(money));
userService.updateById(user); userService.updateById(user);
newMoney = user.getMoney(); moneyService.updateById(moneyDO);
wxNewMoney = user.getWxAmount(); wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount(); giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount(); cashNewMoney = moneyDO.getCashAmount();
name = user.getNickname(); name = user.getNickname();
} }
@ -506,12 +511,13 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setType(type); cardDO.setType(type);
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewMoney); cardDO.setCashAmount(cashNewMoney);
cardDO.setCarteenId(storeId);
cardService.insertOne(cardDO); cardService.insertOne(cardDO);
//更新redis //更新redis
updateRedis(userId,name,newMoney); updateRedis(userId, name, wxNewMoney);
} }
} }

View File

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.rechargelog.RechargeLogDO; import cn.iocoder.yudao.module.member.dal.dataobject.rechargelog.RechargeLogDO;
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO; import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
@ -15,6 +16,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.rechargelog.RechargeLogMapper;
import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper; import cn.iocoder.yudao.module.member.dal.mysql.refund.IntegralRefundMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum; import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
@ -50,56 +52,85 @@ public class WxRechargeServiceImpl implements WxRechargeService {
@Resource @Resource
private RechargeLogMapper rechargeLogMapper; private RechargeLogMapper rechargeLogMapper;
@Resource @Resource
private MoneyService moneyService;
@Resource
private StringRedisTemplate wxRechargeRedisTemplate; private StringRedisTemplate wxRechargeRedisTemplate;
@Override @Override
public void wxRecharge(BigDecimal money, BigDecimal wxAmount, BigDecimal giftAmount, Long userId) { public void wxRecharge(BigDecimal money, BigDecimal wxAmount, BigDecimal giftAmount, Long userId) {
BigDecimal newMoney;
BigDecimal wxNewMoney; BigDecimal wxNewMoney;
BigDecimal giftNewMoney; BigDecimal giftNewMoney;
BigDecimal cashNewAmount;
String name; String name;
synchronized (getUserLock(userId)) { synchronized (getUserLock(userId)) {
//获取最新余额 //获取最新余额
MemberUserDO memberUserDO = userMapper.selectById(userId); MemberUserDO memberUserDO = userMapper.selectById(userId);
List<MoneyDO> allDebt = moneyService.getAllDebt(userId);
BigDecimal oldMoney = memberUserDO.getMoney(); BigDecimal debtAmount = BigDecimal.ZERO;
if(CollectionUtil.isNotEmpty(allDebt)){
debtAmount = allDebt.stream().map(MoneyDO::getDebtAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
}
BigDecimal wxOldMoney = memberUserDO.getWxAmount(); BigDecimal wxOldMoney = memberUserDO.getWxAmount();
BigDecimal giftOldMoney = memberUserDO.getGiftAmount(); BigDecimal giftOldMoney = memberUserDO.getGiftAmount();
BigDecimal cashAmount = memberUserDO.getCashAmount();
memberUserDO.setMoney(oldMoney.add(money)); BigDecimal computeMoney = money;
memberUserDO.setCashAmount(cashAmount); //处理负债
memberUserDO.setGiftAmount(giftOldMoney); if( computeMoney.add(debtAmount).compareTo(BigDecimal.ZERO) < 0){
memberUserDO.setWxAmount(wxOldMoney);
if (memberUserDO.getMoney().compareTo(BigDecimal.ZERO) > 0) {
if (oldMoney.compareTo(BigDecimal.ZERO) < 0) {
if (wxAmount.add(oldMoney).compareTo(BigDecimal.ZERO) >= 0) {
memberUserDO.setWxAmount(wxAmount.add(oldMoney));
memberUserDO.setGiftAmount(giftOldMoney.add(giftAmount));
} else {
BigDecimal left = wxAmount.add(oldMoney);
memberUserDO.setWxAmount(BigDecimal.ZERO); memberUserDO.setWxAmount(BigDecimal.ZERO);
memberUserDO.setGiftAmount(giftAmount.add(left)); memberUserDO.setGiftAmount(BigDecimal.ZERO);
}
} else {
memberUserDO.setWxAmount(wxOldMoney.add(wxAmount));
memberUserDO.setGiftAmount(giftOldMoney.add(giftAmount));
BigDecimal computeWxMoney = wxAmount;
BigDecimal computeGiftMoney = giftAmount;
for (MoneyDO moneyDO : allDebt) {
if (computeMoney.add(moneyDO.getDebtAmount()).compareTo(BigDecimal.ZERO) >= 0) {
BigDecimal debtAmount1 = moneyDO.getDebtAmount();
computeMoney = computeMoney.add(debtAmount1);
moneyDO.setDebtAmount(BigDecimal.ZERO);
//处理未完全支付订单
BigDecimal paramWxMoney = BigDecimal.ZERO;
BigDecimal paramGiftMoney = BigDecimal.ZERO;
if(computeWxMoney.add(moneyDO.getDebtAmount()).compareTo(BigDecimal.ZERO)>=0){
computeWxMoney = computeWxMoney.add(moneyDO.getDebtAmount());
paramWxMoney = debtAmount1;
}else {
paramWxMoney = computeWxMoney;
paramGiftMoney = debtAmount1.abs().subtract(paramWxMoney);
computeWxMoney = BigDecimal.ZERO;
computeGiftMoney = computeGiftMoney.add(moneyDO.getDebtAmount());
}
handleOrderWx(userId, debtAmount1, paramWxMoney, paramGiftMoney,moneyDO.getCarteenId());
}else {
moneyDO.setDebtAmount(computeMoney.add(moneyDO.getDebtAmount()));
//处理未完全支付订单
handleOrderWx(userId, computeMoney, computeWxMoney, computeGiftMoney,moneyDO.getCarteenId());
break;
}
}
moneyService.updateList(allDebt);
}else {
moneyService.cleanDebt(userId);
//处理未完全支付订单
handleOrderWx(userId, money, wxAmount, giftAmount,null);
if(wxAmount.add(debtAmount).compareTo(BigDecimal.ZERO) >= 0){
memberUserDO.setWxAmount(wxAmount.add(debtAmount).add(wxOldMoney));
memberUserDO.setGiftAmount(giftAmount.add(giftOldMoney));
}else {
memberUserDO.setWxAmount(BigDecimal.ZERO);
memberUserDO.setGiftAmount(money.add(debtAmount));
} }
} }
userMapper.updateById(memberUserDO); userMapper.updateById(memberUserDO);
newMoney = memberUserDO.getMoney();
wxNewMoney = memberUserDO.getWxAmount(); wxNewMoney = memberUserDO.getWxAmount();
giftNewMoney = memberUserDO.getGiftAmount(); giftNewMoney = memberUserDO.getGiftAmount();
cashNewAmount = memberUserDO.getCashAmount();
name = memberUserDO.getNickname(); name = memberUserDO.getNickname();
} }
@ -110,24 +141,21 @@ public class WxRechargeServiceImpl implements WxRechargeService {
cardDO.setFlag(CardDO.ADD); cardDO.setFlag(CardDO.ADD);
cardDO.setChangeMoney(money); cardDO.setChangeMoney(money);
cardDO.setType(CostTypeEnum.WX_PAY.getCode()); cardDO.setType(CostTypeEnum.WX_PAY.getCode());
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewAmount);
cardDO.setGiftAmount(giftNewMoney); cardDO.setGiftAmount(giftNewMoney);
cardDO.setWxAmount(wxNewMoney); cardDO.setWxAmount(wxNewMoney);
//处理未完全支付订单
handleOrderWx(cardDO.getUserId(), money, wxAmount, giftAmount);
cardMapper.insert(cardDO); cardMapper.insert(cardDO);
//更新缓存 //更新缓存
String redisKey = "USER_" + userId; String redisKey = "USER_" + userId;
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO(); AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
appUserInfoCardVO.setName(name); appUserInfoCardVO.setName(name);
appUserInfoCardVO.setMoney(newMoney); appUserInfoCardVO.setMoney(wxNewMoney);
wxRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO)); wxRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
} }
void handleOrderWx(Long userId, BigDecimal money, BigDecimal wxMoney, BigDecimal giftMoney) { void handleOrderWx(Long userId, BigDecimal money, BigDecimal wxMoney, BigDecimal giftMoney,Long storeId) {
//开始的微信金额 //开始的微信金额
BigDecimal wxStart = wxMoney; BigDecimal wxStart = wxMoney;
@ -136,7 +164,8 @@ public class WxRechargeServiceImpl implements WxRechargeService {
//查询出所有未完全支付订单 //查询出所有未完全支付订单
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery() List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
.eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)); .eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)
.eq(storeId != null ,DishOrderDO::getStoreId,storeId));
ArrayList<DishOrderDO> updateList = new ArrayList<>(); ArrayList<DishOrderDO> updateList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(dishOrderDOS)) { if (CollectionUtil.isNotEmpty(dishOrderDOS)) {

View File

@ -11,7 +11,6 @@ import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* 余额变动明细 Service 接口 * 余额变动明细 Service 接口
@ -74,12 +73,12 @@ public interface CardService {
/** /**
* 获取余额 * 获取余额
*/ */
BigDecimal getMoney(); BigDecimal getMoney(Long storeId);
/** /**
* 获取余额 * 获取余额
*/ */
BigDecimal getMoneyByUserId(Long userId); BigDecimal getMoneyByUserId(Long userId,Long storeId);
CardDO getCardDoByUserId(Long userId); CardDO getCardDoByUserId(Long userId);
@ -96,7 +95,7 @@ public interface CardService {
void refund(Long userId,BigDecimal money,Long orderId); void refund(Long userId,BigDecimal money,Long orderId);
BigDecimal getCashMoney(Long userId); BigDecimal getCashMoney(Long userId,Long storeId);
Boolean cashDraw(Long userId,BigDecimal money); Boolean cashDraw(Long userId,BigDecimal money,Long storeId);
} }

View File

@ -143,13 +143,13 @@ public class CardServiceImpl implements CardService {
} }
@Override @Override
public BigDecimal getMoney() { public BigDecimal getMoney(Long storeId) {
return amountService.getAmount( SecurityFrameworkUtils.getLoginUserId()); return amountService.getAmount(SecurityFrameworkUtils.getLoginUserId(),storeId);
} }
@Override @Override
public BigDecimal getMoneyByUserId(Long userId) { public BigDecimal getMoneyByUserId(Long userId,Long storeId) {
return amountService.getAmount(userId); return amountService.getAmount(userId,storeId);
} }
@Override @Override
@ -192,7 +192,7 @@ public class CardServiceImpl implements CardService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void rechargeByAdmin(RechargeVO vo) { public void rechargeByAdmin(RechargeVO vo) {
cashRechargeService.rechargeByAdmin(vo.getUserIds(),vo.getGroupId(),vo.getMoney()); cashRechargeService.rechargeByAdmin(vo.getUserIds(),vo.getGroupId(),vo.getMoney(),vo.getCarteenId());
} }
@ -425,13 +425,13 @@ public class CardServiceImpl implements CardService {
} }
@Override @Override
public BigDecimal getCashMoney(Long userId) { public BigDecimal getCashMoney(Long userId,Long storeId) {
return amountService.getCashAmount(userId); return amountService.getCashAmount(userId,storeId);
} }
@Override @Override
public Boolean cashDraw(Long userId, BigDecimal money) { public Boolean cashDraw(Long userId, BigDecimal money, Long storeId) {
deductionService.cashDraw(userId, money, CostTypeEnum.CASH_WITHDRAW.getCode()); deductionService.cashDraw(userId, money, CostTypeEnum.CASH_WITHDRAW.getCode(), storeId);
return true; return true;
} }

View File

@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.member.controller.app.diningplates.vo.AppUserInfo
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.admincard.AdminCardDO; import cn.iocoder.yudao.module.member.dal.dataobject.admincard.AdminCardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper; import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
@ -24,6 +25,7 @@ import cn.iocoder.yudao.module.member.service.admincard.AdminCardService;
import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.amount.DeductionService;
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService; import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
import cn.iocoder.yudao.module.member.service.card.CardService; import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import cn.iocoder.yudao.module.member.util.MemberConstants; import cn.iocoder.yudao.module.member.util.MemberConstants;
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto; import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
@ -83,6 +85,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
private MemberAsyncService asyncService; private MemberAsyncService asyncService;
@Resource @Resource
private DeductionService deductionService; private DeductionService deductionService;
@Resource
private MoneyService moneyService;
@Override @Override
public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) { public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) {
@ -373,8 +377,7 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
wrapper.eq(DishOrderDO::getOrderStatus,DishOrderDO.TOCOMPLETE); wrapper.eq(DishOrderDO::getOrderStatus,DishOrderDO.TOCOMPLETE);
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(wrapper); List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(wrapper);
BigDecimal moneyByUserId = cardService.getMoneyByUserId(userId); ErrorCode code = new ErrorCode(1_004_099_008, "存在未支付完的订单");
ErrorCode code = new ErrorCode(1_004_099_008, "存在未支付完的订单,待支付金额:"+moneyByUserId.abs()+"");
if(CollectionUtil.isNotEmpty(dishOrderDOS)){ if(CollectionUtil.isNotEmpty(dishOrderDOS)){
throw exception(code); throw exception(code);
} }
@ -477,11 +480,13 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
DishesRespDto dish = dishesApi.getDish(dishId); DishesRespDto dish = dishesApi.getDish(dishId);
MoneyDO moneyDO = moneyService.getMoney(memberUserDO.getId(), storeId);
AppUserInfo appUserInfo = new AppUserInfo(); AppUserInfo appUserInfo = new AppUserInfo();
appUserInfo.setNickname(StrUtil.isNotBlank(memberUserDO.getName())?memberUserDO.getName():memberUserDO.getNickname()) appUserInfo.setNickname(StrUtil.isNotBlank(memberUserDO.getName())?memberUserDO.getName():memberUserDO.getNickname())
.setDishesName(dish.getDishesName()) .setDishesName(dish.getDishesName())
.setDishesBasePrice(dish.getDishesBasePrice()).setDishesSumPrice(dish.getDishesSumPrice()) .setDishesBasePrice(dish.getDishesBasePrice()).setDishesSumPrice(dish.getDishesSumPrice())
.setMoney(memberUserDO.getMoney()) .setMoney(memberUserDO.getWxAmount().add(moneyDO.getCashAmount()))
.setOrderMoney(new BigDecimal(stringRedisTemplate.opsForValue().get(diningPlatesNum+"-"+storeId))) .setOrderMoney(new BigDecimal(stringRedisTemplate.opsForValue().get(diningPlatesNum+"-"+storeId)))
.setReception(memberUserDO.getReception()).setLimitAmount(memberUserDO.getLimitAmount()); .setReception(memberUserDO.getReception()).setLimitAmount(memberUserDO.getLimitAmount());
return appUserInfo; return appUserInfo;

View File

@ -131,4 +131,6 @@ public interface MemberGroupService {
void updateAdmin(MemberGroupUpdateReqVO updateReqVO); void updateAdmin(MemberGroupUpdateReqVO updateReqVO);
void setAdmin(GroupAdminReqVO vo); void setAdmin(GroupAdminReqVO vo);
Long getCarteenId(Long userId);
} }

View File

@ -124,7 +124,7 @@ public class MemberGroupServiceImpl implements MemberGroupService {
List<MemberUserDO> list = memberGroupMapper.getMemberByGroupId(vo); List<MemberUserDO> list = memberGroupMapper.getMemberByGroupId(vo);
ArrayList<MemberUserVO> userList = new ArrayList<>(); ArrayList<MemberUserVO> userList = new ArrayList<>();
for (MemberUserDO memberUserDO:list){ for (MemberUserDO memberUserDO:list){
BigDecimal money = cardService.getMoneyByUserId(memberUserDO.getId()); BigDecimal money = cardService.getMoneyByUserId(memberUserDO.getId(),vo.getCarteenId());
MemberUserVO memberUserVO = new MemberUserVO(); MemberUserVO memberUserVO = new MemberUserVO();
BeanUtil.copyProperties(memberUserDO,memberUserVO); BeanUtil.copyProperties(memberUserDO,memberUserVO);
memberUserVO.setMoney(money); memberUserVO.setMoney(money);
@ -197,4 +197,9 @@ public class MemberGroupServiceImpl implements MemberGroupService {
wrapper.set(MemberGroupDO::getUserId, vo.getUserId()).in(MemberGroupDO::getId, vo.getGroupIds()); wrapper.set(MemberGroupDO::getUserId, vo.getUserId()).in(MemberGroupDO::getId, vo.getGroupIds());
memberGroupMapper.update(wrapper); memberGroupMapper.update(wrapper);
} }
@Override
public Long getCarteenId(Long userId) {
return memberGroupMapper.getCarteenId(userId);
}
} }

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.service.money; package cn.iocoder.yudao.module.member.service.money;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import javax.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.member.controller.admin.money.vo.*; import cn.iocoder.yudao.module.member.controller.admin.money.vo.*;
@ -52,4 +53,20 @@ public interface MoneyService {
*/ */
PageResult<MoneyDO> getMoneyPage(MoneyPageReqVO pageReqVO); PageResult<MoneyDO> getMoneyPage(MoneyPageReqVO pageReqVO);
/**
* 获得金额
*
* @return 金额
*/
MoneyDO getMoney(Long userId, Long carteenId);
List<MoneyDO> getAllDebt(Long userId);
void updateById(MoneyDO moneyDO);
void insertOne(MoneyDO moneyDO);
void updateList(List<MoneyDO> moneyDOs);
void cleanDebt(Long userId);
} }

View File

@ -1,10 +1,15 @@
package cn.iocoder.yudao.module.member.service.money; package cn.iocoder.yudao.module.member.service.money;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.member.controller.admin.money.vo.*; import cn.iocoder.yudao.module.member.controller.admin.money.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO; import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
@ -71,4 +76,35 @@ public class MoneyServiceImpl implements MoneyService {
return moneyMapper.selectPage(pageReqVO); return moneyMapper.selectPage(pageReqVO);
} }
@Override
public MoneyDO getMoney(Long userId, Long carteenId) {
return moneyMapper.selectOne(new LambdaQueryWrapper<MoneyDO>().eq(MoneyDO::getUserId, userId).eq(MoneyDO::getCarteenId, carteenId));
}
@Override
public List<MoneyDO> getAllDebt(Long userId) {
return moneyMapper.selectList(new LambdaQueryWrapper<MoneyDO>().eq(MoneyDO::getUserId, userId));
}
@Override
public void updateById(MoneyDO moneyDO) {
moneyMapper.updateById(moneyDO);
}
@Override
public void insertOne(MoneyDO moneyDO) {
moneyMapper.insert(moneyDO);
}
@Override
public void updateList(List<MoneyDO> moneyDOs) {
moneyMapper.updateBatch(moneyDOs);
}
@Override
public void cleanDebt(Long userId) {
moneyMapper.update(new LambdaUpdateWrapper<MoneyDO>().eq(MoneyDO::getUserId, userId)
.set(MoneyDO::getDebtAmount, BigDecimal.ZERO));
}
} }

View File

@ -119,7 +119,7 @@ public interface OrderService {
* @Date: 2024/4/24 上午9:52 * @Date: 2024/4/24 上午9:52
* @return * @return
*/ */
OrderMoneyRespVO getUserMeney(Long userId); OrderMoneyRespVO getUserMeney(Long userId,Long carteenId);
Map<String,Object> getMoneyAndPeople(Long storeId); Map<String,Object> getMoneyAndPeople(Long storeId);

View File

@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppPageVo; import cn.iocoder.yudao.module.member.controller.app.order.vo.AppPageVo;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO; import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.money.MoneyDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO; import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@ -32,6 +33,7 @@ import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.amount.DeductionService;
import cn.iocoder.yudao.module.member.service.business.BusinessService; import cn.iocoder.yudao.module.member.service.business.BusinessService;
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService; import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
import cn.iocoder.yudao.module.member.service.money.MoneyService;
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService; import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
import cn.iocoder.yudao.module.member.service.refund.RefundService; import cn.iocoder.yudao.module.member.service.refund.RefundService;
import cn.iocoder.yudao.module.member.util.MemberConstants; import cn.iocoder.yudao.module.member.util.MemberConstants;
@ -90,6 +92,8 @@ public class OrderServiceImpl implements OrderService {
private DeductionService deductionService; private DeductionService deductionService;
@Resource @Resource
private DiningPlatesService diningPlatesService; private DiningPlatesService diningPlatesService;
@Resource
private MoneyService moneyService;
@Override @Override
public Long createOrder(AppOrderSaveReqVO createReqVO) { public Long createOrder(AppOrderSaveReqVO createReqVO) {
@ -387,30 +391,42 @@ public class OrderServiceImpl implements OrderService {
/** /**
* @param userId * @param userId
* @param carteenId
* @return * @return
* @Description: 根据会员编号,获得会员余额,充值金额,消费金额 * @Description: 根据会员编号,获得会员余额,充值金额,消费金额
* @Author: qjq * @Author: qjq
* @Date: 2024/4/24 上午9:52 * @Date: 2024/4/24 上午9:52
*/ */
@Override @Override
public OrderMoneyRespVO getUserMeney(Long userId) { public OrderMoneyRespVO getUserMeney(Long userId, Long carteenId) {
OrderMoneyRespVO orderMoneyRespVO = new OrderMoneyRespVO(); OrderMoneyRespVO orderMoneyRespVO = new OrderMoneyRespVO();
//获取充值的金额 //获取充值的金额
BigDecimal add = cardMapper.selectAddMoney(userId, CardDO.ADD); BigDecimal add = cardMapper.selectAddMoney(userId, CardDO.ADD,carteenId);
if (add == null) { if (add == null) {
add = BigDecimal.ZERO; add = BigDecimal.ZERO;
} }
orderMoneyRespVO.setRechargeMoney(add); orderMoneyRespVO.setRechargeMoney(add);
//消费的金额 //消费的金额
BigDecimal minus = cardMapper.selectAddMoney(userId, CardDO.MINUS); BigDecimal minus = cardMapper.selectAddMoney(userId, CardDO.MINUS,carteenId);
if (minus == null) { if (minus == null) {
minus = BigDecimal.ZERO; minus = BigDecimal.ZERO;
} }
orderMoneyRespVO.setConsumeMoney(minus); orderMoneyRespVO.setConsumeMoney(minus);
//获取会员余额 //获取会员余额
BigDecimal subtract = add.subtract(minus); MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
orderMoneyRespVO.setCurrentMoney(subtract); orderMoneyRespVO.setCurrentMoney(memberUserDO.getWxAmount());
orderMoneyRespVO.setUserId(userId); orderMoneyRespVO.setUserId(userId);
MoneyDO moneyDO = moneyService.getMoney(userId, carteenId);
orderMoneyRespVO.setCashMoney(BigDecimal.ZERO);
orderMoneyRespVO.setDebtMoney(BigDecimal.ZERO);
if(ObjectUtil.isNotEmpty(moneyDO)){
orderMoneyRespVO.setCashMoney(moneyDO.getCashAmount());
orderMoneyRespVO.setDebtMoney(moneyDO.getDebtAmount());
}
BigDecimal wxRechargeMoney = cardMapper.selectWxMoney(userId);
orderMoneyRespVO.setWxRechargeMoney(wxRechargeMoney);
return orderMoneyRespVO; return orderMoneyRespVO;
} }
@ -467,7 +483,7 @@ public class OrderServiceImpl implements OrderService {
} }
//退款 //退款
deductionService.reduction(dishOrderDO.getUserId(), money, giftAmount, cashAmount, wxAmount); deductionService.reduction(dishOrderDO.getUserId(), money, giftAmount, cashAmount, wxAmount, dishOrderDO.getStoreId());
//更新营业数据 //更新营业数据
if (dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)) { if (dishOrderDO.getOrderStatus().equals(DishOrderDO.COMPLETE)) {
@ -532,7 +548,7 @@ public class OrderServiceImpl implements OrderService {
orderDetailDO.setDishesId(-1L); orderDetailDO.setDishesId(-1L);
orderDetailService.insertOne(orderDetailDO); orderDetailService.insertOne(orderDetailDO);
//扣费处理 //扣费处理
deductionService.deduct(memberUserDO.getId(), money, type); deductionService.deduct(memberUserDO.getId(), money, type,carteenId);
//更新营业数据 //更新营业数据
StatisticsVo statisticsVo = new StatisticsVo(); StatisticsVo statisticsVo = new StatisticsVo();
statisticsVo.setCarteenId(dishOrderDO.getStoreId()); statisticsVo.setCarteenId(dishOrderDO.getStoreId());

View File

@ -1,47 +1,32 @@
package cn.iocoder.yudao.module.member.service.orderspacecapsule; package cn.iocoder.yudao.module.member.service.orderspacecapsule;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.exception.ErrorCode; import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.*; import cn.iocoder.yudao.module.member.controller.admin.orderspacecapsule.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO; import cn.iocoder.yudao.module.member.dal.dataobject.spacecapsule.SpaceCapsuleDO;
import cn.iocoder.yudao.module.member.dal.dataobject.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper; import cn.iocoder.yudao.module.member.dal.mysql.orderspacecapsule.OrderSpaceCapsuleMapper;
import cn.iocoder.yudao.module.member.dal.mysql.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderMapper;
import cn.iocoder.yudao.module.member.enums.*; import cn.iocoder.yudao.module.member.enums.*;
import cn.iocoder.yudao.module.member.service.amount.DeductionService; import cn.iocoder.yudao.module.member.service.amount.DeductionService;
import cn.iocoder.yudao.module.member.service.carteenmoney.CarteenMoneyService;
import cn.iocoder.yudao.module.member.service.spacecapsule.SpaceCapsuleService; import cn.iocoder.yudao.module.member.service.spacecapsule.SpaceCapsuleService;
import cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderService; import cn.iocoder.yudao.module.member.service.statisticsspacecapsuleorder.StatisticsSpaceCapsuleOrderService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService; import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.validation.Valid;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -99,7 +84,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
BigDecimal multiply = orderSpaceCapsule.getComboPrice().multiply(BigDecimal.valueOf(orderSpaceCapsule.getComboNum())); BigDecimal multiply = orderSpaceCapsule.getComboPrice().multiply(BigDecimal.valueOf(orderSpaceCapsule.getComboNum()));
orderSpaceCapsule.setMoney(multiply); orderSpaceCapsule.setMoney(multiply);
// 扣除余额 // 扣除余额
deductionService.deduct(orderSpaceCapsule.getUserId(), orderSpaceCapsule.getMoney(), CostTypeEnum.SHOPPING.getCode()); deductionService.deduct(orderSpaceCapsule.getUserId(), orderSpaceCapsule.getMoney(), CostTypeEnum.SHOPPING.getCode(),createReqVO.getCarteenId());
// 设置变动后的余额 // 设置变动后的余额
orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney())); orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney()));
// 设置支付方式 // 设置支付方式
@ -169,7 +154,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
BigDecimal refundAmount = calculateRefundAmount(updateObj, currentStatus); BigDecimal refundAmount = calculateRefundAmount(updateObj, currentStatus);
updateObj.setRefundMoney(refundAmount); updateObj.setRefundMoney(refundAmount);
// 进行余额退款 // 进行余额退款
deductionService.reduction(updateObj.getUserId(), refundAmount, BigDecimal.ZERO, refundAmount, BigDecimal.ZERO); deductionService.reduction(updateObj.getUserId(), refundAmount, BigDecimal.ZERO, refundAmount, BigDecimal.ZERO, null);
// 设置变动后的余额 // 设置变动后的余额
updateObj.setEndMoney(startMoney.add(refundAmount)); updateObj.setEndMoney(startMoney.add(refundAmount));
} }

View File

@ -55,7 +55,6 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -187,7 +186,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
Double totalPrice = storeOrderDO.getTotalPrice(); Double totalPrice = storeOrderDO.getTotalPrice();
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
MemberUserDO userDO = userService.getByFaceId(Long.valueOf(dto.getOpenId())); MemberUserDO userDO = userService.getByFaceId(Long.valueOf(dto.getOpenId()));
BigDecimal compute = compute(total, userDO.getId()); BigDecimal compute = compute(total, userDO.getId(), storeOrderDO.getCarteenId());
UserInfoVo userInfoVo = new UserInfoVo(); UserInfoVo userInfoVo = new UserInfoVo();
userInfoVo.setUserName(userDO.getNickname()); userInfoVo.setUserName(userDO.getNickname());
userInfoVo.setAvatar("https://yclhit.com:8896" + userDO.getAvatar()); userInfoVo.setAvatar("https://yclhit.com:8896" + userDO.getAvatar());
@ -198,7 +197,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String cardPay(StoreOrderDto dto) { public String cardPay(StoreOrderDto dto) {
Long storeId = cashregisterinfoApi.getStoreId(dto.getEquipmentCode());
MemberUserDO userDO = userService.getByCardId(dto.getCardNumber()); MemberUserDO userDO = userService.getByCardId(dto.getCardNumber());
if (ObjectUtil.isEmpty(userDO)) { if (ObjectUtil.isEmpty(userDO)) {
return "该卡未绑定用户"; return "该卡未绑定用户";
@ -207,7 +206,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
Double totalPrice = createOrder(dto, StoreOrderStatusEnum.COMPLETE.getCode()).getTotalPrice(); Double totalPrice = createOrder(dto, StoreOrderStatusEnum.COMPLETE.getCode()).getTotalPrice();
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
BigDecimal compute = compute(total, userDO.getId()); BigDecimal compute = compute(total, userDO.getId(),storeId);
if (compute.compareTo(BigDecimal.ZERO) < 0) { if (compute.compareTo(BigDecimal.ZERO) < 0) {
return "false"; return "false";
} else { } else {
@ -262,7 +261,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
Double totalPrice = order.getTotalPrice(); Double totalPrice = order.getTotalPrice();
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
BigDecimal compute = compute(total, user.getId()); BigDecimal compute = compute(total, user.getId(),storeId);
if (compute.compareTo(BigDecimal.ZERO) < 0) { if (compute.compareTo(BigDecimal.ZERO) < 0) {
storeOrderMapper.deleteById(order.getOrderId()); storeOrderMapper.deleteById(order.getOrderId());
orderDetailService.deleteByOrderNo(order.getOrderId()); orderDetailService.deleteByOrderNo(order.getOrderId());
@ -306,8 +305,8 @@ public class StoreOrderServiceImpl implements StoreOrderService {
//todo:订单结算 //todo:订单结算
} }
public BigDecimal compute(BigDecimal total, Long userId) { public BigDecimal compute(BigDecimal total, Long userId,Long storeId) {
return deductionService.storeDeduction(total, userId); return deductionService.storeDeduction(total, userId,storeId);
} }
@Override @Override
@ -327,9 +326,6 @@ public class StoreOrderServiceImpl implements StoreOrderService {
public void reduction(Long orderId, BigDecimal money) { public void reduction(Long orderId, BigDecimal money) {
StoreOrderDO storeOrderDO = storeOrderMapper.selectById(orderId); StoreOrderDO storeOrderDO = storeOrderMapper.selectById(orderId);
Double totalPrice = storeOrderDO.getTotalPrice(); Double totalPrice = storeOrderDO.getTotalPrice();
BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP);
Double reductionPrice = storeOrderDO.getReductionPrice(); Double reductionPrice = storeOrderDO.getReductionPrice();
@ -337,7 +333,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
storeOrderDO.setReductionPrice(reduction.add(money).doubleValue()); storeOrderDO.setReductionPrice(reduction.add(money).doubleValue());
storeOrderDO.setTotalPrice(total.subtract(money).doubleValue()); storeOrderDO.setTotalPrice(total.subtract(money).doubleValue());
storeOrderMapper.updateById(storeOrderDO); storeOrderMapper.updateById(storeOrderDO);
deductionService.reduction(storeOrderDO.getUserId(), money, BigDecimal.ZERO,money, BigDecimal.ZERO); deductionService.reduction(storeOrderDO.getUserId(), money, BigDecimal.ZERO,money, BigDecimal.ZERO, storeOrderDO.getCarteenId());
//营业数据 //营业数据
StatisticsVo statisticsVo = new StatisticsVo(); StatisticsVo statisticsVo = new StatisticsVo();
statisticsVo.setCarteenId(storeOrderDO.getCarteenId()); statisticsVo.setCarteenId(storeOrderDO.getCarteenId());
@ -351,7 +347,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public AddReqVO appCreate(CardDto dto) { public AddReqVO appCreate(CardDto dto) {
BigDecimal amount = amountService.getAmount(dto.getUserId()); BigDecimal amount = amountService.getAmount(dto.getUserId(),dto.getCarteenId());
BigDecimal total = BigDecimal.valueOf(dto.getTotalPrice()); BigDecimal total = BigDecimal.valueOf(dto.getTotalPrice());
if(amount.compareTo(total) < 0){ if(amount.compareTo(total) < 0){
throw exception(AMOUNT_NOT_ENOUGH); throw exception(AMOUNT_NOT_ENOUGH);
@ -386,7 +382,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
orderDetailService.saveBatch(addList); orderDetailService.saveBatch(addList);
//扣款 //扣款
BigDecimal compute = compute(total, dto.getUserId()); BigDecimal compute = compute(total, dto.getUserId(),dto.getCarteenId());
if (compute.compareTo(BigDecimal.ZERO) < 0) { if (compute.compareTo(BigDecimal.ZERO) < 0) {
storeOrderMapper.deleteById(storeOrderDO.getOrderId()); storeOrderMapper.deleteById(storeOrderDO.getOrderId());
orderDetailService.deleteByOrderNo(storeOrderDO.getOrderId()); orderDetailService.deleteByOrderNo(storeOrderDO.getOrderId());
@ -458,7 +454,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
BigDecimal total = BigDecimal.valueOf(sum).setScale(2, RoundingMode.HALF_UP); BigDecimal total = BigDecimal.valueOf(sum).setScale(2, RoundingMode.HALF_UP);
BigDecimal compute = compute(total, user.getId()); BigDecimal compute = compute(total, user.getId(),dto.getCarteenId());
if (compute.compareTo(BigDecimal.ZERO) < 0) { if (compute.compareTo(BigDecimal.ZERO) < 0) {
storeOrderMapper.deleteById(storeOrderDO.getOrderId()); storeOrderMapper.deleteById(storeOrderDO.getOrderId());
orderDetailService.deleteByOrderNo(storeOrderDO.getOrderId()); orderDetailService.deleteByOrderNo(storeOrderDO.getOrderId());
@ -534,7 +530,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
//退款 //退款
deductionService.reduction(storeOrderDO.getUserId(),BigDecimal.valueOf(storeOrderDO.getTotalPrice()) deductionService.reduction(storeOrderDO.getUserId(),BigDecimal.valueOf(storeOrderDO.getTotalPrice())
,BigDecimal.ZERO,BigDecimal.valueOf(storeOrderDO.getTotalPrice()),BigDecimal.ZERO); ,BigDecimal.ZERO,BigDecimal.valueOf(storeOrderDO.getTotalPrice()),BigDecimal.ZERO, storeOrderDO.getCarteenId());
//更新库存 //更新库存
List<StoreOrderDetailDO> listByOrderId = orderDetailService.getListByOrderId(storeOrderDO.getOrderId()); List<StoreOrderDetailDO> listByOrderId = orderDetailService.getListByOrderId(storeOrderDO.getOrderId());
@ -617,7 +613,7 @@ public class StoreOrderServiceImpl implements StoreOrderService {
//退款 //退款
deductionService.reduction(storeOrderDO.getUserId(),BigDecimal.valueOf(storeOrderDO.getTotalPrice()) deductionService.reduction(storeOrderDO.getUserId(),BigDecimal.valueOf(storeOrderDO.getTotalPrice())
,BigDecimal.ZERO,BigDecimal.valueOf(storeOrderDO.getTotalPrice()),BigDecimal.ZERO); ,BigDecimal.ZERO,BigDecimal.valueOf(storeOrderDO.getTotalPrice()),BigDecimal.ZERO, storeOrderDO.getCarteenId());
//更新库存 //更新库存
List<StoreOrderDetailDO> listByOrderId = orderDetailService.getListByOrderId(storeOrderDO.getOrderId()); List<StoreOrderDetailDO> listByOrderId = orderDetailService.getListByOrderId(storeOrderDO.getOrderId());

View File

@ -255,7 +255,7 @@ public interface MemberUserService {
MemberUserDO getByMobile(Long mobile); MemberUserDO getByMobile(Long mobile);
MemberUserDO getByCardId(String cardId); MemberUserDO getByCardId(String cardId);
Map<String,Object> getInfoByCard(String cardId,Long mobile); Map<String,Object> getInfoByCard(String cardId,Long mobile,Long storeId);
boolean delete(Long userId); boolean delete(Long userId);
@ -264,4 +264,5 @@ public interface MemberUserService {
List<MemberUserDO> getByMobiles(List<String> mobiles); List<MemberUserDO> getByMobiles(List<String> mobiles);
List<MemberUserDO> getListByMobile(String mobiles); List<MemberUserDO> getListByMobile(String mobiles);
} }

View File

@ -736,7 +736,7 @@ public class MemberUserServiceImpl implements MemberUserService {
Long userId = diningPlatesDO.getUserId(); Long userId = diningPlatesDO.getUserId();
//获取用户名称 //获取用户名称
MemberUserDO memberUserDO = memberUserMapper.selectById(userId); MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
BigDecimal moneyByUserId = cardService.getMoneyByUserId(userId); BigDecimal moneyByUserId = cardService.getMoneyByUserId(userId,diningPlatesDO.getStoreId());
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
map.put("name",memberUserDO.getName()); map.put("name",memberUserDO.getName());
map.put("money", String.valueOf(moneyByUserId)); map.put("money", String.valueOf(moneyByUserId));
@ -826,14 +826,14 @@ public class MemberUserServiceImpl implements MemberUserService {
} }
@Override @Override
public Map<String, Object> getInfoByCard(String cardId,Long mobile) { public Map<String, Object> getInfoByCard(String cardId,Long mobile,Long storeId) {
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
if(ObjectUtil.isNotEmpty(cardId)){ if(ObjectUtil.isNotEmpty(cardId)){
MemberUserDO byCardId = getByCardId(cardId); MemberUserDO byCardId = getByCardId(cardId);
if(ObjectUtil.isEmpty(byCardId)){ if(ObjectUtil.isEmpty(byCardId)){
throw exception(CARD_USER_NOT_EXISTS); throw exception(CARD_USER_NOT_EXISTS);
} }
BigDecimal money = cardService.getMoneyByUserId(byCardId.getId()); BigDecimal money = cardService.getMoneyByUserId(byCardId.getId(),storeId);
map.put("money",money); map.put("money",money);
map.put("userName",byCardId.getNickname()); map.put("userName",byCardId.getNickname());
} }
@ -842,7 +842,7 @@ public class MemberUserServiceImpl implements MemberUserService {
if(ObjectUtil.isEmpty(byFaceId)){ if(ObjectUtil.isEmpty(byFaceId)){
throw exception(FACE_USER_NOT_EXISTS); throw exception(FACE_USER_NOT_EXISTS);
} }
BigDecimal money = cardService.getMoneyByUserId(byFaceId.getId()); BigDecimal money = cardService.getMoneyByUserId(byFaceId.getId(),storeId);
map.put("money",money); map.put("money",money);
map.put("userName",byFaceId.getNickname()); map.put("userName",byFaceId.getNickname());
} }

View File

@ -86,4 +86,9 @@
</select> </select>
<select id="getCarteenId" resultType="long">
SELECT carteen_id FROM member_group WHERE
id = (select group_id from member_group_member where member_id = #{userId})
</select>
</mapper> </mapper>