jiangping
2025-02-18 b33f2e78ffd4fd401698b84a33dc3c293793c62f
最新版本541200007
已添加1个文件
已修改17个文件
345 ■■■■ 文件已修改
admin/src/views/business/visits.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/bookings.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/vehicle/cars.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/logback-spring.xml 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/TmsCloudController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/PlatformWorkVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visits.vue
@@ -89,9 +89,9 @@
        <el-table-column v-if="containPermissions(['business:visits:update', 'business:visits:delete'])" label="操作"
          min-width="200" fixed="right">
          <template slot-scope="{row}">
            <el-button type="text" @click="departure(row.id)" icon="el-icon-delete" style="color: red" v-if="row.status == 7">离厂</el-button>
            <el-button type="text" @click="cancel(row.id)" v-permissions="['business:visits:cancel']"
              icon="el-icon-delete" style="color: red" v-if="row.status == 5">取消预约</el-button>
          <el-button type="text" @click="departure(row.id)" icon="el-icon-delete" style="color: red" v-if="row.status == 7">离场</el-button>
            <!--           <el-button type="text" @click="cancel(row.id)" v-permissions="['business:visits:cancel']"
                      icon="el-icon-delete" style="color: red" v-if="row.status == 5">取消预约</el-button>-->
            <el-button type="text" @click="resend(row.id)" v-permissions="['business:visits:update']"
              icon="el-icon-edit" v-if="row.status == 6">重新下发</el-button>
            <!-- <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('详情', row.id)" icon="el-icon-view">详情</el-button> -->
admin/src/views/meeting/bookings.vue
@@ -102,13 +102,11 @@
          <template slot-scope="{ row }">
            <template>
              <el-button type="text" @click="$refs.operaBookingsDetailWindow.open('会议详情', row)">查看详情</el-button>
              <el-button v-if="row.meetingStatus == '1'" type="text"
                @click="$refs.operaBookingsWindow.open('编辑会议预约', row)"
                v-permissions="['business:bookings:update']">编辑</el-button>
              <el-button type="text" v-if="row.meetingStatus == '1' || row.meetingStatus == '4'" @click="handleStart(row)">开始</el-button>
              <el-button type="text" v-if="row.meetingStatus == '2'" @click="handleEnd(row)">结束</el-button>
              <el-button v-if="row.meetingStatus == '1' || row.meetingStatus == '4'" type="text" @click="cancelMeeting(row.id)"
                v-permissions="['business:bookings:update']">撤回</el-button>
              <el-button v-if="row.meetingStatus == '1' && row.creator===userInfo.id" type="text"
                @click="$refs.operaBookingsWindow.open('编辑会议预约', row)" >编辑</el-button>
              <el-button type="text" v-if="row.creator===userInfo.id &&(row.meetingStatus == '1' || row.meetingStatus == '4')" @click="handleStart(row)">开始</el-button>
              <el-button type="text" v-if="row.creator===userInfo.id && row.meetingStatus == '2'" @click="handleEnd(row)">结束</el-button>
              <el-button v-if="row.creator===userInfo.id &&(row.meetingStatus == '1' || row.meetingStatus == '4')" type="text" @click="cancelMeeting(row.id)">撤回</el-button>
            </template>
            <!-- <el-button v-else type="text" @click="deleteById(row)" v-permissions="['business:bookings:delete']">删除</el-button> -->
          </template>
@@ -142,6 +140,7 @@
  data() {
    return {
      date: [],
      userInfo: this.$store.state.userInfo,
      // æœç´¢
      searchForm: {
        roomId: '',
admin/src/views/vehicle/cars.vue
@@ -45,7 +45,7 @@
        v-permissions="['business:cars:create', 'business:cars:exportExcel', 'business:parkBook:create']">
        <li><el-button type="primary" @click="handleEdit" icon="el-icon-plus"
            v-permissions="['business:cars:create']">新建</el-button></li>
        <li><el-button type="primary" @click="$refs.OperaCarsImportWindowRef.open('人员导入', searchForm.companyType)" v-permissions="['business:cars:create']">车辆导入</el-button>
        <li><el-button type="primary" @click="$refs.OperaCarsImportWindowRef.open('车辆导入', searchForm.companyType)" v-permissions="['business:cars:create']">车辆导入</el-button>
        </li>
        <li><el-button type="primary" @click="exportExcel" v-permissions="['business:cars:exportExcel']">导出</el-button>
        </li>
h5/pages/staff/index.vue
@@ -53,7 +53,7 @@
        stagingHead,
        wxAuthorize,
        refreshToken,
        app_url,
        app_url,
        delHkUserOpenid
    } from '@/api'
    export default {
@@ -145,7 +145,7 @@
                    } else if (yw == 7) {
                        this.jump('/pages/staff/task/driver?id=' + ywinfo.ywid)
                    } else if (yw == 5) {
                        this.jump('/pages/staff/vehicle/sendACarDetail')
                        this.jump('/pages/staff/vehicle/sendACarDetail?id=' + ywinfo.ywid)
                    }
                }, 100)
            }
