MrShi
2024-02-26 57639dfd35931021cdab41964f08297ae302ef0a
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmvisit
已添加2个文件
已修改22个文件
585 ■■■■ 文件已修改
admin/src/views/business/visitEvent.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visits.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitEvent.vue
@@ -50,22 +50,23 @@
                stripe
            >
                <el-table-column prop="personName" label="姓名" min-width="100px"></el-table-column>
                <el-table-column prop="personPhone" label="手机号码" min-width="100px"></el-table-column>
                <el-table-column prop="phone" label="手机号码" min-width="100px"></el-table-column>
                <el-table-column prop="idNo" label="身份证号码" min-width="100px"></el-table-column>
                <el-table-column prop="personCompanyName" label="公司" min-width="100px"></el-table-column>
                <el-table-column prop="visitorWorkUint" label="公司" min-width="100px"></el-table-column>
                <el-table-column prop="carNo" label="车牌号" min-width="100px"></el-table-column>
                <el-table-column prop="beVisitedPersonName" label="被访人" min-width="100px"></el-table-column>
                <el-table-column prop="beVisitedPersonOrg" label="被访人组织" min-width="100px"></el-table-column>
                <el-table-column prop="eventTypeName" label="事件类型" min-width="100px"></el-table-column>
                <el-table-column label="抓拍图uri" min-width="100px">
                    <template slot-scope="{row}">
                        <el-image
                        <el-image v-if="row.captureUrlFull!=null"
                            style="width: 80px; height: 80px"
                            :src="row.captureUrl"
                            :preview-src-list="[row.captureUrl]">
                            :src="row.captureUrlFull"
                            :preview-src-list="[row.captureUrlFull]">
                        </el-image>
                    </template>
                </el-table-column>
                <el-table-column prop="happenTime" label="事件时间" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="事件时间" min-width="100px"></el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
admin/src/views/business/visits.vue
@@ -13,13 +13,15 @@
            </el-form-item>
            <el-form-item label="审批状态" prop="status">
                <el-select v-model="searchForm.status" placeholder="请选择">
                    <el-option label="待审核" value="0"></el-option>
                    <el-option label="已提交ERP审批" value="1"></el-option>
                    <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-option label="取消" value="4"></el-option>
                    <el-option label="下发成功" value="5"></el-option>
                    <el-option label="下发失败" value="6"></el-option>
                    <el-option label="预约成功" value="5"></el-option>
                    <el-option label="预约失败" value="6"></el-option>
                    <el-option label="拜访中" value="7"></el-option>
                    <el-option label="已签离" value="8"></el-option>
                </el-select>
            </el-form-item>
            <section>
@@ -64,13 +66,15 @@
                </el-table-column>
                <el-table-column prop="status" fixed="right" label="状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">待审核</span>
                        <span v-if="row.status === 1">已提交ERP审批</span>
                        <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">待提交审批</span>
                        <span v-if="row.status === 1">审批中</span>
                        <span v-if="row.status === 2">审核通过</span>
                        <span style="color: red;" v-if="row.status === 3">审核不通过</span>
                        <span v-if="row.status === 4">取消</span>
                        <span v-if="row.status === 5">下发成功</span>
                        <span v-if="row.status === 6">下发失败</span>
                        <span v-if="row.status === 5">预约成功</span>
                        <span v-if="row.status === 6">预约失败</span>
                        <span v-if="row.status === 7">拜访中</span>
                        <span v-if="row.status === 8">已签离</span>
                    </template>
                </el-table-column>
                <el-table-column
server/dmvisit_admin/src/main/java/com/doumee/api/business/HkSyncController.java
@@ -16,6 +16,7 @@
import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
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.*;
@@ -46,7 +47,7 @@
    @PreventRepeat
    @ApiOperation("【海康】全量同步门禁设备接口")
    @PostMapping("/syncDevices")
//    @RequiresPermissions("business:hksync:device")
    @RequiresPermissions("business:hksync:device")
    public ApiResponse syncHkDevices(@RequestBody AcsDeviceListRequest param) {
        String result = hkSyncDeviceService.syncHkDevices(param);
        return ApiResponse.success(result);
@@ -54,7 +55,7 @@
    @PreventRepeat
    @ApiOperation("【海康】全量同步停车库接口")
    @PostMapping("/syncParks")
//    @RequiresPermissions("business:hksync:park")
    @RequiresPermissions("business:hksync:park")
    public ApiResponse syncHkParks(@RequestBody ParkListRequest param) {
        String result = hkSyncParkService.syncHkParks(param);
        return ApiResponse.success(result);
@@ -62,7 +63,7 @@
    @PreventRepeat
    @ApiOperation("【海康】全量同步访客权限组接口")
    @PostMapping("/syncPrivilege")
//    @RequiresPermissions("business:hksync:privilege")
    @RequiresPermissions("business:hksync:privilege")
    public ApiResponse syncPrivilege(@RequestBody PrivilegeGroupRequest param) {
        String result = hkSyncPrivilegeService.syncPrivilege(param);
        return ApiResponse.success(result);
server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.doumee.api.business;
import com.doumee.api.BaseController;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.model.Visits;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.VisitsService;
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.*;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/2/26 11:00
 */
@Api(tags = "工作台数据")
@RestController
@RequestMapping("/business/staging")
public class StagingController  extends BaseController {
    @Autowired
    private MemberService memberService;
    @Autowired
    private VisitsService visitsService;
    @ApiOperation("头部数据")
    @GetMapping("/head")
    public ApiResponse<StagingDataVO> head() {
        return ApiResponse.success("查询成功",memberService.stagingHead(new StagingDataVO()));
    }
    @ApiOperation("主体数据")
    @GetMapping("/body")
    public ApiResponse<StagingDataVO> body() {
        return ApiResponse.success("查询成功",memberService.stagingBody(new StagingDataVO()));
    }
    @ApiOperation("超时预警人员")
    @PostMapping("/timeoutPage")
    public ApiResponse<PageData<Visits>> timeoutPage (@RequestBody PageWrap<Visits> pageWrap) {
        pageWrap.getModel().setLevelStatus(Constants.ZERO);
        return ApiResponse.success(visitsService.retentionPage(pageWrap));
    }
    @ApiOperation("超时预警人员离场")
    @GetMapping("/level")
    public ApiResponse level (@RequestParam Integer visitId) {
        visitsService.visitLevel(visitId);
        return ApiResponse.success("操作成功");
    }
}
server/dmvisit_admin/src/main/java/com/doumee/api/business/VisitEventController.java
@@ -72,7 +72,7 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    //@RequiresPermissions("business:visitevent:query")
    public ApiResponse<PageData<VisitEventDTO>> findPage (@RequestBody PageWrap<VisitEvent> pageWrap) {
    public ApiResponse<PageData<VisitEvent>> findPage (@RequestBody PageWrap<VisitEvent> pageWrap) {
        return ApiResponse.success(visitEventService.findVisitPage(pageWrap));
    }
@@ -80,7 +80,7 @@
    @PostMapping("/exportExcel")
    //@RequiresPermissions("business:visitevent:exportExcel")
    public void exportExcel (@RequestBody PageWrap<VisitEvent> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(VisitEventVo.class).export(visitEventService.findPageExcel(pageWrap), "访客事件推送记录表", response);
        ExcelExporter.build(VisitEvent.class).export(visitEventService.findPageExcel(pageWrap), "访客事件推送记录表", response);
    }
    @ApiOperation("根据ID查询")
server/dmvisit_admin/src/main/java/com/doumee/service/impl/HkSyncEventServiceImpl.java
@@ -86,7 +86,7 @@
        HKService.eventSub(param);//停车场事件
        param.setEventDest(path+"/visit");
        param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()
        param.setEventTypes(new Integer[]{HKConstants.EventTypes.VISIT_SIGN_IN.getKey()
                ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey()});
        HKService.cancelEventSub(param);//先取消
        HKService.eventSub(param);//访客事件
@@ -107,6 +107,7 @@
                ,HKConstants.EventTypes.PARK_LINE_OUT.getKey()
                ,HKConstants.EventTypes.PARK_PASS_IN.getKey()
                ,HKConstants.EventTypes.PARK_PASS_OUT.getKey()
                ,HKConstants.EventTypes.VISIT_SIGN_IN.getKey()
                ,HKConstants.EventTypes.VISIT_SIGN_OUT.getKey(),
                HKConstants.EventTypes.DOOR_FACE_AUTH_SUCCESS.getKey()});
        String path =systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_PUSH_URL).getCode();
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -100,6 +100,8 @@
    // å†…部人员冻结配置时间
    public static final String TIMEOUT_FREEZE = "TIMEOUT_FREEZE";
    // è¶…时预警配置
    public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
    // FTP文件服务器资源访问地址
    public static  Date  getBirthdyByCardNo(String idCard){
@@ -133,7 +135,7 @@
     *   åˆ¤æ–­æ˜¯å¦ä¸ºæœ‰æ•ˆè½¦ç‰Œå·
     */
    public static boolean checkCarNo(String str) {
        String patt="^[京津沪冀晋辽吉黑苏浙皖闽赣鲁豫鄂湘粤桂琼川黔云渝藏陕陇青宁新闽粤晋琼使领A_Z]{1}[A_Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$";
        String patt="^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵川青藏琼宁秦川]\\\\d{5}[A-Z]$";
        Pattern r = Pattern.compile(patt);
        Matcher matcher = r.matcher(str);
        return matcher.find();
@@ -190,7 +192,7 @@
         int nb = 2;//内部访客
    }
    public interface VisitStatus{
        //审核状态 0待审核 1已提交ERP审批  2审核通过 3审核不通过 4取消 5下发成功 6下发失败 7已签离
        //审核状态 0待审核 1已提交ERP审批  2审核通过 3审核不通过 4取消 5下发成功 6下发失败 7已登记 8已签离
         int waitCheck = 0;
         int submitCheck = 1;
         int pass = 2;
@@ -198,7 +200,8 @@
         int cancel = 4;
         int xfSuccess = 5;
         int xfFail = 6;
         int signout = 7;
         int signin= 7;
         int signout =  8;
    }
    public interface EmpowerStatus{
        //一卡通授权下发状态 0待下发 1已下发 2下发成功   3已取消 4下发失败 5任务下载已结束
@@ -327,8 +330,8 @@
    public static void main(String[] args) {
        String t = URLDecoder.decode("https://lsqw.gtja.com/qwcos/v-index.html#/loginforProperty?corpId=ww4b7aefafeb430e4b&corpId=ww4b7aefafeb430e4b&agentId=1000005&agentId=1000005&fromRoute=&userCode=013561&userCode=&userId=zz&userId=&encryptUserCode=&custQwId=wmIUuSDgAAR8MhtVY8w90EyKltvoK5fA&custCode=&openId=op1wZwD1dKuBQywmWWS5957zUOJI&name=%E8%B9%84%E8%B9%84&headUrl=http%3A%2F%2Fwx.qlogo.cn%2Fmmhead%2FQ3auHgzwzM4QlibSOAvYcvRMdsoyF3Ua7duLOYSJfB3dsGsYxIYonBw%2F0&dbHeadUrl=https%3A%2F%2Ftgf.gtja.com%2Ff%2F%2Fqwoms%2F2022512%2Fqwoms_1652332606613_8.jpg");
        System.out.println(t);
        System.out.println(Constants.checkCarNo("湘B40D17"));
        System.out.println(Constants.checkCarNo("皖AP0637"));
    }
server/dmvisit_service/src/main/java/com/doumee/core/utils/ImageBase64Util.java
@@ -91,7 +91,8 @@
                outStream.write(buffer, 0, len);
            }
            // å¯¹å­—节数组Base64编码
            return new BASE64Encoder().encode(outStream.toByteArray());
            return  Base64.encodeBase64String(outStream.toByteArray());
//            return new BASE64Encoder().encode(outStream.toByteArray());
        }catch (Exception e) {
            e.printStackTrace();
        }
@@ -121,9 +122,9 @@
    }
    public static void main(String[] args) {
        String url= "http://doumeetest.oss-cn-beijing.aliyuncs.com/member/20210515/de923f81-b417-47fc-a702-472d60d7870a.png";// å¾…处理的图片
        String url= "http://175.27.187.84/file4/member/20223402/DM1005.png";// å¾…处理的图片
        String imgbese = Image2Base64(url);
        System.out.println(imgbese);
        System.out.println(imgbese.replace("\r\n", ""));
//        String url= "D:\\1.jpg";// æ–°ç”Ÿæˆçš„图片
//        generateImage(imgbese, url);
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.doumee.dao.admin.response;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/2/26 11:02
 */
@Data
@ApiModel("工作台数据")
public class StagingDataVO {
    @ApiModelProperty(value = "内部员工")
    private Long workerCount;
    @ApiModelProperty(value = "访客人员")
    private Long visitorCount;
    @ApiModelProperty(value = "劳务人员")
    private Long lwCount;
    @ApiModelProperty(value = "在场车辆")
    private Integer presenceCarCount;
    @ApiModelProperty(value = "预约车辆")
    private Integer visitorCarCount;
    @ApiModelProperty(value = "长期车辆")
    private Integer longCarCount;
    @ApiModelProperty(value = "供应商数量")
    private Integer supplierCount;
    @ApiModelProperty(value = "劳务公司人员数")
    private List<Map<String,Object>> companyUsers;
    @ApiModelProperty(value = "滞留人员数据")
    private List<Map<String,Object>> retentionUsers;
}
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
@@ -68,7 +68,7 @@
    @ApiModelProperty(value = "手机号")
    private String personPhone;
    private String phone;
    @ApiModelProperty(value = "人员类型")
    private String personType;
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Company.java
@@ -174,4 +174,13 @@
    @TableField(exist = false)
    private List<Company> childList;
    @ApiModelProperty(value = "海康部门级别路径", example = "1")
    @ExcelColumn(name="海康部门级别路径")
    private String hk_company_path;
    @ApiModelProperty(value = "自建部门级别路径", example = "1")
    @ExcelColumn(name="自建部门级别路径")
    private String company_path;
    @ApiModelProperty(value = "erp部门级别路径", example = "1")
    @ExcelColumn(name="erp部门级别路径")
    private String erp_company_path;
}
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
@@ -64,8 +64,8 @@
    @ExcelColumn(name="健康码")
    private String imgurl;
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客 2内部员工")
    @ExcelColumn(name="类型 0劳务访客 1普通访客 2内部员工")
    @ApiModelProperty(value = "类型 0劳务访客 1普通访客 2内部员工 3车辆信息")
    @ExcelColumn(name="类型 0劳务访客 1普通访客 2内部员工 3车辆信息")
    private Integer type;
    @ApiModelProperty(value = "访客名称")
