Browse Source

2022年11月17日17:43:15

纪新园 3 years ago
parent
commit
4834810ce4

+ 55 - 13
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportController.java

@@ -16,23 +16,26 @@
  */
 package org.springblade.box.tube.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
-import javax.validation.Valid;
-
+import org.springblade.box.tube.entity.Transport;
+import org.springblade.box.tube.service.ITransportService;
+import org.springblade.box.tube.vo.TransportVO;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.box.tube.entity.Transport;
-import org.springblade.box.tube.vo.TransportVO;
-import org.springblade.box.tube.service.ITransportService;
-import org.springblade.core.boot.ctrl.BladeController;
+
+import javax.validation.Valid;
 
 /**
  * 出口装运/进口返程信息表 控制器
@@ -55,7 +58,7 @@ public class TransportController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入transport")
 	public R<Transport> detail(Transport transport) {
-		Transport detail = transportService.getOne(Condition.getQueryWrapper(transport));
+		Transport detail = transportService.getDetail(transport);
 		return R.data(detail);
 	}
 
@@ -66,7 +69,29 @@ public class TransportController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入transport")
 	public R<IPage<Transport>> list(Transport transport, Query query) {
-		IPage<Transport> pages = transportService.page(Condition.getPage(query), Condition.getQueryWrapper(transport));
+		LambdaQueryWrapper<Transport> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Transport::getTenantId, AuthUtil.getTenantId())
+			.eq(Transport::getIsDeleted, 0)
+			.like(ObjectUtils.isNotNull(transport.getSysNo()), Transport::getSysNo, transport.getSysNo())
+			.like(ObjectUtils.isNotNull(transport.getContractNo()), Transport::getContractNo, transport.getContractNo())
+			.like(ObjectUtils.isNotNull(transport.getCode()), Transport::getCode, transport.getCode())
+			.eq(ObjectUtils.isNotNull(transport.getStatus()), Transport::getStatus, transport.getStatus())
+			.eq(ObjectUtils.isNotNull(transport.getCorpId()), Transport::getCorpId, transport.getCorpId())
+			.eq(ObjectUtils.isNotNull(transport.getDepartureHarborId()), Transport::getDepartureHarborId, transport.getDepartureHarborId())
+			.eq(ObjectUtils.isNotNull(transport.getObjectiveHarborId()), Transport::getObjectiveHarborId, transport.getObjectiveHarborId())
+			.eq(ObjectUtils.isNotNull(transport.getShippingCompanyId()), Transport::getShippingCompanyId, transport.getShippingCompanyId())
+			.eq(ObjectUtils.isNotNull(transport.getBillType()), Transport::getBillType, transport.getBillType());
+		if (transport.getEffectiveDateList() != null && transport.getEffectiveDateList().size() > 1) {
+			lambdaQueryWrapper.ge(Transport::getEffectiveDate, transport.getEffectiveDateList().get(0));
+			lambdaQueryWrapper.le(Transport::getEffectiveDate, transport.getEffectiveDateList().get(1));
+		}
+		if (transport.getStartingRentDateList() != null && transport.getStartingRentDateList().size() > 1) {
+			lambdaQueryWrapper.ge(Transport::getStartingRentDate, transport.getStartingRentDateList().get(0));
+			lambdaQueryWrapper.le(Transport::getStartingRentDate, transport.getStartingRentDateList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(Transport::getCreateTime);
+
+		IPage<Transport> pages = transportService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -108,10 +133,10 @@ public class TransportController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入transport")
 	public R submit(@Valid @RequestBody Transport transport) {
-		return R.status(transportService.saveOrUpdate(transport));
+		return R.data(transportService.add(transport));
 	}
 
-	
+
 	/**
 	 * 删除 出口装运/进口返程信息表
 	 */
@@ -122,5 +147,22 @@ public class TransportController extends BladeController {
 		return R.status(transportService.removeByIds(Func.toLongList(ids)));
 	}
 
-	
+	/**
+	 * 出口装运/进口返程 状态更新
+	 */
+	@PostMapping("/statusUpdate")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入transport")
+	public R statusUpdate(@RequestParam("ids") String ids,
+						  @RequestParam("type") String type,
+						  @RequestParam("date") String date,
+						  @RequestParam("address") String address,
+						  @RequestParam("addressId") String addressId,
+						  @RequestParam("status") String status,
+						  @RequestParam("transportId") String transportId
+	)throws Exception {
+		return R.data(transportService.statusUpdate(ids,type,date,address,addressId,status,transportId));
+	}
+
+
 }

+ 10 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/ITransportService.java

@@ -17,9 +17,14 @@
 package org.springblade.box.tube.service;
 
 import org.springblade.box.tube.entity.Transport;