@@ -173,25 +173,25 @@
            loginOut() {
                logoutPost({
                    isH5: 1
                }).then(res => {
                    const userInfo = uni.getStorageSync('userInfo')
                    const openId = uni.getStorageSync('openId')
                    this.$store.commit('empty')
                    if(openId){
                        delHkUserOpenid({
                            userName: userInfo.username,
                            openId
                        }).then(ress => {
                            setTimeout(() => {
                                window.location.href = app_url
                            }, 300)
                        })
                    }else{
                        setTimeout(() => {
                            window.location.href = app_url
                        }, 300)
                    }
                }).then(res => {
                    const userInfo = uni.getStorageSync('userInfo')
                    const openId = uni.getStorageSync('openId')
                    this.$store.commit('empty')
                    if(openId){
                        delHkUserOpenid({
                            userName: userInfo.username,
                            openId
                        }).then(ress => {
                            setTimeout(() => {
                                window.location.href = app_url
                            }, 300)
                        })
                    }else{
                        setTimeout(() => {
                            window.location.href = app_url
                        }, 300)
                    }
                })
            },
            getTaskInfo() {
@@ -328,4 +328,4 @@
            height: 40rpx;
        }
    }
</style>
</style>
server/system_service/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java
@@ -38,6 +38,10 @@
     * æ ‡é¢˜è¡Œå·
     */
    private int headerNum;
    /**
     * æ ‡é¢˜è¡Œå·
     */
    private CellType changeType;
    /**
     * æž„造函数
@@ -101,6 +105,18 @@
        throws InvalidFormatException, IOException {
        this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex);
    }
    /**
     * æž„造函数 (重要)
     * @param--file å¯¼å…¥æ–‡ä»¶å¯¹è±¡
     * @param headerNum æ ‡é¢˜è¡Œå·ï¼Œæ•°æ®è¡Œå·=标题行号+1
     * @param sheetIndex å·¥ä½œè¡¨ç¼–号
     * @throws InvalidFormatException
     * @throws IOException
     */
    public ExcelImporter(MultipartFile multipartFile, int headerNum, int sheetIndex, CellType cellType)
        throws InvalidFormatException, IOException {
        this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex,cellType);
    }
    /**
     * æž„造函数 ï¼ˆï¼‰
@@ -128,6 +144,27 @@
        this.headerNum = headerNum;
        log.debug("Initialize success.");
    }
    public ExcelImporter(String fileName, InputStream in, int headerNum, int sheetIndex,CellType cellType)
        throws InvalidFormatException, IOException {
        if (StringUtils.isBlank(fileName)){
            throw new RuntimeException("导入文档为空!");
        }else if(fileName.toLowerCase().endsWith("xls")){
            this.wb = new HSSFWorkbook(in);
        }else if(fileName.toLowerCase().endsWith("xlsx")){
            this.wb = new XSSFWorkbook(in);
        }else{
            throw new RuntimeException("文档格式不正确!");
        }
        if (this.wb.getNumberOfSheets()<sheetIndex){
            throw new RuntimeException("文档中没有工作表!");
        }
        this.sheet = this.wb.getSheetAt(sheetIndex);
        this.headerNum = headerNum;
        this.changeType = cellType;
        log.debug("Initialize success.");
    }
    /**
     * èŽ·å–è¡Œå¯¹è±¡
@@ -174,7 +211,8 @@
            Cell cell = row.getCell(column);
            if (cell != null){
                if (cell.getCellType() == CellType.NUMERIC){
                    val = cell.getNumericCellValue();
                    cell.setCellType(CellType.STRING); // ç¡®ä¿å•元格类型为字符串
                    val = cell.getStringCellValue();
                }else if (cell.getCellType() == CellType.STRING){
                    val = cell.getStringCellValue();
                }else if (cell.getCellType() == CellType.FORMULA){
server/system_timer/src/main/resources/logback-spring.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%highlight(%date{yyyy-MM-dd HH:mm:ss}) | %highlight(%-5level) | %highlight(%thread) | %highlight(%logger) | %msg%n</pattern>
        </layout>
    </appender>
    <property name="log.path" value="/usr/local/jars/logs/systemTimer"></property>
    <property name="log.fileSize" value="100MB"></property>
    <property name="log.historyDays" value="7"></property>
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--匹配就舍去-->
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${log.path}/info.%d.%i.log</fileNamePattern>
            <maxFileSize>${log.fileSize}</maxFileSize>
            <maxHistory>${log.historyDays}</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${log.path}/error.%d.%i.log</fileNamePattern>
            <maxFileSize>${log.fileSize}</maxFileSize>
            <maxHistory>${log.historyDays}</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <!-- å¼‚步写入日志 -->
    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
        <!-- ä¸ä¸¢å¤±æ—¥å¿—.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold >0</discardingThreshold>
        <!-- æ›´æ”¹é»˜è®¤çš„队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- æ·»åŠ é™„åŠ çš„appender,最多只能添加一个 -->
        <appender-ref ref ="fileInfoLog"/>
    </appender>
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>
</configuration>
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/TmsCloudController.java
@@ -2,6 +2,8 @@
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
@@ -93,6 +95,9 @@
            param.getParameters().setDriverTel("00000000000");//手机号必填
        }*/
        LoginUserInfo user = this.getLoginUser(token);
        if(user ==null){
            throw  new BusinessException(ResponseStatus.NO_LOGIN);
        }
        param.getParameters().setDriverTel(user.getUsername());
        return  ApiResponse.success(tmsService.getDriverTaskList(param));
    }
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -625,6 +625,7 @@
        String[] regionDataRanking= new String[]{"/api/ecm/v1/energy/regionDataRanking","消防看板-4获取区域用量排名-能耗看板"};//消防看板-获取区域用量排名 - èƒ½è€—看板
        String[] energyTotal= new String[]{"/api/ecm/v1/energy/energyTotal","消防看板-4根据时间和时间维度获取园区能耗数据"};//消防看板-根据时间和时间维度获取园区能耗数据
        String[] findDeviceStatistics= new String[]{"/api/v1/device/findDeviceStatistics","分页查询设备的以及下属传感器数据的状态统计"};// åˆ†é¡µæŸ¥è¯¢è®¾å¤‡çš„以及下属传感器数据的状态统计
        String[] iccmSignoff= new String[]{"/api/iccm/v1/signoff","iccm访客签离"};// iccm访客签离
    }
    /**
     * é™„录A.55消防设备类型
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -473,6 +473,22 @@
        return startDoPostStringArtemis(HKConstants.InterfacePath.visitOut,body);
    }
    /**
     *    iccm签离访客预约
     * @param body
     * @return
     */
    public static String iccmSignoff(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.iccmSignoff,body);
    }
    /**
     *    iccm取消访客预约
     * @param body
     * @return
     */
    public static String iccmCancelAppointment(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.iccmCancelAppointment,body);
    }
    /**
     *    è®¿å®¢æƒé™ç»„
     * @param body
     * @return
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -470,6 +470,42 @@
        return  null;
    }
    /**
     *iccm访客预约签离
     * @return
     */
    public  static  BaseResponse  iccmSignoff(VisitAppointmentOutRequest param){
        log.info("【海康iccm访客预约签离】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.iccmSignoff(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse>(){};
            BaseResponse  result = JSONObject.parseObject(res, typeReference.getType());
           logResult(result,"海康iccm访客预约签离");
            return  result;
        }catch (Exception e){
            log.error("【海康iccm访客预约签离】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *iccm访客预约取消
     * @return
     */
    public  static  BaseResponse  iccmCancelAppointment(VisitAppointmentCancelRequest param){
        log.info("【海康iccm访客预约取消】================开始===="+JSONObject.toJSONString(param));
        try {
            String res = HKTools.iccmCancelAppointment(JSONObject.toJSONString(param));
            TypeReference typeReference =
                    new TypeReference< BaseResponse>(){};
            BaseResponse  result = JSONObject.parseObject(res, typeReference.getType());
           logResult(result,"海康iccm访客预约取消");
            return  result;
        }catch (Exception e){
            log.error("【海康iccm访客预约取消】================失败====:\n"+ e.getMessage());
        }
        return  null;
    }
    /**
     *访客免登记预约
     * @return
     */
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -617,12 +617,12 @@
                    paramMap.put("touser", openId);
                    paramMap.put("data", dataMap);
                    String response = HttpsUtil.postJson(postUrL, JSONObject.toJSONString(paramMap));
                    log.warn("·==++--·推送微信模板信息内容:{}", JSONObject.toJSONString(paramMap));
                    log.error("·==++--·推送微信模板信息内容:{}", JSONObject.toJSONString(paramMap));
                    if(StringUtils.isBlank(response)){
                        log.warn("·==++--·推送微信模板信息:{}·--++==·", "失败");
                        log.error("·==++--·推送微信模板信息:{}·--++==·", "失败");
                    }else{
                        JSONObject json = JSONObject.parseObject(response);
                        log.warn("·==++--·推送微信模板信息:{}·--++==·", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"成功":"失败"+json.getString("errmsg"));
                        log.error("·==++--·推送微信模板信息:{}·--++==·", Constants.equalsInteger(json.getInteger("errcode"),Constants.ZERO)?"成功":"失败"+json.getString("errmsg"));
                    }
                }
            }
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/PlatformWorkVO.java
@@ -1,5 +1,6 @@
package com.doumee.dao.web.response;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.dao.business.model.PlatformJob;
import com.doumee.dao.system.model.Multifile;
import io.swagger.annotations.ApiModel;
@@ -7,12 +8,15 @@
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("月台任务数据")
public class PlatformWorkVO {
    @ApiModelProperty(value = "服务器当前时间")
    private Date currentDate;
    @ApiModelProperty(value = "任务列表")
    private List<PlatformJob> platformJobList;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -34,6 +34,7 @@
import com.doumee.service.business.third.EmayService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -349,6 +350,17 @@
                if(StringUtils.isBlank(f.getFileurl())){
                    continue;
                }
                if(f.getType() == null){
                    if(StringUtils.endsWithIgnoreCase(f.getFileurl(),".mp4")){
                        f.setType(Constants.ONE);
                    }else if(StringUtils.endsWithIgnoreCase(f.getFileurl(),".jpg")
                            ||StringUtils.endsWithIgnoreCase(f.getFileurl(),".jpeg")
                            ||StringUtils.endsWithIgnoreCase(f.getFileurl(),".png")){
                        f.setType(Constants.ZERO);
                    }else{
                        f.setType(Constants.TWO);
                    }
                }
                f.setFileurlFull(path+f.getFileurl());
                if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.HIDDEN_DANGER_SUBMIT.getKey())){
                    //现场情况
@@ -566,6 +578,17 @@
                multifile.setCreateDate(new Date());
                multifile.setCreator(hiddenDanger.getEditor());
                multifile.setIsdeleted(Constants.ZERO);
                if(multifile.getType() == null){
                    if(StringUtils.endsWithIgnoreCase(multifile.getFileurl(),".mp4")){
                        multifile.setType(Constants.ONE);
                    }else if(StringUtils.endsWithIgnoreCase(multifile.getFileurl(),".jpg")
                    ||StringUtils.endsWithIgnoreCase(multifile.getFileurl(),".jpeg")
                    ||StringUtils.endsWithIgnoreCase(multifile.getFileurl(),".png")){
                        multifile.setType(Constants.ZERO);
                    }else{
                        multifile.setType(Constants.TWO);
                    }
                }
                multifile.setObjId(hiddenDanger.getId());
                multifile.setCreator(hiddenDanger.getLoginUserInfo().getId());
                multifile.setObjType(Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey());
@@ -579,7 +602,7 @@
            multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
                    .set(Multifile::getIsdeleted,Constants.ONE )
                    .eq(Multifile::getObjType,Constants.MultiFile.HIDDEN_DANGER_DEAL_BEFORE.getKey())
                    .set(Multifile::getObjId,hiddenDanger.getId())
                    .eq(Multifile::getObjId,hiddenDanger.getId())
            );
        }
        if(hiddenDanger.getStatus().equals(Constants.ONE)){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -57,6 +57,7 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -2048,7 +2049,7 @@
            ExcelImporter ie = null;
            List<MemberImport> dataList =null;
            try {
                ie = new ExcelImporter(file,1,0);
                ie = new ExcelImporter(file,1,0, CellType.STRING); // ç¡®ä¿å•元格类型为字符串);
                dataList = ie.getDataList(MemberImport.class,null);
            }  catch (Exception e) {
                e.printStackTrace();
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
@@ -289,6 +289,7 @@
    public static PlatformWorkVO getPlatformWorkVO(Platform platform,List<PlatformJob> platformJobList){
        PlatformWorkVO platformWorkVO = new PlatformWorkVO();
        platformWorkVO.setCurrentDate(new Date());
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformJobList)){
            //获取月台组下的所有作业数据
            List<PlatformJob> platformJobs = platformJobList.stream().filter(
@@ -340,7 +341,6 @@
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.EXCEPTION.getKey())
            )
        );
        platformGroupWorkVO.setWaitNum(platformJobJoinMapper.selectJoinCount(new MPJLambdaWrapper<PlatformJob>()
                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -600,11 +600,17 @@
        BeanUtils.copyProperties(platformJob,oldPlatformJob);
        if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ZERO)){
            if(!StringUtils.equals(platformJob.getDrivierPhone(),signInDTO.getLoginUserInfo().getMobile())){
                throw new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
            this.distanceSignIn(signInDTO,platformJob);
        }else if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ONE)){
            if(!StringUtils.equals(platformJob.getDrivierPhone(),signInDTO.getLoginUserInfo().getMobile())){
                throw new BusinessException(ResponseStatus.DATA_EMPTY);
            }
            if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看");
            }