@@ -115,6 +115,11 @@
    @ExcelColumn(name="事件类型码")
    private String eventCode;
    @ApiModelProperty(value = "车牌号(type=3使用)")
    @ExcelColumn(name="车牌号(type=3使用)")
    private String carNo;
    @ApiModelProperty(value = "公司组织")
    @ExcelColumn(name="公司组织")
    @TableField(exist = false)
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
@@ -23,73 +23,73 @@
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
    @ExcelColumn(name="主键")
//    @ExcelColumn(name="主键")
    private Integer id;
    @ApiModelProperty(value = "创建人编码", example = "1")
    @ExcelColumn(name="创建人编码")
//    @ExcelColumn(name="创建人编码")
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
//    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
    @ExcelColumn(name="更新人编码")
//    @ExcelColumn(name="更新人编码")
    private Integer editor;
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
//    @ExcelColumn(name="更新时间")
//    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
//    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
//    @ExcelColumn(name="备注")
    private String remark;
    @ApiModelProperty(value = "事件唯一标识,同一事件若上报多次,则上报事件的eventId相同")
    @ExcelColumn(name="事件唯一标识,同一事件若上报多次,则上报事件的eventId相同")
//    @ExcelColumn(name="事件唯一标识")
    private String eventId;
    @ApiModelProperty(value = "事件源编号,物理设备是资源编号")
    @ExcelColumn(name="事件源编号,物理设备是资源编号")
//    @ExcelColumn(name="事件源编号,物理设备是资源编号")
    private String srcIndex;
    @ApiModelProperty(value = "事件源类型")
    @ExcelColumn(name="事件源类型")
//    @ExcelColumn(name="事件源类型")
    private String srcType;
    @ApiModelProperty(value = "事件源名称")
    @ExcelColumn(name="事件源名称")
//    @ExcelColumn(name="事件源名称")
    private String srcName;
    @ApiModelProperty(value = "事件类型(登记 ç­¾ç¦»ï¼‰")
    @ExcelColumn(name="事件类型")
//    @ExcelColumn(name="事件类型")
    private Integer eventType;
    @ApiModelProperty(value = "事件状态,0-瞬时1-开始2-停止4-事件联动结果更新5-事件图片异步上传", example = "1")
    @ExcelColumn(name="事件状态,0-瞬时1-开始2-停止4-事件联动结果更新5-事件图片异步上传")
//    @ExcelColumn(name="事件状态,0-瞬时1-开始2-停止4-事件联动结果更新5-事件图片异步上传")
    private Integer status;
    @ApiModelProperty(value = "脉冲超时时间")
    @ExcelColumn(name="脉冲超时时间")
//    @ExcelColumn(name="脉冲超时时间")
    private Integer timeout;
    @ApiModelProperty(value = "事件发生时间(设备时间")
    @ExcelColumn(name="事件发生时间(设备时间")
//    @ExcelColumn(name="事件发生时间")
    private String happenTime;
    @ApiModelProperty(value = "事件发生的事件源父设备")
    @ExcelColumn(name="事件发生的事件源父设备")
//    @ExcelColumn(name="事件发生的事件源父设备")
    private String srcParentIndex;
    @ApiModelProperty(value = "访客Is,,对应访客来访记录中的orderId字段")
    @ExcelColumn(name="访客Is,,对应访客来访记录中的orderId字段")
//    @ExcelColumn(name="访客Is,,对应访客来访记录中的orderId字段")
    private String visitorId;
    @ApiModelProperty(value = "姓名")
@@ -97,11 +97,11 @@
    private String personName;
    @ApiModelProperty(value = "性别 1-男2-女", example = "1")
    @ExcelColumn(name="性别 1-男2-女")
//    @ExcelColumn(name="性别 1-男2-女")
    private Integer sex;
    @ApiModelProperty(value = "证件类型 111身份证")
    @ExcelColumn(name="证件类型 111身份证")
//    @ExcelColumn(name="证件类型 111身份证")
    private Integer idType;
    @ApiModelProperty(value = "证件号 ")
@@ -121,7 +121,7 @@
    private String visitorWorkUint;
    @ApiModelProperty(value = "访客验证码")
    @ExcelColumn(name="访客验证码")
//    @ExcelColumn(name="访客验证码")
    private String visitorCode;
    @ApiModelProperty(value = "来访事由")
