jiangping
2024-05-24 d1e55e8c1eecd46921ed43ad6525f37bb0593f07
最新版本
已添加1个文件
已修改8个文件
已重命名1个文件
496 ■■■■ 文件已修改
admin/src/views/business/carsSync.vue 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/cars.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ParkBookCloudController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ParkBook.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ParkBookService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/carsSync.vue
admin/src/views/vehicle/cars.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,163 @@
<template>
    <TableLayout :permissions="['business:member:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="120px" inline>
            <el-form-item label="车牌号" prop="code">
                <el-input v-model="searchForm.code" clearable placeholder="请输入车牌号" @keypress.enter.native="search"></el-input>
            </el-form-item>
          <el-form-item label="车主姓名/手机号" prop="memberName">
            <el-input v-model="searchForm.memberName" clearable placeholder="车主姓名/手机号" @keypress.enter.native="search"></el-input>
          </el-form-item>
          <el-form-item label="车主部门" prop="companyName">
            <el-input v-model="searchForm.companyName" clearable placeholder="车主部门名称" @keypress.enter.native="search"></el-input>
          </el-form-item>
          <el-form-item label="授权状态" prop="authStatus">
            <el-select v-model="searchForm.authStatus" @keypress.enter.native="search" clearable placeholder="是否授权">
              <el-option label="是" value="1"></el-option>
              <el-option label="否" value="0"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="车辆类型" prop="type">
            <el-select v-model="searchForm.type" @keypress.enter.native="search" clearable placeholder="车辆类型">
              <el-option label="员工车辆" value="0"></el-option>
              <el-option label="安泰公务车" value="1"></el-option>
              <el-option label="安泰物流车" value="2"></el-option>
              <el-option label="市公司公车" value="3"></el-option>
          </el-select>
          </el-form-item>
                      <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:cars:create', 'business:parkBook:create']">
                <li><el-button type="primary" @click="$refs.operaCarsWindow.open('新建车辆')" icon="el-icon-plus" v-permissions="['business:cars:create']">新建</el-button></li>
                <li><el-button type="primary" @click="startEmpowerBatch" icon="el-icon-plus" v-permissions="['business:parkbook:create']">下发授权</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
                @selection-change="handleSelectionChange"
            >
                <el-table-column type="selection" width="55"></el-table-column>
                <el-table-column prop="code" label="车牌号" min-width="100px"></el-table-column>
                <el-table-column label="车辆类型" min-width="100px">
                    <template slot-scope="{row}">
                      <span v-if="row.type == 0" >员工车辆</span>
                      <span v-if="row.type == 1">安泰公务车</span>
                      <span v-if="row.type == 2" >安泰物流车</span>
                      <span v-if="row.type == 3" >市公司公车</span>
                    </template>
                </el-table-column>
              <el-table-column prop="memberName" label="车主姓名"  min-width="100px"></el-table-column>
              <el-table-column prop="memberPhone" label="车主手机号" min-width="100px"></el-table-column>
              <el-table-column prop="companyName" label="车主组织" min-width="200px"></el-table-column>
                <el-table-column label="是否授权" align="center" min-width="100px">
                  <template slot-scope="{row}">
                    <span v-if="row.authStatus == 1" style="color: green">是</span>
                    <span v-else style="color: red">否</span>
                  </template>
                </el-table-column>
                <el-table-column prop="parksName" label="已授权停车场" min-width="200px">
                  <template slot-scope="{row}">
                    <div  v-if="row.parkBookList && row.parkBookList.length" >
                      <span v-for="item in row.parkBookList"  :key="item.id" style="display: block">
                        <span  :style="(item.hkStatus== 0?'color:#2080f7':(item.hkStatus== 1?'color:green':(item.hkStatus== 2?'color:red':'')))">【{{item.hkStatus== 0?'等待下发':(item.hkStatus== 1?'下发成功':(item.hkStatus== 2?'下发失败':''))}}】 </span>{{item.parksName}}
                      </span>
                    </div>
                    <span  v-if="row.parkBookList ==null ||row.parkBookList.length ==0">-</span>
                  </template>
                </el-table-column>
              <el-table-column label="下发有效期" min-width="170px">
                <template slot-scope="{row}">
                  <div v-if="row.authStatus !=null && row.authStatus == 1 && row.parkBookList!=null && row.parkBookList.length>0">
                    <div v-if="!row.startTime || !row.endTime">长期有效</div>
                    <div v-else>
                      <span>起:{{row.startTime}}</span><br/>
                      <span>止:{{row.endTime}}</span>
                    </div>
                  </div>
                  <div v-else >-</div>
                </template>
              </el-table-column>
                <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
                <el-table-column prop="editDate" label="操作时间" min-width="100px"></el-table-column>
              <el-table-column
                  v-if="containPermissions(['business:member:update', 'business:member:delete','business:empower:create'])"
                  label="操作"
                  min-width="250"
                  fixed="right"
              >
                <template slot-scope="{row}">
                  <el-button type="text" icon="el-icon-edit" @click="$refs.operaCarsWindow.open('编辑车辆信息',row)" v-permissions="['business:cars:update']">编辑</el-button>
                  <el-button type="text" icon="el-icon-edit" @click="$refs.operaCarAuthWindow.open('下发授权',[row.id],[row.code])" v-permissions="['business:parkbook:create']">下发授权</el-button>
                  <el-button  type="text"  icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:empower:delete']">删除</el-button>
                </template>
              </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaCarAuthWindow ref="operaCarAuthWindow" @success="handlePageChange"/>
        <OperaCarsWindow ref="operaCarsWindow" @success="handlePageChange"/>
    </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaCarsWindow from '@/components/business/OperaCarsWindow'
