Browse Source

陆运修改

sunhz 3 years ago
parent
commit
749d58520c
19 changed files with 588 additions and 55 deletions
  1. 18 14
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderChange.java
  2. 12 0
      blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderItem.java
  3. 52 5
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java
  4. 27 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/FactoryExcel.java
  5. 44 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/FleetExcel.java
  6. 19 3
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java
  7. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsAttnServiceImpl.java
  8. 95 6
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  9. 5 4
      blade-service/blade-client/src/main/java/org/springblade/client/land/controller/LandDriverController.java
  10. 16 0
      blade-service/blade-client/src/main/java/org/springblade/client/land/controller/LandVehicleController.java
  11. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/land/excel/DriverExcel.java
  12. 11 0
      blade-service/blade-client/src/main/java/org/springblade/client/land/service/ILandVehicleService.java
  13. 38 1
      blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandDriverServiceImpl.java
  14. 75 3
      blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandVehicleServiceImpl.java
  15. 26 1
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderChangeController.java
  16. 20 0
      blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderItemController.java
  17. 17 1
      blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderItemService.java
  18. 109 13
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderItemServiceImpl.java
  19. 2 2
      blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

+ 18 - 14
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderChange.java

@@ -16,17 +16,17 @@
  */
 package org.springblade.land.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
-import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
 /**
  * 陆运订单动态表实体类
  *
@@ -46,20 +46,20 @@ public class OrderChange implements Serializable {
 	@ApiModelProperty(value = "主键")
 	private Long id;
 	/**
-	 * 订单ID
-	 */
-	@ApiModelProperty(value = "订单ID")
-	private Long orderId;
-	/**
 	 * 明细ID
 	 */
 	@ApiModelProperty(value = "明细ID")
 	private Long itemId;
 	/**
-	 * 状态
+	 * 内容
+	 */
+	@ApiModelProperty(value = "内容")
+	private String content;
+	/**
+	 * 类型
 	 */
-	@ApiModelProperty(value = "状态")
-	private Integer status;
+	@ApiModelProperty(value = "类型")
+	private Integer kind;
 	/**
 	 * 租户
 	 */
@@ -74,7 +74,11 @@ public class OrderChange implements Serializable {
 	 * 变更时间
 	 */
 	@ApiModelProperty(value = "变更时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date changeTime;
 
+	@TableField(exist = false)
+	private String changeUserName;
 
 }

+ 12 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderItem.java

@@ -342,4 +342,16 @@ public class OrderItem implements Serializable {
 	@TableField(exist = false)
 	private List<Long> idList;
 
+	@TableField(exist = false)
+	private String originalFleetName;
+
+	@TableField(exist = false)
+	private String originalPlateNo;
+
+	@TableField(exist = false)
+	private String originalDriverName;
+
+	@TableField(exist = false)
+	private String originalTel;
+
 }

+ 52 - 5
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -9,16 +9,12 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
-import org.springblade.client.corps.excel.CorpsCompanyExcel;
-import org.springblade.client.corps.excel.CorpsExcel;
-import org.springblade.client.corps.excel.CorpsSupplierExcel;
+import org.springblade.client.corps.excel.*;
 import org.springblade.client.corps.service.ICorpsDescService;
 import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.vo.CorpListVo;
 import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.datascope.annotation.DataAuth;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -26,6 +22,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.finance.vojo.Acc;
@@ -326,4 +323,54 @@ public class CorpsDescController extends BladeController {
 		return corpsDescService.copy(corpsDesc);
 	}
 
+	/**
+	 * 导入模板
+	 */
+	@GetMapping("/import-fleet-template")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "导入模板")
+	public void importFleetTemplate(HttpServletResponse response) {
+		List<FleetExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-车队", "导入数据表", list, FleetExcel.class);
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@PostMapping("/import-fleet-data")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "导入数据", notes = "传入excel")
+	public R importFleetData(MultipartFile file) {
+		List<FleetExcel> excelList = ExcelUtil.read(file, FleetExcel.class);
+		if (CollectionUtil.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return corpsDescService.importFleetData(excelList, false);
+	}
+
+	/**
+	 * 导入模板
+	 */
+	@GetMapping("/import-factory-template")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "导入模板")
+	public void importFactoryTemplate(HttpServletResponse response) {
+		List<FactoryExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-工厂", "导入数据表", list, FactoryExcel.class);
+	}
+
+	/**
+	 * 导入数据
+	 */
+	@PostMapping("/import-factory-data")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "导入数据", notes = "传入excel")
+	public R importFactoryData(MultipartFile file) {
+		List<FactoryExcel> excelList = ExcelUtil.read(file, FactoryExcel.class);
+		if (CollectionUtil.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return corpsDescService.importFactoryData(excelList, false);
+	}
+
 }