+import org.springblade.box.tube.entity.TransportItem;
 import org.springblade.box.tube.vo.TransportVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.tool.api.R;
+
+import java.text.ParseException;
+import java.util.List;
 
 /**
  * 出口装运/进口返程信息表 服务类
@@ -38,4 +43,9 @@ public interface ITransportService extends IService<Transport> {
 	 */
 	IPage<TransportVO> selectTransportPage(IPage<TransportVO> page, TransportVO transport);
 
+    Transport getDetail(Transport transport);
+
+	Transport add(Transport transport);
+
+	List<TransportItem> statusUpdate(String ids, String type, String date, String address, String addressId,String status,String transportId) throws ParseException;
 }

+ 296 - 5
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java

@@ -16,13 +16,37 @@
  */
 package org.springblade.box.tube.service.impl;
 
-import org.springblade.box.tube.entity.Transport;
-import org.springblade.box.tube.vo.TransportVO;
-import org.springblade.box.tube.mapper.TransportMapper;
-import org.springblade.box.tube.service.ITransportService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.entity.*;
+import org.springblade.box.tube.mapper.*;
+import org.springblade.box.tube.service.ITransportService;
+import org.springblade.box.tube.vo.TransportVO;
+import org.springblade.check.feign.ICheckClient;
+import org.springblade.client.entity.FeesDesc;
+import org.springblade.client.feign.IFeesDescClient;
+import org.springblade.client.feign.IMessageClient;
+import org.springblade.client.feign.ISerialClient;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.finance.feign.IFinanceClient;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 出口装运/进口返程信息表 服务实现类
@@ -31,11 +55,278 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
  * @since 2022-11-16
  */
 @Service
