Browse Source

单位记账功能

覃浩 2 years ago
parent
commit
57828f2cee

+ 67 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusAgreementOrderFee.java

@@ -0,0 +1,67 @@
+package org.jeecg.modules.business.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: bus_agreement_order_fee
+ * @Author: jeecg-boot
+ * @Date:   2023-05-15
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_agreement_order_fee")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_agreement_order_fee对象", description="bus_agreement_order_fee")
+public class BusAgreementOrderFee implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**key*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "key")
+    private String id;
+	/**协议单位id*/
+	@Excel(name = "协议单位id", width = 15)
+    @ApiModelProperty(value = "协议单位id")
+    private String agreementUnitId;
+	/**关联的账单id*/
+	@Excel(name = "关联的账单id", width = 15)
+    @ApiModelProperty(value = "关联的账单id")
+    private String orderFeeId;
+	/**结账状态,1未结账;2已结账*/
+	@Excel(name = "结账状态,1未结账;2已结账", width = 15)
+    @ApiModelProperty(value = "结账状态,1未结账;2已结账")
+    private Integer settleStatus;
+	/**创建用户*/
+	@Excel(name = "创建用户", width = 15)
+    @ApiModelProperty(value = "创建用户")
+    private String createUserId;
+	/**创建时间*/
+	@Excel(name = "创建时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+	/**结账时间*/
+	@Excel(name = "结账时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "结账时间")
+    private Date settleTime;
+}

+ 2 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusOrderFee.java

@@ -109,6 +109,8 @@ public class BusOrderFee implements Serializable {
     private String vipCardId;
     @ApiModelProperty(value = "酒店Id")
     private String hotelId;
+    @ApiModelProperty(value = "协议单位ID")
+    private String agreementUnitId;
 
 
 

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusAgreementOrderFeeMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusAgreementOrderFee;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: bus_agreement_order_fee
+ * @Author: jeecg-boot
+ * @Date:   2023-05-15
+ * @Version: V1.0
+ */
+public interface BusAgreementOrderFeeMapper extends BaseMapper<BusAgreementOrderFee> {
+
+}

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusAgreementOrderFeeMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.business.mapper.BusAgreementOrderFeeMapper">
+
+</mapper>

+ 14 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusAgreementOrderFeeService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.modules.business.entity.BusAgreementOrderFee;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: bus_agreement_order_fee
+ * @Author: jeecg-boot
+ * @Date:   2023-05-15
+ * @Version: V1.0
+ */
+public interface IBusAgreementOrderFeeService extends IService<BusAgreementOrderFee> {
+
+}

+ 19 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusAgreementOrderFeeServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.modules.business.entity.BusAgreementOrderFee;
+import org.jeecg.modules.business.mapper.BusAgreementOrderFeeMapper;
+import org.jeecg.modules.business.service.IBusAgreementOrderFeeService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: bus_agreement_order_fee
+ * @Author: jeecg-boot
+ * @Date:   2023-05-15
+ * @Version: V1.0
+ */
+@Service
+public class BusAgreementOrderFeeServiceImpl extends ServiceImpl<BusAgreementOrderFeeMapper, BusAgreementOrderFee> implements IBusAgreementOrderFeeService {
+
+}

+ 35 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java

@@ -102,6 +102,11 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     @Resource
     private CesAllDayPriceRuleServiceImpl allDayPriceRuleService;
 
+    @Resource
+    private IBusAgreementOrderFeeService agreementOrderFeeService;
+
+    @Resource
+    private IBusMarketAgreementUnitService marketAgreementUnitService;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String bookingOrderSave(BookingOrderSaveDto item, Boolean isTeam,Boolean isLiving) {
@@ -1997,7 +2002,8 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     }
     private Map<String,String> bookingRoomToLiving(BookingOrderSaveDto livingData, List<ExtendBusBookingRoomsVo> roomIds, BookingOrderEditVo bookingOrderVo,String hotelId) {
         Map<String,String> results = new HashMap<>();
-
+        List<BusRoomPayType> payTypes = payTypeService.list(Wrappers.<BusRoomPayType>query().eq("hotel_id",hotelId));
+        LoginUser user = TokenUtils.getAuthUser();
         roomIds.forEach(bkRoom-> {
             if(livingData.getRoomIds().stream().filter(s->s.getRoomId().equals(bkRoom.getRoomId())).count() == 0)
                 throw new JeecgBootException("房间信息未找到");
@@ -2009,6 +2015,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             if(livingData.getOrderFees()!=null && livingData.getOrderFees().size() > 0 ) {
                 List<BusOrderFee> findRoomFees = livingData.getOrderFees().stream().filter(t->t.getRoomId().equals(bkRoom.getRoomId())).collect(Collectors.toList());
                 findRoomFees.forEach(s->{
+
                     s.setRoomId(bkRoom.getRoomId());
                     s.setLivingOrderId(livingOrderId);
                     s.setCreateTime(new Date());
@@ -2019,6 +2026,33 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                     }
                 });
                 if(findRoomFees.size() > 0) feeService.saveBatch(findRoomFees);
+                // 处理协议单位记账
+                findRoomFees.forEach(s->{
+                    if(payTypes.stream().anyMatch(k->k.getId().equals(s.getPayType()) && k.getName().equals("单位记账")) ) {
+                        BusAgreementOrderFee agreementOrderFee = new BusAgreementOrderFee();
+                        if(s.getAgreementUnitId() == null || s.getAgreementUnitId().isEmpty()) throw new JeecgBootException("请选择协议单位");
+                        BusMarketAgreementUnit unit = marketAgreementUnitService.getById(s.getAgreementUnitId());
+                        if(unit == null) throw new JeecgBootException("协议单位未找到");
+                        if(unit.getBookkStatus() != null && unit.getBookkStatus().equals(1)) throw new JeecgBootException("不允许该单位记账");
+                        BigDecimal usedAmount;
+                        if(unit.getAmountUsed() == null) usedAmount = new BigDecimal(0);
+                        else usedAmount = unit.getAmountUsed();
+                        double incrementBalance = (usedAmount.add(s.getMoney())).doubleValue();
+                        // 记账限额超出,返回异常结果!
+                        if(unit.getBookkeeping() != null && !unit.getBookkeeping().equals(new BigDecimal(0)) && unit.getBookkeeping().doubleValue() < incrementBalance)
+                            throw new JeecgBootException("记账超额!记账单位限额为"+unit.getBookkeeping().doubleValue()+",已使用"+usedAmount.doubleValue());
+                        agreementOrderFee.setAgreementUnitId(s.getAgreementUnitId());
+                        agreementOrderFee.setOrderFeeId(s.getId());
+                        agreementOrderFee.setCreatedTime(new Date());
+                        agreementOrderFee.setCreateUserId(user != null ?user.getId():"");
+                        agreementOrderFee.setSettleStatus(1);
+                        agreementOrderFeeService.save(agreementOrderFee);
+                        // 更新已使用的记账
+                        unit.setAmountUsed(new BigDecimal(incrementBalance));
+                        unit.setUpdateTime(new Date());
+                        marketAgreementUnitService.updateById(unit);
+                    }
+                });
             }
             // 另外每个房间还要在入住时生成每日房费账单
             BusOrderFee roomFee = new BusOrderFee();