+ 27 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/FactoryExcel.java

@@ -0,0 +1,27 @@
+package org.springblade.client.corps.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class FactoryExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ExcelProperty("工厂编号(必填)")
+	private String code;
+
+	@ExcelProperty("工厂名称(必填)")
+	private String cname;
+
+	@ExcelProperty("工厂分类(必填)")
+	private String type;
+
+}

+ 44 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/FleetExcel.java

@@ -0,0 +1,44 @@
+package org.springblade.client.corps.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class FleetExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@ExcelProperty("车队编号(必填)")
+	private String code;
+
+	@ExcelProperty("车队名称(必填)")
+	private String cname;
+
+	@ExcelProperty("车队分类(必填)")
+	private String type;
+
+	@ExcelProperty(value = "道路经营许可证号")
+	private String roadOperationKey;
+
+	@ExcelProperty(value = "道路经营许可范围")
+	private String roadOperationScope;
+
+	@ExcelProperty(value = "登记机关")
+	private String registrationAuthority;
+
+	@ExcelProperty(value = "成立日期")
+	private Date establishDate;
+
+	@ExcelProperty(value = "使用车辆数量")
+	private Integer vehicleCount;
+
+}

+ 19 - 3
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java

@@ -18,9 +18,7 @@ package org.springblade.client.corps.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.springblade.client.corps.excel.CorpsCompanyExcel;
-import org.springblade.client.corps.excel.CorpsExcel;
-import org.springblade.client.corps.excel.CorpsSupplierExcel;
+import org.springblade.client.corps.excel.*;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.core.tool.api.R;
@@ -122,4 +120,22 @@ public interface ICorpsDescService extends IService<CorpsDesc> {
 	 */
 	R copy(CorpsDesc corpsDesc);
 
+	/**
+	 * 导入车队
+	 *
+	 * @param data
+	 * @param
+	 * @return
+	 */
+	R importFleetData(List<FleetExcel> data, Boolean isCovered);
+
+	/**
+	 * 导入工厂
+	 *
+	 * @param data
+	 * @param
+	 * @return
+	 */
+	R importFactoryData(List<FactoryExcel> data, Boolean isCovered);
+
 }

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsAttnServiceImpl.java

@@ -68,7 +68,7 @@ public class CorpsAttnServiceImpl extends ServiceImpl<CorpsAttnMapper, CorpsAttn
 		User user = new User();
 		user.setTenantId(AuthUtil.getTenantId());
 		user.setUserType(1);
-		user.setAccount(attn.getCname());
+		user.setAccount(attn.getTel());
 		user.setName(attn.getCname());
 		user.setRealName(attn.getCname());
 		user.setUserType(1);

+ 95 - 6
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -7,9 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
-import org.springblade.client.corps.excel.CorpsCompanyExcel;
-import org.springblade.client.corps.excel.CorpsExcel;
-import org.springblade.client.corps.excel.CorpsSupplierExcel;
+import org.springblade.client.corps.excel.*;
 import org.springblade.client.corps.mapper.CorpsAddrMapper;
 import org.springblade.client.corps.mapper.CorpsDescMapper;
 import org.springblade.client.corps.mapper.CorpsTypeDescMapper;
@@ -20,6 +18,9 @@ import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
@@ -221,7 +222,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 					//名称相等视为重复数据
 					LambdaQueryWrapper<CorpsDesc> queryWrapper = new LambdaQueryWrapper<>();
 					queryWrapper.eq(CorpsDesc::getCname, corpsDesc.getCname());