@@ -652,7 +658,6 @@
                || Objects.isNull(signInDTO.getLnt())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"经纬度信息异常");
        }
        //获取签到点的经纬度
        Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode());
        Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode());
@@ -677,11 +682,9 @@
        }
    }
    @Override
    public PlatformJob getDetail(JobDetailDTO jobDetailDTO){
        if(Objects.isNull(jobDetailDTO)
        || Objects.isNull(jobDetailDTO.getJobId())){
        if(Objects.isNull(jobDetailDTO)   || Objects.isNull(jobDetailDTO.getJobId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        PlatformJob platformJob  = platformJobMapper.selectById(jobDetailDTO.getJobId());
@@ -691,14 +694,16 @@
        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){
            //待签到 è®¡ç®—距离
            if(Objects.nonNull(jobDetailDTO.getLnt())&&Objects.nonNull(jobDetailDTO.getLat())){
                //获取签到点的经纬度
                Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode());
                Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode());
                //获取2个点的距离Xç±³
                Double getDistanceDouble = PositionUtil.getDistance(jobDetailDTO.getLnt(),jobDetailDTO.getLat(),lnt,lat);
                //转换km
                BigDecimal getDistance = BigDecimal.valueOf(getDistanceDouble).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP);
                platformJob.setGetDistance(getDistance);
                if(jobDetailDTO.getLat()!=null && jobDetailDTO.getLnt()!=null){
                    //获取签到点的经纬度
                    Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode());
                    Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode());
                    //获取2个点的距离Xç±³
                    Double getDistanceDouble = PositionUtil.getDistance(jobDetailDTO.getLnt(),jobDetailDTO.getLat(),lnt,lat);
                    //转换km
                    BigDecimal getDistance = BigDecimal.valueOf(getDistanceDouble).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP);
                    platformJob.setGetDistance(getDistance);
                }
            }
        }else if( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())
                || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey())
