Ver Fonte

解决优化仓储费

caifc há 3 anos atrás
pai
commit
49ab154ee4

+ 10 - 5
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/impl/TWarehouseAgreementServiceImpl.java

@@ -452,6 +452,7 @@ public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementServi
                 null == storageFeesDto.getCangKey()) {
             throw new WarehouseException("缺少查询计费规则条件");
         }
+        // 查询计费规则
         List<TWarehouseAgreementitems> itemList =
                 this.tWarehouseAgreementitemsMapper.getItemsBytWarehouseAgreementMsg(storageFeesDto.getfCorpid(),
                         storageFeesDto.getfGoodsid(),
@@ -464,7 +465,7 @@ public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementServi
         if (count > 1) {
             throw new WarehouseException("计费规则存在多条,请确认");
         }
-        // 获取要计算的数量
+        // 根据规则的计费单位去获取要计算的数量
         TWarehouseAgreementitems agreementitems = itemList.stream().findFirst()
                 .orElseThrow(() -> new WarehouseException("计费规则不存在"));
         BigDecimal qty = acquiredQuantity(storageFeesDto, agreementitems.getfFeeunitid());
@@ -479,25 +480,28 @@ public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementServi
         // 计费区间  月日-月日X钱
         String billingInterval = "";
         for (TWarehouseAgreementitems tWarehouseAgreementitems : itemList) {
+            // 如果要计费天数不足一天,不予计算
             if (storageFeesDto.getDays() < 1) {
                 break;
             }
-            // 计算仓储日期
-            dayLength = tWarehouseAgreementitems.getfEndays() - tWarehouseAgreementitems.getfFromdays() + 1L; //阶梯中的结束-开始日期
+            dayLength = tWarehouseAgreementitems.getfEndays() - tWarehouseAgreementitems.getfFromdays() + 1L;
+            // 如果已计费天数超出本阶层,则进入下一层规则,并剪掉当前层天数
             if (storageFeesDto.getEarlySumDays() >= dayLength) {
                 storageFeesDto.setEarlySumDays(storageFeesDto.getEarlySumDays() - dayLength);
                 continue; //将已算账的天数 与 计费规则的 最后一天作比较如果 已算10天 > 规则结束  不算帐
             }
-
+            // 如果计费日期超过本层天数
             if (storageFeesDto.getDays() >= dayLength) {
+                // 天数剪掉 剩余已计费库存天数
                 dayLength -= storageFeesDto.getEarlySumDays();
                 storageFeesDto.setEarlySumDays(0L);
                 feeId = tWarehouseAgreementitems.getfFeeid();
+                // 数量 * 单价 * 天数
                 BigDecimal calculate = this.getCalculate(qty, tWarehouseAgreementitems.getfPrice(), dayLength);
                 money = money.add(calculate);
 
                 storageFeesDto.setDays(storageFeesDto.getDays() - dayLength);
-                // 计算费用明细
+                // 组装运费明细记录
                 String details = assemblyBillingDetails(StorageFeeRangeDTO.builder()
                         .dayNum(dayLength).price(tWarehouseAgreementitems.getfPrice()).qty(qty).amt(calculate)
                         .build());
@@ -511,6 +515,7 @@ public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementServi
 
                 storageFeesDto.setStartTime(DateUtils.dateAdd(storageFeesDto.getStartTime(), dayLength.intValue()));
             } else {
+                // 最后一次计算天数
                 feeId = tWarehouseAgreementitems.getfFeeid();
                 BigDecimal calculate = this.getCalculate(qty, tWarehouseAgreementitems.getfPrice(), storageFeesDto.getDays());
                 money = money.add(calculate);

+ 12 - 4
ruoyi-warehouse/src/main/java/com/ruoyi/warehouseBusiness/service/impl/TWarehouseBillsServiceImpl.java

@@ -3970,9 +3970,11 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
 
         BigDecimal sumAmt = BigDecimal.ZERO;
         List<TWarehousebillsfees> itemsList = new ArrayList<>();
+        // 获取税率
         List<SysDictData> taxRate = sysDictDataMapper.selectDictDataByType("tax_rate");
 
         for (CalculateStorageFeesInfoVO item : feesInfoVOList) {
+            // 交以计算明细计费方式必填
             if (StringUtils.isNull(item.getFBillingway())) {
                 throw new WarehouseException("单号:" + item.getFBillno() + ",业务日期:" + item.getFBsdate() + "未找到库存总账的计费单位,请确认");
             }
@@ -3980,7 +3982,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
             storageFeesDto.setfCorpid(warehouseBills.getfCorpid());
             storageFeesDto.setCangKey(cangKey);
             storageFeesDto.setWarehouseId(Long.parseLong(String.valueOf(item.getWarehouse())));
-
+            // 把商品类型添加“”方便后续查询
             String goodsTypeids = item.getFTypeid();
             if (StringUtils.isNotEmpty(goodsTypeids)) {
                 goodsTypeids = "\"" + goodsTypeids + "\"";
@@ -3988,7 +3990,7 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
             storageFeesDto.setfGoodsid(goodsTypeids);
 
             long fId = item.getFId();
-            // 累计计费天数
+            // 累计计费天数 如果计费日期与原始入库日期一直代表没有计算过
             if (Objects.equals(item.getFChargedate().getTime(), item.getFOriginalbilldate().getTime())) {
                 storageFeesDto.setEarlySumDays(0L);
             } else {
@@ -3999,20 +4001,26 @@ public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
             // 要计费天数
             long fBillingDays;
             if (WarehouseTypeEnum.SJCK.getType().equals(item.getFBilltype())) {
+                // 出库在库天数:业务日期-计费日期
+                // 出库计费天数:出库在库天数
                 fInventoryDays = DateUtils.getDateDay(item.getFBsdate(), item.getFChargedate());
                 fBillingDays = fInventoryDays;
                 storageFeesDto.setStartTime(item.getFOriginalbilldate());
                 storageFeesDto.setEndTime(item.getFBsdate());
             } else if (WarehouseTypeEnum.HQZY.getType().equals(item.getFBilltype())) {
+                // 货转在库天数:业务日期-计费日期
+                // 货转计费天数:出库在库天数
                 fInventoryDays = DateUtils.getDateDay(item.getFBsdate(), item.getFChargedate());
                 fBillingDays = fInventoryDays;
                 storageFeesDto.setStartTime(item.getFBsdate());
                 storageFeesDto.setEndTime(item.getFOriginalbilldate());
             } else {
-                storageFeesDto.setStartTime(item.getFChargedate());
-                storageFeesDto.setEndTime(warehouseBills.getfBillingDeadline());
+                // 库存总帐在库天数:计费截止日期-原始入库日期
+                // 库存总帐计费天数:计费截止日期-计费日期
                 fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), item.getFOriginalbilldate());
                 fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), item.getFChargedate());
+                storageFeesDto.setStartTime(item.getFChargedate());
+                storageFeesDto.setEndTime(warehouseBills.getfBillingDeadline());
             }
             if (fBillingDays <= 0) {
                 continue;

+ 5 - 5
ruoyi-warehouse/src/main/resources/mapper/warehouseBusiness/TWarehousebillsMapper.xml

@@ -110,7 +110,7 @@
         <result property="fGrade"    column="f_grade" />
         <result property="fDeliveryDetails"  column="f_delivery_details" />
         <result property="fSalesmanId"  column="f_salesman_id"  />
-        <result property="fItemstatus"  column="f_items_status" />
+        <result property="fItemstatus"  column="f_itemstatus" />
         <result property="fUpdeteStatus"    column="f_updete_status"/>
         <result property="fSubmitUpdate"    column="f_submit_update"/>
         <result property="fDeleteStatus"    column="f_delete_status"/>
@@ -141,7 +141,7 @@
         f_consigneeattn, f_consigneetel, f_insurance, f_insuranceamt, f_closedate, f_docmentdate, f_vslid, f_voyid, f_typeid, f_paymode, f_laneid, f_cntval,
         free_container_date, f_business_attribution, f_supervision_unit, f_declaration_elements, f_part_number, f_ifinspection, f_value, f_weighing_date,
         f_ifsampling, send_sample_date, f_ifweight_recovery, weight_recovery_date, warehouse_status, f_times ,f_date_changed, f_chargetype,f_weigh_weight,
-        f_predict_branch,f_grade,f_delivery_details,f_salesman_id,f_items_status,f_updete_status, f_submit_update, f_delete_status,f_remarks_fees,f_cargo_planning,
+        f_predict_branch,f_grade,f_delivery_details,f_salesman_id,f_itemstatus,f_updete_status, f_submit_update, f_delete_status,f_remarks_fees,f_cargo_planning,
         f_arrival_status,f_dismount_status from t_warehousebills
     </sql>
 
@@ -916,7 +916,7 @@
             <if test="fGrade != null">f_grade,</if>
             <if test="fDeliveryDetails != null">f_delivery_details,</if>
             <if test="fSalesmanId != null">f_salesman_id,</if>
-            <if test="fItemstatus != null">f_items_status,</if>
+            <if test="fItemstatus != null">f_itemstatus,</if>
             <if test="fUpdeteStatus != null">f_updete_status,</if>
             <if test="fSubmitUpdate != null">f_submit_update,</if>
             <if test="fDeleteStatus != null">f_delete_status,</if>
@@ -1148,7 +1148,7 @@
             <if test="fGrade != null">f_grade = #{fGrade},</if>
             <if test="fDeliveryDetails != null">f_delivery_details = #{fDeliveryDetails},</if>
             <if test="fSalesmanId != null">f_salesman_id = #{fSalesmanId},</if>
-            <if test="fItemstatus != null">f_items_status = #{fItemstatus},</if>
+            <if test="fItemstatus != null">f_itemstatus = #{fItemstatus},</if>
             <if test="fUpdeteStatus != null">f_updete_status = #{fUpdeteStatus},</if>
             <if test="fSubmitUpdate != null">f_submit_update = #{fSubmitUpdate},</if>
             <if test="fDeleteStatus != null">f_delete_status = #{fDeleteStatus},</if>
@@ -1268,7 +1268,7 @@
             <if test="fGrade != null">f_grade = #{fGrade},</if>
             <if test="fDeliveryDetails != null">f_delivery_details = #{fDeliveryDetails},</if>
             <if test="fSalesmanId != null">f_salesman_id = #{fSalesmanId},</if>
-            <if test="fItemstatus != null">f_items_status = #{fItemstatus},</if>
+            <if test="fItemstatus != null">f_itemstatus = #{fItemstatus},</if>
             <if test="fUpdeteStatus != null">f_updete_status = #{fUpdeteStatus},</if>
             <if test="fSubmitUpdate != null">f_submit_update = #{fSubmitUpdate},</if>
             <if test="fDeleteStatus != null">f_delete_status = #{fDeleteStatus},</if>