-					queryWrapper.eq(CorpsDesc::getCorpType, "KH");
+					queryWrapper.like(CorpsDesc::getCorpType, "KH");
 					queryWrapper.eq(CorpsDesc::getIsDeleted, 0);
 					CorpsDesc selectOne = baseMapper.selectOne(queryWrapper);
 					if (selectOne == null) {
@@ -307,7 +308,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 					LambdaQueryWrapper<CorpsDesc> queryWrapper = new LambdaQueryWrapper<>();
 					queryWrapper.eq(CorpsDesc::getCname, corpsDesc.getCname());
 					queryWrapper.eq(CorpsDesc::getIsDeleted, 0);
-					queryWrapper.eq(CorpsDesc::getCorpType, "GS");
+					queryWrapper.like(CorpsDesc::getCorpType, "GS");
 					CorpsDesc selectOne = baseMapper.selectOne(queryWrapper);
 					if (selectOne == null) {
 						corpsDesc.setCorpType("GS");
@@ -376,7 +377,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 					LambdaQueryWrapper<CorpsDesc> queryWrapper = new LambdaQueryWrapper<>();
 					queryWrapper.eq(CorpsDesc::getCname, corpsDesc.getCname());
 					queryWrapper.eq(CorpsDesc::getIsDeleted, 0);
-					queryWrapper.eq(CorpsDesc::getCorpType, "GYS");
+					queryWrapper.like(CorpsDesc::getCorpType, "GYS");
 					CorpsDesc selectOne = baseMapper.selectOne(queryWrapper);
 					if (selectOne == null) {
 						corpsDesc.setCorpType("GYS");
@@ -427,6 +428,94 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 		return R.success("同步成功");
 	}
 
+	@Override
+	public R importFleetData(List<FleetExcel> data, Boolean isCovered) {
+		for (int i = 0; i < data.size(); i++) {
+			FleetExcel excel = data.get(i);
+
+			if (StringUtil.isBlank(excel.getCode())) {
+				return R.fail("第" + (i + 1) + "行数据异常,车队编号不能为空");
+			}
+			if (StringUtil.isBlank(excel.getCname())) {
+				return R.fail("第" + (i + 1) + "行数据异常,车队名称不能为空");
+			}
+			if (StringUtil.isBlank(excel.getType())) {
+				return R.fail("第" + (i + 1) + "行数据异常,车队分类不能为空");
+			}
+
+			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<CorpsDesc>()
+				.eq(CorpsDesc::getCname, excel.getCname())
+				.like(CorpsDesc::getCorpType, "CD")
+				.eq(CorpsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(CorpsDesc::getIsDeleted, 0)
+			);
+			if (count > 0) {
+				return R.fail("第" + (i + 1) + "行数据异常,车队名称已存在");
+			}
+
+			CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(excel.getType(), AuthUtil.getTenantId());
+			if (ObjectUtil.isEmpty(corpsType)) {
+				return R.fail("第" + (i + 1) + "行数据异常,车队分类不存在");
+			}
+			Long corpsTypeId = corpsType.getId();
+
+			CorpsDesc fleet = BeanUtil.copy(excel, CorpsDesc.class);
+			if (!ObjectUtil.isEmpty(fleet)) {
+				fleet.setCorpsTypeId(String.valueOf(corpsTypeId));
+				fleet.setCorpType("CD");
+				fleet.setCreateTime(new Date());
+				fleet.setCreateUser(AuthUtil.getUserId());
+				fleet.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+				baseMapper.insert(fleet);
+			}
+		}
+		return R.success("ok");
+	}
+
+	@Override
+	public R importFactoryData(List<FactoryExcel> data, Boolean isCovered) {
+		for (int i = 0; i < data.size(); i++) {
+			FactoryExcel excel = data.get(i);
+
+			if (StringUtil.isBlank(excel.getCode())) {
+				return R.fail("第" + (i + 1) + "行数据异常,工厂编号不能为空");
+			}
+			if (StringUtil.isBlank(excel.getCname())) {
+				return R.fail("第" + (i + 1) + "行数据异常,工厂名称不能为空");
+			}
+			if (StringUtil.isBlank(excel.getType())) {
+				return R.fail("第" + (i + 1) + "行数据异常,工厂分类不能为空");
+			}
+
+			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<CorpsDesc>()
+				.eq(CorpsDesc::getCname, excel.getCname())
+				.like(CorpsDesc::getCorpType, "GC")
+				.eq(CorpsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(CorpsDesc::getIsDeleted, 0)
+			);
+			if (count > 0) {
+				return R.fail("第" + (i + 1) + "行数据异常,工厂名称已存在");
+			}
+
+			CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(excel.getType(), AuthUtil.getTenantId());
+			if (ObjectUtil.isEmpty(corpsType)) {
+				return R.fail("第" + (i + 1) + "行数据异常,工厂分类不存在");
+			}
+			Long corpsTypeId = corpsType.getId();
+
+			CorpsDesc factory = BeanUtil.copy(excel, CorpsDesc.class);
+			if (!ObjectUtil.isEmpty(factory)) {
+				factory.setCorpsTypeId(String.valueOf(corpsTypeId));
+				factory.setCorpType("GC");
+				factory.setCreateTime(new Date());
+				factory.setCreateUser(AuthUtil.getUserId());
+				factory.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+				baseMapper.insert(factory);
+			}
+		}
+		return R.success("ok");
+	}
+
 
 	/**
 	 * 保护客户联系人信息

+ 5 - 4
blade-service/blade-client/src/main/java/org/springblade/client/land/controller/LandDriverController.java

@@ -161,7 +161,10 @@ public class LandDriverController extends BladeController {
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入landDriver")
 	public R submit(@Valid @RequestBody LandDriver landDriver) {
-		return R.status(landDriverService.saveDriver(landDriver));
+		if (landDriverService.saveDriver(landDriver)) {
+			return R.status(true);
+		}
+		return R.fail("司机名称已存在");
 	}
 
 	/**
@@ -181,7 +184,7 @@ public class LandDriverController extends BladeController {
 	@PostMapping("/import-data")
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "导入数据", notes = "传入excel")
-	public R importUser(MultipartFile file) {
+	public R importData(MultipartFile file) {
 		List<DriverExcel> excelList = ExcelUtil.read(file, DriverExcel.class);
 		if (CollectionUtil.isEmpty(excelList)) {
 			throw new SecurityException("数据不能为空");
@@ -189,7 +192,6 @@ public class LandDriverController extends BladeController {
 		return landDriverService.importData(excelList, false);
 	}
 
-
 	/**
 	 * 删除 陆运司机表
 	 */
@@ -210,5 +212,4 @@ public class LandDriverController extends BladeController {
 		return landDriverService.createUser(landDriver);
 	}
 
-
 }

+ 16 - 0
blade-service/blade-client/src/main/java/org/springblade/client/land/controller/LandVehicleController.java

@@ -38,12 +38,14 @@ 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.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
@@ -232,4 +234,18 @@ public class LandVehicleController extends BladeController {
 		ExcelUtil.export(response, "导入模板-陆运车辆", "导入数据表", list, VehicleExcel.class);
 	}
 
+	/**
+	 * 导入数据
+	 */
+	@PostMapping("/import-data")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "导入数据", notes = "传入excel")
+	public R importData(MultipartFile file) {
+		List<VehicleExcel> excelList = ExcelUtil.read(file, VehicleExcel.class);
+		if (CollectionUtil.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return landVehicleService.importData(excelList, false);
+	}
+
 }

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/land/excel/DriverExcel.java