@@ -886,7 +891,7 @@
        );
        
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())) {
        if(Objects.nonNull(platformJob.getDrivierPhone())) {
          this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobCallIn,platformJob);
        }
        return platformJob;
@@ -895,7 +900,7 @@
    public void sendWxNotice(String objCode,PlatformJob platformJob){
        SystemUser driver = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
                .eq(SystemUser::getDeleted, Constants.ZERO)
                .eq(SystemUser::getType, Constants.ZERO)
                .in(SystemUser::getType, Constants.ZERO,Constants.TWO)
                .eq(SystemUser::getMobile,platformJob.getDrivierPhone())
                .last(" limit 1 "));
        if (Objects.nonNull(driver) && StringUtils.isNotBlank(driver.getOpenid())) {
@@ -1137,7 +1142,7 @@
        );
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())){
        if(Objects.nonNull(platformJob.getDrivierPhone())){
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobSingIn,platformJob);
        }
@@ -1273,7 +1278,7 @@
        );
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())) {
        if(Objects.nonNull(platformJob.getDrivierPhone())) {
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobMove,platformJob);
        }
@@ -1326,7 +1331,7 @@
        );
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())){
        if(Objects.nonNull(platformJob.getDrivierPhone())){
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobOverNum,platformJob);
        }
@@ -1378,7 +1383,7 @@
        );
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())) {
        if(Objects.nonNull(platformJob.getDrivierPhone())) {
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobError,platformJob);
        }
