diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzSltAgreementInfoController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzSltAgreementInfoController.java index dff9b393..40bfffd7 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzSltAgreementInfoController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/controller/ClzSltAgreementInfoController.java @@ -182,9 +182,10 @@ public class ClzSltAgreementInfoController extends BaseController { List oneOfList = clzSltAgreementInfoMapper.getLeaseList(sltAgreementInfo); //设定班组实际出场时间 + String date = null; if(!oneOfList.isEmpty()){ - String date = "暂无" ; + //先判断是否在场 String exitTime = clzSltAgreementInfoMapper.getTeamSjOutTime(oneOfList.get(0)); if( exitTime!=null && !exitTime.isEmpty() ){ @@ -196,7 +197,10 @@ public class ClzSltAgreementInfoController extends BaseController { if(date!=null && !date.isEmpty()){ oneOfList.get(0).setActualExitTime(date); + }else{ + oneOfList.get(0).setActualExitTime("暂无"); } + actualTimeAndNames.add(oneOfList.get(0).getUnitName() + "(" + oneOfList.get(0).getActualExitTime()+")"); projectNames.add(oneOfList.get(0).getProjectName()); unitNames.add(oneOfList.get(0).getUnitName()); @@ -216,7 +220,7 @@ public class ClzSltAgreementInfoController extends BaseController { if (Objects.isNull(bean.getLeaseDays())) { bean.setLeaseDay(0L); } - + bean.setActualExitTime(date); BigDecimal leasePrice = bean.getLeasePrice(); BigDecimal num = bean.getNum(); // 根据班组退场时间计算租赁费用 @@ -290,9 +294,9 @@ public class ClzSltAgreementInfoController extends BaseController { List overdueReturnedList = getOverdueReturnedMaterials(sltAgreementInfo); loseList.addAll(overdueReturnedList); //设定班组实际出场时间 + String date = null; if(!loseList.isEmpty()){ - String date = "暂无" ; //先判断是否在场 String exitTime = clzSltAgreementInfoMapper.getTeamSjOutTime(oneOfList.get(0)); if( exitTime!=null && !exitTime.isEmpty() ){ @@ -303,6 +307,8 @@ public class ClzSltAgreementInfoController extends BaseController { if(date!=null && !date.isEmpty()){ loseList.get(0).setActualExitTime(date); + }else{ + loseList.get(0).setActualExitTime("暂无"); } actualTimeAndNames.add(loseList.get(0).getUnitName() + "(" + loseList.get(0).getActualExitTime()+")"); projectNames.add(loseList.get(0).getProjectName()); @@ -462,7 +468,7 @@ public class ClzSltAgreementInfoController extends BaseController { } //设定班组实际出场时间 if(!listAll.isEmpty()){ - String date = "暂无" ; + String date = null ; //先判断是否在场 String exitTime = clzSltAgreementInfoMapper.getTeamSjOutTime(listAll.get(0)); if( exitTime!=null && !exitTime.isEmpty() ){ @@ -593,27 +599,19 @@ public class ClzSltAgreementInfoController extends BaseController { } - // 物资是否已退还(根据endTime字段判断) - boolean isReturned = bean.getEndTime() != null; - - if (!isReturned) { - // 1.4 如果当前领用物资还未退还,不收取任何租赁费用,直接计作丢失,收取物资原值 不在租赁费用中体现 - return BigDecimal.ZERO; - } // 物资已退还,按照天数来计算费用 Date materialReturnTime = bean.getEndTime(); + if(materialReturnTime == null){ + materialReturnTime = DateTime.now(); + } // 计算超期天数 long overdueDays = calculateOverdueDays(materialReturnTime, exitTime); if (overdueDays <= 0) { // 1.3 在班组退场之前归还的物资不收费 return BigDecimal.ZERO; - } else if (overdueDays >= 16) { - // 1.2 超期15天以上也就是16天及以上计为丢失,算作丢失的话直接收取原值、所有租赁费用不收费了 - // 注意:丢失费用应该在getLoseList中处理,这里不收费 - return BigDecimal.ZERO; } else { // 计算超期费用 return calculateOverdueCost(bean, leasePrice, num, overdueDays); @@ -629,7 +627,7 @@ public class ClzSltAgreementInfoController extends BaseController { if (overdueDays <= 7) { // 超期1~7天不收费 overdueCost = BigDecimal.ZERO; - } else if (overdueDays <= 15) { + } else { // 超期第8天~第15天双倍计费 // 前7天不收费,只计算第8天开始的双倍费用 long doubleBillingDays = overdueDays - 7; diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/vo/MaterialSltAgreementInfo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/vo/MaterialSltAgreementInfo.java index 67e19d93..6e0c1322 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/vo/MaterialSltAgreementInfo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/domain/vo/MaterialSltAgreementInfo.java @@ -156,6 +156,13 @@ public class MaterialSltAgreementInfo extends BaseEntity { @ApiModelProperty(value = "租赁天数") private Long leaseDay; + /** + * 超期天数 + */ + @Excel(name = "超期天数") + @ApiModelProperty(value = "超期天数") + private Long overDay; + /** * 租赁费用 */ diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzSltAgreementInfoServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzSltAgreementInfoServiceImpl.java index 8ad0f2ef..8fb42a74 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzSltAgreementInfoServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/clz/service/impl/ClzSltAgreementInfoServiceImpl.java @@ -807,7 +807,33 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic if (Objects.isNull(bean.getLeaseDays())) { bean.setLeaseDay(0L); } + // 物资已退还,按照天数来计算费用 + Date materialReturnTime = bean.getEndTime(); + if(materialReturnTime == null){ + materialReturnTime = DateTime.now(); + } + String teamExitTime = bean.getActualExitTime(); + if (teamExitTime == null) { + teamExitTime = DateTime.now().toString("yyyy-MM-dd"); + } + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Date exitTime = null; + try { + exitTime = format.parse(teamExitTime); + }catch (Exception e){ + e.printStackTrace(); + } + // 计算超期天数 + long overdueDays = calculateOverdueDays(materialReturnTime, exitTime); + if(overdueDays < 8 ){ + bean.setOverDay(0L); + }else{ + bean.setOverDay(overdueDays-7); + } + + + bean.setActualExitTime(date); BigDecimal leasePrice = bean.getLeasePrice(); BigDecimal num = bean.getNum(); // 根据班组退场时间计算租赁费用 @@ -840,27 +866,21 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic } - // 物资是否已退还(根据endTime字段判断) - boolean isReturned = bean.getEndTime() != null; - if (!isReturned) { - // 1.4 如果当前领用物资还未退还,不收取任何租赁费用,直接计作丢失,收取物资原值 不在租赁费用中体现 - return BigDecimal.ZERO; - } // 物资已退还,按照天数来计算费用 Date materialReturnTime = bean.getEndTime(); + if(materialReturnTime == null){ + materialReturnTime = DateTime.now(); + } + // 计算超期天数 long overdueDays = calculateOverdueDays(materialReturnTime, exitTime); if (overdueDays <= 0) { // 1.3 在班组退场之前归还的物资不收费 return BigDecimal.ZERO; - } else if (overdueDays >= 16) { - // 1.2 超期15天以上也就是16天及以上计为丢失,算作丢失的话直接收取原值、所有租赁费用不收费了 - // 注意:丢失费用应该在getLoseList中处理,这里不收费 - return BigDecimal.ZERO; } else { // 计算超期费用 return calculateOverdueCost(bean, leasePrice, num, overdueDays); @@ -876,7 +896,7 @@ public class ClzSltAgreementInfoServiceImpl implements ClzSltAgreementInfoServic if (overdueDays <= 7) { // 超期1~7天不收费 overdueCost = BigDecimal.ZERO; - } else if (overdueDays <= 15) { + } else { // 超期第8天~第15天双倍计费 // 前7天不收费,只计算第8天开始的双倍费用 long doubleBillingDays = overdueDays - 7; diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzAgreementInfoMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzAgreementInfoMapper.xml index d1dfabc5..6237edfc 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzAgreementInfoMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/clz/ClzAgreementInfoMapper.xml @@ -193,7 +193,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN bm_unit bui ON bui.unit_id = bai.unit_id left join ma_type mt on sai.type_id = mt.type_id left join ma_type mt1 on mt.parent_id = mt1.type_id - where sai.agreement_id = #{agreementId} and sai.end_time is null + where sai.agreement_id = #{agreementId} and sai.end_time is null and sai.is_slt=1 ) res GROUP BY res.typeId,res.startTime,res.endTime