This commit is contained in:
parent
5cb179f17c
commit
3856318dc5
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -99,4 +99,8 @@ public class OrderDetailDto {
|
|||
|
||||
@ApiModelProperty(value = "设备状态")
|
||||
private String maStatus;
|
||||
|
||||
@ApiModelProperty(value = "实际天数")
|
||||
private Integer dateDays;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue