Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

18482106067 2 лет назад
Родитель
Сommit
fa1f40d110
16 измененных файлов с 578 добавлено и 77 удалено
  1. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java
  2. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java
  3. 8 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/HttpResult.java
  4. 3 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfDriverController.java
  5. 2 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfFleetController.java
  6. 3 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  7. 4 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckReportController.java
  8. 5 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/KwfFleet.java
  9. 42 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfDriverExcelImportDto.java
  10. 34 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfTruckExcelImportDto.java
  11. 60 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfTruckReportExcelImportDto.java
  12. 102 26
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java
  13. 202 25
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java
  14. 99 18
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  15. 11 5
      sckw-modules/sckw-fleet/src/main/resources/mapper/KwfFleetMapper.xml
  16. 1 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoWantBuyMapper.xml

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/Global.java

@@ -65,6 +65,7 @@ public class Global {
     public static final int NUMERICAL_ONE = 1;
     public static final int NUMERICAL_TWO = 2;
     public static final int NUMERICAL_THREE = 3;
+    public static final int NUMERICAL_TWELVE = 12;
 
     /**pid等于0的*/
     public static final String PID = "0";

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/PasswordUtils.java

@@ -123,7 +123,7 @@ public class PasswordUtils {
     public static void main(String[] args) {
 
         String password = PasswordUtils.entryptPassword(PasswordUtils.md5("17358629955"));
-        String md5 = PasswordUtils.md5("123456");
+        String md5 = PasswordUtils.md5("17358629955");
         System.out.println(password);
         System.out.println(md5);
         System.out.println(validatePassword(md5, password));

+ 8 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/HttpResult.java

@@ -32,6 +32,14 @@ public class HttpResult implements Serializable {
 		return r;
 	}
 
+	public static HttpResult error(String msg, Object data) {
+		HttpResult r = new HttpResult();
+		r.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+		r.setMsg(msg);
+		r.setData(data);
+		return r;
+	}
+
 	public static HttpResult error(int code, String msg, Object data) {
 		HttpResult r = new HttpResult();
 		r.setCode(code);

+ 3 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfDriverController.java

@@ -6,7 +6,6 @@ import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.StringUtils;
-import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.easyexcel.RequestHolder;
@@ -87,6 +86,7 @@ public class KwfDriverController {
      **/
     @PostMapping("/statistics")
     public HttpResult statistics(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         Map countMaps = driverService.statistics(params);
         return HttpResult.ok(countMaps);
     }
@@ -99,6 +99,7 @@ public class KwfDriverController {
      **/
     @PostMapping("/select")
     public HttpResult findPage(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         // 设置分页参数
         PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
         List<KwfDriverVo> list = driverService.findPage(params);
@@ -126,6 +127,7 @@ public class KwfDriverController {
      **/
     @PostMapping("/export")
     public HttpResult export(@RequestBody HashMap params) {
+        params.put("entId", LoginUserHolder.getEntId());
         /**分页数据**/
         List<KwfDriverVo> drivers = driverService.findPage(params);
 

+ 2 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfFleetController.java

@@ -53,6 +53,7 @@ public class KwfFleetController {
      **/
     @PostMapping("/select")
     public HttpResult findPage(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         // 设置分页参数
         PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
         List<KwfFleet> list = fleetService.findPage(params);
@@ -80,6 +81,7 @@ public class KwfFleetController {
      **/
     @PostMapping("/export")
     public HttpResult export(@RequestBody HashMap params) {
+        params.put("entId", LoginUserHolder.getEntId());
         /**查询分页数据**/
         List<KwfFleetVo> fleets = fleetService.findPage(params);
 

+ 3 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -103,6 +103,7 @@ public class KwfTruckController {
      **/
     @PostMapping("/statistics")
     public HttpResult statistics(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         Map countMaps = truckService.statistics(params);
         return HttpResult.ok(countMaps);
     }
@@ -115,6 +116,7 @@ public class KwfTruckController {
      **/
     @PostMapping("/select")
     public HttpResult findPage(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         // 设置分页参数
         PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
         List<KwfDriverVo> list = truckService.findPage(params);
@@ -142,6 +144,7 @@ public class KwfTruckController {
      **/
     @PostMapping("/export")
     public HttpResult export(@RequestBody HashMap params) {
+        params.put("entId", LoginUserHolder.getEntId());
         /**查询数据**/
         List<KwfTruckVo> trucks = truckService.findPage(params);
 

+ 4 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckReportController.java

@@ -46,6 +46,7 @@ public class KwfTruckReportController {
      **/
     @PostMapping("/statistics")
     public HttpResult statistics(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         Map countMaps = reportService.statistics(params);
         return HttpResult.ok(countMaps);
     }
@@ -58,6 +59,7 @@ public class KwfTruckReportController {
      **/
     @PostMapping("/select")
     public HttpResult findPage(@RequestBody HashMap params) throws SystemException {
+        params.put("entId", LoginUserHolder.getEntId());
         // 设置分页参数
         PageHelper.startPage(PageResult.getPage(params), PageResult.getPageSize(params));
         List<KwfTruckReportVo> list = reportService.findPage(params);
@@ -73,6 +75,7 @@ public class KwfTruckReportController {
      **/
     @PostMapping("/export")
     public HttpResult export(@RequestBody HashMap params) {
+        params.put("entId", LoginUserHolder.getEntId());
         /**查询数据**/
         List<KwfTruckReportVo> trucks = reportService.findPage(params);
 
@@ -116,7 +119,7 @@ public class KwfTruckReportController {
      **/
     @PostMapping("/import")
     public HttpResult importExcel(@RequestParam("file") MultipartFile file) {
-        return null;
+        return reportService.importExcel(file);
     }
 
     /**

+ 5 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/KwfFleet.java

@@ -19,6 +19,11 @@ public class KwfFleet extends BaseModel {
      */
     private Long entId;
 
+    /**
+     * 车队长
+     */
+    private Long captainId;
+
     /**
      * 车队名称
      */

+ 42 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfDriverExcelImportDto.java

@@ -0,0 +1,42 @@
+package com.sckw.fleet.model.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * @author zk
+ * @desc 司机信息导入
+ * @date 2023/7/6 0006
+ */
+@Data
+public class KwfDriverExcelImportDto implements Serializable {
+    private static final long serialVersionUID = 370622351109421619L;
+
+    /**
+     * 司机姓名
+     */
+    @ExcelProperty(index = 0)
+    @NotBlank(message = "司机姓名不能为空!")
+    @Size(max=10, message = "司机姓名长度不能大于10个字符!")
+    private String name;
+
+    /**
+     * 手机号码
+     */
+    @ExcelProperty(index = 1)
+    @NotBlank(message = "电话号码不能为空!")
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "电话号码格式不正确!")
+    private String phone;
+
+    /**
+     * 身份证号码
+     */
+    @ExcelProperty(index = 2)
+    @NotBlank(message = "司机身份证号不能为空!")
+    @Pattern(regexp = "[0-9A-Za-z]{18}", message = "身份证号码格式不正确!")
+    private String idcard;
+}

+ 34 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfTruckExcelImportDto.java

@@ -0,0 +1,34 @@
+package com.sckw.fleet.model.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author zk
+ * @desc 车辆信息导入
+ * @date 2023/7/6 0006
+ */
+@Data
+public class KwfTruckExcelImportDto implements Serializable {
+    private static final long serialVersionUID = 370622351109421619L;
+
+    /**
+     * 车牌号
+     */
+    @ExcelProperty(index = 0)
+    @NotBlank(message = "车牌号不能为空!")
+    @Size(max=8, message = "车牌号长度不能大于8个字符!")
+    private String truckNo;
+
+    /**
+     * 标准荷载(净重)
+     */
+    @ExcelProperty(index = 1)
+    @NotNull(message = "标准荷载不能为空!")
+    private Double actualWeight;
+}

+ 60 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfTruckReportExcelImportDto.java

@@ -0,0 +1,60 @@
+package com.sckw.fleet.model.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import java.io.Serializable;
+
+/**
+ * @author zk
+ * @desc 车辆上报信息导入
+ * @date 2023/7/6 0006
+ */
+@Data
+public class KwfTruckReportExcelImportDto implements Serializable {
+    private static final long serialVersionUID = 370622351109421619L;
+
+    /**
+     * 车牌号
+     */
+    @ExcelProperty(index = 0)
+    @NotBlank(message = "车牌号不能为空!")
+    @Size(max=8, message = "车牌号长度不能大于8个字符!")
+    private String truckNo;
+
+    /**
+     * 标准荷载(净重)
+     */
+    @ExcelProperty(index = 1)
+    @NotNull(message = "标准荷载不能为空!")
+    private Double actualWeight;
+
+    /**
+     * 司机姓名
+     */
+    @ExcelProperty(index = 2)
+    @NotBlank(message = "司机姓名不能为空!")
+    @Size(max=10, message = "司机姓名长度不能大于10个字符!")
+    private String name;
+
+    /**
+     * 手机号码
+     */
+    @ExcelProperty(index = 3)
+    @NotBlank(message = "电话号码不能为空!")
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "电话号码格式不正确!")
+    private String phone;
+
+    /**
+     * 身份证号码
+     */
+    @ExcelProperty(index = 4)
+    @NotBlank(message = "司机身份证号不能为空!")
+    @Pattern(regexp = "[0-9A-Za-z]{18}", message = "身份证号码格式不正确!")
+    private String idcard;
+}

+ 102 - 26
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java

@@ -1,5 +1,8 @@
 package com.sckw.fleet.service;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
@@ -11,6 +14,8 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.easyexcel.ExcelImportListener;
+import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.dao.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.*;
@@ -25,10 +30,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.io.InputStream;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -37,6 +40,7 @@ import java.util.stream.Collectors;
  * @date 2023/7/6 0006
  */
 @Service
+@SuppressWarnings("all")
 @Transactional(rollbackFor = Exception.class)
 public class KwfDriverService {
 
@@ -222,7 +226,29 @@ public class KwfDriverService {
      * @date 2023/07/11
      **/
     public HttpResult importExcel(MultipartFile file) {
-        return null;
+        /**参数校验**/
+        HttpResult result = this.checkParams(file);
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            return result;
+        }
+
+        /**数据处理**/
+        int count = 0;
+        List<KwfDriverExcelImportDto> driverExcels = (List)result.getData();
+        for (KwfDriverExcelImportDto driverExcel:driverExcels) {
+            //司机信息
+            KwfDriver driver = new KwfDriver();
+            driver.setName(driverExcel.getName());
+            driver.setPhone(driverExcel.getPhone());
+            driver.setIdcard(driverExcel.getIdcard());
+            driver.setAuthStatus(Global.NUMERICAL_TWO);
+            result = driverEdit(driver);
+            if (result.getCode() == HttpStatus.SUCCESS_CODE) {
+                count ++;
+            }
+        }
+
+        return HttpResult.ok("成功导入"+count+"行数据!");
     }
 
     /**
@@ -246,6 +272,7 @@ public class KwfDriverService {
         if (result.getCode() != HttpStatus.SUCCESS_CODE) {
             return result;
         }
+        driver = (KwfDriver)result.getData();
 
         /**身份证信息**/
         KwfDriverCardDto driverCardDto = params.getDriverCard();
@@ -268,9 +295,6 @@ public class KwfDriverService {
             driverQualificationEdit(driverQualificationDto);
         }
 
-        /**司机信息与企业关联信息**/
-        driverEntEdit(driver);
-
         /**车队班组绑定**/
         driverFleetEdit(driver.getId(), params.getFleetId());
 
@@ -373,21 +397,33 @@ public class KwfDriverService {
         if (StringUtils.isBlank(params.getId())) {
             /**唯一性交易**/
             List<KwfDriver> drivers = driverDao.findDriver(new HashMap(){{ put("phone", params.getPhone()); }});
-            if (!CollectionUtils.isEmpty(drivers)) {
-                return HttpResult.error("电话号码已存在!");
+            if (CollectionUtils.isEmpty(drivers)) {
+                /**新增**/
+                String md5 = PasswordUtils.md5(params.getPhone());
+                String password = PasswordUtils.entryptPassword(md5);
+                params.setSalt(PasswordUtils.getSaltSubPwd(password));
+                params.setPassword(password);
+                params.setEntId(LoginUserHolder.getEntId());
+                params.setEntId(params.getEntId() == null ? 1 : params.getEntId());// 暂时处理---------------zk
+                params.setBusinessStatus(Global.NO);
+                params.setStatus(Global.NO);
+                int count = driverDao.insert(params);
+
+                /**司机信息与企业关联信息**/
+                driverEntEdit(params);
+                return count > 0 ? HttpResult.ok(params) : HttpResult.error("司机信息新增失败!");
+            } else {
+                KwfDriver driver = drivers.get(Global.NUMERICAL_ZERO);
+                BeanUtils.copyPropertiesValue(params, driver);
+                int count = driverDao.updateById(driver);
+
+                /**司机信息与企业关联信息**/
+                KwfDriver driverEnt = new KwfDriver();
+                driverEnt.setEntId(LoginUserHolder.getEntId());
+                driverEnt.setId(driver.getId());
+                driverEntEdit(driverEnt);
+                return count > 0 ? HttpResult.ok(driver) : HttpResult.error("司机信息新增失败!");
             }
-
-            /**新增**/
-            String md5 = PasswordUtils.md5(params.getPhone());
-            String password = PasswordUtils.entryptPassword(md5);
-            params.setSalt(PasswordUtils.getSaltSubPwd(password));
-            params.setPassword(password);
-            params.setEntId(LoginUserHolder.getEntId());
-            params.setEntId(params.getEntId() == null ? 1 : params.getEntId());// 暂时处理---------------zk
-            params.setBusinessStatus(Global.NO);
-            params.setStatus(Global.NO);
-            int count = driverDao.insert(params);
-            return count > 0 ? HttpResult.ok() : HttpResult.error("司机信息新增失败!");
         } else {
             /**唯一性交易**/
             List<KwfDriver> drivers = driverDao.findDriver(new HashMap(){{ put("phone", params.getPhone()); }});
@@ -399,7 +435,7 @@ public class KwfDriverService {
 
             /**更新**/
             int count = driverDao.updateById(params);
-            return count > 0 ? HttpResult.ok() : HttpResult.error("司机信息修改失败!");
+            return count > 0 ? HttpResult.ok(params) : HttpResult.error("司机信息修改失败!");
         }
     }
 
@@ -557,14 +593,16 @@ public class KwfDriverService {
      * @author zk
      * @date 2023/7/7
      **/
-    public void driverEntEdit(KwfDriver params) {
+    public int driverEntEdit(KwfDriver params) {
         KwfDriverEnt driverEnt = new KwfDriverEnt();
         driverEnt.setDriverId(params.getId());
-        driverEnt.setEntId(params.getEntId());
+        driverEnt.setEntId(params.getEntId() == null ? LoginUserHolder.getEntId() : params.getEntId());
         KwfDriverEnt ent = driverEntDao.findByDriverEnt(driverEnt);
         if (ent == null) {
-            driverEntDao.insert(driverEnt);
+            int count = driverEntDao.insert(driverEnt);
+            return count;
         }
+        return Global.MINUS_ONE;
     }
 
     /**
@@ -736,6 +774,44 @@ public class KwfDriverService {
         return true;
     }
 
+    /**
+     * @param file 上传文件
+     * @desc 参数校验
+     * @author zk
+     * @date 2023/8/16
+     **/
+    public HttpResult checkParams(MultipartFile file) {
+        ExcelReader excelReader = null;
+        try {
+            /**数据校验**/
+            if (ExcelUtil.checkExcel(file)) {
+                return HttpResult.error("请上传Excel格式的文件!");
+            }
+
+            ExcelImportListener importListener = new ExcelImportListener();
+            InputStream inputStream = file.getInputStream();
+            excelReader = EasyExcel.read(inputStream, importListener).build();
+
+            ReadSheet readSheet = EasyExcel.readSheet( 0) .headRowNumber(2).head(KwfDriverExcelImportDto .class).build();
+            excelReader.read(readSheet);
+            if (importListener.getErrorList().size() > 0) {
+                return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "数据格式不正确,请确认!", importListener.getErrorList());
+            }
+            if (importListener.getDataList().size() == 0) {
+                return HttpResult.error("导入数据不能空!");
+            }
+
+            return HttpResult.ok(importListener.getDataList());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("司机导入异常!");
+        } finally {
+            if (excelReader != null) {
+                excelReader.finish();
+            }
+        }
+    }
+
     /**
      * @param driverId 司机id
      * @desc 校验司机是否有证书并更新状态

+ 202 - 25
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckReportService.java

@@ -1,5 +1,8 @@
 package com.sckw.fleet.service;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
@@ -7,16 +10,15 @@ import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.easyexcel.ExcelImportListener;
+import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.dao.KwfDriverMapper;
 import com.sckw.fleet.dao.KwfTruckMapper;
 import com.sckw.fleet.dao.KwfTruckReportMapper;
 import com.sckw.fleet.model.KwfDriver;
 import com.sckw.fleet.model.KwfTruck;
 import com.sckw.fleet.model.KwfTruckReport;
-import com.sckw.fleet.model.dto.KwfChangeFleetDto;
-import com.sckw.fleet.model.dto.KwfDriverDto;
-import com.sckw.fleet.model.dto.KwfTruckDto;
-import com.sckw.fleet.model.dto.KwfTruckReportDto;
+import com.sckw.fleet.model.dto.*;
 import com.sckw.fleet.model.vo.KwfTableTopCount;
 import com.sckw.fleet.model.vo.KwfTruckReportVo;
 import com.sckw.system.api.RemoteSystemService;
@@ -28,6 +30,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -204,7 +208,87 @@ public class KwfTruckReportService {
      * @date 2023/07/11
      **/
     public HttpResult importExcel(MultipartFile file) {
-        return null;
+        /**参数校验**/
+        HttpResult result = this.checkParams(file);
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            return result;
+        }
+
+        List<KwfTruckReportExcelImportDto> truckReportExcels = (List)result.getData();
+        List<String> errorList = checkParams(truckReportExcels);
+        if (!CollectionUtils.isEmpty(errorList)) {
+            return HttpResult.error("导入数据存在已上报,请核对再上传!", errorList);
+        }
+
+        /**数据处理**/
+        int count = 0;
+        for (KwfTruckReportExcelImportDto truckReportExcel:truckReportExcels) {
+            KwfTruckReport truckReport = new KwfTruckReport();
+            truckReport.setEntId(LoginUserHolder.getEntId());
+
+            /**车辆信息**/
+            //校验车辆档案是否存在
+            List<KwfTruck> trucks = truckDao.findTruck(new HashMap() {{ put("truckNo", truckReportExcel.getTruckNo());}});
+            if (CollectionUtils.isEmpty(trucks)) {
+                //车辆信息
+                KwfTruck truckParams = new KwfTruck();
+                truckParams.setTruckNo(truckReportExcel.getTruckNo());
+                truckParams.setActualWeight(new BigDecimal(truckReportExcel.getActualWeight()));
+                truckParams.setAuthStatus(Global.NUMERICAL_TWO);
+                result = truckService.truckEdit(truckParams);
+                if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+                    continue;
+                }
+
+                KwfTruck truck = (KwfTruck) result.getData();
+                truckReport.setTruckId(truck.getId());
+            } else {
+                //校验车辆是否已上报
+                KwfTruck truck = trucks.get(Global.NUMERICAL_ZERO);
+                List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
+                    put("truckId", truck.getId());
+                    put("entId", LoginUserHolder.getEntId());
+                }});
+                if (CollectionUtils.isEmpty(reports)) {
+                    truckReport.setTruckId(truck.getId());
+                } else {
+                    continue;
+                }
+            }
+
+            /**档案信息**/
+            //校验司机档案是否存在
+            List<KwfDriver> drivers = driverDao.findDriver(new HashMap() {{put("phone", truckReportExcel.getPhone());}});
+            if (CollectionUtils.isEmpty(drivers)) {
+                KwfDriver driverParams = new KwfDriver();
+                driverParams.setName(truckReportExcel.getName());
+                driverParams.setPhone(truckReportExcel.getPhone());
+                driverParams.setIdcard(truckReportExcel.getIdcard());
+                driverParams.setAuthStatus(Global.NUMERICAL_TWO);
+                result = driverService.driverEdit(driverParams);
+                if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+                    continue;
+                }
+
+                KwfDriver driver = (KwfDriver) result.getData();
+                truckReport.setDriverId(driver.getId());
+            } else {
+                //校验司机是否已上报
+                KwfDriver driver = drivers.get(0);
+                List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
+                    put("driverId", driver.getId());
+                    put("entId", LoginUserHolder.getEntId());
+                }});
+                if (CollectionUtils.isEmpty(reports)) {
+                    truckReport.setDriverId(driver.getId());
+                } else {
+                    continue;
+                }
+            }
+            count += truckReportDao.insert(truckReport);
+        }
+
+        return HttpResult.ok("成功导入"+count+"行数据!");
     }
 
     /**
@@ -236,18 +320,21 @@ public class KwfTruckReportService {
             //校验车辆档案是否存在
             List<KwfTruck> trucks = truckDao.findTruck(new HashMap() {{ put("truckNo", reportDto.getTruckNo());}});
             if (CollectionUtils.isEmpty(trucks)) {
-                //新增车辆档案
-                KwfTruckDto truckDto = new KwfTruckDto();
-                truckDto.setTruckNo(reportDto.getTruckNo());
-                HttpResult result = truckService.add(truckDto);
+                //车辆信息
+                KwfTruck truckParams = new KwfTruck();
+                truckParams.setTruckNo(reportDto.getTruckNo());
+                truckParams.setActualWeight(reportDto.getActualWeight());
+                truckParams.setAuthStatus(Global.NUMERICAL_TWO);
+                HttpResult result = truckService.truckEdit(truckParams);
                 if (result.getCode() != HttpStatus.SUCCESS_CODE) {
                     return result;
                 }
+
                 KwfTruck truck = (KwfTruck) result.getData();
                 truckReport.setTruckId(truck.getId());
             } else {
                 //校验车辆是否已上报
-                KwfTruck truck = trucks.get(0);
+                KwfTruck truck = trucks.get(Global.NUMERICAL_ZERO);
                 List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                     put("truckId", truck.getId());
                     put("entId", LoginUserHolder.getEntId());
@@ -261,18 +348,18 @@ public class KwfTruckReportService {
 
             /**档案信息**/
             //校验司机档案是否存在
-            List<KwfDriver> drivers = driverDao.findDriver(new HashMap() {{put("phone", reportDto.getPhone());
-            }});
+            List<KwfDriver> drivers = driverDao.findDriver(new HashMap() {{put("phone", reportDto.getPhone());}});
             if (CollectionUtils.isEmpty(drivers)) {
-                //新增司机档案
-                KwfDriverDto driverDto = new KwfDriverDto();
-                driverDto.setName(reportDto.getName());
-                driverDto.setPhone(reportDto.getPhone());
-                driverDto.setIdcard(reportDto.getIdcard());
-                HttpResult result = driverService.add(driverDto);
+                KwfDriver driverParams = new KwfDriver();
+                driverParams.setName(reportDto.getName());
+                driverParams.setPhone(reportDto.getPhone());
+                driverParams.setIdcard(reportDto.getIdcard());
+                driverParams.setAuthStatus(Global.NUMERICAL_TWO);
+                HttpResult result = driverService.driverEdit(driverParams);
                 if (result.getCode() != HttpStatus.SUCCESS_CODE) {
                     return result;
                 }
+
                 KwfDriver driver = (KwfDriver) result.getData();
                 truckReport.setDriverId(driver.getId());
             } else {
@@ -394,7 +481,7 @@ public class KwfTruckReportService {
         //有效上报信息
         List<KwfTruckReportDto> effective = new ArrayList();
         //已有运力/识别失败
-        int haveCount = 0, errorCount = 0;
+        int haveCount = Global.NUMERICAL_ZERO, errorCount = Global.NUMERICAL_ZERO;
         for (String str:params){
             /**识别上报数据**/
             KwfTruckReportDto reportDto = analysis(str);
@@ -408,7 +495,7 @@ public class KwfTruckReportService {
             List<KwfTruck> trucks = truckDao.findTruck(new HashMap() {{put("truckNo", reportDto.getTruckNo());}});
             if (!CollectionUtils.isEmpty(trucks)) {
                 //校验车辆是否已上报
-                KwfTruck truck = trucks.get(0);
+                KwfTruck truck = trucks.get(Global.NUMERICAL_ZERO);
                 List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                     put("truckId", truck.getId());
                     put("entId", LoginUserHolder.getEntId());
@@ -424,7 +511,7 @@ public class KwfTruckReportService {
             List<KwfDriver> drivers = driverDao.findDriver(new HashMap() {{ put("phone", reportDto.getPhone()); }});
             if (!CollectionUtils.isEmpty(drivers)) {
                 //校验司机是否已上报
-                KwfDriver driver = drivers.get(0);
+                KwfDriver driver = drivers.get(Global.NUMERICAL_ZERO);
                 List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                     put("driverId", driver.getId());
                     put("entId", LoginUserHolder.getEntId());
@@ -458,10 +545,10 @@ public class KwfTruckReportService {
     public boolean checkReport(KwfTruckReportDto reportDto) {
         /**车辆信息**/
         //校验车辆档案是否存在
-        List<KwfTruck> trucks = truckDao.findList(new HashMap() {{ put("truckNo", reportDto.getTruckNo());}});
+        List<KwfTruck> trucks = truckDao.findTruck(new HashMap() {{ put("truckNo", reportDto.getTruckNo());}});
         if (!CollectionUtils.isEmpty(trucks)) {
             //校验车辆是否已上报
-            KwfTruck truck = trucks.get(0);
+            KwfTruck truck = trucks.get(Global.NUMERICAL_ZERO);
             List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                 put("truckId", truck.getId());
                 put("entId", LoginUserHolder.getEntId());
@@ -473,10 +560,10 @@ public class KwfTruckReportService {
 
         /**档案信息**/
         //校验司机档案是否存在
-        List<KwfDriver> drivers = driverDao.findList(new HashMap() {{ put("phone", reportDto.getPhone()); }});
+        List<KwfDriver> drivers = driverDao.findDriver(new HashMap() {{ put("phone", reportDto.getPhone()); }});
         if (!CollectionUtils.isEmpty(drivers)) {
             //校验司机是否已上报
-            KwfDriver driver = drivers.get(0);
+            KwfDriver driver = drivers.get(Global.NUMERICAL_ZERO);
             List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
                 put("driverId", driver.getId());
                 put("entId", LoginUserHolder.getEntId());
@@ -546,4 +633,94 @@ public class KwfTruckReportService {
         reportDto.setActualWeight(new BigDecimal(actualWeight));
         return reportDto;
     }
+
+    /**
+     * @param file 上传文件
+     * @desc 参数校验
+     * @author zk
+     * @date 2023/8/16
+     **/
+    public HttpResult checkParams(MultipartFile file) {
+        ExcelReader excelReader = null;
+        try {
+            /**数据校验**/
+            if (ExcelUtil.checkExcel(file)) {
+                return HttpResult.error("请上传Excel格式的文件!");
+            }
+
+            ExcelImportListener importListener = new ExcelImportListener();
+            InputStream inputStream = file.getInputStream();
+            excelReader = EasyExcel.read(inputStream, importListener).build();
+
+            ReadSheet readSheet = EasyExcel.readSheet( 0) .headRowNumber(2).head(KwfTruckReportExcelImportDto.class).build();
+            excelReader.read(readSheet);
+            if (importListener.getErrorList().size() > 0) {
+                return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "数据格式不正确,请确认!", importListener.getErrorList());
+            }
+            if (importListener.getDataList().size() == 0) {
+                return HttpResult.error("导入数据不能空!");
+            }
+
+            return HttpResult.ok(importListener.getDataList());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("车辆上报导入异常!");
+        } finally {
+            if (excelReader != null) {
+                excelReader.finish();
+            }
+        }
+    }
+
+    /**
+     * @param truckReportExcels 上传信息
+     * @desc 校验是否已上报
+     * @author zk
+     * @date 2023/8/16
+     **/
+    public List<String> checkParams(List<KwfTruckReportExcelImportDto> truckReportExcels) {
+        int rowNum = Global.NUMERICAL_TWO;
+        //”第2行数据有误,电话号码格式不正确!,身份证号码格式不正确!“
+        List<String> errorList = new ArrayList();
+        for (KwfTruckReportExcelImportDto truckReportExcel:truckReportExcels) {
+            rowNum ++;
+            StringBuilder msg = new StringBuilder("第"+ rowNum +"行数据有误,");
+
+            /**车辆信息**/
+            //校验车辆档案是否存在
+            List<KwfTruck> trucks = truckDao.findTruck(new HashMap() {{ put("truckNo", truckReportExcel.getTruckNo());}});
+            if (!CollectionUtils.isEmpty(trucks)) {
+                //校验车辆是否已上报
+                KwfTruck truck = trucks.get(Global.NUMERICAL_ZERO);
+                List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
+                    put("truckId", truck.getId());
+                    put("entId", LoginUserHolder.getEntId());
+                }});
+                if (!CollectionUtils.isEmpty(reports)) {
+                    msg.append("车牌号"+ truck.getTruckNo() +"已上报!");
+                }
+            }
+
+            /**档案信息**/
+            //校验司机档案是否存在
+            List<KwfDriver> drivers = driverDao.findDriver(new HashMap() {{ put("phone", truckReportExcel.getPhone()); }});
+            if (!CollectionUtils.isEmpty(drivers)) {
+                //校验司机是否已上报
+                KwfDriver driver = drivers.get(Global.NUMERICAL_ZERO);
+                List<Map<String, Object>> reports = truckReportDao.findList(new HashMap() {{
+                    put("driverId", driver.getId());
+                    put("entId", LoginUserHolder.getEntId());
+                }});
+                if (!CollectionUtils.isEmpty(reports)) {
+                    msg.append("司机"+ driver.getName() + driver.getPhone() +"已上报!");
+                }
+            }
+
+            if (msg.length() > Global.NUMERICAL_TWELVE) {
+                errorList.add(msg.toString());
+            }
+        }
+
+        return errorList;
+    }
 }

+ 99 - 18
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -1,5 +1,8 @@
 package com.sckw.fleet.service;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
@@ -9,6 +12,8 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.easyexcel.ExcelImportListener;
+import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.dao.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.*;
@@ -20,7 +25,10 @@ import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
+import java.io.InputStream;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -33,6 +41,8 @@ import java.util.stream.Collectors;
  * @date 2023/7/6 0006
  */
 @Service
+@SuppressWarnings("all")
+@Transactional(rollbackFor = Exception.class)
 public class KwfTruckService {
 
     @Autowired
@@ -214,7 +224,28 @@ public class KwfTruckService {
      * @date 2023/07/11
      **/
     public HttpResult importExcel(MultipartFile file) {
-        return null;
+        /**参数校验**/
+        HttpResult result = this.checkParams(file);
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            return result;
+        }
+
+        /**数据处理**/
+        int count = 0;
+        List<KwfTruckExcelImportDto> truckExcels = (List)result.getData();
+        for (KwfTruckExcelImportDto kwfTruckExcel:truckExcels) {
+            //车辆信息
+            KwfTruck truck = new KwfTruck();
+            truck.setTruckNo(kwfTruckExcel.getTruckNo());
+            truck.setActualWeight(new BigDecimal(kwfTruckExcel.getActualWeight()));
+            truck.setAuthStatus(Global.NUMERICAL_TWO);
+            result = truckEdit(truck);
+            if (result.getCode() == HttpStatus.SUCCESS_CODE) {
+                count ++;
+            }
+        }
+
+        return HttpResult.ok("成功导入"+count+"行数据!");
     }
 
     /**
@@ -238,6 +269,7 @@ public class KwfTruckService {
         if (result.getCode() != HttpStatus.SUCCESS_CODE) {
             return result;
         }
+        truck = (KwfTruck)result.getData();
 
         /**车辆行驶证信息**/
         KwfTruckLicenseDto truckLicenseDto = params.getTruckLicense();
@@ -253,9 +285,6 @@ public class KwfTruckService {
             transportLicenseEdit(transportLicenseDto);
         }
 
-        /**车辆信息与企业关联信息**/
-        truckEntEdit(truck);
-
         /**车队班组绑定**/
         truckFleetEdit(truck.getId(), params.getFleetId());
 
@@ -350,17 +379,29 @@ public class KwfTruckService {
         if (StringUtils.isBlank(params.getId())) {
             /**唯一性交易**/
             List<KwfTruck> trucks = truckDao.findTruck(new HashMap(){{ put("truckNo", params.getTruckNo()); }});
-            if (!CollectionUtils.isEmpty(trucks)) {
-                return HttpResult.error("车牌号已存在!");
+            if (CollectionUtils.isEmpty(trucks)) {
+                /**新增**/
+                params.setEntId(LoginUserHolder.getEntId());
+                params.setEntId(params.getEntId() == null ? 1 : params.getEntId());// 暂时处理---------------zk
+                params.setBusinessStatus(Global.NO);
+                params.setStatus(Global.NO);
+                int count = truckDao.insert(params);
+
+                /**车辆信息与企业关联信息**/
+                truckEntEdit(params);
+                return count > 0 ? HttpResult.ok(params) : HttpResult.error("车辆信息新增失败!");
+            } else {
+                KwfTruck truck = trucks.get(Global.NUMERICAL_ZERO);
+                BeanUtils.copyPropertiesValue(params, truck);
+                int count = truckDao.updateById(truck);
+
+                /**车辆信息与企业关联信息**/
+                KwfTruck truckEnt = new KwfTruck();
+                truckEnt.setEntId(LoginUserHolder.getEntId());
+                truckEnt.setId(truck.getId());
+                truckEntEdit(truckEnt);
+                return count > 0 ? HttpResult.ok(truck) : HttpResult.error("车辆信息新增失败!");
             }
-
-            /**新增**/
-            params.setEntId(LoginUserHolder.getEntId());
-            params.setEntId(params.getEntId() == null ? 1 : params.getEntId());// 暂时处理---------------zk
-            params.setBusinessStatus(Global.NO);
-            params.setStatus(Global.NO);
-            int count = truckDao.insert(params);
-            return count > 0 ? HttpResult.ok() : HttpResult.error("车辆信息新增失败!");
         } else {
             /**唯一性交易**/
             List<KwfTruck> trucks = truckDao.findTruck(new HashMap(){{ put("truckNo", params.getTruckNo()); }});
@@ -372,7 +413,7 @@ public class KwfTruckService {
 
             /**更新**/
             int count = truckDao.updateById(params);
-            return count > 0 ? HttpResult.ok() : HttpResult.error("车辆信息修改失败!");
+            return count > 0 ? HttpResult.ok(params) : HttpResult.error("车辆信息修改失败!");
         }
     }
 
@@ -463,14 +504,16 @@ public class KwfTruckService {
      * @author zk
      * @date 2023/7/7
      **/
-    public void truckEntEdit(KwfTruck params) {
+    public int truckEntEdit(KwfTruck params) {
         KwfTruckEnt truckEnt = new KwfTruckEnt();
         truckEnt.setTruckId(params.getId());
-        truckEnt.setEntId(params.getEntId());
+        truckEnt.setEntId(params.getEntId() == null ? LoginUserHolder.getEntId() : params.getEntId());
         KwfTruckEnt ent = truckEntDao.findByTruckEnt(truckEnt);
         if (ent == null) {
-            truckEntDao.insert(truckEnt);
+            int count = truckEntDao.insert(truckEnt);
+            return count;
         }
+        return Global.MINUS_ONE;
     }
 
     /**
@@ -560,6 +603,44 @@ public class KwfTruckService {
         truckDao.updateById(truck);
     }
 
+    /**
+     * @param file 上传文件
+     * @desc 参数校验
+     * @author zk
+     * @date 2023/8/16
+     **/
+    public HttpResult checkParams(MultipartFile file) {
+        ExcelReader excelReader = null;
+        try {
+            /**数据校验**/
+            if (ExcelUtil.checkExcel(file)) {
+                return HttpResult.error("请上传Excel格式的文件!");
+            }
+
+            ExcelImportListener importListener = new ExcelImportListener();
+            InputStream inputStream = file.getInputStream();
+            excelReader = EasyExcel.read(inputStream, importListener).build();
+
+            ReadSheet readSheet = EasyExcel.readSheet( 0) .headRowNumber(2).head(KwfTruckExcelImportDto .class).build();
+            excelReader.read(readSheet);
+            if (importListener.getErrorList().size() > 0) {
+                return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, "数据格式不正确,请确认!", importListener.getErrorList());
+            }
+            if (importListener.getDataList().size() == 0) {
+                return HttpResult.error("导入数据不能空!");
+            }
+
+            return HttpResult.ok(importListener.getDataList());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResult.error("车辆导入异常!");
+        } finally {
+            if (excelReader != null) {
+                excelReader.finish();
+            }
+        }
+    }
+
     /**
      * 校验list中对象key值是否存在与value不一致的情况
      * @param list 数据集

+ 11 - 5
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfFleetMapper.xml

@@ -5,11 +5,14 @@
     <select id="findPage" resultType="com.sckw.fleet.model.vo.KwfFleetVo" parameterType="java.util.Map" >
         select
             id, name, contacts, phone, remark, status, create_by createBy, create_time createTime,
-            update_by updateBy, update_time updateTime
+            update_by updateBy, update_time updateTime, fl.captain_id captainId
         from kwf_fleet fl
         where fl.del_flag = 0
         <if test="entId != null and entId != ''">
-            and fl.ent_id = #{entId, jdbcType=VARCHAR}
+            and fl.ent_id = #{entId, jdbcType=BIGINT}
+        </if>
+        <if test="captainId != null and captainId != ''">
+            and fl.captain_id = #{captainId, jdbcType=BIGINT}
         </if>
         <if test="name != null and name != ''">
             and fl.name = #{name, jdbcType=VARCHAR}
@@ -38,11 +41,14 @@
 
     <select id="findList" resultType="java.util.Map" parameterType="java.util.Map" >
         select
-            id, name, contacts, phone, remark
+            id, name, contacts, phone, remark, captain_id captainId
         from kwf_fleet fl
         where fl.del_flag = 0
         <if test="entId != null and entId != ''">
-            and fl.ent_id = #{entId, jdbcType=VARCHAR}
+            and fl.ent_id = #{entId, jdbcType=BIGINT}
+        </if>
+        <if test="captainId != null and captainId != ''">
+            and fl.captain_id = #{captainId, jdbcType=BIGINT}
         </if>
         <if test="name != null and name != ''">
             and fl.name like concat('%',#{name},'%')
@@ -77,7 +83,7 @@
         left join kwf_fleet fl on fl.id = flt.fleet_id and fl.del_flag = 0
         where tr.del_flag = 0 and tre.del_flag = 0
         <if test="entId != null and entId != ''">
-            and tre.ent_id = #{entId, jdbcType=VARCHAR}
+            and tre.ent_id = #{entId, jdbcType=BIGINT}
         </if>
         <if test="fleetName != null and fleetName != ''">
             and fl.name like concat('%',#{fleetName},'%')

+ 1 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoWantBuyMapper.xml

@@ -15,6 +15,7 @@
         , kb.status
         , kb.remark
         , kb.create_time createTime
+        , kb.update_time updateTime
         , kt.want_buy_id wantBuyId
         , kt.trading trading
         , kba.name addressName