@@ -129,7 +129,7 @@
    private String purpose;
    @ApiModelProperty(value = "证件签发机关")
    @ExcelColumn(name="证件签发机关")
//    @ExcelColumn(name="证件签发机关")
    private String signOrg;
    @ApiModelProperty(value = "来访时间")
@@ -148,27 +148,27 @@
    private String carNo;
    @ApiModelProperty(value = "照片uri")
    @ExcelColumn(name="照片uri")
//    @ExcelColumn(name="照片uri")
    private String photoUrl;
    @ApiModelProperty(value = "抓拍图uri")
    @ExcelColumn(name="抓拍图uri")
//    @ExcelColumn(name="抓拍图uri")
    private String captureUrl;
    @ApiModelProperty(value = "图片存储服务器唯一标识")
    @ExcelColumn(name="图片存储服务器唯一标识")
//    @ExcelColumn(name="图片存储服务器唯一标识")
    private String svrIndexCode;
    @ApiModelProperty(value = "被访问人id")
    @ExcelColumn(name="被访问人id")
//    @ExcelColumn(name="被访问人id")
    private String beVisitedPersonId;
    @ApiModelProperty(value = "被访问人所属组织id")
    @ExcelColumn(name="被访问人所属组织id")
//    @ExcelColumn(name="被访问人所属组织id")
    private String beVisitedPersonOrgId;
    @ApiModelProperty(value = "被访问人所属组织id")
    @ExcelColumn(name="被访问人所属组织id")
//    @ExcelColumn(name="被访问人所属组织id")
    private String idcardDecode;
    // æ¡ä»¶æŸ¥è¯¢å‚æ•°
@@ -183,4 +183,14 @@
    @ApiModelProperty(value = "统计数量 ")
    @TableField(exist = false)
    private int num  ;
    @ApiModelProperty(value = "事件类型名称")
    @TableField(exist = false)
    @ExcelColumn(name="事件类型")
    private String eventTypeName;
    @ApiModelProperty(value = "抓拍图uri完整")
    @TableField(exist = false)
//    @ExcelColumn(name="抓拍图uri")
    private String captureUrlFull;
}
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -107,14 +107,11 @@
    @ApiModelProperty(value = "随程人员数", example = "1")
    @ExcelColumn(name="随程人员数")
    private Integer memberNum;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "门禁有效期开始")
    @ExcelColumn(name="门禁有效期开始")
    private Date starttime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "门禁有效期截止")
@@ -123,7 +120,6 @@
    @ApiModelProperty(value = "进厂时间")
    @ExcelColumn(name="进厂时间")
    private Date inDate;
    @ApiModelProperty(value = "离场时间")
    @ExcelColumn(name="离场时间")
    private Date outDate;
@@ -153,8 +149,8 @@
    @ExcelColumn(name="接待人员")
    private Integer receptMemberId;
    @ApiModelProperty(value = "审核状态 0待审核 1已提交ERP审批  2审核通过 3审核不通过 4取消 5下发成功 6下发失败", example = "1")
    @ExcelColumn(name="审核状态 0待审核 1已提交ERP审批  2审核通过 3审核不通过 4取消 5下发成功 6下发失败")
    @ApiModelProperty(value = "审核状态 0待审核 1已提交ERP审批  2审核通过 3审核不通过 4取消 5下发成功 6下发失败 7拜访中 8已签离", example = "1")
    @ExcelColumn(name="审核状态 0待审核 1已提交ERP审批  2审核通过 3审核不通过 4取消 5下发成功 6下发失败 7拜访中 8已签离")
    private Integer status;
    @ApiModelProperty(value = "初审人编码", example = "1")