@@ -1432,7 +1437,7 @@
                SmsConstants.platformJobContent.platformJobWorking,platform.getName(),null
        );
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())) {
        if(Objects.nonNull(platformJob.getDrivierPhone())) {
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobWorking,platformJob);
        }
        //广播 led通知
@@ -1533,7 +1538,7 @@
        );
        //公众号模板消息
        if(Objects.nonNull(platformJob.getDriverId())) {
        if(Objects.nonNull(platformJob.getDrivierPhone())) {
            this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobFinish,platformJob);
        }
@@ -2194,8 +2199,11 @@
            List<PlatformJob> calledList = platformJobList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())).collect(Collectors.toList());
            largeScreenDataVO.setWaitWorkList(calledList);
        }
//        String u = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.BIGSCREEN_UUID);
//        if(StringUtils.isBlank(u)){
        String u =  UUID.randomUUID().toString();
        redisTemplate.opsForValue().set(Constants.RedisKeys.BIGSCREEN_UUID,u,3, TimeUnit.MINUTES);
//        }
        String url = Constants.getWxUrl(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.WX_REDIRECT_URL).getCode(),Constants.WxUrlParams.BISCREEN_CODE,u);
        largeScreenDataVO.setQrCode(url);
        largeScreenDataVO.setAttention(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_ATTENTION).getCode());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -13,6 +13,7 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.VisitAppointmentCancelRequest;