+@AllArgsConstructor
 public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport> implements ITransportService {
 
+	private final TransportItemMapper transportItemMapper;
+
+	private final TransportItemFeesMapper transportItemFeesMapper;
+
+	private final TransportFilesMapper transportFilesMapper;
+
+	private final ArchivesTrajectoryMapper archivesTrajectoryMapper;
+
+	private final ICheckClient iCheckClient;
+
+	private final IFinanceClient financeClient;//财务
+
+	private final ISysClient sysClient;
+
+	private IUserClient userClient;//获取用户信息
+
+	private final IMessageClient messageClient;//消息
+
+	private final ArchivesMapper archivesMapper;
+
+	private ISerialClient serialClient;//生成系统编号
+
+	private IFeesDescClient feesDescClient;//费用
+
+
 	@Override
 	public IPage<TransportVO> selectTransportPage(IPage<TransportVO> page, TransportVO transport) {
 		return page.setRecords(baseMapper.selectTransportPage(page, transport));
 	}
 
+	@Override
+	public Transport getDetail(Transport transport) {
+		if (transport.getId() == null) {
+			throw new RuntimeException("缺少必要参数");
+		}
+
+		Transport detail = baseMapper.selectById(transport.getId());
+		if (ObjectUtils.isNotNull(detail)) {
+			//获取明细信息
+			LambdaQueryWrapper<TransportItem> transportItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			transportItemLambdaQueryWrapper.eq(TransportItem::getIsDeleted, 0)
+				.eq(TransportItem::getTenantId, AuthUtil.getTenantId())
+				.eq(TransportItem::getPid, detail.getId());
+			List<TransportItem> transportItemList = transportItemMapper.selectList(transportItemLambdaQueryWrapper);
+			for (TransportItem transportItem : transportItemList) {
+				//获取箱轨迹
+				LambdaQueryWrapper<ArchivesTrajectory> trajectoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				trajectoryLambdaQueryWrapper.eq(ArchivesTrajectory::getIsDeleted, 0)
+					.eq(ArchivesTrajectory::getTenantId, AuthUtil.getTenantId())
+					.eq(ArchivesTrajectory::getCode, transportItem.getCode());
+				List<ArchivesTrajectory> trajectoryList = archivesTrajectoryMapper.selectList(trajectoryLambdaQueryWrapper);
+				transportItem.setArchivesTrajectoryList(trajectoryList);
+			}
+			detail.setTransportItemList(transportItemList);
+
+			//获取费用信息
+			LambdaQueryWrapper<TransportItemFees> transportItemFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			transportItemFeesLambdaQueryWrapper.eq(TransportItemFees::getIsDeleted, 0)
+				.eq(TransportItemFees::getTenantId, AuthUtil.getTenantId())
+				.eq(TransportItemFees::getPid, detail.getId());
+			List<TransportItemFees> transportItemFeesList = transportItemFeesMapper.selectList(transportItemFeesLambdaQueryWrapper);
+			detail.setTransportItemFeesList(transportItemFeesList);
+
+			//获取附件信息
+			LambdaQueryWrapper<TransportFiles> tradingBoxFilesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			tradingBoxFilesLambdaQueryWrapper.eq(TransportFiles::getIsDeleted, 0)
+				.eq(TransportFiles::getTenantId, AuthUtil.getTenantId())
+				.eq(TransportFiles::getPid, detail.getId());
+			List<TransportFiles> tradingBoxFilesList = transportFilesMapper.selectList(tradingBoxFilesLambdaQueryWrapper);
+			detail.setTransportFilesList(tradingBoxFilesList);
+		}
+		return detail;
+	}
+
+	@Override
+	public Transport add(Transport transport) {
+		if (transport.getId() == null) {
+			//获取系统编号
+			R billNo = serialClient.getBillNo(transport.getBillType(), "BOX", transport.getBillType());
+			if (!billNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new Error("生成系统编号失败");
+			}
+
+			transport.setSysNo(billNo.getData().toString());
+			transport.setCreateTime(new Date());
+			transport.setCreateUser(AuthUtil.getUserId());
+			transport.setCreateUserName(AuthUtil.getUserName());
+			transport.setTenantId(AuthUtil.getTenantId());
+			transport.setStatus(0);
+			baseMapper.insert(transport);
+		} else {
+			transport.setUpdateTime(new Date());
+			transport.setUpdateUser(AuthUtil.getUserId());
+			transport.setUpdateUserName(AuthUtil.getUserName());
+			baseMapper.updateById(transport);
+		}
+		//明细数据
+		List<TransportItem> transportItemList = transport.getTransportItemList();
+		if (ObjectUtils.isNotNull(transportItemList) && transportItemList.size() > 0) {
+			List<String> codes = transportItemList.stream().map(TransportItem::getCode).distinct().collect(Collectors.toList());
+			transport.setCode(String.join(",", codes));
+			if (ObjectUtils.isNotNull(transport.getTotalAmount())) {
+				transport.setTotalAmount(transportItemList.stream().map(TransportItem::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			}
+			baseMapper.updateById(transport);
+			for (TransportItem transportItem : transportItemList) {
+				if (transportItem.getId() == null) {
+					transportItem.setCreateUser(AuthUtil.getUserId());
+					transportItem.setCreateTime(new Date());
+					transportItem.setCreateUserName(AuthUtil.getUserName());
+					transportItem.setTenantId(AuthUtil.getTenantId());
+					transportItem.setPid(transport.getId());
+					transportItemMapper.insert(transportItem);
+				} else {
+					transportItem.setUpdateUser(AuthUtil.getUserId());
+					transportItem.setUpdateTime(new Date());
+					transportItem.setUpdateUserName(AuthUtil.getUserName());
+					transportItem.setPid(transport.getId());
+					transportItemMapper.updateById(transportItem);
+				}
+
+				if (ObjectUtils.isNotNull(transportItem.getCode())) {
+					Archives archives = new Archives();
+					archives.setCode(transportItem.getCode());
+					archives.setAddress(transportItem.getAddress());
+					archives.setAddressId(transportItem.getAddressId());
+					archives.setNewDate(transportItem.getNewDate());
+					archivesMapper.updateCode(archives);
+				} else {
+					throw new RuntimeException("箱号不能为空");
+				}
+			}
+			transport.setTransportItemList(transportItemList);
+		}
+		//费用明细
+		List<TransportItemFees> transportItemFeesList = transport.getTransportItemFeesList();
+		if (ObjectUtils.isNotNull(transportItemFeesList) && transportItemFeesList.size() > 0) {
+			for (TransportItemFees transportItemFees : transportItemFeesList) {
+				if (transportItemFees.getId() == null) {
+					transportItemFees.setCreateUser(AuthUtil.getUserId());
+					transportItemFees.setCreateTime(new Date());
+					transportItemFees.setTenantId(AuthUtil.getTenantId());
+					transportItemFees.setPid(transport.getId());
+					transportItemFeesMapper.insert(transportItemFees);
+				} else {
+					transportItemFees.setUpdateUser(AuthUtil.getUserId());
+					transportItemFees.setUpdateTime(new Date());
+					transportItemFees.setPid(transport.getId());
+					transportItemFeesMapper.updateById(transportItemFees);
+				}
+			}
+			transport.setTransportItemFeesList(transportItemFeesList);
+		}
+		//主表附件
+		List<TransportFiles> transportFilesList = transport.getTransportFilesList();
+		if (ObjectUtils.isNotNull(transportFilesList) && transportFilesList.size() > 0) {
+			for (TransportFiles transportFiles : transportFilesList) {
+				if (transportFiles.getId() == null) {
+					transportFiles.setCreateUser(AuthUtil.getUserId());
+					transportFiles.setCreateTime(new Date());
+					transportFiles.setTenantId(AuthUtil.getTenantId());
+					transportFiles.setPid(transport.getId());
+					transportFilesMapper.insert(transportFiles);
+				} else {
+					transportFiles.setUpdateUser(AuthUtil.getUserId());
+					transportFiles.setUpdateTime(new Date());
+					transportFiles.setPid(transport.getId());
+					transportFilesMapper.updateById(transportFiles);
+				}
+			}
+			transport.setTransportFilesList(transportFilesList);
+		}
+		return transport;
+	}
+
+	@Override
+	public List<TransportItem> statusUpdate(String ids, String type, String date, String address, String addressId, String status, String transportId) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+
+		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+		//获取订单生效、失效日期
+		Transport transport = baseMapper.selectById(transportId);
+		if (ObjectUtils.isNull(transport) || ObjectUtils.isNull(transport.getEffectiveDate()) || ObjectUtils.isNull(transport.getExpiryDate())) {
+			throw new RuntimeException("数据不全,操作失败");
+		}
+
+		//最新时间
+		Date newDate;
+		try {
+			newDate = formatter.parse(date);
+		} catch (Exception e) {
+			throw new RuntimeException(e.getMessage());
+		}
+
+		int days = 0;
+
+		if (transport.getExpiryDate().compareTo(newDate) < 0) {
+			//计算超期天数
+			days = (int) ((newDate.getTime() - transport.getExpiryDate().getTime()) / (1000 * 3600 * 24)) + 1;
+		}
+
+		List<TransportItem> transportItemList = new ArrayList<>();
+
+		List<Long> list = Func.toLongList(ids);
+		//循环更新箱动态
+		for (Long id : list) {
+			TransportItem transportItem = transportItemMapper.selectById(id);
+			transportItem.setAddress(address);
+			transportItem.setAddressId(Long.parseLong(addressId));
+			transportItem.setNewDate(newDate);
+			transportItem.setUpdateTime(new Date());
+			transportItem.setUpdateUser(AuthUtil.getUserId());
+			transportItem.setUpdateUserName(AuthUtil.getUserName());
+			transportItem.setStatus(type);
+			if ("2".equals(status) && "空箱入场".equals(type)) {
+				//判断空箱入场时间是否大于合同时间  true 计算超期金额  false 不计算
+				if (transport.getExpiryDate().compareTo(newDate) < 0) {
+					//计算超期金额
+					BigDecimal amount = transportItem.getOverduePrice().multiply(new BigDecimal(days), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP);
+					transportItem.setOverdueAmount(amount);
+					R<FeesDesc> feesDescR = feesDescClient.getFeesByName("超期");
+					if (feesDescR.isSuccess() && ObjectUtils.isNotNull(feesDescR.getData())) {
+						TransportItemFees transportItemFees = new TransportItemFees();
+						transportItemFees.setCreateUser(AuthUtil.getUserId());
+						transportItemFees.setCreateTime(new Date());
+						transportItemFees.setTenantId(AuthUtil.getTenantId());
+						transportItemFees.setPid(transport.getId());
+						transportItemFees.setFeesType(1);
+						transportItemFees.setCode(transportItem.getCode());
+						transportItemFees.setSort(1);
+						transportItemFees.setItemId(feesDescR.getData().getId());
+						transportItemFees.setCorpId(transport.getCorpId());
+						transportItemFees.setQuantity(new BigDecimal(days));
+						transportItemFees.setPrice(transportItem.getOverduePrice());
+						transportItemFees.setAmount(amount);
+						transportItemFees.setCurrency("CNY");
+						transportItemFees.setAutoGenerate("0");
+						transportItemFees.setUnit(transportItem.getBoxType());
+						transportItemFeesMapper.insert(transportItemFees);
+					}
+				}
+			}
+			transportItemMapper.updateById(transportItem);
+			Archives archives = new Archives();
+			archives.setCode(transportItem.getCode());
+			archives.setAddress(address);
+			archives.setAddressId(Long.parseLong(addressId));
+			archives.setNewDate(newDate);
+			archives.setBoxAccessStatus(type);
+			archivesMapper.updateCode(archives);
+
+			ArchivesTrajectory archivesTrajectory = new ArchivesTrajectory();
+			archivesTrajectory.setStatus(type);
+			archivesTrajectory.setCode(transportItem.getCode());
+			archivesTrajectory.setAddress(address);
+			archivesTrajectory.setNewDate(newDate);
+			archivesTrajectory.setCreateTime(new Date());
+			archivesTrajectory.setCreateUser(AuthUtil.getUserId());
+			archivesTrajectory.setCreateUserName(AuthUtil.getUserName());
+			archivesTrajectory.setTenantId(AuthUtil.getTenantId());
+			archivesTrajectoryMapper.insert(archivesTrajectory);
+
+			transportItemList.add(transportItem);
+		}
+		return transportItemList;
+	}
+
 }