@@ -276,8 +272,15 @@
    @TableField(exist = false)
    private Integer timeOut;
    @ApiModelProperty(value = "随访车辆数量", example = "1")
    @TableField(exist = false)
    private Integer carNum;
    @ApiModelProperty(value = "超时状态0未超时,1已超时,2即将超时", example = "1")
    @TableField(exist = false)
    private Integer outStatus;
    @ApiModelProperty(value = "离场状态;0=未离场", example = "1",hidden = true)
    @TableField(exist = false)
    private Integer levelStatus;
}
server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -1,13 +1,12 @@
package com.doumee.service.business;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.erp.model.openapi.response.AccessTokenResponse;
import com.doumee.dao.admin.request.LaborEmpowerDTO;
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.request.MemberQuery;
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.web.reqeust.AccountLoginDTO;
import com.doumee.dao.web.reqeust.CheckVisitedDTO;
@@ -194,4 +193,11 @@
     * @return
     */
    PageData<MemberVO> getVisitedMemberList(PageWrap<VisitMemberDTO> param);
    /**
     * è¡¥å……数据
     */
    StagingDataVO stagingHead(StagingDataVO stagingHeadVO);
    StagingDataVO stagingBody(StagingDataVO stagingHeadVO);
}
server/dmvisit_service/src/main/java/com/doumee/service/business/VisitEventService.java
@@ -106,7 +106,7 @@
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<VisitEvent>
     */
    PageData<VisitEventDTO> findVisitPage(PageWrap<VisitEvent> pageWrap);
    PageData<VisitEvent> findVisitPage(PageWrap<VisitEvent> pageWrap);
    /**
@@ -114,5 +114,5 @@
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<VisitEventVo>
     */
    List<VisitEventVo> findPageExcel(PageWrap<VisitEvent> pageWrap);
    List<VisitEvent> findPageExcel(PageWrap<VisitEvent> pageWrap);
}
server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -124,4 +124,6 @@
     * @param auditApproveDTO
     */
    void auditApprove(AuditApproveDTO auditApproveDTO);
    void  visitLevel(Integer visitId);
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -460,14 +460,13 @@
        int  origin =Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin());
        List<Company> collect = null;
        if(origin == DataSyncConfig.origin.erp){
            companies.stream().filter(s -> ( StringUtils.equals(s.getErpParentId()+"", parentId))).collect(Collectors.toList());
            collect=  companies.stream().filter(s -> ( StringUtils.defaultString(s.getErpParentId(),"").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
        }else if(origin == DataSyncConfig.origin.hk){
            companies.stream().filter(s -> ( StringUtils.equals(s.getHkParentId()+"", parentId))).collect(Collectors.toList());
            collect= companies.stream().filter(s -> ( StringUtils.defaultString(s.getHkParentId(),"").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
        }else{
            companies.stream().filter(s -> ( StringUtils.equals(s.getParentId()+"", parentId))).collect(Collectors.toList());
            collect=  companies.stream().filter(s -> (StringUtils.defaultString(s.getParentId()+"","").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
        }
        if (CollectionUtils.isEmpty(companies)){
        if (CollectionUtils.isEmpty(collect)){
            return null;
        }
        List<CompanyDTO> companyDTOList = new ArrayList<>();
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,11 +2,8 @@
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.PatternPool;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.core.util.ReUtil;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.DataSyncConfig;
@@ -15,7 +12,6 @@
import com.doumee.core.annotation.excel.ExcelImporter;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
@@ -29,18 +25,17 @@
import com.doumee.dao.admin.request.LaborMemberDTO;
import com.doumee.dao.admin.request.MemberQuery;
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.admin.response.StagingDataVO;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.join.RetentionJoinMapper;
import com.doumee.dao.business.join.UserActionJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.reqeust.AccountLoginDTO;
import com.doumee.dao.web.reqeust.CheckVisitedDTO;
import com.doumee.dao.web.reqeust.VisitMemberDTO;
import com.doumee.dao.web.reqeust.VisitRecordDTO;
import com.doumee.dao.web.response.MemberVO;
import com.doumee.dao.web.response.VisitRecordVO;
import com.doumee.dao.web.response.WxAuthorizeVO;
import com.doumee.service.business.MemberService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -50,7 +45,6 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -96,9 +90,18 @@
    private UserActionJoinMapper userActionJoinMapper;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    @Autowired
    private DataSyncConfig dataSyncConfig;
    @Autowired
    private RetentionJoinMapper retentionJoinMapper;
    @Autowired
    private VisitsMapper visitsMapper;
    @Override
@@ -583,6 +586,7 @@
        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Member.class);
        queryWrapper.selectAs(Company::getName,Member::getCompanyName);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,
                        Member::getCompanyId,pageWrap.getModel().getCompanyIds())
@@ -706,6 +710,7 @@
                        .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
                .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
                .eq(Member::getStatus,Constants.Status.FREEZE.getValue())
                .eq(pageWrap.getModel().getCompanyId()!=null,Company::getId,pageWrap.getModel().getCompanyId())
                .eq(Objects.nonNull(pageWrap.getModel().getCode()),Member::getCode,pageWrap.getModel().getCode())
                .orderByDesc(Member::getCreateDate);
@@ -881,13 +886,16 @@
                .eq(Member::getPhone,checkVisitedDTO.getMobile())
                .eq(validType.equals(Constants.ONE),Member::getName,checkVisitedDTO.getName())
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getStatus,Constants.ZERO)
//                .eq(Member::getStatus,Constants.ZERO)
                .eq(Member::getCanVisit,Constants.ONE)
                .eq(Member::getType,Constants.memberType.internal)
                .last(" limit 1 ")
        );
        MemberVO memberVO = new MemberVO();
        if(!Objects.isNull(member)){
            if(!member.getStatus().equals(Constants.ZERO)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"被访人账号异常,请确认后再试");
            }
            BeanUtils.copyProperties(member,memberVO);
        }else{
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -980,6 +988,45 @@
    @Override
    public StagingDataVO stagingHead(StagingDataVO stagingHeadVO){
        //人员信息
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO));
        if(CollectionUtils.isNotEmpty(memberList)){
            stagingHeadVO.setWorkerCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.internal)).count());
            stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.lw_visitor)).count());
            stagingHeadVO.setVisitorCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.visitor)).count());
        }
        //在场车辆
        stagingHeadVO.setPresenceCarCount(retentionJoinMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,3)));
        //长期车辆
        stagingHeadVO.setLongCarCount(retentionJoinMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,3)
                .exists(" select 1 from park_book p where p.origin = 0 and p.car_code = retention.car_no and p.ISDELETED = 0  ")
        ));
        stagingHeadVO.setVisitorCarCount(stagingHeadVO.getPresenceCarCount() - stagingHeadVO.getLongCarCount());
        stagingHeadVO.setSupplierCount(companyMapper.selectCount(new QueryWrapper<Company>().lambda().eq(Company::getIsdeleted,Constants.ZERO)));
        return stagingHeadVO;
    }
    @Override
    public StagingDataVO stagingBody(StagingDataVO stagingHeadVO){
        List<Map<String,Object>> companyMaps = memberJoinMapper.selectJoinMaps(
                new MPJLambdaWrapper<Member>()
                        .select("count(1) as memberCount, t1.name as companyName")
                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                        .eq(Member::getType,Constants.memberType.lw_visitor)
                        .groupBy(Company::getId,Company::getName)
        );
        List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
                        .select(" count(1) as memberCount, type as memberType ")
                        .ne(Retention::getType,3)
                .groupBy(Retention::getType)
        );
        stagingHeadVO.setCompanyUsers(companyMaps);
        stagingHeadVO.setRetentionUsers(retentionMaps);
        return stagingHeadVO;
    }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitEventServiceImpl.java