import OperaCarAuthWindow from '@/components/business/OperaCarAuthWindow'
import { sync } from '@/api/business/cars'
export default {
  name: 'Cars',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaCarsWindow,OperaCarAuthWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        code: '',
        memberName: '',
        companyName: '',
        type:null,
        authStatus:null
      }
    }
  },
  created () {
    this.config({
      module: '车辆信息表',
      api: '/business/cars',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    // åŒæ­¥ä¿¡æ¯
    startEmpowerBatch () {
      if (this.tableData.selectedRows.length === 0) {
        this.$tip.warning('请至少选择一条数据')
        return
      }
      var ids = []
      var codes = []
      this.tableData.selectedRows.forEach(item => {
        ids.push(item.id)
        codes.push(item.code)
      })
      this.$refs.operaCarAuthWindow.open('车辆下发授权', ids, codes)
    },
  }
}
</script>
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ParkBookCloudController.java
@@ -8,10 +8,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.Cars;
import com.doumee.dao.business.model.ParkBook;
import com.doumee.service.business.ParkBookService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -35,7 +37,16 @@
    @PostMapping("/create")
    @CloudRequiredPermission("business:parkbook:create")
    public ApiResponse create(@RequestBody ParkBook parkBook,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        parkBook.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(parkBookService.create(parkBook));
    }
    @PreventRepeat
    @ApiOperation("批量下发授权")
    @PostMapping("/batchAuth")
    @CloudRequiredPermission("business:parkbook:create")
    public ApiResponse batchAuth(@RequestBody Cars cars, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        cars.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(parkBookService.batchAuth(cars));
    }
    @ApiOperation("根据ID删除")
@@ -63,6 +74,7 @@
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:parkbook:update")
    public ApiResponse updateById(@RequestBody ParkBook parkBook,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        parkBook.setLoginUserInfo(this.getLoginUser(token));
        parkBookService.updateById(parkBook);
        return ApiResponse.success(null);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
@@ -11,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * è½¦è¾†ä¿¡æ¯è¡¨
@@ -42,10 +43,22 @@
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    private Date editDate;
    @ApiModelProperty(value = "授权开始时间")
    @ExcelColumn(name="授权开始时间")
    private Date startTime;
    @ApiModelProperty(value = "授权结束时间")
    @ExcelColumn(name="授权结束时间")
    private Date endTime;
    @ApiModelProperty(value = "最后一次进厂时间")
    @ExcelColumn(name="最后一次进厂时间")
    private Date lastInDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "授权时间类型  0长期有效 1自定义 2车主有效期", example = "1")
    @ExcelColumn(name="授权时间类型  0长期有效 1自定义 2车主有效期")
    private Integer authTimeType;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
@@ -63,9 +76,9 @@
    @ExcelColumn(name="车牌号")
    private String code;
    @ApiModelProperty(value = "车库编码(关联parks)", example = "1")
    @ExcelColumn(name="车库编码(关联parks)")
    private Integer parkId;
    @ApiModelProperty(value = "授权停车编码集合(关联parks)", example = "1")
    @ExcelColumn(name="授权停车编码集合(关联parks)")
    private String parkId;
    @ApiModelProperty(value = "海康同步状态 0未同步 1已同步", example = "1")
@@ -92,38 +105,14 @@
    @ApiModelProperty(value = "状态 0禁用 1启用", example = "1")
    @ExcelColumn(name="状态 0禁用 1启用")
    private Integer status;
    @ApiModelProperty(value = "授权状态 0否 1是", example = "1")
    @ExcelColumn(name="授权状态  0否 1是")
    private Integer authStatus;
    @ApiModelProperty(value = "所属分组编码(关联car_group)", example = "1")
    @ExcelColumn(name="所属分组编码(关联car_group)")
    private Integer groupId;
    @ApiModelProperty(value = "授权时间类型  0长期有效 1自定义 2车主有效期", example = "1")
    @ExcelColumn(name="授权时间类型  0长期有效 1自定义 2车主有效期")
    private Integer authTimeType;
    //
//    @ApiModelProperty(value = "状态 0禁用 1启用", example = "1")
//    @ExcelColumn(name="状态 0禁用 1启用")
//    private Integer status;
//
//
//    @ApiModelProperty(value = "状态 0禁用 1启用", example = "1")
//    @ExcelColumn(name="状态 0禁用 1启用")
//    private Integer status;
//
//    @ApiModelProperty(value = "状态 0禁用 1启用", example = "1")
//    @ExcelColumn(name="状态 0禁用 1启用")
//    private Integer status;
//
//    @ApiModelProperty(value = "状态 0禁用 1启用", example = "1")
//    @ExcelColumn(name="状态 0禁用 1启用")
//    private Integer status;
    @ApiModelProperty(value = "类型 0员工车辆 1安泰公务车 2自有物流车3外协物流车 4市公司物流车 5市公司注册车辆", example = "1")
    @ExcelColumn(name="类型 0员工车辆 1安泰公务车 2自有物流车3外协物流车 4市公司物流车 5市公司注册车辆")
@@ -131,10 +120,14 @@
    @ApiModelProperty(value = "停车场名称", example = "1")
    @ExcelColumn(name="停车场名称")
    @ApiModelProperty(value = "停车场名称集合", example = "1")
    @ExcelColumn(name="停车场名称集合")
    @TableField(exist = false)
    private String parksName;
    @ApiModelProperty(value = "编辑人姓名", example = "1")
    @ExcelColumn(name="编辑人姓名")
    @TableField(exist = false)
    private String editorName;
    @ApiModelProperty(value = "用户类型 0劳务访客 1普通访客  2内部人员", example = "1")
    @ExcelColumn(name="用户类型 0劳务访客 1普通访客  2内部人员")
@@ -158,5 +151,28 @@
    @ExcelColumn(name="部门")
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "车主是否删除", example = "1")
    @TableField(exist = false)
    private Integer memberDeleted;
    @ApiModelProperty(value = "车主授权有效期开始", example = "1")
    @TableField(exist = false)
    private Date memberStartTime;
    @ApiModelProperty(value = "车主授权有效期结束", example = "1")
    @TableField(exist = false)
    private Date memberEndTime;
    @ApiModelProperty(value = "车主授权状态", example = "1")
    @TableField(exist = false)
    private Integer memberAuthStatus;
    @ApiModelProperty(value = "授权停车场编码集合", example = "1")
    @TableField(exist = false)
    private List<Integer> parkIdList;
    @ApiModelProperty(value = "车辆编码集合", example = "1")
    @TableField(exist = false)
    private List<Integer> idList;
    @ApiModelProperty(value = "车辆包期记录集合", example = "1")
    @TableField(exist = false)
    private  List<ParkBook> parkBookList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ParkBook.java
