From cf7d80ad444b3ae9d0c35ae357aaf6b1116e41f5 Mon Sep 17 00:00:00 2001 From: bonus <1203338439@qq.com> Date: Wed, 18 Jun 2025 09:16:48 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=86=E6=96=99=E5=87=8F=E5=85=8D=E5=B8=90?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bonus/sgzb/app/domain/TmTask.java | 18 +++ .../app/mapper/LeaseApplyDetailsMapper.java | 3 +- .../app/mapper/LeaseOutDetailsMapper.java | 2 + .../impl/LeaseOutDetailsServiceImpl.java | 112 ++++++++++++++++++ .../mapper/app/LeaseApplyDetailsMapper.xml | 5 + .../mapper/app/LeaseOutDetailsMapper.xml | 16 +++ 6 files changed, 155 insertions(+), 1 deletion(-) diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/domain/TmTask.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/domain/TmTask.java index 91d5bc3..e234c75 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/domain/TmTask.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/domain/TmTask.java @@ -349,4 +349,22 @@ public class TmTask implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date outTime; + + @ApiModelProperty(value = "修改前时间") + private Date preTime; + private BigDecimal leaseFee; + private int costType; + private long days; + + public void setLeaseFee(BigDecimal leaseFee) { + this.leaseFee = leaseFee; + } + + public void setCostType(int i) { + this.costType = i; + } + + public void setDays(long day) { + this.days = day; + } } diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseApplyDetailsMapper.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseApplyDetailsMapper.java index ceb40c1..d75c2c6 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseApplyDetailsMapper.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseApplyDetailsMapper.java @@ -62,4 +62,5 @@ public interface LeaseApplyDetailsMapper { List getLeaseApplyDetailsTypeCount(BackApplyInfo bean); -} \ No newline at end of file + void insertSltFee(TmTask tmTask); +} diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java index 85b3f43..76d6a64 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/mapper/LeaseOutDetailsMapper.java @@ -121,4 +121,6 @@ public interface LeaseOutDetailsMapper { List getSlt(TmTask bean); int updateOutTimeSlt(TmTask bean); + + List getSltFeeList(TmTask bean); } diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java index 8898ad9..f38ee99 100644 --- a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/app/service/impl/LeaseOutDetailsServiceImpl.java @@ -31,6 +31,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.ZoneId; import java.util.*; /** @@ -245,6 +248,9 @@ public class LeaseOutDetailsServiceImpl implements LeaseOutDetailsService { return AjaxResult.error("出库时间修改失败"); } } + + //冲减帐 + int l = updateTimeAccount( bean); } catch (Exception e) { log.error("出库时间修改成功", e.getMessage()); throw new RuntimeException("出库时间修改成功"); @@ -252,6 +258,112 @@ public class LeaseOutDetailsServiceImpl implements LeaseOutDetailsService { return AjaxResult.success("出库时间修改成功"); } + private int updateTimeAccount(TmTask bean) { + + // isNeed =0 不冲减 1加 2减 + int isNeed = 0; + //1是否需要冲减 + isNeed = judgeTime(bean); + //2 加费用 + if(isNeed == 1){ + addMonthFee(bean); + } + //3 减费用 + if(isNeed == 2){ + subMonthFee(bean); + } + return isNeed ; + } + + private void subMonthFee(TmTask bean) { + List list = leaseOutDetailsMapper.getSltFeeList(bean); + for (TmTask tmTask : list) { + //比之前减了几天,计算减少的租赁费用 + String typeId = tmTask.getTypeId(); + Integer outNum = tmTask.getOutNum(); + BigDecimal leasePrice = tmTask.getLeasePrice(); + Integer agreementId = tmTask.getAgreementId(); + Date StartTime = bean.getPreTime(); + Date endTime = bean.getOutTime(); + long day = DateUtil.betweenDay(StartTime, endTime, true); + BigDecimal leaseFee = leasePrice.multiply(new BigDecimal(day)).multiply(new BigDecimal(outNum)); + TmTask fee = new TmTask(); + fee.setTypeId(typeId); + fee.setLeaseFee(leaseFee); + fee.setStartTime(StartTime+""); + fee.setEndTime(endTime+""); + fee.setDays(day); + fee.setCostType(2); + fee.setAgreementId(agreementId); + //4存入临时表 + leaseApplyDetailsMapper.insertSltFee(tmTask); + } + } + + private void addMonthFee(TmTask bean) { + List list = leaseOutDetailsMapper.getSltFeeList(bean); + for (TmTask tmTask : list) { + //比之前多了几天,计算增加的租赁费用 + String typeId = tmTask.getTypeId(); + Integer outNum = tmTask.getOutNum(); + BigDecimal leasePrice = tmTask.getLeasePrice(); + Integer agreementId = tmTask.getAgreementId(); + Date StartTime = bean.getOutTime(); + Date endTime = bean.getPreTime(); + long day = DateUtil.betweenDay(StartTime, endTime, true); + BigDecimal leaseFee = leasePrice.multiply(new BigDecimal(day)).multiply(new BigDecimal(outNum)); + TmTask fee = new TmTask(); + fee.setTypeId(typeId); + fee.setLeaseFee(leaseFee); + fee.setStartTime(StartTime+""); + fee.setEndTime(endTime+""); + fee.setCostType(1); + fee.setDays(day); + fee.setAgreementId(agreementId); + //4存入临时表 + leaseApplyDetailsMapper.insertSltFee(tmTask); + } + + } + + private int judgeTime(TmTask bean) { + int isNeed = 0; + + Date preTime = bean.getPreTime(); + Date outTime = bean.getOutTime(); + //判断修改前和修改后的时间是否在本月区间(上个月21号-到当月20号),若果在则isNeed=0,否则,修改后的时间在当月之前则isNeed=1,修改时间在时间之后则isNeed=2 + isNeed = checkTimeInCycle(preTime, outTime); + + return isNeed; + } + + public static int checkTimeInCycle(Date preTime, Date outTime) { + // 转换为LocalDate + LocalDate preDate = preTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate outDate = outTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + // 获取当前周期范围(上月21日-当月20日) + LocalDate currentDate = LocalDate.now(); + YearMonth lastMonth = YearMonth.from(currentDate).minusMonths(1); + LocalDate cycleStart = lastMonth.atDay(21); + LocalDate cycleEnd = currentDate.withDayOfMonth(20); + + // 判断逻辑 + if (isInCycle(preDate, cycleStart, cycleEnd) && + isInCycle(outDate, cycleStart, cycleEnd)) { + return 0; // 都在周期内 + } else if (outDate.isBefore(cycleStart)) { + return 1; // 修改时间早于周期 + } else if (outDate.isAfter(cycleEnd)) { + return 2; // 修改时间晚于周期 + } else { + return 0; // 仅修改时间在周期内 + } + } + + private static boolean isInCycle(LocalDate date, LocalDate start, LocalDate end) { + return !date.isBefore(start) && !date.isAfter(end); + } @Override diff --git a/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseApplyDetailsMapper.xml b/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseApplyDetailsMapper.xml index d436b02..75e825b 100644 --- a/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseApplyDetailsMapper.xml +++ b/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseApplyDetailsMapper.xml @@ -632,4 +632,9 @@ where tta.agreement_id = #{agreementId} and lad.`status` = '2' group by lad.type_id + + + insert into project_temp_cost (agreement_id,type_id, lease_num, start_time,end_time, day, price, lease_money, cost_type, mark_time) + values (#{agreementId}, #{typeId}, #{outNum}, #{startTime}, #{endTime}, #{day}, #{leasePrice}, #{leaseFee}, #{costType}, now()) + diff --git a/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml b/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml index b81b271..7c68ec3 100644 --- a/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml +++ b/sgzb-modules/sgzb-material/src/main/resources/mapper/app/LeaseOutDetailsMapper.xml @@ -567,4 +567,20 @@ WHERE lease_id = #{id} + +