@@ -235,9 +235,9 @@
    }
    @Override
    public PageData<VisitEventDTO> findVisitPage(PageWrap<VisitEvent> pageWrap) {
    public PageData<VisitEvent> findVisitPage(PageWrap<VisitEvent> pageWrap) {
        IPage<VisitEventDTO> visitEventDTOIPage = getDataInfo(pageWrap);
        IPage<VisitEvent> visitEventDTOIPage = getDataInfo(pageWrap);
        if(null != visitEventDTOIPage && visitEventDTOIPage.getRecords().size() > 0) {
            visitEventDTOIPage.setRecords(newVisitEvent(visitEventDTOIPage.getRecords()));
        }
@@ -245,27 +245,12 @@
    }
    @Override
    public List<VisitEventVo> findPageExcel(PageWrap<VisitEvent> pageWrap) {
        IPage<VisitEventDTO> visitEventExcel = getDataInfo(pageWrap);
        List<VisitEventVo> voList = new ArrayList<>();
        if(null != visitEventExcel && visitEventExcel.getRecords().size() > 0) {
            visitEventExcel.getRecords().stream().forEach(obj->{
                VisitEventVo eventVo = new VisitEventVo();
                eventVo.setPersonName(obj.getPersonName());
                eventVo.setPersonPhone(obj.getPersonPhone());
                eventVo.setIdNo(obj.getIdNo());
                eventVo.setPersonCompanyName(obj.getPersonCompanyName());
                eventVo.setCarNo(obj.getCarNo());
                eventVo.setBeVisitedPersonName(obj.getBeVisitedPersonName()+"-"+obj.getBeVisitedPersonOrg());
                eventVo.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType()));
                eventVo.setHappenTime(obj.getHappenTime());
                voList.add(eventVo);
            });
        }
        return voList;
    public List<VisitEvent> findPageExcel(PageWrap<VisitEvent> pageWrap) {
        IPage<VisitEvent> visitEventExcel = getDataInfo(pageWrap);
        return newVisitEvent(visitEventExcel.getRecords());
    }
    private IPage<VisitEventDTO> getDataInfo(PageWrap<VisitEvent> pageWrap) {
    private IPage<VisitEvent> getDataInfo(PageWrap<VisitEvent> pageWrap) {
        //是否是数字
        boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
        //是否包含中文
@@ -275,9 +260,7 @@
        IPage<VisitEvent> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<VisitEvent> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper .leftJoin(Visits.class,Visits::getHkId,VisitEvent::getVisitorId);
        queryWrapper.selectAll(VisitEvent.class)
                .selectAs(Visits::getCompanyName,VisitEventDTO::getPersonCompanyName);
        queryWrapper.selectAll(VisitEvent.class);
        queryWrapper.like(number,
                VisitEvent::getPhone,
                pageWrap.getModel().getKeyWords())
@@ -293,37 +276,36 @@
                .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
                        VisitEvent::getEventType,
                        pageWrap.getModel().getEventType())
                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
                .ge(StringUtils.isNotBlank(pageWrap.getModel().getStartTime()),
                        VisitEvent::getHappenTime,
                        pageWrap.getModel().getStartTime())
                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
                .le(StringUtils.isNotBlank(pageWrap.getModel().getEndTime()),
                        VisitEvent::getHappenTime,
                        pageWrap.getModel().getEndTime());
                        pageWrap.getModel().getEndTime())
                .eq(VisitEvent::getIsdeleted,Constants.ZERO);
        queryWrapper.orderByDesc(VisitEvent::getHappenTime);
        IPage<VisitEventDTO> visitEventDTOIPage = visitEventJoinMapper.selectJoinPage(page, VisitEventDTO.class, queryWrapper);
        IPage<VisitEvent> visitEventDTOIPage = visitEventJoinMapper.selectJoinPage(page, VisitEvent.class, queryWrapper);
        return visitEventDTOIPage;
    }
    private List<VisitEventDTO> newVisitEvent(List<VisitEventDTO> VisitEventDTOList) {
    private List<VisitEvent> newVisitEvent(List<VisitEvent> VisitEventDTOList) {
        List<String> codes = Arrays.asList(Constants.FTP_RESOURCE_PATH,Constants.MEMBER_IMG);
        List<SystemDictData> list = systemDictDataMapper.list(codes);
        Map<String,SystemDictData> dataMap = list.stream().collect(Collectors.toMap(SystemDictData::getLabel, Function.identity()));
        List<VisitEventDTO> newDataList = new ArrayList<>();
        VisitEventDTOList.stream().forEach(obj->{
            if(StringUtils.isNotBlank( obj.getCaptureUrl())
                    && !obj.getCaptureUrl().startsWith(HKConstants.IMG_INDEX)
                    && !obj.getCaptureUrl().startsWith(HKConstants.IMG_INDEX_ERROR)) {
                if(null != list && list.size() > 0) {
                    obj.setCaptureUrl(dataMap.get(Constants.FTP_RESOURCE_PATH).getCode()
                            +dataMap.get(Constants.MEMBER_IMG).getCode()
                    obj.setCaptureUrlFull(dataMap.get(Constants.FTP_RESOURCE_PATH).getCode()
                            +dataMap.get(Constants.VISIT_EVENT_IMG).getCode()
                            +obj.getCaptureUrl());
                }
            }
            obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())) ;
            newDataList.add(obj);
            obj.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())); ;
        });
        return newDataList;
        return  VisitEventDTOList;
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -476,7 +476,7 @@
    private void isValidBaseParam(Visits visits) {
        if(visits.getEndtime() == null
                || visits.getStarttime() == null
                ||  StringUtils.isBlank(visits.getReason())
//                ||  StringUtils.isBlank(visits.getReason())
                ||  StringUtils.isBlank( visits.getName())
                ||  StringUtils.isBlank( visits.getPhone())
                ||  visits.getIdcardType() == null
@@ -543,7 +543,11 @@
                v.setIdcardDecode(Constants.getTuominStr(v.getIdcardNo()));//脱敏身份证号
                v.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, v.getIdcardNo()));//身份证号加密
                v.setErpId(visits.getErpId());
                v.setReceptMemberId(visits.getReceptMemberId());
                v.setMemberNum(Constants.ZERO);
                v.setHkStatus(Constants.ZERO);
                v.setReason(visits.getReason());
                v.setDoors(visits.getDoors());
                v.setStatus(Constants.VisitStatus.submitCheck);
            }
            //批量插入数据
@@ -660,25 +664,28 @@
                //校验随访人员填报数据合法性
                isValidWithVisitParam(model,addList,editList);
                model.setCreateDate(visits.getCreateDate());
                getMemberListParam(model.getIdcardNo(),model,addList,editList);
                Member visitsMember = getMemberListParam(model.getIdcardNo(),model,addList,editList);
                model.setMemberId(visitsMember.getId());
            }
        }
        if(CollectionUtils.isNotEmpty(addList)){
            memberMapper.insertBatchSomeColumn(addList);
        }
        if(CollectionUtils.isNotEmpty(editList)){
            editList.forEach(i->{
                memberMapper.updateById(i);
            });
        }