import com.doumee.core.haikang.model.param.request.VisitAppointmentOutRequest;
import com.doumee.core.haikang.model.param.request.VisitAppointmentRequest;
import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse;
@@ -1505,7 +1506,8 @@
        VisitAppointmentOutRequest request = new VisitAppointmentOutRequest();
        request.setOrderId(visits.getHkId());
        //调用海康强制签离
        BaseResponse response =  HKService.outVisitAppiontment(request);
        BaseResponse response =  HKService.iccmSignoff(request);
//        BaseResponse response =  HKService.outVisitAppiontment(request);
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout)
                .eq(Visits::getId,visitId));
        //产出在场人员信息
@@ -1522,10 +1524,11 @@
        if(!visits.getStatus().equals(Constants.VisitStatus.xfSuccess)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"访客记录状态错误,请刷新重试");
        }
        VisitAppointmentOutRequest request = new VisitAppointmentOutRequest();
        request.setOrderId(visits.getHkId());
        VisitAppointmentCancelRequest request = new VisitAppointmentCancelRequest();
        request.setAppointRecordIds(new String[]{visits.getHkId()});
        //调用海康强制签离
        BaseResponse response =  HKService.outVisitAppiontment(request);
//        BaseResponse response =  HKService.outVisitAppiontment(request);
        BaseResponse response =  HKService.iccmCancelAppointment(request);
        visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout)
                .eq(Visits::getId,visitId));
        //产出在场人员信息
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1235,7 +1235,6 @@
    @Override
    public    YearDeviceDataVO yearFightingAdminDeviceData(){
        YearDeviceDataVO data = new YearDeviceDataVO();
        FireStatisticRequest param = new FireStatisticRequest();
        param.setIndexCode("api_fire_statistic");
        BaseResponse<FireStatisticResponse> response = HKService.fireStatistic(param);
@@ -1243,7 +1242,6 @@
            data.setProtectNum(Constants.formatIntegerNum(response.getData().getMaintenanceNum()));
            data.setPlanProtectTotal(Constants.formatIntegerNum(response.getData().getDeviceTotalNum()));
        }
        param = new FireStatisticRequest();
        param.setIndexCode("api_fire_statistic_month");
        BaseResponse<FireStatisticResponse> response1 = HKService.fireStatisticMonth(param);