@@ -68,7 +68,7 @@ public class DriverExcel implements Serializable {
 	 * 性别
 	 */
 	@ExcelProperty(value = "性别")
-	private String sex;
+	private String sexDetail;
 	/**
 	 * 驾驶证有效期
 	 */

+ 11 - 0
blade-service/blade-client/src/main/java/org/springblade/client/land/service/ILandVehicleService.java

@@ -19,7 +19,9 @@ package org.springblade.client.land.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.client.entity.LandVehicle;
+import org.springblade.client.land.excel.VehicleExcel;
 import org.springblade.client.vo.LandVehicleVO;
+import org.springblade.core.tool.api.R;
 
 import java.util.List;
 
@@ -56,4 +58,13 @@ public interface ILandVehicleService extends IService<LandVehicle> {
 	 */
 	boolean removeVehicle(List<Long> idList);
 
+	/**
+	 * 导入数据
+	 *
+	 * @param data
+	 * @param
+	 * @return
+	 */
+	R importData(List<VehicleExcel> data, Boolean isCovered);
+
 }

+ 38 - 1
blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandDriverServiceImpl.java

@@ -34,6 +34,7 @@ import org.springblade.client.vo.LandDriverVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.system.user.entity.User;
@@ -69,11 +70,30 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 	@Transactional(rollbackFor = Exception.class)
 	public boolean saveDriver(LandDriver driver) {
 		if (ObjectUtil.isEmpty(driver.getId())) {
+			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<LandDriver>()
+				.eq(LandDriver::getName, driver.getName())
+				.eq(LandDriver::getTenantId, AuthUtil.getTenantId())
+				.eq(LandDriver::getIsDeleted, 0)
+			);
+			if (count > 0) {
+				return false;
+			}
+
 			driver.setTenantId(AuthUtil.getTenantId());
 			driver.setCreateUser(AuthUtil.getUserId());
 			driver.setCreateTime(new Date());
 			baseMapper.insert(driver);
 		} else {
+			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<LandDriver>()
+				.eq(LandDriver::getName, driver.getName())
+				.ne(LandDriver::getId, driver.getId())
+				.eq(LandDriver::getTenantId, AuthUtil.getTenantId())
+				.eq(LandDriver::getIsDeleted, 0)
+			);
+			if (count > 0) {
+				return false;
+			}
+
 			driver.setUpdateUser(AuthUtil.getUserId());
 			driver.setUpdateTime(new Date());
 			baseMapper.updateById(driver);
@@ -121,7 +141,7 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 		User user = new User();
 		user.setTenantId(AuthUtil.getTenantId());
 		user.setUserType(1);
-		user.setAccount(driver.getName());
+		user.setAccount(driver.getTel());
 		user.setName(driver.getName());
 		user.setRealName(driver.getName());
 		user.setUserType(1);
@@ -164,6 +184,9 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 			if (StringUtil.isBlank(excel.getName())) {
 				return R.fail("第" + (i + 1) + "行数据异常,司机姓名不能为空");
 			}
+			if (StringUtil.isBlank(excel.getTel())) {
+				return R.fail("第" + (i + 1) + "行数据异常,司机电话不能为空");
+			}
 
 			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<LandDriver>()
 				.eq(LandDriver::getName, excel.getName())
@@ -187,6 +210,20 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 				}
 				fleetId = fleet.getId();
 			}
+
+			LandDriver driver = BeanUtil.copy(excel, LandDriver.class);
+			if (!ObjectUtil.isEmpty(driver)) {
+				driver.setFleetId(fleetId);
+				if ("男".equals(excel.getSexDetail())) {
+					driver.setSex(1);
+				}
+				if ("女".equals(excel.getSexDetail())) {
+					driver.setSex(2);
+				}
+				driver.setCreateUser(AuthUtil.getUserId());
+				driver.setCreateTime(new Date());
+				baseMapper.insert(driver);
+			}
 		}
 		return R.success("ok");
 	}

+ 75 - 3
blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandVehicleServiceImpl.java

@@ -22,16 +22,21 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.client.common.mapper.CommonFileMapper;
 import org.springblade.client.constant.LandConstant;
-import org.springblade.client.entity.CommonFile;
-import org.springblade.client.entity.LandVehicle;
-import org.springblade.client.entity.LandVehicleChange;
+import org.springblade.client.corps.mapper.CorpsDescMapper;
+import org.springblade.client.entity.*;
+import org.springblade.client.land.excel.VehicleExcel;
+import org.springblade.client.land.mapper.LandDriverMapper;
 import org.springblade.client.land.mapper.LandVehicleChangeMapper;
 import org.springblade.client.land.mapper.LandVehicleMapper;
 import org.springblade.client.land.service.ILandVehicleService;
 import org.springblade.client.vo.LandVehicleVO;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -48,6 +53,10 @@ public class LandVehicleServiceImpl extends ServiceImpl<LandVehicleMapper, LandV
 
 	private final LandVehicleChangeMapper landVehicleChangeMapper;
 
+	private final LandDriverMapper landDriverMapper;
+
+	private final CorpsDescMapper corpsDescMapper;
+
 	private final CommonFileMapper commonFileMapper;
 
 	@Override