//        if(CollectionUtils.isNotEmpty(addList)){
//            memberMapper.insertBatchSomeColumn(addList);
//        }
//        if(CollectionUtils.isNotEmpty(editList)){
//            editList.forEach(i->{
//                memberMapper.updateById(i);
//            });
//
//        }
        return  m;
    }
    private Member getMemberListParam(String cardno, Visits visits, List<Member> addList, List<Member> editList) {
        if(StringUtils.isNotBlank(visits.getCarNos())&&!Constants.checkCarNo(visits.getCarNos())){
        if(!StringUtils.isNotBlank(visits.getCarNos())
//                &&!Constants.checkCarNo(visits.getCarNos())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,车牌号【"+visits.getCarNos()+"】不合法,请核实后重试~");
        }
        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&cardno.length()!=18
@@ -714,8 +721,9 @@
            member.setHkStatus(Constants.ZERO);
            member.setErpStatus(Constants.ZERO);
            member.setVisitCompanyName(visits.getCompanyName());
            // æ–°å¢žè®¿å®¢è®°å½•
            addList.add(member);
            memberMapper.insert(member);
            // æ–°å¢žè®¿å®¢
//            addList.add(member);
        }else{
            if(!Constants.equalsInteger(Constants.ZERO,member.getStatus() )){
                //如果用户状态异常,则提示
@@ -737,11 +745,13 @@
            member.setHkStatus(Constants.ZERO);
            member.setErpStatus(Constants.ZERO);
            member.setVisitCompanyName(visits.getCompanyName());
            memberMapper.updateById(member);
            // æ›´æ–°è®¿å®¢ä¿¡æ¯,
            editList.add(member);
//            editList.add(member);
        }
        //根据手机号和身份证号码查询 å½“前预约的时间是否与其他预约记录有冲突
        if (visitsMapper.selectCount(new QueryWrapper<Visits>().lambda()
                        .notIn(Visits::getStatus,Constants.VisitStatus.cancel,Constants.VisitStatus.cancel,Constants.VisitStatus.noPass,Constants.VisitStatus.xfFail)
                .and(ms -> ms.eq(Visits::getPhone, visits.getPhone())
                        .or().eq(Visits::getIdcardDecode, Constants.getTuominStr(cardno)))
                .and(ms -> ms.apply(" visits.STARTTIME <= '" + DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss") + "' and visits.ENDTIME >= '" + DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss") + "' ")
@@ -968,6 +978,7 @@
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Visits.class);
        queryWrapper.select("  ( select count(distinct(v.CAR_NOS)) from visits v where v.PARENT_ID = t.ID and v.CAR_NOS is not null  and v.CAR_NOS != ''  and v.CAR_NOS != t.CAR_NOS ) as carNum  ");
        queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName);
        queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment);
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
@@ -983,6 +994,12 @@
        queryWrapper.isNull(Visits::getParentId);
        queryWrapper.orderByDesc(Visits::getCreateDate);
        IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
        for (Visits visits:result.getRecords()) {
            if(StringUtils.isNotBlank(visits.getCarNos())){
                visits.setCarNum(visits.getCarNum() + Constants.ONE);
            }
        }
        return PageData.from(result);
    }
@@ -995,17 +1012,21 @@
    @Override
    public PageData<Visits> retentionPage(PageWrap<Visits> pageWrap) {
        String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_WARNING).getCode();
        IPage<Visits> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Visits.class);
        queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName);
        queryWrapper.select("TIMESTAMPDIFF(MINUTE,t.ENDTIME , NOW()) AS timeOut");
        queryWrapper.select("TIMESTAMPDIFF( MINUTE, NOW(), t.ENDTIME) AS timeOut");
        queryWrapper.selectAs(Member::getType,Visits::getMemberType);
        queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment);
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.leftJoin(" member m on m.id=t.MEMBER_ID");
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getLevelStatus()),Visits::getStatus,Constants.VisitStatus.signin);
        queryWrapper.apply(Objects.nonNull(pageWrap.getModel().getLevelStatus())," TIMESTAMPDIFF( MINUTE, NOW(), t.ENDTIME) <= "+code+"  ");
        queryWrapper.ne("m.type ",Constants.TWO);
        queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
@@ -1017,16 +1038,15 @@
                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Visits::getStatus,pageWrap.getModel().getStatus());
        queryWrapper.isNull(Visits::getOutDate);
        queryWrapper.orderByDesc(Visits::getEditDate);
       String code= systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_FREEZE).getCode();
        IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
        if(result!=null&&result.getRecords()!=null){
            result.getRecords().stream().forEach(s ->{
                if(s.getTimeOut()>=Constants.ZERO){
                    s.setOutStatus(Constants.ONE);
                }else if(s.getTimeOut()<=Integer.valueOf(code)&&s.getTimeOut()>0){
                if(s.getTimeOut()<=Integer.valueOf(code)&&s.getTimeOut()>=0){
                    s.setOutStatus(Constants.TWO);
                }else{
                }else if(s.getTimeOut()>Constants.ZERO){
                    s.setOutStatus(Constants.ZERO);
                }else{
                    s.setOutStatus(Constants.ONE);
                }
            });
@@ -1121,4 +1141,18 @@
    @Override
    public void  visitLevel(Integer visitId){
        Visits visits = visitsMapper.selectById(visitId);
        if(Objects.isNull(visits)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(!visits.getStatus().equals(Constants.VisitStatus.signin)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"访客记录状态错误,请刷新重试");
        }
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout)
                .eq(Visits::getId,visitId));
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
@@ -141,9 +141,9 @@
        model.setHkId(device.getPrivilegeGroupId());
        model.setName(device.getPrivilegeGroupName());
        model.setHkStatus(Constants.ONE);
        model.setIsdeleted(Constants.ZERO);
        model.setStatus(Constants.ONE);
        model.setIsDefault(device.getIsDefault());
        model.setType(String.valueOf(Constants.ZERO));
        model.setType(String.valueOf(Constants.ONE));
        return  model;
    }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -50,6 +50,8 @@
    @Autowired
    private CarsMapper carsMapper;
    @Autowired
    private ParkBookMapper parkBookMapper;
    @Autowired
    private DeviceEventMapper deviceEventMapper;
    @Autowired
    private MemberMapper memberMapper;
@@ -307,7 +309,9 @@
        EventVisitDataRequest model = request.getData();
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Visits.class);
        queryWrapper.selectAs(Member::getType,Visits::getMemberType);
        queryWrapper.eq(Visits::getHkId,model.getVisitorId() );
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId );
        queryWrapper.last("limit 1");
        Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper);
        if(visits !=null){
@@ -319,9 +323,13 @@
                //如果是访客登记,录入人员的在场数据记录
                retentionList.add(getRetentionModelByVisitRequest(visits,request));
                //来访时间
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
                updateVistis.setStatus(Constants.VisitStatus.signin);
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime()));
            }else {
                //如果是访客签离事件
                updateVistis.setStatus(Constants.VisitStatus.signout);
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime()));
                updateVistis.setOutType(Constants.ZERO);
                updateVistis.setOutInfo("访客正常签离");
