领料减免帐开发

This commit is contained in:
bonus 2025-06-18 09:16:48 +08:00
parent 1cf2bf7fb9
commit cf7d80ad44
6 changed files with 155 additions and 1 deletions

View File

@ -349,4 +349,22 @@ public class TmTask implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date outTime; 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;
}
} }

View File

@ -62,4 +62,5 @@ public interface LeaseApplyDetailsMapper {
List<com.bonus.sgzb.material.domain.LeaseApplyDetails> getLeaseApplyDetailsTypeCount(BackApplyInfo bean); List<com.bonus.sgzb.material.domain.LeaseApplyDetails> getLeaseApplyDetailsTypeCount(BackApplyInfo bean);
} void insertSltFee(TmTask tmTask);
}

View File

@ -121,4 +121,6 @@ public interface LeaseOutDetailsMapper {
List<TmTask> getSlt(TmTask bean); List<TmTask> getSlt(TmTask bean);
int updateOutTimeSlt(TmTask bean); int updateOutTimeSlt(TmTask bean);
List<TmTask> getSltFeeList(TmTask bean);
} }

View File

@ -31,6 +31,9 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.util.*; import java.util.*;
/** /**
@ -245,6 +248,9 @@ public class LeaseOutDetailsServiceImpl implements LeaseOutDetailsService {
return AjaxResult.error("出库时间修改失败"); return AjaxResult.error("出库时间修改失败");
} }
} }
//冲减帐
int l = updateTimeAccount( bean);
} catch (Exception e) { } catch (Exception e) {
log.error("出库时间修改成功", e.getMessage()); log.error("出库时间修改成功", e.getMessage());
throw new RuntimeException("出库时间修改成功"); throw new RuntimeException("出库时间修改成功");
@ -252,6 +258,112 @@ public class LeaseOutDetailsServiceImpl implements LeaseOutDetailsService {
return AjaxResult.success("出库时间修改成功"); 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<TmTask> 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<TmTask> 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 @Override

View File

@ -632,4 +632,9 @@
where tta.agreement_id = #{agreementId} and lad.`status` = '2' where tta.agreement_id = #{agreementId} and lad.`status` = '2'
group by lad.type_id group by lad.type_id
</select> </select>
<insert id="insertSltFee">
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())
</insert>
</mapper> </mapper>

View File

@ -567,4 +567,20 @@
WHERE WHERE
lease_id = #{id} lease_id = #{id}
</update> </update>
<select id="getSltFeeList" resultType="com.bonus.sgzb.app.domain.TmTask">
SELECT
id AS id,
agreement_id AS agreementId,
type_id AS typeId,
num as outNum,
lease_price AS leasePrice
FROM
slt_agreement_info
WHERE
lease_id = #{id}
<if test="typeId != null and typeId != ''">
AND type_id = #{typeId}
</if>
</select>
</mapper> </mapper>