@@ -1253,7 +1251,6 @@
            data.setMonthTotalNum(Constants.formatIntegerNum(response1.getData().getDeviceTotalNum()));
        }
        return data;
    }
    /**
@@ -1269,11 +1266,10 @@
        BaseResponse<List<FindDeviceStatisticsResponse>> response = HKService.findDeviceStatistics(param1);
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){
            for(FindDeviceStatisticsResponse r :response.getData()){
                DeviceNumByTypeVO t = new DeviceNumByTypeVO();
                t.setTypeName(r.getDeviceTypeName());
                t.setTotalDeviceNum(Constants.formatIntegerNum(r.getTotalDeviceCount()));
                if(r.getDevices()!=null){
                    for(FindDeviceStatisticsInfoResponse td : r.getDevices()){
                        DeviceNumByTypeVO t = new DeviceNumByTypeVO();
                        t.setTypeName(td.getDeviceName());
                        //屏蔽数
                        t.setShieldDeviceNum(Constants.formatIntegerNum(t.getShieldDeviceNum() )+ Constants.formatIntegerNum(td.getShieldSensorCount()));
                        //报警数
@@ -1284,15 +1280,15 @@
                        t.setErrDeviceNum(Constants.formatIntegerNum(t.getErrDeviceNum())+ Constants.formatIntegerNum(td.getFaultSensorCount()));
                        //总设备数
                        t.setTotalDeviceNum(Constants.formatIntegerNum(t.getTotalDeviceNum())+ Constants.formatIntegerNum(td.getTotalSensorCount()));
                        list.add(t);
//                        data.setOfflineDeviceNum(Constants.formatIntegerNum( data.getOfflineDeviceNum())+Constants.formatIntegerNum(t.getOfflineDeviceNum()));
                        data.setShieldDeviceNum(Constants.formatIntegerNum( data.getShieldDeviceNum())+Constants.formatIntegerNum(t.getShieldDeviceNum()));
                        data.setAlarmDeviceNum(Constants.formatIntegerNum( data.getAlarmDeviceNum())+Constants.formatIntegerNum(t.getAlarmDeviceNum()));
                        data.setOnlineDeviceNum(Constants.formatIntegerNum( data.getOnlineDeviceNum())+Constants.formatIntegerNum(t.getOnlineDeviceNum()));
                        data.setErrDeviceNum(Constants.formatIntegerNum( data.getErrDeviceNum())+Constants.formatIntegerNum(t.getErrDeviceNum()));
                        data.setTotalDeviceNum(Constants.formatIntegerNum( data.getTotalDeviceNum())+Constants.formatIntegerNum(t.getTotalDeviceNum()));
                    }
                }
                list.add(t);
                data.setOfflineDeviceNum(Constants.formatIntegerNum( data.getOfflineDeviceNum())+Constants.formatIntegerNum(t.getOfflineDeviceNum()));
                data.setShieldDeviceNum(Constants.formatIntegerNum( data.getAlarmDeviceNum())+Constants.formatIntegerNum(t.getShieldDeviceNum()));
                data.setAlarmDeviceNum(Constants.formatIntegerNum( data.getAlarmDeviceNum())+Constants.formatIntegerNum(t.getAlarmDeviceNum()));
                data.setOnlineDeviceNum(Constants.formatIntegerNum( data.getOnlineDeviceNum())+Constants.formatIntegerNum(t.getOnlineDeviceNum()));
                data.setErrDeviceNum(Constants.formatIntegerNum( data.getErrDeviceNum())+Constants.formatIntegerNum(t.getErrDeviceNum()));
                data.setTotalDeviceNum(Constants.formatIntegerNum( data.getTotalDeviceNum())+Constants.formatIntegerNum(t.getTotalDeviceNum()));
            }
        }
       /* FireDevStatusTotalRequest param = new FireDevStatusTotalRequest();