@@ -59,6 +68,9 @@ public class LandVehicleServiceImpl extends ServiceImpl<LandVehicleMapper, LandV
 	public boolean saveVehicle(LandVehicle vehicle) {
 		boolean temp = true;
 		if (ObjectUtil.isEmpty(vehicle.getId())) {
+			if (ObjectUtil.isEmpty(vehicle.getDriverId())) {
+				temp = false;
+			}
 			vehicle.setTenantId(AuthUtil.getTenantId());
 			vehicle.setCreateUser(AuthUtil.getUserId());
 			vehicle.setCreateTime(new Date());
@@ -121,4 +133,64 @@ public class LandVehicleServiceImpl extends ServiceImpl<LandVehicleMapper, LandV
 		return true;
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R importData(List<VehicleExcel> data, Boolean isCovered) {
+		for (int i = 0; i < data.size(); i++) {
+			VehicleExcel excel = data.get(i);
+
+			if (StringUtil.isBlank(excel.getPlateNo())) {
+				return R.fail("第" + (i + 1) + "行数据异常,车号不能为空");
+			}
+
+			Long fleetId = null;
+			if (StringUtil.isNotBlank(excel.getFleetName())) {
+				CorpsDesc fleet = corpsDescMapper.selectOne(new LambdaQueryWrapper<CorpsDesc>()
+					.eq(CorpsDesc::getCname, excel.getFleetName())
+					.like(CorpsDesc::getCorpType, "CD")
+					.eq(CorpsDesc::getTenantId, AuthUtil.getTenantId())
+					.eq(CorpsDesc::getIsDeleted, 0)
+				);
+				if (ObjectUtil.isEmpty(fleet)) {
+					return R.fail("第" + (i + 1) + "行数据异常,所属车队不存在");
+				}
+				fleetId = fleet.getId();
+			}
+
+			Long driverId = null;
+			if (StringUtil.isNotBlank(excel.getDriverName())) {
+				LandDriver driver = landDriverMapper.selectOne(new LambdaQueryWrapper<LandDriver>()
+					.eq(LandDriver::getName, excel.getDriverName())
+					.eq(LandDriver::getFleetId, fleetId)
+					.eq(LandDriver::getTenantId, AuthUtil.getTenantId())
+					.eq(LandDriver::getIsDeleted, 0)
+				);
+				if (ObjectUtil.isEmpty(driver)) {
+					return R.fail("第" + (i + 1) + "行数据异常,所属司机不存在");
+				}
+				driverId = driver.getId();
+			}
+
+			LandVehicle vehicle = BeanUtil.copy(excel, LandVehicle.class);
+			if (!ObjectUtil.isEmpty(vehicle)) {
+				vehicle.setFleetId(fleetId);
+				vehicle.setDriverId(driverId);
+				vehicle.setCreateUser(AuthUtil.getUserId());
+				vehicle.setCreateTime(new Date());
+				baseMapper.insert(vehicle);
+
+				if (ObjectUtil.isNotEmpty(driverId)) {
+					LandVehicleChange vehicleChange = new LandVehicleChange();
+					vehicleChange.setVehicleId(vehicle.getId());
+					vehicleChange.setDriverId(vehicle.getDriverId());
+					vehicleChange.setChangeUser(AuthUtil.getUserId());
+					vehicleChange.setChangeTime(new Date());
+					vehicleChange.setTenantId(AuthUtil.getTenantId());
+					landVehicleChangeMapper.insert(vehicleChange);
+				}
+			}
+		}
+		return R.success("ok");
+	}
+
 }

+ 26 - 1
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderChangeController.java

@@ -27,12 +27,16 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.land.entity.OrderChange;
 import org.springblade.land.service.IOrderChangeService;
 import org.springblade.land.vo.OrderChangeVO;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 陆运订单动态表 控制器
@@ -42,12 +46,14 @@ import javax.validation.Valid;
  */
 @RestController
 @AllArgsConstructor
-@RequestMapping("/orderchange")
+@RequestMapping("/order-change")
 @Api(value = "陆运订单动态表", tags = "陆运订单动态表接口")
 public class OrderChangeController extends BladeController {
 
 	private final IOrderChangeService orderChangeService;
 
+	private final IUserClient userClient;
+
 	/**
 	 * 详情
 	 */
@@ -71,6 +77,25 @@ public class OrderChangeController extends BladeController {
 	}
 
 	/**
+	 * 陆运订单动态表
+	 */
+	@GetMapping("/all-list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "列表", notes = "传入orderChange")
+	public R<List<OrderChange>> allList(OrderChange orderChange) {
+		List<OrderChange> list = orderChangeService.list(Condition.getQueryWrapper(orderChange));
+		list.forEach(change -> {
+			if (ObjectUtil.isNotEmpty(change.getChangeUser())) {
+				R<User> user = userClient.userInfoById(change.getChangeUser());
+				if (user.isSuccess() && user.getData() != null) {
+					change.setChangeUserName(user.getData().getName());
+				}
+			}
+		});
+		return R.data(list);
+	}
+
+	/**
 	 * 自定义分页 陆运订单动态表
 	 */
 	@GetMapping("/page")

+ 20 - 0
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderItemController.java

@@ -231,4 +231,24 @@ public class OrderItemController extends BladeController {
 		return R.data(orderItemService.fileList(id));
 	}
 
+	/**
+	 * 变更车队
+	 */
+	@PostMapping("/change-fleet")
+	@ApiOperationSupport(order = 17)
+	@ApiOperation(value = "变更车队", notes = "传入orderItem")
+	public R changeFleet(@RequestBody OrderItem orderItem) {
+		return R.data(orderItemService.changeFleet(orderItem));
+	}
+
+	/**
+	 * 变更车辆信息
+	 */
+	@PostMapping("/change-vehicle")
+	@ApiOperationSupport(order = 18)
+	@ApiOperation(value = "变更车辆信息", notes = "传入orderItem")
+	public R changeVehicle(@RequestBody OrderItem orderItem) {
+		return R.status(orderItemService.changeVehicle(orderItem));
+	}
+
 }

+ 17 - 1
blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderItemService.java

@@ -141,11 +141,27 @@ public interface IOrderItemService extends IService<OrderItem> {
 	boolean file(OrderItem orderItem);
 
 	/**
-	 * 附件上传
+	 * 附件列表
 	 *
 	 * @param id
 	 * @return
 	 */
 	List<CommonFile> fileList(Long id);
 
+	/**
+	 * 变更车队
+	 *
+	 * @param orderItem
+	 * @return
+	 */
+	OrderItem changeFleet(OrderItem orderItem);
+
+	/**
+	 * 变更车辆信息
+	 *
+	 * @param orderItem
+	 * @return
+	 */
+	boolean changeVehicle(OrderItem orderItem);
+
 }

+ 109 - 13
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderItemServiceImpl.java

@@ -201,12 +201,12 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		item.setUpdateTime(new Date());
 		baseMapper.updateById(item);
 
-		addChange(orderItem, 1);
+		addChange(orderItem.getId(), "调度", 1);
 
 		OrderItem data = baseMapper.selectById(orderItem.getId());
 
 		Order order = new Order();
-		order.setId(data.getId());
+		order.setId(data.getOrderId());
 		order.setStatus(2);
 		orderMapper.updateById(order);
 		return data;
@@ -232,7 +232,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 			item.setUpdateTime(new Date());
 			baseMapper.updateById(item);
 
-			addChange(baseMapper.selectById(id), 1);
+			addChange(id, "调度", 1);
 		});
 
 		List<OrderItem> itemList = baseMapper.selectList(new LambdaQueryWrapper<OrderItem>()
@@ -279,7 +279,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 			.set(OrderItem::getUpdateTime, new Date())
 			.eq(OrderItem::getId, id));
 