@@ -341,7 +349,9 @@
        event.setVisitorCode(request.getData().getVisitorCode());
        event.setTimeout(request.getTimeout());
        event.setSvrIndexCode(request.getData().getSvrIndexCode());
        event.setHappenTime(request.getHappenTime());
        event.setStatus(request.getStatus());
        event.setEndTime(request.getData().getEndTime());
        event.setStartTime(request.getData().getStartTime());
        event.setSrcType(request.getSrcType());
        event.setSrcParentIndex(request.getSrcParentIndex());
@@ -350,8 +360,23 @@
        event.setSignOrg(request.getData().getSignOrg());
        event.setSex(request.getData().getSex());
        event.setPurpose(request.getData().getPurpose());
        event.setPhone(request.getData().getPhone());
        event.setBeVisitedPersonId(request.getData().getBeVisitedPersonId());
        event.setBeVisitedPersonName(request.getData().getBeVisitedPersonName());
        event.setBeVisitedPersonOrg(request.getData().getBeVisitedPersonOrg());
        event.setBeVisitedPersonOrgId(request.getData().getBeVisitedPersonOrgId());
        event.setVisitorWorkUint(request.getData().getVisitorWorkUint());
        event.setPhotoUrl(getHkImgUrl(request.getData().getPhotoUrl()));
        event.setPersonName(request.getData().getPersonName());
        event.setCarNo(request.getData().getCarNo());
        event.setCaptureUrl(request.getData().getCaptureUrl());
        if(StringUtils.isNotBlank(request.getData().getCaptureUrl())){
            event.setCaptureUrl(HKConstants.IMG_INDEX+request.getData().getCaptureUrl());
        }
        if(StringUtils.isNotBlank(request.getData().getPhotoUrl())){
            event.setPhotoUrl(HKConstants.IMG_INDEX+request.getData().getPhotoUrl());
        }
        event.setIdType(request.getData().getIdType());
        String idnum =request.getData().getIdNo();
        if(StringUtils.isNotBlank(idnum)){
@@ -362,8 +387,6 @@
        }
        event.setEventType(request.getEventType());
        event.setEventId(request.getEventId());
        event.setHappenTime(event.getHappenTime());
        return event;
    }
@@ -409,16 +432,28 @@
            //门禁事件集合
            List<EventParkInfoRequest> events  = param.getParams().getEvents();
            List<CarEvent> list = new ArrayList<>();
            List<Retention> retentionList = new ArrayList<>();
            List<String> delRetentionList = new ArrayList<>();
            for(EventParkInfoRequest request : events){
                if(request.getData() ==null ||StringUtils.isBlank(request.getData().getPlateNo())){
                    continue;
                }
                //封装事件信息表对象
                list.add(getParkEventModelByRequest(request));
                list.add(getParkEventModelByRequest(request,delRetentionList,retentionList));
            }
            if(list.size()>0){
                //插入门禁记录
                carEventMapper.insertBatchSomeColumn(list);
            }
            if(delRetentionList.size()>0){
                //先删除原有的在场人员(内部人员)
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda()
                        .eq(Retention::getType,Constants.THREE)
                        .in(Retention::getCarNo,delRetentionList));
            }
            if(retentionList.size()>0){
                //再插入最新的在厂人员
                retentionMapper.insertBatchSomeColumn(retentionList);
            }
            log.error("【海康停车场事件推送】========成功=======");
        }catch (Exception e){
@@ -434,7 +469,7 @@
     * @param request
     * @return
     */
    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request) {
    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request, List<String> delRetentionList , List<Retention> retentionList ) {
        CarEvent event = new CarEvent();
        event.setIsdeleted(Constants.ZERO);
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
@@ -488,18 +523,40 @@
            event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl()));
        }
        if(StringUtils.isNotBlank(event.getPlateNos())){
                Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda()
                        .eq(Cars::getCode,event.getPlateNos())
                                .eq(Cars::getIsdeleted,Constants.ONE )
                ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda()
                        .eq(ParkBook::getCarCode,event.getPlateNos())
                                .eq(ParkBook::getIsdeleted,Constants.ONE )
                        .last("limit 1" ));
                if(cars!=null){
                    event.setMemberId(cars.getMemberId());
                }
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){
                //如果是入厂放行
                delRetentionList.add(event.getPlateNos());
                retentionList.add(getRetentionModelByParkRequest(request));
            }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){
                //如果是出场放行
                delRetentionList.add(event.getPlateNos());
        }
        }
        return event;
    }
    private Retention getRetentionModelByParkRequest(EventParkInfoRequest request) {
        Retention retention = new Retention();
        retention.setIsdeleted(Constants.ZERO);
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime()));
        retention.setCarNo(request.getData().getPlateNo());
        retention.setType(Constants.THREE);
//        retention.setDeviceName(request.getSrcName());
//        retention.setDeviceIndex(request.getSrcIndex());
        return retention;
    }
    private void saveInterfaceLog(Object param, String path,String result) {
        InterfaceLog hkMonitoryLogDO=new InterfaceLog();
        hkMonitoryLogDO.setType(1);
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -180,8 +180,8 @@
            //人脸为空,不能进行推送
            return  null;
        }
        request.setVisitStartTime(DateUtil.getISO8601Timestamp(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
        request.setVisitStartTime(DateUtil.getISO8601Timestamp2(c.getStarttime()));
        request.setVisitEndTime(DateUtil.getISO8601Timestamp2(c.getEndtime()));
        request.setReceptionistId(c.getReceptMemberHkId());//被访人海康编码
        request.setVisitPurpose(c.getReason());
        request.setVisitorInfo(info);
@@ -248,6 +248,7 @@
        info.setVisitorWorkUnit(c.getCompanyName());
        info.setPhoneNo(c.getPhone());
        info.setPlateNo(c.getCarNos());
        info.setGender(c.getSex()+"");
        if(Constants.equalsInteger(c.getIdcardType(),Constants.ZERO)){
            info.setCertificateType(HKConstants.CertificateType.SHENFENZHENG.getKey()+"");
            info.setCertificateNo(DESUtil.decrypt(Constants.EDS_PWD, c.getIdcardNo()));
@@ -283,7 +284,7 @@
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(Visits.class);
        queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName)
                .select("t1.hk_id as receptMemberHkId")
                .selectAs(Member::getHkId,Visits::getReceptMemberHkId)
                .leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
        queryWrapper.eq(Visits::getStatus,Constants.VisitStatus.pass)//审批通过
                .eq(Visits::getHkStatus,Constants.ZERO)//未同步到海康