diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java index e417c2e..daadf26 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/mapper/LeaseRepairRecordMapper.java @@ -34,6 +34,8 @@ public interface LeaseRepairRecordMapper { */ int insert(LeaseRepairRecord leaseRepairRecord); + int getCountByOrderId(String orderId); + int deleteLeaseRepairRecord(LeaseRepairRecord leaseRepairRecord); /** diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java index 30c9d92..6c278bc 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/lease/service/impl/LeaseRepairRecordServiceImpl.java @@ -208,9 +208,9 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService { LeaseRepairRecord leaseRepairRecord = createLeaseRepairRecord(leaseRecordDto); // 校验所有记录是否为空 - if (isAllRecordListsEmpty(leaseRecordDto)) { - return insertRecord(leaseRepairRecord); - } +// if (isAllRecordListsEmpty(leaseRecordDto)) { +// return insertRecord(leaseRepairRecord); +// } try { // 处理维修、报废、丢失记录的情况 return handleAllRecords(leaseRecordDto, new ArrayList<>(maIdSet)); @@ -298,7 +298,13 @@ public class LeaseRepairRecordServiceImpl implements LeaseRepairRecordService { } leaseRepairRecord.setPriceConfirmUser(SecurityUtils.getUserId()); //将费用确认人信息存入 - int result = mapper.update(leaseRepairRecord); + int count = mapper.getCountByOrderId(leaseRepairRecord.getOrderId()); + int result = 0; + if (count > 0) { + result = mapper.update(leaseRepairRecord); + } else { + result++; //没找到需要更新的记录,默认为是已经处理过了 + } //修改订单状态为已完成 if (result > 0) { leaseRepairRecord.setOrderStatus(OrderStatusEnum.ORDER_FINISHED.getStatus()); diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/controller/OrderController.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/controller/OrderController.java index b3345cc..ed858b9 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/controller/OrderController.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/controller/OrderController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.text.StrBuilder; import com.bonus.common.biz.enums.MaStatusEnum; import com.bonus.common.biz.enums.OrderStatusEnum; +import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.web.controller.BaseController; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.page.TableDataInfo; @@ -12,6 +13,8 @@ import com.bonus.material.book.domain.BookCarInfoDto; import com.bonus.material.contract.domain.BmContract; import com.bonus.material.contract.service.BmContractService; import com.bonus.material.device.domain.vo.DevInfoVo; +import com.bonus.material.lease.domain.LeaseRepairRecord; +import com.bonus.material.lease.mapper.LeaseRepairRecordMapper; import com.bonus.material.order.domain.OrderDetailCostReliefDto; import com.bonus.material.order.domain.OrderDetailDto; import com.bonus.material.order.domain.OrderInfoDto; @@ -29,6 +32,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockMultipartFile; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; @@ -64,6 +68,9 @@ public class OrderController extends BaseController { @Resource private OrderMapper orderMapper; + @Resource + private LeaseRepairRecordMapper leaseRepairRecordMapper; + @Resource private BmContractService bmContractService; @@ -184,6 +191,9 @@ public class OrderController extends BaseController { bmContract.setStatus(1); bmContract.setOwnerCom(orderInfoDto.getCompanyId().longValue()); List list = bmContractService.getContractUrl(bmContract); + if (CollectionUtils.isEmpty(list)) { + return AjaxResult.error("请先上传合同"); + } String wordUrl = list.get(0).getBmFileInfoList().get(0).getFileUrl(); InputStream inputStream = new URL(wordUrl).openStream(); @@ -203,7 +213,7 @@ public class OrderController extends BaseController { //订单金额 replacements.put("${cost}", orderInfoDto.getCost().toString()); //订单详情 - StrBuilder orderDetail = new StrBuilder(); + StringBuilder orderDetail = new StringBuilder(); for (OrderDetailDto orderDetailDto : orderDetailsByOrderId) { Date rentBeginTime = inputFormat.parse(orderDetailDto.getRentBeginTime().toString()); String beginTime = outputFormat.format(rentBeginTime); @@ -252,6 +262,9 @@ public class OrderController extends BaseController { bmContract.setStatus(1); bmContract.setOwnerCom(orderInfoDto.getCompanyId().longValue()); List list = bmContractService.getContractUrl(bmContract); + if (CollectionUtils.isEmpty(list)) { + return AjaxResult.error("请先上传合同"); + } String wordUrl = list.get(0).getBmFileInfoList().get(0).getFileUrl(); InputStream inputStream = new URL(wordUrl).openStream(); XWPFDocument document = new XWPFDocument(inputStream); @@ -265,7 +278,7 @@ public class OrderController extends BaseController { //订单金额 replacements.put("${cost}", orderInfoDto.getCost().toString()); //订单详情 - StrBuilder orderDetail = new StrBuilder(); + StringBuilder orderDetail = new StringBuilder(); List detailsList = orderInfoDto.getDetailsList(); for (OrderDetailDto orderDetailDto : detailsList) { Date rentBeginTime = inputFormat.parse(orderDetailDto.getRentBeginTime().toString()); diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java index 2684a72..7ab7c4e 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java @@ -28,6 +28,9 @@ public class OrderDetailDto { @ApiModelProperty(value = "订单id") private Integer orderId; + @ApiModelProperty(value = "订单code") + private String orderCode; + @ApiModelProperty(value = "设备id") private Integer maId; diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java index 73de7ce..cf8b7a8 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderInfoDto.java @@ -131,4 +131,10 @@ public class OrderInfoDto { private Integer companyId; + private BigDecimal totalRepairScrapLossPrice; + + private BigDecimal totalRentalPrice; + + private BigDecimal totalRealPrice; + } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java index 29a309d..6e17a89 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java @@ -2,9 +2,12 @@ package com.bonus.material.order.service.impl; import com.bonus.common.biz.enums.MaStatusEnum; import com.bonus.common.biz.enums.OrderStatusEnum; +import com.bonus.common.core.utils.DateUtils; import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.security.utils.SecurityUtils; import com.bonus.material.device.domain.DevInfo; +import com.bonus.material.lease.domain.LeaseRepair; +import com.bonus.material.lease.domain.LeaseRepairRecord; import com.bonus.material.lease.mapper.LeaseRepairRecordMapper; import com.bonus.material.order.domain.OrderDetailCostReliefDto; import com.bonus.material.order.domain.OrderDetailDto; @@ -16,10 +19,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.OptionalInt; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; /** * @Author:liang.chao @@ -33,7 +35,9 @@ public class OrderServiceImpl implements OrderService { private OrderMapper orderMapper; @Resource - private LeaseRepairRecordMapper mapper; + private LeaseRepairRecordMapper leaseRepairRecordMapper; + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override @Transactional @@ -102,6 +106,16 @@ public class OrderServiceImpl implements OrderService { OrderDetailDto orderDetailDto = orderMapper.selectOrderDetailsById(id); list.add(orderDetailDto); } + BigDecimal totalRentalPrice = BigDecimal.ZERO; + for (OrderDetailDto orderDetailDto : list) { + if (Objects.nonNull(orderDetailDto) && String.valueOf(OrderStatusEnum.ORDER_FINISHED.getStatus()).equals(orderDetailDto.getOrderStatus())) { + Date preOutBoundTime = sdf.parse(orderDetailDto.getPreOutboundTime()); + Date rentOverTime = sdf.parse(orderDetailDto.getRentOverTime()); + long days = DateUtils.daysBetween(preOutBoundTime, rentOverTime) + 1; + totalRentalPrice = totalRentalPrice.add(orderDetailDto.getDayLeasePrice().multiply(new BigDecimal(days))); + } + } + dto.setTotalRentalPrice(totalRentalPrice); dto.setDetailsList(list); Optional minOrderStatus = list.stream() .min((p1, p2) -> Integer.compare(Integer.parseInt(p1.getOrderStatus()), Integer.parseInt(p2.getOrderStatus()))); @@ -109,13 +123,39 @@ public class OrderServiceImpl implements OrderService { dto.setOrderStatus(minOrderStatus.get().getOrderStatus()); } //根据订单id去lease_repair_record表中查询是否已填写退租检修信息 - int count = mapper.selectLeaseContent(String.valueOf(dto.getOrderId())); + int count = leaseRepairRecordMapper.selectLeaseContent(String.valueOf(dto.getOrderId())); if (count > 0) { dto.setIsLeaseContent(1); } else { dto.setIsLeaseContent(0); } dto.setPartBacked(list.stream().anyMatch(o -> OrderStatusEnum.ORDER_UNDER_LEASE.getStatus().toString().equals(o.getOrderStatus()))); + //TODO计算总费用 + LeaseRepair leaseRepair = new LeaseRepair(); + leaseRepair.setOrderId(String.valueOf(dto.getOrderId())); + List leaseRepairRecords = leaseRepairRecordMapper.getLeaseRepairRecordList(leaseRepair); + BigDecimal totalRepairScrapLossPrice = BigDecimal.ZERO; + if (!CollectionUtils.isEmpty(leaseRepairRecords)) { + for (LeaseRepairRecord leaseRepairRecord : leaseRepairRecords) { + if (leaseRepairRecord.getRepairChangePrice()==null) { + totalRepairScrapLossPrice = totalRepairScrapLossPrice.add(leaseRepairRecord.getRepairPrice()==null?BigDecimal.ZERO:leaseRepairRecord.getRepairPrice()); + } else { + totalRepairScrapLossPrice = totalRepairScrapLossPrice.add(leaseRepairRecord.getRepairChangePrice()); + } + if (leaseRepairRecord.getScrapChangePrice()==null) { + totalRepairScrapLossPrice = totalRepairScrapLossPrice.add(leaseRepairRecord.getScrapPrice()==null?BigDecimal.ZERO:leaseRepairRecord.getScrapPrice()); + } else { + totalRepairScrapLossPrice = totalRepairScrapLossPrice.add(leaseRepairRecord.getScrapChangePrice()); + } + if (leaseRepairRecord.getLossChangePrice()==null) { + totalRepairScrapLossPrice = totalRepairScrapLossPrice.add(leaseRepairRecord.getLossPrice()==null?BigDecimal.ZERO:leaseRepairRecord.getLossPrice()); + } else { + totalRepairScrapLossPrice = totalRepairScrapLossPrice.add(leaseRepairRecord.getLossChangePrice()); + } + } + dto.setTotalRepairScrapLossPrice(totalRepairScrapLossPrice); + } + dto.setTotalRealPrice(BigDecimal.ZERO.add(totalRentalPrice).add(totalRepairScrapLossPrice)); } return orderInfoDtos; } diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml index 07d59eb..e8351d6 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/lease/LeaseRepairRecordMapper.xml @@ -490,4 +490,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHERE lr.order_id = #{orderId} + + \ No newline at end of file diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml index f28593f..fc69813 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml @@ -98,6 +98,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" moi.code AS code, GROUP_CONCAT(hh.id) AS ids, moi.order_time, + mdi.own_co as sellerCompany, up.dept_name AS czcompanyName, mdi.person_phone AS personPhone, su.phonenumber AS phoneNumber, @@ -229,6 +230,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"