-		addChange(baseMapper.selectById(id), -1);
+		addChange(id, "取消调度", 1);
 
 		OrderItem data = baseMapper.selectById(id);
 
@@ -315,7 +315,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		item.setUpdateTime(new Date());
 		baseMapper.updateById(item);
 
-		addChange(orderItem, 2);
+		addChange(orderItem.getId(), "派车", 1);
 		return true;
 	}
 
@@ -334,7 +334,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 			.set(OrderItem::getUpdateTime, new Date())
 			.eq(OrderItem::getId, id));
 
-		addChange(baseMapper.selectById(id), -2);
+		addChange(id, "取消派车", 1);
 		return true;
 	}
 
@@ -357,7 +357,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		item.setUpdateTime(new Date());
 		baseMapper.updateById(item);
 
-		addChange(orderItem, 3);
+		addChange(orderItem.getId(), "受理", 1);
 		return true;
 	}
 
@@ -379,7 +379,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 			.set(OrderItem::getUpdateTime, new Date())
 			.eq(OrderItem::getId, id));
 
-		addChange(baseMapper.selectById(id), -3);
+		addChange(id, "取消受理", 1);
 		return true;
 	}
 
@@ -394,7 +394,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		item.setUpdateTime(new Date());
 		baseMapper.updateById(item);
 
-		addChange(baseMapper.selectById(id), 4);
+		addChange(id, "完工", 1);
 		return true;
 	}
 
@@ -421,11 +421,107 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		return Collections.emptyList();
 	}
 
