This commit is contained in:
mashuai 2024-12-06 17:22:03 +08:00
parent 5cb179f17c
commit 3856318dc5
5 changed files with 169 additions and 98 deletions

View File

@ -87,6 +87,13 @@ public class LeaseRepairRecord extends BaseEntity implements Serializable {
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "订单状态")
private Integer orderStatus;
@ApiModelProperty(value = "订单完成时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date rentOverTime;
@ApiModelProperty(value = "改价人id")
private Long changePriceUser;

View File

@ -3,6 +3,7 @@ package com.bonus.material.lease.service.impl;
import com.bonus.common.biz.constant.MaterialConstants;
import com.bonus.common.biz.domain.BmFileInfo;
import com.bonus.common.biz.enums.HttpCodeEnum;
import com.bonus.common.biz.enums.OrderStatusEnum;
import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.web.domain.AjaxResult;
@ -24,9 +25,11 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -37,6 +40,8 @@ import java.util.stream.Collectors;
@Slf4j
public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
private static final String DEVICE_NAME_ERROR = "的数量不能大于设备数量";
@Resource
private LeaseRepairRecordMapper mapper;
@ -98,23 +103,27 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
if (orderInfoDto != null) {
leaseRecordDto.setCode(orderInfoDto.getCode());
leaseRecordDto.setMaNumber(orderInfoDto.getMaNumber());
leaseRecordDto.setRentEndTime(orderInfoDto.getRentEndTime());
leaseRecordDto.setRentDay(orderInfoDto.getDays());
leaseRecordDto.setLeaseCompany(orderInfoDto.getCzcompanyName());
leaseRecordDto.setCost(orderInfoDto.getCost());
}
List<OrderDetailDto> orderDetailList = orderMapper.selectOrderDetailsByOderId(dto.getOrderId());
if (CollectionUtils.isNotEmpty(orderDetailList)) {
leaseRecordDto.setOrderDetailDtoList(orderDetailList);
for (OrderDetailDto detailDto : orderDetailList) {
detailDto.setDays(detailDto.getDateDays() == null ? detailDto.getDays() : String.valueOf(detailDto.getDateDays()));
if (detailDto.getChangeCost() != null) {
leaseRecordDto.setIsChangePrice(1);
totalCost = totalCost.add(detailDto.getChangeCost());
} else {
totalCost = totalCost.add(detailDto.getCosts());
if (detailDto.getDateDays() != null && detailDto.getDateDays() > 0
&& detailDto.getDayLeasePrice() != null) {
BigDecimal newTotalPrice = detailDto.getDayLeasePrice().multiply(new BigDecimal(detailDto.getDateDays()))
.setScale(2, RoundingMode.HALF_UP);
totalCost = totalCost.add(newTotalPrice);
detailDto.setCosts(newTotalPrice);
}
}
}
leaseRecordDto.setOrderDetailDtoList(orderDetailList);
}
// 根据订单id查询订单详情
List<LeaseRepairRecord> list = mapper.getLeaseRepairRecordList(dto);
if (CollectionUtils.isNotEmpty(list)) {
@ -175,7 +184,7 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
* @return
*/
@Override
@Transactional
@Transactional(rollbackFor = Exception.class)
public AjaxResult add(LeaseRecordDto leaseRecordDto) {
if (leaseRecordDto == null || leaseRecordDto.getOrderId() == null || leaseRecordDto.getCode() == null) {
return AjaxResult.error(HttpCodeEnum.TO_PARAM_NULL.getCode(), HttpCodeEnum.TO_PARAM_NULL.getMsg());
@ -275,6 +284,7 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
int result = mapper.update(leaseRepairRecord);
//修改订单状态为已完成
if (result > 0) {
leaseRepairRecord.setOrderStatus(OrderStatusEnum.ORDER_FINISHED.getStatus());
result += orderMapper.updateOrder(leaseRepairRecord);
}
if (result > 0) {
@ -293,38 +303,81 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
int result = 0;
for (Integer maId : maIdList) {
LeaseRepairRecord leaseRepairRecord = createLeaseRepairRecord(leaseRecordDto);
List<LeaseRepairRecord> repairRecordList = leaseRecordDto.getRepairRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> scrapRecordList = leaseRecordDto.getScrapRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
List<LeaseRepairRecord> lossRecordList = leaseRecordDto.getLossRecordList().stream()
.filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
int repairNum = repairRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getRepairNum()).orElse(0)).sum();
int scrapNum = scrapRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getScrapNum()).orElse(0)).sum();
int lossNum = lossRecordList.stream().mapToInt(record -> Optional.ofNullable(record.getLossNum()).orElse(0)).sum();
// 选择第一个不为空的集合的 getNum() 数量
int num = 0;
if (!repairRecordList.isEmpty()) {
num = repairRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
} else if (!scrapRecordList.isEmpty()) {
num = scrapRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
.sum();
} else if (!lossRecordList.isEmpty()) {
num = lossRecordList.stream()
.mapToInt(record -> Optional.ofNullable(record.getNum()).orElse(0))
// 获取对应的记录集合
List<LeaseRepairRecord> repairRecordList = filterRecordsByMaId(leaseRecordDto.getRepairRecordList(), maId);
List<LeaseRepairRecord> scrapRecordList = filterRecordsByMaId(leaseRecordDto.getScrapRecordList(), maId);
List<LeaseRepairRecord> lossRecordList = filterRecordsByMaId(leaseRecordDto.getLossRecordList(), maId);
// 获取数量
int repairNum = sumRecordNum(repairRecordList, LeaseRepairRecord::getRepairNum);
int scrapNum = sumRecordNum(scrapRecordList, LeaseRepairRecord::getScrapNum);
int lossNum = sumRecordNum(lossRecordList, LeaseRepairRecord::getLossNum);
// 检查数量是否合法
if (!isValidNumber(repairRecordList, scrapRecordList, lossRecordList, repairNum, scrapNum, lossNum)) {
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
// 插入维修报废丢失记录
result += insertRepairScrapLossRecords(repairRecordList, leaseRepairRecord);
result += insertRepairScrapLossRecords(scrapRecordList, leaseRepairRecord);
result += insertRepairScrapLossRecords(lossRecordList, leaseRepairRecord);
// 执行插入操作
result += mapper.insert(leaseRepairRecord);
}
LeaseRepairRecord leaseRepairRecord = new LeaseRepairRecord();
leaseRepairRecord.setOrderId(leaseRecordDto.getOrderId());
leaseRepairRecord.setOrderStatus(OrderStatusEnum.ORDER_TERMINATED.getStatus());
result += orderMapper.updateOrder(leaseRepairRecord);
// 返回结果
return result > 0 ? AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg())
: AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
}
/**
* 根据maId过滤记录
* @param recordList
* @param maId
* @return
*/
private List<LeaseRepairRecord> filterRecordsByMaId(List<LeaseRepairRecord> recordList, Integer maId) {
return recordList.stream().filter(item -> item.getMaId().equals(maId)).collect(Collectors.toList());
}
/**
* 获取数量
* @param recordList
* @param getNum
* @return
*/
private int sumRecordNum(List<LeaseRepairRecord> recordList, Function<LeaseRepairRecord, Integer> getNum) {
return recordList.stream()
.mapToInt(record -> Optional.ofNullable(getNum.apply(record)).orElse(0))
.sum();
}
/**
* 检查数量是否合法
* @param repairRecordList
* @param scrapRecordList
* @param lossRecordList
* @param repairNum
* @param scrapNum
* @param lossNum
* @return
*/
private boolean isValidNumber(List<LeaseRepairRecord> repairRecordList, List<LeaseRepairRecord> scrapRecordList,
List<LeaseRepairRecord> lossRecordList, int repairNum, int scrapNum, int lossNum) {
int num = getFirstValidRecordNum(repairRecordList, scrapRecordList, lossRecordList);
if (repairNum > 0 && scrapNum == 0 && lossNum == 0 && repairNum > num) {
throw new ServiceException(repairRecordList.get(0).getDeviceName() + "的维修数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
throw new ServiceException(repairRecordList.get(0).getDeviceName() + DEVICE_NAME_ERROR, HttpCodeEnum.FAIL.getCode());
}
if (repairNum == 0 && scrapNum > 0 && lossNum == 0 && scrapNum > num) {
throw new ServiceException(scrapRecordList.get(0).getDeviceName() + "的报废数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
throw new ServiceException(scrapRecordList.get(0).getDeviceName() + DEVICE_NAME_ERROR, HttpCodeEnum.FAIL.getCode());
}
if (repairNum == 0 && scrapNum == 0 && lossNum > 0 && lossNum > num) {
throw new ServiceException(lossRecordList.get(0).getDeviceName() + "的丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
throw new ServiceException(lossRecordList.get(0).getDeviceName() + DEVICE_NAME_ERROR, HttpCodeEnum.FAIL.getCode());
}
if (repairNum > 0 && scrapNum > 0 && lossNum == 0 && repairNum + scrapNum > num) {
throw new ServiceException(repairRecordList.get(0).getDeviceName() + "的维修数量+报废数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
@ -336,52 +389,54 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService {
throw new ServiceException(scrapRecordList.get(0).getDeviceName() + "的报废数量+丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
if (repairNum > 0 && scrapNum > 0 && lossNum > 0 && repairNum + scrapNum + lossNum > num) {
throw new ServiceException(repairRecordList.get(0).getDeviceName() + "维修数量+报废数量+丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
throw new ServiceException(repairRecordList.get(0).getDeviceName() + "维修数量+报废数量+丢失数量不能大于设备数量", HttpCodeEnum.FAIL.getCode());
}
// 插入维修记录
if (CollectionUtils.isNotEmpty(repairRecordList)) {
for (LeaseRepairRecord repairRecord : repairRecordList) {
leaseRepairRecord.setMaId(repairRecord.getMaId());
leaseRepairRecord.setTypeId(repairRecord.getTypeId());
leaseRepairRecord.setRepairNum(repairRecord.getRepairNum());
leaseRepairRecord.setRepairPrice(repairRecord.getRepairPrice());
leaseRepairRecord.setRepairChangePrice(repairRecord.getRepairChangePrice());
if (CollectionUtils.isNotEmpty(repairRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(repairRecord.getFileInfoList());
return true;
}
/**
* 获取第一个有效的记录数量
* @param repairRecordList
* @param scrapRecordList
* @param lossRecordList
* @return
*/
private int getFirstValidRecordNum(List<LeaseRepairRecord> repairRecordList, List<LeaseRepairRecord> scrapRecordList,
List<LeaseRepairRecord> lossRecordList) {
if (!repairRecordList.isEmpty()) {
return sumRecordNum(repairRecordList, LeaseRepairRecord::getNum);
} else if (!scrapRecordList.isEmpty()) {
return sumRecordNum(scrapRecordList, LeaseRepairRecord::getNum);
} else if (!lossRecordList.isEmpty()) {
return sumRecordNum(lossRecordList, LeaseRepairRecord::getNum);
}
return 0;
}
// 插入报废记录
if (CollectionUtils.isNotEmpty(scrapRecordList)) {
for (LeaseRepairRecord scrapRecord : scrapRecordList) {
leaseRepairRecord.setMaId(scrapRecord.getMaId());
leaseRepairRecord.setTypeId(scrapRecord.getTypeId());
leaseRepairRecord.setScrapNum(scrapRecord.getScrapNum());
leaseRepairRecord.setScrapPrice(scrapRecord.getScrapPrice());
leaseRepairRecord.setScrapReason(scrapRecord.getScrapReason() == null ? "" : scrapRecord.getScrapReason());
if (CollectionUtils.isNotEmpty(scrapRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(scrapRecord.getFileInfoList());
/**
* 插入维修报废丢失记录
* @param recordList
* @param leaseRepairRecord
* @return
*/
private int insertRepairScrapLossRecords(List<LeaseRepairRecord> recordList, LeaseRepairRecord leaseRepairRecord) {
int result = 0;
for (LeaseRepairRecord record : recordList) {
leaseRepairRecord.setMaId(record.getMaId());
leaseRepairRecord.setTypeId(record.getTypeId());
leaseRepairRecord.setRepairNum(record.getRepairNum());
leaseRepairRecord.setRepairPrice(record.getRepairPrice());
leaseRepairRecord.setScrapNum(record.getScrapNum());
leaseRepairRecord.setScrapPrice(record.getScrapPrice());
leaseRepairRecord.setScrapReason(record.getScrapReason() != null ? record.getScrapReason() : "");
leaseRepairRecord.setLossNum(record.getLossNum());
leaseRepairRecord.setLossPrice(record.getLossPrice());
if (CollectionUtils.isNotEmpty(record.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(record.getFileInfoList());
}
result++;
}
}
// 插入丢失记录
if (CollectionUtils.isNotEmpty(lossRecordList)) {
for (LeaseRepairRecord lossRecord : lossRecordList) {
leaseRepairRecord.setMaId(lossRecord.getMaId());
leaseRepairRecord.setTypeId(lossRecord.getTypeId());
leaseRepairRecord.setLossNum(lossRecord.getLossNum());
leaseRepairRecord.setLossPrice(lossRecord.getLossPrice());
if (CollectionUtils.isNotEmpty(lossRecord.getFileInfoList())) {
bmFileInfoMapper.insertBmFileInfos(lossRecord.getFileInfoList());
}
}
}
result += mapper.insert(leaseRepairRecord);
}
if (result > 0) {
return AjaxResult.success(HttpCodeEnum.SUCCESS.getMsg());
}
return AjaxResult.error(HttpCodeEnum.FAIL.getCode(), HttpCodeEnum.FAIL.getMsg());
return result;
}
/**

View File

@ -99,4 +99,8 @@ public class OrderDetailDto {
@ApiModelProperty(value = "设备状态")
private String maStatus;
@ApiModelProperty(value = "实际天数")
private Integer dateDays;
}

View File

@ -214,9 +214,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
hh.order_status AS orderStatus,
CASE
WHEN hh.order_status = 5 THEN
'已退租'
'已退租-待结算'
WHEN hh.order_status = 6 THEN
'已完成' ELSE '未知'
'已结算-待完成'
WHEN hh.order_status = 7 THEN
'已完成'
ELSE '未知'
END AS orderStatusName,
hh.create_time AS orderTime,
hh.costs AS rentPrice

View File

@ -73,9 +73,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updateOrder">
UPDATE
ma_order_details
SET order_status = 6,
rent_over_user = #{priceConfirmUser},
rent_over_time = now()
set order_status = #{orderStatus},
update_time = now()
WHERE order_id = #{orderId}
</update>
@ -188,7 +187,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT
moi.code AS code,
COUNT(hh.ma_id) as maNumber,
hh.rent_end_time as rentEndTime,
hh.days as days,
moi.order_time,
c.company_name AS czcompanyName,
@ -249,7 +247,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
hh.take_over_time,
hh.rent_over_user,
hh.rent_over_time,
hh.change_cost as changeCost
hh.change_cost as changeCost,
CASE
WHEN DATE(hh.rent_over_time) = DATE(hh.pre_outbound_time) THEN 1
ELSE TIMESTAMPDIFF(DAY, hh.pre_outbound_time, hh.rent_over_time) + 1
END AS dateDays
FROM
ma_order_details hh
LEFT JOIN ma_order_info moi ON hh.order_id = moi.order_id