领料减免帐开发
This commit is contained in:
parent
1cf2bf7fb9
commit
cf7d80ad44
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,4 +62,5 @@ public interface LeaseApplyDetailsMapper {
|
|||
|
||||
List<com.bonus.sgzb.material.domain.LeaseApplyDetails> getLeaseApplyDetailsTypeCount(BackApplyInfo bean);
|
||||
|
||||
void insertSltFee(TmTask tmTask);
|
||||
}
|
||||
|
|
@ -121,4 +121,6 @@ public interface LeaseOutDetailsMapper {
|
|||
List<TmTask> getSlt(TmTask bean);
|
||||
|
||||
int updateOutTimeSlt(TmTask bean);
|
||||
|
||||
List<TmTask> getSltFeeList(TmTask bean);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<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
|
||||
|
|
|
|||
|
|
@ -632,4 +632,9 @@
|
|||
where tta.agreement_id = #{agreementId} and lad.`status` = '2'
|
||||
group by lad.type_id
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -567,4 +567,20 @@
|
|||
WHERE
|
||||
lease_id = #{id}
|
||||
</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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue