修改开票逻辑
This commit is contained in:
@ -49,7 +49,8 @@ public class BillingPageReqVO extends PageParam {
|
|||||||
|
|
||||||
@Schema(description = "备注", example = "随便")
|
@Schema(description = "备注", example = "随便")
|
||||||
private String remark;
|
private String remark;
|
||||||
|
@Schema(description = "门店id")
|
||||||
|
private Long carteenId;
|
||||||
@Schema(description = "拒绝时间")
|
@Schema(description = "拒绝时间")
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
private LocalDateTime[] refuseTime;
|
private LocalDateTime[] refuseTime;
|
||||||
|
@ -69,7 +69,8 @@ public class BillingRespVO {
|
|||||||
@Schema(description = "pdf地址", example = "https://www.iocoder.cn")
|
@Schema(description = "pdf地址", example = "https://www.iocoder.cn")
|
||||||
@ExcelProperty("pdf地址")
|
@ExcelProperty("pdf地址")
|
||||||
private String pdfUrl;
|
private String pdfUrl;
|
||||||
|
@Schema(description = "门店id")
|
||||||
|
private Long carteenId;
|
||||||
@Schema(description = "创建时间")
|
@Schema(description = "创建时间")
|
||||||
@ExcelProperty("创建时间")
|
@ExcelProperty("创建时间")
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
@ -48,7 +48,8 @@ public class BillingSaveReqVO {
|
|||||||
@Schema(description = "0食堂发票,1超市发票,2太空舱发票", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
@Schema(description = "0食堂发票,1超市发票,2太空舱发票", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||||
@NotNull(message = "0食堂发票,1超市发票,2太空舱发票不能为空")
|
@NotNull(message = "0食堂发票,1超市发票,2太空舱发票不能为空")
|
||||||
private Integer billingType;
|
private Integer billingType;
|
||||||
|
@Schema(description = "门店id")
|
||||||
|
private Long carteenId;
|
||||||
@Schema(description = "拒绝理由")
|
@Schema(description = "拒绝理由")
|
||||||
private String refuseDetails;
|
private String refuseDetails;
|
||||||
|
|
||||||
|
@ -12,11 +12,17 @@ import cn.iocoder.yudao.module.member.service.billing.BillingService;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import org.springframework.validation.annotation.Validated;
|
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.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
|
||||||
@Tag(name = "小程序 - 开票记录")
|
@Tag(name = "小程序 - 开票记录")
|
||||||
@ -31,7 +37,7 @@ public class AppBillingController {
|
|||||||
@PostMapping("/create")
|
@PostMapping("/create")
|
||||||
@Operation(summary = "创建开票记录")
|
@Operation(summary = "创建开票记录")
|
||||||
public CommonResult<String> createBilling(@Valid @RequestBody BillingSaveReqVO createReqVO) {
|
public CommonResult<String> createBilling(@Valid @RequestBody BillingSaveReqVO createReqVO) {
|
||||||
return success(billingService.createBillingUnit(createReqVO));
|
return success(billingService.createBilling(createReqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@ -58,13 +64,40 @@ public class AppBillingController {
|
|||||||
}
|
}
|
||||||
@GetMapping("/moeny")
|
@GetMapping("/moeny")
|
||||||
@Operation(summary = "获得开票金额与未开票金额")
|
@Operation(summary = "获得开票金额与未开票金额")
|
||||||
public CommonResult<BillingRespMoneyVO> getBillingPage(@RequestParam("userId")Long userId) {
|
public CommonResult<BillingRespMoneyVO> getBillingPage(@RequestParam("userId")Long userId,@RequestParam("carteenId") Long carteenId) {
|
||||||
return success(billingService.getHaveWithoutMoney(userId));
|
return success(billingService.getHaveWithoutMoney(userId,carteenId));
|
||||||
}
|
}
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得开票记录分页")
|
@Operation(summary = "获得开票记录分页")
|
||||||
public CommonResult<PageResult<BillingRespVO>> getBillingPage(@Valid BillingPageReqVO pageReqVO) {
|
public CommonResult<PageResult<BillingRespVO>> getBillingPage(@Valid BillingPageReqVO pageReqVO) {
|
||||||
|
Long userId = pageReqVO.getUserId();
|
||||||
|
pageReqVO.setUserPhone(billingService.getMemberId(userId));
|
||||||
|
pageReqVO.setUserId(null);
|
||||||
PageResult<BillingDO> pageResult = billingService.getBillingPage(pageReqVO);
|
PageResult<BillingDO> pageResult = billingService.getBillingPage(pageReqVO);
|
||||||
return success(BeanUtils.toBean(pageResult, BillingRespVO.class));
|
return success(BeanUtils.toBean(pageResult, BillingRespVO.class));
|
||||||
}
|
}
|
||||||
|
@GetMapping("/totalMoney")
|
||||||
|
@Operation(summary = "获取月时间段的金额")
|
||||||
|
public CommonResult<BigDecimal> getBillingPage(@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @RequestParam("time") Date time,
|
||||||
|
@RequestParam("billingType") Integer billingType,
|
||||||
|
@RequestParam("carteenId") Long carteenId,
|
||||||
|
@RequestParam("userId")Long userId) {
|
||||||
|
BigDecimal totalMoney = billingService.getTotalMoney(time, billingType, carteenId,userId);
|
||||||
|
return success(totalMoney);
|
||||||
|
}
|
||||||
|
@GetMapping("/data")
|
||||||
|
@Operation(summary = "获取月时间段的订单详情")
|
||||||
|
public CommonResult<Object> getData(@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @RequestParam("time") Date time,
|
||||||
|
@RequestParam("billingType") Integer billingType,
|
||||||
|
@RequestParam("carteenId") Long carteenId,
|
||||||
|
@RequestParam("userId")Long userId) {
|
||||||
|
Object data = billingService.getData(time, billingType, carteenId,userId);
|
||||||
|
return success(data);
|
||||||
|
}
|
||||||
|
@GetMapping("/data")
|
||||||
|
@Operation(summary = "获取月时间段的订单详情")
|
||||||
|
public CommonResult<Map<Integer, Integer>> getBillingTypeTotal(@RequestParam("carteenId") Long carteenId,@RequestParam("userId") Long userId) {
|
||||||
|
Map<Integer, Integer> billingTypeTotal = billingService.getBillingTypeTotal(carteenId, userId);
|
||||||
|
return success(billingTypeTotal);
|
||||||
|
}
|
||||||
}
|
}
|
@ -86,6 +86,10 @@ public class BillingDO extends BaseDO {
|
|||||||
* 发票商品名称
|
* 发票商品名称
|
||||||
*/
|
*/
|
||||||
private String billingName;
|
private String billingName;
|
||||||
|
/**
|
||||||
|
* 门店id
|
||||||
|
*/
|
||||||
|
private Long carteenId;
|
||||||
/**
|
/**
|
||||||
* userid 用json
|
* userid 用json
|
||||||
*/
|
*/
|
||||||
|
@ -50,4 +50,5 @@ public interface DishOrderMapper extends BaseMapperX<DishOrderDO> {
|
|||||||
|
|
||||||
BigDecimal getSaleMoney(@Param("storeId")Long storeId, @Param("time")String time);
|
BigDecimal getSaleMoney(@Param("storeId")Long storeId, @Param("time")String time);
|
||||||
Integer updateByIdBillingExist(@Param("ids")Set<Long> ids,@Param("exist")Boolean exist);
|
Integer updateByIdBillingExist(@Param("ids")Set<Long> ids,@Param("exist")Boolean exist);
|
||||||
|
Integer updateByIdBillingNum(@Param("ids")Set<Long> ids,@Param("num")String num);
|
||||||
}
|
}
|
@ -50,4 +50,5 @@ public interface OrderSpaceCapsuleMapper extends BaseMapperX<OrderSpaceCapsuleDO
|
|||||||
SpaceCapsuleOrderNameRespVO compDay1(@Param("status")Integer status, @Param("start") Date start, @Param("end") Date end,@Param("spId")Long spId);
|
SpaceCapsuleOrderNameRespVO compDay1(@Param("status")Integer status, @Param("start") Date start, @Param("end") Date end,@Param("spId")Long spId);
|
||||||
OrderSpaceCapsuleStatisticsComVo compMoney(@Param("start") Date start, @Param("end") Date end);
|
OrderSpaceCapsuleStatisticsComVo compMoney(@Param("start") Date start, @Param("end") Date end);
|
||||||
Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist);
|
Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist);
|
||||||
|
Integer updateByIdBillingNum (@Param("ids") Set<Long> ids, @Param("num")String num);
|
||||||
}
|
}
|
@ -41,4 +41,5 @@ public interface StoreOrderMapper extends BaseMapperX<StoreOrderDO> {
|
|||||||
|
|
||||||
List<StoreOrderPageVO> getStoreOrderPageNewList(@Param("vo") StoreOrderPageVO vo);
|
List<StoreOrderPageVO> getStoreOrderPageNewList(@Param("vo") StoreOrderPageVO vo);
|
||||||
Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist);
|
Integer updateByIdBillingExist (@Param("ids") Set<Long> ids, @Param("exist")Boolean exist);
|
||||||
|
Integer updateByIdBillingNum (@Param("ids") Set<Long> ids, @Param("num")String num);
|
||||||
}
|
}
|
@ -6,6 +6,9 @@ import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMon
|
|||||||
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.billing.BillingDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.billing.BillingDO;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开票记录 Service 接口
|
* 开票记录 Service 接口
|
||||||
@ -58,6 +61,24 @@ public interface BillingService {
|
|||||||
* @return 开票记录分页
|
* @return 开票记录分页
|
||||||
*/
|
*/
|
||||||
PageResult<BillingDO> getBillingPage(BillingPageReqVO pageReqVO);
|
PageResult<BillingDO> getBillingPage(BillingPageReqVO pageReqVO);
|
||||||
BillingRespMoneyVO getHaveWithoutMoney(Long userId);
|
BillingRespMoneyVO getHaveWithoutMoney(Long userId,Long carteenId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定时间段的所有金额
|
||||||
|
* @param time
|
||||||
|
* @param billingType
|
||||||
|
* @param carteenId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
BigDecimal getTotalMoney(Date time,Integer billingType,Long carteenId,Long userId);
|
||||||
|
Object getData(Date time,Integer billingType,Long carteenId,Long userId);
|
||||||
|
String getMemberId(Long userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开票完成数量,开票中数量,开票回拒数量
|
||||||
|
* @param carteenId
|
||||||
|
* @param userId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<Integer, Integer>getBillingTypeTotal(Long carteenId, Long userId);
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.member.service.billing;
|
package cn.iocoder.yudao.module.member.service.billing;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONArray;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@ -12,7 +13,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.module.member.api.card.CardApi;
|
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO;
|
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingRespMoneyVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
|
import cn.iocoder.yudao.module.member.controller.admin.billing.vo.BillingSaveReqVO;
|
||||||
@ -22,7 +22,6 @@ import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
|
|||||||
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.orderspacecapsule.OrderSpaceCapsuleDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.orderspacecapsule.OrderSpaceCapsuleDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
|
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.billing.BillingMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.billing.BillingMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
|
||||||
@ -30,30 +29,17 @@ import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
|||||||
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.storeorder.StoreOrderMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper;
|
||||||
import cn.iocoder.yudao.module.member.enums.*;
|
import cn.iocoder.yudao.module.member.enums.*;
|
||||||
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
|
||||||
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
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 java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
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;
|
||||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
@ -69,8 +55,6 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
@Resource
|
@Resource
|
||||||
private BillingMapper billingMapper;
|
private BillingMapper billingMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private MemberUserService userService;
|
|
||||||
@Resource
|
|
||||||
private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper;
|
private OrderSpaceCapsuleMapper orderSpaceCapsuleMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private DishOrderMapper dishOrderMapper;
|
private DishOrderMapper dishOrderMapper;
|
||||||
@ -80,20 +64,19 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
private MemberGroupMapper memberGroupMapper;
|
private MemberGroupMapper memberGroupMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private CardMapper cardMapper;
|
private CardMapper cardMapper;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 食堂
|
* 食堂
|
||||||
* @param startTime
|
* @param startTime
|
||||||
* @param endTime
|
* @param endTime
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<DishOrderDO> getDishOrderDO(Date startTime, Date endTime, Set<Long> ids){
|
public List<DishOrderDO> getDishOrderDO(Date startTime, Date endTime, List<Long> ids,Long carteenId){
|
||||||
return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
|
return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
|
||||||
.betweenIfPresent(DishOrderDO::getCreateTime,startTime,endTime)
|
.betweenIfPresent(DishOrderDO::getCreateTime,startTime,endTime)
|
||||||
.eq(DishOrderDO::getOrderStatus,DishOrderDO.COMPLETE)
|
.eq(DishOrderDO::getOrderStatus,DishOrderDO.COMPLETE)
|
||||||
.ne(DishOrderDO::getBillingExist,Boolean.TRUE)
|
.ne(DishOrderDO::getBillingExist,Boolean.FALSE)
|
||||||
.in(ObjUtil.isNotEmpty(ids), DishOrderDO::getId,ids)
|
.eq(DishOrderDO::getStoreId,carteenId)
|
||||||
|
.in(DishOrderDO::getUserId,ids)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -102,12 +85,13 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
* @param endTime
|
* @param endTime
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<StoreOrderDO> getStoreOrderDO(Date startTime, Date endTime, Set<Long> ids){
|
public List<StoreOrderDO> getStoreOrderDO(Date startTime, Date endTime, List<Long> ids,Long carteenId){
|
||||||
return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>()
|
return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>()
|
||||||
.betweenIfPresent(StoreOrderDO::getCreateTime,startTime,endTime)
|
.betweenIfPresent(StoreOrderDO::getCreateTime,startTime,endTime)
|
||||||
.eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode())
|
.eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode())
|
||||||
.ne(StoreOrderDO::getBillingExist,Boolean.TRUE)
|
.ne(StoreOrderDO::getBillingExist,Boolean.FALSE)
|
||||||
.in(ObjUtil.isNotEmpty(ids), StoreOrderDO::getOrderId,ids)
|
.eq(StoreOrderDO::getCarteenId,carteenId)
|
||||||
|
.in(StoreOrderDO::getUserId,ids)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -116,12 +100,13 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
* @param endTime
|
* @param endTime
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<OrderSpaceCapsuleDO> getOrderSpaceCapsuleDO(Date startTime, Date endTime, Set<Long> ids){
|
public List<OrderSpaceCapsuleDO> getOrderSpaceCapsuleDO(Date startTime, Date endTime, List<Long> ids,Long carteenId){
|
||||||
return orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>()
|
return orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>()
|
||||||
.betweenIfPresent(OrderSpaceCapsuleDO::getCreateTime,startTime,endTime)
|
.betweenIfPresent(OrderSpaceCapsuleDO::getCreateTime,startTime,endTime)
|
||||||
.eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())
|
.eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())
|
||||||
.ne(OrderSpaceCapsuleDO::getBillingExist,Boolean.TRUE)
|
.ne(OrderSpaceCapsuleDO::getBillingExist,Boolean.FALSE)
|
||||||
.in(ObjUtil.isNotEmpty(ids), OrderSpaceCapsuleDO::getId,ids)
|
.eq(OrderSpaceCapsuleDO::getCarteenId,carteenId)
|
||||||
|
.in(OrderSpaceCapsuleDO::getUserId,ids)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -129,40 +114,47 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
public String createBilling(BillingSaveReqVO createReqVO) {
|
public String createBilling(BillingSaveReqVO createReqVO) {
|
||||||
// 插入 BillingDO 对象并生成唯一主键
|
// 插入 BillingDO 对象并生成唯一主键
|
||||||
BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class);
|
BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class);
|
||||||
|
MemberGroupDO memberGroupDO = memberGroupDO(billing.getUserId());
|
||||||
billing.setId(IdUtil.getSnowflakeNextId() + "");
|
billing.setId(IdUtil.getSnowflakeNextId() + "");
|
||||||
// 获取用户信息
|
billing.setUserName(memberGroupDO.getName());
|
||||||
MemberUserDO user = userService.getUser(createReqVO.getUserId());
|
billing.setUserPhone(String.valueOf(memberGroupDO.getId()));
|
||||||
billing.setUserName(user.getNickname());
|
|
||||||
billing.setUserPhone(user.getMobile());
|
|
||||||
// 根据不同的 billingType 获取订单、金额和订单 ID 列表,并设置开票信息
|
// 根据不同的 billingType 获取订单、金额和订单 ID 列表,并设置开票信息
|
||||||
List<Long> orderIds;
|
List<Long> orderIds;
|
||||||
BigDecimal totalMoney;
|
BigDecimal totalMoney;
|
||||||
String billingName;
|
String billingName;
|
||||||
|
//处理时间段
|
||||||
|
Date startTime = createReqVO.getStartTime();
|
||||||
|
DateTime start = DateUtil.beginOfMonth(startTime);
|
||||||
|
DateTime end = DateUtil.endOfMonth(startTime);
|
||||||
|
createReqVO.setStartTime(start);
|
||||||
|
createReqVO.setEndTime(end);
|
||||||
|
//获取当前单位下的所有人
|
||||||
|
List<Long> memberList = memberGroupMapper.getMemberList(memberGroupDO.getId());
|
||||||
switch (BillingEnum.fromCode(billing.getBillingType())) {
|
switch (BillingEnum.fromCode(billing.getBillingType())) {
|
||||||
case BILLING_CANTEEN:
|
case BILLING_CANTEEN:
|
||||||
List<DishOrderDO> dishOrders = getDishOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId());
|
List<DishOrderDO> dishOrders = getDishOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), memberList,billing.getCarteenId());
|
||||||
if (CollUtil.isEmpty(dishOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
|
if (CollUtil.isEmpty(dishOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
|
||||||
totalMoney = calculateTotalMoney(dishOrders, DishOrderDO::getTotalMoney);
|
totalMoney = calculateTotalMoney(dishOrders, DishOrderDO::getTotalMoney);
|
||||||
orderIds = getOrderIds(dishOrders, DishOrderDO::getId);
|
orderIds = getOrderIds(dishOrders, DishOrderDO::getId);
|
||||||
billingName = "食堂餐饮费";
|
billingName = "食堂餐饮费";
|
||||||
updateBillingExist(dishOrders, dishOrderMapper);
|
updateBillingExist(dishOrders, dishOrderMapper,billing.getId());
|
||||||
break;
|
break;
|
||||||
case BILLING_SUPERMARKET:
|
case BILLING_SUPERMARKET:
|
||||||
List<StoreOrderDO> storeOrders = getStoreOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId());
|
List<StoreOrderDO> storeOrders = getStoreOrderDO(createReqVO.getStartTime(), createReqVO.getEndTime(), memberList,billing.getCarteenId());
|
||||||
if (CollUtil.isEmpty(storeOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
|
if (CollUtil.isEmpty(storeOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
|
||||||
totalMoney = calculateTotalMoney1(storeOrders, StoreOrderDO::getTotalPrice);
|
totalMoney = calculateTotalMoney1(storeOrders, StoreOrderDO::getTotalPrice);
|
||||||
List<Integer> orderIds1 = getOrderIds(storeOrders, StoreOrderDO::getOrderId);
|
List<Integer> orderIds1 = getOrderIds(storeOrders, StoreOrderDO::getOrderId);
|
||||||
orderIds = orderIds1.stream().map(Integer::longValue).collect(Collectors.toList());
|
orderIds = orderIds1.stream().map(Integer::longValue).collect(Collectors.toList());
|
||||||
billingName = "超市物品费";
|
billingName = "超市物品费";
|
||||||
updateBillingExist(storeOrders, storeOrderMapper);
|
updateBillingExist(storeOrders, storeOrderMapper,billing.getId());
|
||||||
break;
|
break;
|
||||||
case BILLING_SPACE_CAPSULE:
|
case BILLING_SPACE_CAPSULE:
|
||||||
List<OrderSpaceCapsuleDO> capsuleOrders = getOrderSpaceCapsuleDO(createReqVO.getStartTime(), createReqVO.getEndTime(), createReqVO.getOrderId());
|
List<OrderSpaceCapsuleDO> capsuleOrders = getOrderSpaceCapsuleDO(createReqVO.getStartTime(), createReqVO.getEndTime(),memberList,billing.getCarteenId());
|
||||||
if (CollUtil.isEmpty(capsuleOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
|
if (CollUtil.isEmpty(capsuleOrders)) throw exception(BILLING_NOT_ORDER_EXISTS);
|
||||||
totalMoney = calculateTotalMoney(capsuleOrders, OrderSpaceCapsuleDO::getMoney);
|
totalMoney = calculateTotalMoney(capsuleOrders, OrderSpaceCapsuleDO::getMoney);
|
||||||
orderIds = getOrderIds(capsuleOrders, OrderSpaceCapsuleDO::getId);
|
orderIds = getOrderIds(capsuleOrders, OrderSpaceCapsuleDO::getId);
|
||||||
billingName = "太空舱费用";
|
billingName = "太空舱费用";
|
||||||
updateBillingExist(capsuleOrders, orderSpaceCapsuleMapper);
|
updateBillingExist(capsuleOrders, orderSpaceCapsuleMapper,billing.getId());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unsupported billing type");
|
throw new IllegalArgumentException("Unsupported billing type");
|
||||||
@ -183,14 +175,9 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public String createBillingUnit(BillingSaveReqVO createReqVO) {
|
public String createBillingUnit(BillingSaveReqVO createReqVO) {
|
||||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||||
//校验是否为管理员
|
|
||||||
MemberGroupDO memberGroupDO = memberGroupMapper.selectOne(new LambdaQueryWrapperX<MemberGroupDO>()
|
|
||||||
.eq(MemberGroupDO::getUserId, loginUserId)
|
|
||||||
.last(" limit 1")
|
|
||||||
);
|
|
||||||
if(ObjUtil.isEmpty(memberGroupDO)) throw exception(BILLING_NOT_ORDER_SECURITY);
|
|
||||||
// 插入 BillingDO 对象并生成唯一主键
|
// 插入 BillingDO 对象并生成唯一主键
|
||||||
BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class);
|
BillingDO billing = BeanUtils.toBean(createReqVO, BillingDO.class);
|
||||||
|
MemberGroupDO memberGroupDO = memberGroupDO(billing.getUserId());
|
||||||
billing.setId(IdUtil.getSnowflakeNextId() + "");
|
billing.setId(IdUtil.getSnowflakeNextId() + "");
|
||||||
billing.setUserName(memberGroupDO.getName());
|
billing.setUserName(memberGroupDO.getName());
|
||||||
billing.setUserPhone(String.valueOf(memberGroupDO.getId()));
|
billing.setUserPhone(String.valueOf(memberGroupDO.getId()));
|
||||||
@ -238,7 +225,7 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
// 更新订单为开票状态
|
// 更新订单为开票状态
|
||||||
private <T> void updateBillingExist(List<T> orders, BaseMapperX<T> mapper) {
|
private <T> void updateBillingExist(List<T> orders, BaseMapperX<T> mapper,String billingId) {
|
||||||
orders.forEach(order -> {
|
orders.forEach(order -> {
|
||||||
// Assuming that the order has a `setBillingExist` method
|
// Assuming that the order has a `setBillingExist` method
|
||||||
try {
|
try {
|
||||||
@ -260,12 +247,32 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
// 更新
|
// 更新
|
||||||
BillingDO updateObj = BeanUtils.toBean(updateReqVO, BillingDO.class);
|
BillingDO updateObj = BeanUtils.toBean(updateReqVO, BillingDO.class);
|
||||||
updateObj.setOrderId(billingDO.getOrderId());
|
updateObj.setOrderId(billingDO.getOrderId());
|
||||||
|
String orderId = updateObj.getOrderId();
|
||||||
|
JSONArray jsonArray = JSONUtil.parseArray(orderId);
|
||||||
|
// 转换为 Set<Long>
|
||||||
|
Set<Long> orderIds = jsonArray.stream()
|
||||||
|
.map(object -> Long.parseLong(object.toString())) // 将每个元素转换为 Long
|
||||||
|
.collect(Collectors.toSet());
|
||||||
//开票成功是根据pdf上传成功没
|
//开票成功是根据pdf上传成功没
|
||||||
if(StrUtil.isNotBlank(updateObj.getPdfUrl())){
|
if(StrUtil.isNotBlank(updateObj.getPdfUrl())){
|
||||||
//上传成功 修改状态
|
//上传成功 修改状态
|
||||||
updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode());
|
updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode());
|
||||||
//设置同意人
|
//设置同意人
|
||||||
updateObj.setSystemId(SecurityFrameworkUtils.getLoginUserId());
|
updateObj.setSystemId(SecurityFrameworkUtils.getLoginUserId());
|
||||||
|
//同意就把订单编号付上去
|
||||||
|
switch (BillingEnum.fromCode(updateObj.getBillingType())){
|
||||||
|
case BILLING_CANTEEN:
|
||||||
|
dishOrderMapper.updateByIdBillingNum(orderIds,updateObj.getId());
|
||||||
|
break;
|
||||||
|
case BILLING_SUPERMARKET:
|
||||||
|
storeOrderMapper.updateByIdBillingNum(orderIds,updateObj.getId());
|
||||||
|
break;
|
||||||
|
case BILLING_SPACE_CAPSULE:
|
||||||
|
orderSpaceCapsuleMapper.updateByIdBillingNum(orderIds,updateObj.getId());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unsupported billing type");
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
//开票回拒
|
//开票回拒
|
||||||
if(StrUtil.isBlank(updateObj.getRefuseDetails())){
|
if(StrUtil.isBlank(updateObj.getRefuseDetails())){
|
||||||
@ -273,16 +280,20 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
}
|
}
|
||||||
updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode());
|
updateObj.setStatus(BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode());
|
||||||
updateObj.setRefuseTime(LocalDateTime.now());
|
updateObj.setRefuseTime(LocalDateTime.now());
|
||||||
String orderId = updateObj.getOrderId();
|
//拒绝就把锁住的订单释放掉
|
||||||
JSONArray jsonArray = JSONUtil.parseArray(orderId);
|
switch (BillingEnum.fromCode(updateObj.getBillingType())){
|
||||||
// 转换为 Set<Long>
|
case BILLING_CANTEEN:
|
||||||
Set<Long> orderIds = jsonArray.stream()
|
dishOrderMapper.updateByIdBillingExist(orderIds,Boolean.FALSE);
|
||||||
.map(object -> Long.parseLong(object.toString())) // 将每个元素转换为 Long
|
break;
|
||||||
.collect(Collectors.toSet());
|
case BILLING_SUPERMARKET:
|
||||||
LambdaUpdateChainWrapper<CardDO> wrapper = new LambdaUpdateChainWrapper<>(cardMapper);
|
storeOrderMapper.updateByIdBillingExist(orderIds,Boolean.FALSE);
|
||||||
wrapper.in(CardDO::getId,orderIds);
|
break;
|
||||||
wrapper.set(CardDO::getBillingExist,BillingStatusEnum.BILLING_INVOICING_REJECTION.getCode());
|
case BILLING_SPACE_CAPSULE:
|
||||||
cardMapper.update(wrapper);
|
orderSpaceCapsuleMapper.updateByIdBillingExist(orderIds,Boolean.FALSE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unsupported billing type");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
billingMapper.updateById(updateObj);
|
billingMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
@ -311,25 +322,188 @@ public class BillingServiceImpl implements BillingService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BillingRespMoneyVO getHaveWithoutMoney(Long userId) {
|
public BillingRespMoneyVO getHaveWithoutMoney(Long userId,Long carteenId) {
|
||||||
BillingRespMoneyVO b=new BillingRespMoneyVO();
|
List<Long> memberList = getMemberListByUserId(userId);
|
||||||
//查询开票的订单
|
// 创建 BillingRespMoneyVO 对象
|
||||||
|
BillingRespMoneyVO response = new BillingRespMoneyVO();
|
||||||
|
// 查询已开票的金额
|
||||||
|
BigDecimal haveMoney = getTotalMoneyForBilling(userId, BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode());
|
||||||
|
response.setHaveMoney(haveMoney);
|
||||||
|
// 查询未开票的金额
|
||||||
|
BigDecimal withoutMoney = getTotalMoneyForOrders(memberList, carteenId);
|
||||||
|
response.setWithoutMoney(withoutMoney);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询已开票的金额
|
||||||
|
* @param userId 用户 ID
|
||||||
|
* @param billingStatus 账单状态
|
||||||
|
* @return 已开票金额
|
||||||
|
*/
|
||||||
|
private BigDecimal getTotalMoneyForBilling(Long userId, Integer billingStatus) {
|
||||||
|
return billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>()
|
||||||
|
.eq(BillingDO::getStatus, billingStatus)
|
||||||
|
.eq(BillingDO::getUserId, userId))
|
||||||
|
.stream()
|
||||||
|
.map(BillingDO::getBillingMoney)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); // 求和
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询未开票的金额(食堂、超市、太空舱)
|
||||||
|
* @param memberList 成员 ID 列表
|
||||||
|
* @return 未开票金额
|
||||||
|
*/
|
||||||
|
private BigDecimal getTotalMoneyForOrders(List<Long> memberList,Long carteenId) {
|
||||||
|
// 合并所有订单金额查询
|
||||||
|
BigDecimal totalSpaceCapsuleMoney = getTotalMoneyForOrderSpaceCapsules(memberList,carteenId);
|
||||||
|
BigDecimal totalDishOrderMoney = getTotalMoneyForDishOrders(memberList,carteenId);
|
||||||
|
BigDecimal totalStoreOrderMoney = getTotalMoneyForStoreOrders(memberList,carteenId);
|
||||||
|
|
||||||
|
return totalSpaceCapsuleMoney.add(totalDishOrderMoney).add(totalStoreOrderMoney);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询未开票的太空舱订单金额
|
||||||
|
* @param memberList 成员 ID 列表
|
||||||
|
* @return 太空舱订单金额
|
||||||
|
*/
|
||||||
|
private BigDecimal getTotalMoneyForOrderSpaceCapsules(List<Long> memberList,Long carteenId) {
|
||||||
|
return orderSpaceCapsuleMapper.selectList(new LambdaQueryWrapperX<OrderSpaceCapsuleDO>()
|
||||||
|
.eq(OrderSpaceCapsuleDO::getStatus, SpaceCapsuleOrderEnum.SPACE_CAPSULE_ORDER_ENUM_DONE.getCode())
|
||||||
|
.isNull(OrderSpaceCapsuleDO::getBillingNum)
|
||||||
|
.eq(OrderSpaceCapsuleDO::getCarteenId,carteenId)
|
||||||
|
.in(OrderSpaceCapsuleDO::getUserId, memberList))
|
||||||
|
.stream()
|
||||||
|
.map(OrderSpaceCapsuleDO::getMoney)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); // 求和
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询未开票的食堂订单金额
|
||||||
|
* @param memberList 成员 ID 列表
|
||||||
|
* @return 食堂订单金额
|
||||||
|
*/
|
||||||
|
private BigDecimal getTotalMoneyForDishOrders(List<Long> memberList,Long carteenId) {
|
||||||
|
return dishOrderMapper.selectList(new LambdaQueryWrapperX<DishOrderDO>()
|
||||||
|
.eq(DishOrderDO::getOrderStatus, DishOrderDO.COMPLETE)
|
||||||
|
.isNull(DishOrderDO::getBillingNum)
|
||||||
|
.eq(DishOrderDO::getStoreId,carteenId)
|
||||||
|
.in(DishOrderDO::getUserId, memberList))
|
||||||
|
.stream()
|
||||||
|
.map(DishOrderDO::getTotalMoney)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); // 求和
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询未开票的超市订单金额
|
||||||
|
* @param memberList 成员 ID 列表
|
||||||
|
* @return 超市订单金额
|
||||||
|
*/
|
||||||
|
private BigDecimal getTotalMoneyForStoreOrders(List<Long> memberList,Long carteenId) {
|
||||||
|
return storeOrderMapper.selectList(new LambdaQueryWrapperX<StoreOrderDO>()
|
||||||
|
.eq(StoreOrderDO::getStatus, StoreOrderStatusEnum.COMPLETE.getCode())
|
||||||
|
.eq(StoreOrderDO::getBillingExist, Boolean.FALSE)
|
||||||
|
.isNull(StoreOrderDO::getBillingNum)
|
||||||
|
.eq(StoreOrderDO::getCarteenId,carteenId)
|
||||||
|
.in(StoreOrderDO::getUserId, memberList))
|
||||||
|
.stream()
|
||||||
|
.map(f -> BigDecimal.valueOf(f.getTotalPrice()))
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); // 求和
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BigDecimal getTotalMoney(Date time, Integer billingType, Long carteenId, Long userId) {
|
||||||
|
List<?> data =(List<?>) getData(time, billingType, carteenId, userId);
|
||||||
|
// 根据账单类型计算总金额
|
||||||
|
return calculateTotalMoneyByBillingType(billingType, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getData(Date time, Integer billingType, Long carteenId, Long userId) {
|
||||||
|
// 获取当前单位下的所有成员
|
||||||
|
List<Long> memberList = getMemberListByUserId(userId);
|
||||||
|
// 获取订单并返回
|
||||||
|
List<?> orders = getOrders(time, billingType, memberList,carteenId);
|
||||||
|
if (CollUtil.isEmpty(orders)) {
|
||||||
|
throw exception(BILLING_NOT_ORDER_EXISTS);
|
||||||
|
}
|
||||||
|
return orders;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMemberId(Long userId) {
|
||||||
|
//校验是否为管理员
|
||||||
|
return memberGroupDO(userId).getId()+"";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Integer, Integer> getBillingTypeTotal(Long carteenId, Long userId) {
|
||||||
|
Map<Integer,Integer> map= MapUtil.newHashMap();
|
||||||
|
MemberGroupDO memberGroupDO = memberGroupDO(userId);
|
||||||
|
Long id = memberGroupDO.getId();
|
||||||
|
List<BillingDO> billingDOS = billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>()
|
||||||
|
.eq(BillingDO::getUserPhone, id)
|
||||||
|
.eqIfPresent(BillingDO::getCarteenId,carteenId)
|
||||||
|
);
|
||||||
|
Map<Integer, List<BillingDO>> collect = billingDOS.stream().collect(Collectors.groupingBy(BillingDO::getStatus));
|
||||||
|
for (Map.Entry<Integer, List<BillingDO>> entry : collect.entrySet()) {
|
||||||
|
map.put(entry.getKey(),entry.getValue().size());
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户所属单位的所有成员列表
|
||||||
|
* @param userId 当前用户 ID
|
||||||
|
* @return 当前单位的所有成员 ID 列表
|
||||||
|
*/
|
||||||
|
private List<Long> getMemberListByUserId(Long userId) {
|
||||||
|
// 获取当前单位下的所有成员
|
||||||
|
return memberGroupMapper.getMemberList(memberGroupDO(userId).getId());
|
||||||
|
}
|
||||||
|
private MemberGroupDO memberGroupDO(Long userId){
|
||||||
|
// 校验是否为管理员
|
||||||
MemberGroupDO memberGroupDO = memberGroupMapper.selectOne(new LambdaQueryWrapperX<MemberGroupDO>()
|
MemberGroupDO memberGroupDO = memberGroupMapper.selectOne(new LambdaQueryWrapperX<MemberGroupDO>()
|
||||||
.eq(MemberGroupDO::getUserId, userId)
|
.eq(MemberGroupDO::getUserId, userId)
|
||||||
.last(" limit 1")
|
.last(" limit 1"));
|
||||||
);
|
if (memberGroupDO == null) {
|
||||||
BigDecimal reduce = billingMapper.selectList(new LambdaQueryWrapperX<BillingDO>()
|
throw exception(GROUP_NOT_EXISTS);
|
||||||
.eq(BillingDO::getStatus, BillingStatusEnum.BILLING_INVOICING_IS_COMPLETE.getCode())
|
}
|
||||||
.eq(BillingDO::getUserId,memberGroupDO.getId())
|
return memberGroupDO;
|
||||||
).stream()
|
}
|
||||||
.map(BillingDO::getBillingMoney)
|
/**
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);// 求和
|
* 根据账单类型计算订单的总金额
|
||||||
//获取当前单位下的所有人
|
* @param billingType 账单类型
|
||||||
List<Long> memberList = memberGroupMapper.getMemberList(memberGroupDO.getId());
|
* @param orders 订单列表
|
||||||
//获取所有未开票的
|
* @return 计算后的总金额
|
||||||
BigDecimal moneyByUserIds = cardMapper.getTotalMoneyByuserIds(memberList, CardDO.ADD, CostTypeEnum.ADMIN_PAY.getCode());
|
*/
|
||||||
b.setWithoutMoney(moneyByUserIds);
|
private BigDecimal calculateTotalMoneyByBillingType(Integer billingType, List<?> orders) {
|
||||||
b.setHaveMoney(reduce);
|
switch (BillingEnum.fromCode(billingType)) {
|
||||||
return b;
|
case BILLING_CANTEEN:
|
||||||
|
return calculateTotalMoney((List<DishOrderDO>) orders, DishOrderDO::getTotalMoney);
|
||||||
|
case BILLING_SUPERMARKET:
|
||||||
|
return calculateTotalMoney1((List<StoreOrderDO>) orders, StoreOrderDO::getTotalPrice);
|
||||||
|
case BILLING_SPACE_CAPSULE:
|
||||||
|
return calculateTotalMoney((List<OrderSpaceCapsuleDO>) orders, OrderSpaceCapsuleDO::getMoney);
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unsupported billing type: " + billingType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private List<?> getOrders(Date time, Integer billingType,List<Long> ids,Long carteenId) {
|
||||||
|
// 获取时间内的订单
|
||||||
|
DateTime start = DateUtil.beginOfMonth(time);
|
||||||
|
DateTime end = DateUtil.endOfMonth(time);
|
||||||
|
switch (BillingEnum.fromCode(billingType)) {
|
||||||
|
case BILLING_CANTEEN:
|
||||||
|
return getDishOrderDO(start, end, ids,carteenId);
|
||||||
|
case BILLING_SUPERMARKET:
|
||||||
|
return getStoreOrderDO(start, end, ids,carteenId);
|
||||||
|
case BILLING_SPACE_CAPSULE:
|
||||||
|
return getOrderSpaceCapsuleDO(start, end, ids,carteenId);
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unsupported billing type");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -40,4 +40,11 @@
|
|||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
<update id="updateByIdBillingNum">
|
||||||
|
update member_dish_order SET billing_num = #{num}
|
||||||
|
WHERE id IN
|
||||||
|
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
@ -72,4 +72,12 @@
|
|||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<update id="updateByIdBillingNum">
|
||||||
|
update t_order_space_capsule SET billing_num = #{num}
|
||||||
|
WHERE id IN
|
||||||
|
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
@ -71,4 +71,12 @@
|
|||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<update id="updateByIdBillingNum">
|
||||||
|
update member_store_order SET billing_num = #{num}
|
||||||
|
WHERE order_id IN
|
||||||
|
<foreach collection="ids" item="id" open="(" separator="," close=")">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
Reference in New Issue
Block a user