@@ -11,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * è½¦è¾†é¢„约记录信息表
@@ -29,7 +30,7 @@
    @ApiModelProperty(value = "创建人编码")
    @ExcelColumn(name="创建人编码")
    private String creator;
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
@@ -135,9 +136,7 @@
    @TableField(exist = false)
    private String companyName;
    @ApiModelProperty(value = "停车库海康编码", example = "1")
    @ExcelColumn(name="停车库海康编码")
    @TableField(exist = false)
    private String parkHkId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ParkBookService.java
@@ -2,6 +2,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Cars;
import com.doumee.dao.business.model.ParkBook;
import java.util.List;
@@ -96,4 +97,6 @@
    long count(ParkBook parkBook);
    void reUpdate(ParkBook parkBook);
    String batchAuth(Cars parkBook);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -18,6 +18,7 @@
import com.doumee.dao.business.join.CarJoinMapper;
import com.doumee.dao.business.join.ParkBookJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.CarsService;
import com.doumee.service.business.impl.hksync.HkSyncParkServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -28,10 +29,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.*;
/**
 * è½¦è¾†ä¿¡æ¯è¡¨Service实现
@@ -58,7 +56,7 @@
        if(loginUserInfo == null){
            loginUserInfo = model.getLoginUserInfo();
        }
        if(StringUtils.isNotBlank(model.getCode())
        if(StringUtils.isBlank(model.getCode())
            ||model.getType()==null
            ||model.getType()<0
            ||model.getType()>3
@@ -92,6 +90,7 @@
        model.setStatus(Constants.ZERO);
        model.setIsdeleted(Constants.ZERO);
        model.setHkStatus(Constants.ZERO);
        model.setAuthStatus(Constants.ZERO);
        model.setRemark("");
//        model.setHkDate(model.getCreateDate());
//        model.setHkId(UUID.randomUUID().toString().replace("-",""));
@@ -116,14 +115,23 @@
        model.setEdirot(user.getId());
        model.setId(id);
        model.setIsdeleted(Constants.ONE);
        carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
                .eq(Cars::getId,model.getId())
                .set(Cars::getStartTime,null)
                .set(Cars::getEndTime,null)
                .set(Cars::getAuthStatus,Constants.ZERO)
                .set(Cars::getIsdeleted,Constants.ONE)
                .set(Cars::getEditDate,model.getEditDate())
                .set(Cars::getEdirot,model.getEdirot())
        );
        carsMapper.updateById(model);
    }
    public   boolean  dealCancelBookBiz(String code,Date date){
        List<ParkBook> parkBooks = parkBookJoinMapper.selectJoinList(ParkBook.class,new MPJLambdaWrapper<ParkBook>()
                    .selectAll(ParkBook.class )
                    .selectAs(Parks::getHkId,ParkBook::getParkHkId )
                .leftJoin(Parks.class,Parks::getId,ParkBook::getParkHkId)
                .selectAll(ParkBook.class )
                .selectAs(Parks::getHkId,ParkBook::getParkHkId )
                .leftJoin(Parks.class,Parks::getId,ParkBook::getParkId)
                .eq(ParkBook::getCarCode,code)
                .eq(ParkBook::getIsdeleted,Constants.ZERO ));
        if(parkBooks !=null){
@@ -172,7 +180,7 @@
        if(loginUserInfo == null){
            loginUserInfo = model.getLoginUserInfo();
        }
        if(StringUtils.isNotBlank(model.getCode())
        if(StringUtils.isBlank(model.getCode())
                ||model.getId()==null
                ||model.getType()==null
                ||model.getType()<0
@@ -211,8 +219,19 @@
        model.setIsdeleted(Constants.ZERO);
        model.setHkStatus(Constants.ZERO);
        model.setRemark("");
        model.setAuthStatus(Constants.ZERO);
        dealCancelBookBiz(model.getCode(),model.getEditDate());
        carsMapper.updateById(model);
        carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
                .eq(Cars::getId,model.getId())
                .set(Cars::getAuthStatus,Constants.ZERO)
                .set(Cars::getType,model.getType())
                .set(Cars::getCode,model.getCode())
                .set(Cars::getEditDate,model.getEditDate())
                .set(Cars::getEdirot,model.getEdirot())
                .set(Cars::getMemberId,model.getMemberId())
                .set(Cars::getStartTime,null)
                .set(Cars::getEndTime,null)
        );
    }
    @Override
@@ -247,31 +266,56 @@
    public PageData<Cars> findPage(PageWrap<Cars> pageWrap) {
        IPage<Cars> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Cars> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Cars.class);
        queryWrapper.selectAs(Parks::getName,Cars::getParksName);
        queryWrapper.selectAs(Member::getType,Cars::getMemberType);
        queryWrapper.selectAs(Member::getName,Cars::getMemberName);
        queryWrapper.selectAs(SystemUser::getRealname,Cars::getEditorName);
        queryWrapper.selectAs(Member::getPhone,Cars::getMemberPhone);
        queryWrapper.selectAs(Company::getName,Cars::getCompanyName);
        queryWrapper.leftJoin(Parks.class,Parks::getId,Cars::getParkId);
        queryWrapper.selectAs(Company::getCompanyNamePath,Cars::getCompanyName);
        queryWrapper.leftJoin(Member.class,Member::getId,Cars::getMemberId);
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Cars::getEdirot);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                .or().like(Member::getPhone,pageWrap.getModel().getMemberName()));
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getCompanyNamePath,pageWrap.getModel().getCompanyName());
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getMemberType()),Member::getType,pageWrap.getModel().getMemberType());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()),Cars::getCode,pageWrap.getModel().getCode());
        queryWrapper.eq(Cars::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(pageWrap.getModel().getType()!=null,Cars::getType,pageWrap.getModel().getType());
        queryWrapper.eq(pageWrap.getModel().getAuthStatus()!=null,Cars::getAuthStatus,pageWrap.getModel().getAuthStatus());
        queryWrapper.orderByDesc(Cars::getCreateDate);
        IPage<Cars> result = carJoinMapper.selectJoinPage(page, Cars.class,queryWrapper);
        if(result!=null && result.getRecords()!=null && result.getRecords().size()>0){
            List<String> codes = new ArrayList<>();
            for(Cars cars :result.getRecords()){
                codes.add(cars.getCode());
            }
            List<ParkBook> parkBooks = parkBookJoinMapper.selectJoinList(ParkBook.class,new MPJLambdaWrapper<ParkBook>()
                    .selectAll(ParkBook.class)
                    .selectAs(Parks::getName,ParkBook::getParksName)
                    .leftJoin(Parks.class,Parks::getId,ParkBook::getParkId)
                    .in(ParkBook::getCarCode,codes)
                    .eq(ParkBook::getIsdeleted,Constants.ZERO) );
            for(Cars cars :result.getRecords()){
               cars.setParkBookList(getParkbookListByCode(cars.getCode(),parkBooks));
            }
        }
        return PageData.from(result);
    }
    private List<ParkBook> getParkbookListByCode(String code, List<ParkBook> parkBooks) {
        List<ParkBook> list =null;
        for(ParkBook p : parkBooks){
            if(StringUtils.equals(p.getCarCode(),code)){
                if(list == null){
                    list = new ArrayList<>();
                }
                list.add(p);
            }
        }
        return  list;
    }
    @Override
    public long count(Cars cars) {
        QueryWrapper<Cars> wrapper = new QueryWrapper<>(cars);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -202,6 +202,7 @@
        insert.setCanVisit(Constants.ZERO);//默认不可访问
        insert.setAuthStatus(Constants.ZERO);
        insert.setName(member.getName());
        insert.setHkId(UUID.randomUUID().toString().replace("-",""));
        insert.setHkStatus(Constants.ONE);
        insert.setSex(Constants.getSexByCardNo( member.getIdcardNo()));//根据身份证号获取性别
        insert.setBirthday( DateUtil.fromStringToDate("yyyyMMdd",IdcardUtil.getBirthByIdCard(member.getIdcardNo())));
@@ -472,6 +473,10 @@
        }
        member.setHkId(model.getHkId());
        member.setFaceId(model.getFaceId());//人脸编码
        if(StringUtils.equals(model.getFaceImg(),member.getFaceImg())){
            //如果人脸没变化
            member.setFaceImg(null);
        }
        return model;
    }
@@ -529,9 +534,7 @@
    }
    @Override
    public void deleteById(Integer id,LoginUserInfo user) {
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
    public void deleteById(Integer id,LoginUserInfo loginUserInfo) {
        Member member=new Member();
        member.setId(id);
        member.setIsdeleted(Constants.ZERO);
@@ -586,12 +589,12 @@
                //如果员工信息不合法直接跳过
               continue;
            }
            if(StringUtils.isNotBlank(member.getFaceId()) || !Constants.equalsInteger(member.getFaceStatus(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,用户【"+member.getName()+"】的人脸信息不满足授权条件,请返回完善后再进行该操作!");
            }
            member.setStartTime(memberRole.getStartTime());
            member.setEndTime(memberRole.getEndTime());
            Integer ischange = getRoleIdByParam(memberRole.getRoleIds(),member,memberRoleMapper,deviceRoleMapper);
            if(ischange == 0){
                return;//未发现权限变化,直接返回
            }
            if(memberRole.getRoleIds()!=null && memberRole.getRoleIds().length>0 && StringUtils.isBlank(member.getRoleId())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,未查询到有效门禁组数据");
            }
@@ -1830,17 +1833,20 @@
    private void dealHkUserBizBatch(List<Member> newList) {
        List<String> hkIds = new ArrayList<>();
        try {
            memberMapper.insertBatchSomeColumn(newList);
            List<SystemUser> userList = new ArrayList<>();
            for(Member insert: newList){
                if(dealHkUserBiz(insert)){
                    //创建系统登陆账号(默认无任何角色)
                    if(Constants.equalsInteger(insert.getCompanyType(),Constants.ONE)){
                        //如果是内部组织人员,新增系统登陆账号
                        userList.add(createSystemUser(insert));
                    }
                }else{
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息【"+insert.getName()+"】同步安防平台失败,请稍后重试!");
                }
            }
            memberMapper.insertBatchSomeColumn(newList);
            List<SystemUser> userList = new ArrayList<>();
            for(Member insert: newList){
                //创建系统登陆账号(默认无任何角色)
                if(Constants.equalsInteger(insert.getCompanyType(),Constants.ONE)){
                    //如果是内部组织人员,新增系统登陆账号
                    userList.add(createSystemUser(insert));
                }
            }
            if(userList.size()>0){
@@ -1852,7 +1858,6 @@
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息导入失败,请稍后重试!");
        }
    }
    private Member checkModelParam(MemberImport model, List<Member> newList
            ,int index
            ,LoginUserInfo loginUserInfo
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java
@@ -7,7 +7,9 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CarsMapper;
import com.doumee.dao.business.ParkBookMapper;
import com.doumee.dao.business.ParksMapper;
import com.doumee.dao.business.join.ParkBookJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.ParkBookService;
@@ -21,10 +23,13 @@
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * è½¦è¾†é¢„约记录信息表Service实现
@@ -37,7 +42,11 @@
    @Autowired
    private ParkBookMapper parkBookMapper;
    @Autowired
    private CarsMapper carsMapper;
    @Autowired
    private HkSyncParkServiceImpl hkSyncParkService;
    @Autowired
    private ParksMapper parksMapper;
    @Autowired
    private ParkBookJoinMapper parkBookJoinMapper;
@@ -112,6 +121,111 @@
       }
        hkSyncParkService.syncParkBookBySingleModel(model);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public   String batchAuth(Cars cars) {
        if(cars.getIdList() == null || cars.getIdList() == null
                ||cars.getAuthTimeType() == null
                ||cars.getAuthTimeType()>2
                ||cars.getAuthTimeType()<0 ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        MPJLambdaWrapper<Cars> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Cars.class);
        queryWrapper.selectAs(Member::getStartTime,Cars::getMemberStartTime);
        queryWrapper.selectAs(Member::getEndTime,Cars::getMemberEndTime);
        queryWrapper.selectAs(Member::getIsdeleted,Cars::getMemberDeleted);
        queryWrapper.selectAs(Member::getAuthStatus,Cars::getMemberAuthStatus);
        queryWrapper.leftJoin(Member.class,Member::getId,Cars::getMemberId);
        queryWrapper.eq(Cars::getIsdeleted,Constants.ZERO)
                .in(Cars::getId,cars.getIdList());
        List<Cars> carsList = carsMapper.selectList( queryWrapper);
       if(carsList== null || carsList.size() ==0){
           throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"车辆信息有误,请返回刷新页面重试!");
       }
        List<Parks> parksList = null;
       if(cars.getParkIdList()!=null && cars.getParkIdList().size() > 0){
           MPJLambdaWrapper<Parks> queryWrapper1 = new MPJLambdaWrapper<>();
           queryWrapper1.selectAll(Parks.class);
           queryWrapper1.eq(Parks::getIsdeleted,Constants.ZERO)
                   .in(Parks::getId,cars.getParkIdList());
          parksList = parksMapper.selectList( queryWrapper1);
           if(parksList== null || parksList.size() ==0){
               throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"停车场信息有误,请返回刷新页面重试!");
           }
       }
        if(Constants.equalsInteger(cars.getAuthTimeType(),Constants.ONE)){
            if( cars.getStartTime() ==null || cars.getEndTime() == null ){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请填写正确的有效期范围");
            }
            if( cars.getEndTime().getTime() < System.currentTimeMillis()){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期截止日期不能小于当前时间!");
            }
            if(cars.getEndTime().getTime() <= cars.getStartTime().getTime()){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"有效期截止日期不能小于开始时间!");
            }
        }
       Date date = new Date();
       for(Cars model : carsList){
           Date startTime = cars.getStartTime();
           Date endTime = cars.getEndTime();
           if(Constants.equalsInteger(cars.getAuthTimeType(),Constants.TWO)){
                if(!Constants.equalsInteger(model.getMemberAuthStatus(),Constants.ONE)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,车辆【"+model.getCode()+"】车主尚未授权门禁信息,授权无法【跟随车主】有效期!");
                }
                startTime = model.getMemberStartTime();
                endTime=model.getMemberEndTime();
           }
           model.setAuthTimeType(cars.getAuthTimeType());
           model.setStartTime(startTime);
           model.setEndTime(endTime);
           dealCarAuthByModel(model,cars.getLoginUserInfo(),parksList,date);
           model.setAuthStatus(Constants.ONE);//已授权
           carsMapper.update(null,new UpdateWrapper<Cars>().lambda()
                   .eq(Cars::getId,model.getId())
                   .set(Cars::getEditDate,date)
                   .set(Cars::getEdirot,cars.getLoginUserInfo().getId())
                   .set(Cars::getAuthStatus,Constants.ONE)
                   .set(Cars::getStartTime,startTime)
                   .set(Cars::getEndTime,endTime)
           );
       }
       return  "授权成功";
    }
    private int dealCarAuthByModel(Cars model, LoginUserInfo loginUserInfo, List<Parks> parksList,Date date) {
        //删除车量库记录数据
        parkBookMapper.update(null,new UpdateWrapper<ParkBook>().lambda()
                .eq(ParkBook::getCarCode,model.getCode())
                .set(ParkBook::getIsdeleted,Constants.ONE)
                .set(ParkBook::getHkStatus,Constants.ZERO)
        );
        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(parksList)){
            List<ParkBook> parkBookList = new ArrayList<>();
            for (Parks parks:parksList) {
                ParkBook parkBook = new ParkBook();
                parkBook.setIsdeleted(Constants.ZERO);
                parkBook.setCreateDate(date);
                parkBook.setCreator(loginUserInfo.getId());
                parkBook.setEditor(loginUserInfo.getId());
                parkBook.setEditDate(date);
                parkBook.setCarCode(model.getCode());
                parkBook.setParkId(parks.getId());
                parkBook.setOrigin(Constants.ZERO);
                parkBook.setStartTime(model.getStartTime());
                parkBook.setEndTime(model.getEndTime());
                parkBook.setTimeType(model.getAuthTimeType());
                parkBook.setMemberId(model.getMemberId());
                parkBook.setHkStatus(Constants.ZERO);
                parkBook.setRemark("待同步安防平台");
                parkBookList.add(parkBook);
            }
            parkBookMapper.insertBatchSomeColumn(parkBookList);
        }
        return 0;
    }
    @Override
    public ParkBook findOne(ParkBook parkBook) {
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -861,12 +861,14 @@
        model.setOrgIndexCode(c.getHkOrgId());
        model.setJobNo(c.getCode());
        model.setPhoneNo(c.getPhone());
        model.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
        if(StringUtils.isNotBlank(c.getIdcardNo())){
            model.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
        }
        model.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
        model.setPersonId(type == 0 ?UUID.randomUUID().toString().replace("-", ""):c.getHkId());
        model.setGender(Constants.formatIntegerNum(c.getSex())+"");
        model.setPersonName(c.getName());
        if(type== 0 && StringUtils.isNotBlank(c.getFaceImg())){
        if(StringUtils.isNotBlank(c.getFaceImg())){
            model.setFaces(new ArrayList<>());
            UserAddFaceRequest face = new UserAddFaceRequest();
            String imageBase = ImageBase64Util.Image2Base64(path+c.getFaceImg());