-	private void addChange(OrderItem orderItem, Integer status) {
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public OrderItem changeFleet(OrderItem orderItem) {
+		orderItem.setStatus(1);
+		orderItem.setDispatchTime(new Date());
+		orderItem.setUpdateUser(AuthUtil.getUserId());
+		orderItem.setUpdateTime(new Date());
+		baseMapper.updateById(orderItem);
+
+		baseMapper.update(null, new LambdaUpdateWrapper<OrderItem>()
+			.set(OrderItem::getVehicleId, null)
+			.set(OrderItem::getPlateNo, null)
+			.set(OrderItem::getDriverId, null)
+			.set(OrderItem::getTel, null)
+			.set(OrderItem::getFleetRemarks, null)
+			.set(OrderItem::getSendTime, null)
+			.set(OrderItem::getCtnNo, null)
+			.set(OrderItem::getDriverRemarks, null)
+			.set(OrderItem::getOneFeeC, "0.00")
+			.set(OrderItem::getTwoFeeC, "0.00")
+			.set(OrderItem::getThreeFeeC, "0.00")
+			.set(OrderItem::getFourFeeC, "0.00")
+			.set(OrderItem::getFiveFeeC, "0.00")
+			.set(OrderItem::getFeeRemarksC, null)
+			.set(OrderItem::getAcceptTime, null)
+			.eq(OrderItem::getId, orderItem.getId()));
+
+		Integer count = orderChangeMapper.selectCount(new LambdaQueryWrapper<OrderChange>()
+			.eq(OrderChange::getItemId, orderItem.getId())
+			.eq(OrderChange::getKind, 2)
+		);
+
+		if (count < 1) {
+			OrderChange changeTemp = orderChangeMapper.selectOne(new LambdaQueryWrapper<OrderChange>()
+				.eq(OrderChange::getItemId, orderItem.getId())
+				.eq(OrderChange::getContent, "调度")
+				.eq(OrderChange::getKind, 1)
+				.orderByDesc(OrderChange::getChangeTime)
+				.last("limit 1")
+			);
+
+			OrderChange change = new OrderChange();
+			change.setItemId(orderItem.getId());
+			change.setContent(orderItem.getOriginalFleetName());
+			change.setKind(2);
+			change.setTenantId(changeTemp.getTenantId());
+			change.setChangeUser(changeTemp.getChangeUser());
+			change.setChangeTime(changeTemp.getChangeTime());
+			orderChangeMapper.insert(change);
+		}
+		addChange(orderItem.getId(), orderItem.getFleetName(), 2);
+		return baseMapper.selectById(orderItem.getId());
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean changeVehicle(OrderItem orderItem) {
+		orderItem.setUpdateUser(AuthUtil.getUserId());
+		orderItem.setUpdateTime(new Date());
+		baseMapper.updateById(orderItem);
+
+		Integer count = orderChangeMapper.selectCount(new LambdaQueryWrapper<OrderChange>()
+			.eq(OrderChange::getItemId, orderItem.getId())
+			.eq(OrderChange::getKind, 3)
+		);
+
+		if (count < 1) {
+			OrderChange changeTemp = orderChangeMapper.selectOne(new LambdaQueryWrapper<OrderChange>()
+				.eq(OrderChange::getItemId, orderItem.getId())
+				.eq(OrderChange::getContent, "派车")
+				.eq(OrderChange::getKind, 1)
+				.orderByDesc(OrderChange::getChangeTime)
+				.last("limit 1")
+			);
+
+			String content = orderItem.getOriginalPlateNo() + " - " + orderItem.getOriginalDriverName() + " - " + orderItem.getOriginalTel();
+			OrderChange change = new OrderChange();
+			change.setItemId(orderItem.getId());
+			change.setContent(content);
+			change.setKind(3);
+			change.setTenantId(changeTemp.getTenantId());
+			change.setChangeUser(changeTemp.getChangeUser());
+			change.setChangeTime(changeTemp.getChangeTime());
+			orderChangeMapper.insert(change);
+		}
+
+		String content = orderItem.getPlateNo() + " - " + orderItem.getDriverName() + " - " + orderItem.getTel();
+		addChange(orderItem.getId(), content, 3);
+		return true;
+	}
+
+	/**
+	 * 添加变更记录
+	 *
+	 * @param content 内容
+	 */
+	private void addChange(Long id, String content, Integer kind) {
 		OrderChange change = new OrderChange();
-		change.setOrderId(orderItem.getOrderId());
-		change.setItemId(orderItem.getId());
-		change.setStatus(status);
+		change.setItemId(id);
+		change.setContent(content);
+		change.setKind(kind);
 		change.setTenantId(AuthUtil.getTenantId());
 		change.setChangeUser(AuthUtil.getUserId());
 		change.setChangeTime(new Date());

+ 2 - 2
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

@@ -462,9 +462,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				orderItemMapper.insert(childItem);
 
 				OrderChange change = new OrderChange();
-				change.setOrderId(childItem.getOrderId());
 				change.setItemId(childItem.getId());
-				change.setStatus(0);
+				change.setContent("提交");
+				change.setKind(1);
 				change.setTenantId(AuthUtil.getTenantId());
 				change.setChangeUser(AuthUtil.getUserId());
 				change.setChangeTime(new Date());