jiangping
2024-10-30 3bf18e6a9448af394530ff765906d69ca351ed5e
Merge remote-tracking branch 'origin/master'
已添加34个文件
已修改60个文件
已重命名2个文件
3812 ■■■■ 文件已修改
admin/src/api/business/company.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaHiddenDangerParamWindow.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/operaVisitsReportWindow.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/operaVisitsWindow.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/operation/HiddenDangerParam.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/router/index.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/utils/request.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/relativeMember.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/login.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/areaSet.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/danger/record.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/waybill.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/api/index.js 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/router/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/FireFighting.vue 433 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsEfficiency.vue 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 230 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/system/SystemController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/dao/SmsEmailMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/resources/mappers/SystemUserMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/OnSitDispatchController.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/MenuDataResponse.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmDataVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmHandleDataVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/ArriveGoodsVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarWorkSituationVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/DeviceAlarmDataVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyBoardVO.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyDataVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/FightingAdminBoardVO.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/GeneralVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/JobDataVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OilDataVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OnSitDispatchBoardVO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformDurationVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformGroupFinishVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardVO.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SalesOperationVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityBoardVO.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityDeviceDataVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/StockRataVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportTaskVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/VisitRetentionDataVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WholeProvinceBoardVO.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WorkEfficiencyVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/YearDeviceDataVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/company.js
@@ -41,6 +41,10 @@
export function companyGetList (data) {
  return request.post('/visitsAdmin/cloudService/business/company/page', data)
}
// æŸ¥è¯¢æ‰€æœ‰éƒ¨é—¨
export function companyGetListPost (data) {
  return request.post('/visitsAdmin/cloudService/business/company/list', data)
}
// åˆ é™¤
export function deleteById (id) {
admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -1,71 +1,74 @@
<template>
    <GlobalWindow
        :title="title"
        width="500px"
        :visible.sync="visible"
        :confirm-working="isWorking"
        @confirm="confirm"
    >
      <el-form :model="form" ref="form" :rules="rules">
          <el-form-item label="名称" prop="name">
            <el-input v-model="form.name" placeholder="请输入名称" v-trim/>
          </el-form-item>
          <el-form-item label="排序码(升序)" prop="sortnum">
            <el-input v-model="form.sortnum" type="number"  placeholder="请输入排序码" v-trim/>
          </el-form-item>
          <el-form-item v-if="form.type==0" label="选择安全员:" prop="memberIdList">
            <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="请选择">
              <el-option
                  v-for="item in memberList"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
    </GlobalWindow>
  <GlobalWindow :title="title" width="500px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="名称" prop="name">
        <el-input v-model="form.name" placeholder="请输入名称" v-trim />
      </el-form-item>
      <el-form-item label="责任部门" prop="companyId">
        <el-select @change="loadMember" v-model="form.companyId">
          <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item v-if="form.type == 0" label="选择安全员" prop="memberIdList">
        <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="请选择">
          <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="排序码(升序)" prop="sortnum">
        <el-input v-model="form.sortnum" type="number" placeholder="请输入排序码" v-trim />
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { allList } from '@/api/business/member'
import { companyGetListPost } from '@/api/business/company'
export default {
  name: 'OperaHiddenDangerParamWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
  data() {
    return {
      // è¡¨å•数据
      memberList: [],
      department: [],
      departprops: {
        label: 'name',
        value: 'id',
        checkStrictly: true
      },
      form: {
        id: null,
        name: null,
        companyId: null,
        memberIdList: null,
        type: null,
        sortnum: null
      },
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入名称' }
        ]
        name: [{ required: true, message: '请输入名称' }],
        companyId: [{ required: true, message: '请选择' }],
        memberIdList: [{ required: true, message: '请选择', type: 'array' }],
      }
    }
  },
  created () {
  created() {
    this.config({
      api: '/business/hiddenDangerParam',
      'field.id': 'id'
    })
  },
  methods: {
    open (title, target, type) {
    open(title, target, type) {
      this.title = title
      this.visible = true
      this.form.type = type
      this.loadMember()
      this.getfindCompanyTreePage()
      // æ–°å»ºç»„织
      if (target == null) {
        this.$nextTick(() => {
@@ -90,10 +93,19 @@
        }
      })
    },
    loadMember () {
    getfindCompanyTreePage() {
      companyGetListPost({})
        .then(res => {
          if (res && res.length > 0) {
            this.department = res
          }
        })
    },
    loadMember() {
      allList({
        type: 2,
        companyType: 1
        companyType: 1,
        companyId: this.form.companyId
      })
        .then(res => {
          this.memberList = res
admin/src/components/business/operaVisitsReportWindow.vue
@@ -55,7 +55,7 @@
        ></el-input>
      </el-form-item>
      <el-form-item label="入园车辆" prop="carNos">
        <el-input v-model="param.carNos" placeholder="请输入车牌号"></el-input>
        <el-input v-model.trim="param.carNos" placeholder="请输入车牌号"></el-input>
      </el-form-item>
      <el-form-item label="随车人数" prop="memberNum">
        <el-input
@@ -205,6 +205,11 @@
        if (!valid) {
          return
        }
        const { param } = this
        if(param.carNos){
          param.carNos = param.carNos.replace(/\s*/g,"")
          param.carNos = param.carNos.replace(/[\r\n]/g, "")
        }
        // è°ƒç”¨æ–°å»ºæŽ¥å£
        this.isWorking = true
        createVisit({
admin/src/components/business/operaVisitsWindow.vue
@@ -117,7 +117,7 @@
        ></el-input>
      </el-form-item>
      <el-form-item label="随行车辆">
        <el-input v-model="param.carNos" placeholder="请输入车牌号"></el-input>
        <el-input v-model.trim="param.carNos" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" placeholder="请输入车牌号"></el-input>
      </el-form-item>
    </el-form>
  </GlobalWindow>
@@ -135,6 +135,7 @@
    GlobalWindow,
    UploadFaceImg
  },
  data () {
    return {
      isShowModal: false,
@@ -257,6 +258,10 @@
          return
        }
        const { param } = this
        if(param.carNos){
          param.carNos = param.carNos.replace(/\s*/g,"")
          param.carNos = param.carNos.replace(/[\r\n]/g, "")
        }
        if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('入园时间和离园时间不可跨天')
        // è°ƒç”¨æ–°å»ºæŽ¥å£
        this.isWorking = true
admin/src/components/operation/HiddenDangerParam.vue
@@ -22,6 +22,11 @@
          default-time="08:00:00"
        />
      </el-form-item>
      <el-form-item label="责任部门" prop="companyId">
        <el-select  v-model="param.companyId">
          <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="隐患区域" prop="areaId">
        <el-select v-model="param.areaId" @change="changeArea" placeholder="请选择">
          <el-option
@@ -106,6 +111,7 @@
import { allList, memberList } from '@/api/business/hiddenDangerParam'
import { create } from '@/api/business/hiddenDanger'
import { Loading } from 'element-ui'
import { companyGetListPost } from '@/api/business/company'
export default {
  extends: BaseOpera,
  components: {
@@ -126,11 +132,13 @@
      uploadData: {
        folder: 'HIDDEN_DANGER_FILE'
      },
      department: [],
      rules: {
        // starttime: [{ required: true, message: '请选择日期', trigger: 'change' }],
        areaId: [{ required: true, message: '请选择', trigger: 'change' }],
        cateId: [{ required: true, message: '请选择', trigger: 'change' }],
        checkUserId: [{ required: true, message: '请选择', trigger: 'change' }],
        companyId: [{ required: true, message: '请选择', trigger: 'change' }],
        faceImgUrl: [{ required: true, message: '请上传', trigger: 'change' }],
        content: [{ required: true, message: '请输入', trigger: 'blur' }]
@@ -142,6 +150,7 @@
    this.initData()
  },
  methods: {
    initData () {
      allList({ type: 1 }).then(res => { // ç±»åž‹
        this.typeList = res || []
@@ -152,6 +161,15 @@
      memberList({}).then(res => {
        this.memberList = res || []
      })
      this.getfindCompanyTreePage()
    },
    getfindCompanyTreePage() {
      companyGetListPost({})
        .then(res => {
          if (res && res.length > 0) {
            this.department = res
          }
        })
    },
    changeArea (e) {
      const item = this.addrList.find(i => i.id === e)
admin/src/router/index.js
@@ -60,10 +60,10 @@
      return
    }
    // å¦‚果访问的是登录页面,则直接跳转至首页
    if (to.name === 'login') {
      next({ name: 'index' })
      return
    }
    // if (to.name === 'login') {
    //   next({ name: 'index' })
    //   return
    // }
    next()
    return
  }
admin/src/utils/request.js
@@ -4,6 +4,7 @@
import { trim } from './util'
import cache from '../plugins/cache'
import { Message } from 'element-ui'
import router from '@/router'
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
const axiosInstance = axios.create({
@@ -41,6 +42,7 @@
// æ–°å»ºå“åº”拦截器
axiosInstance.interceptors.response.use((response) => {
  // è¯·æ±‚失败
  if (response.status !== 200) {
    return Promise.reject(new Error('服务器繁忙,请稍后再试'))
@@ -54,10 +56,10 @@
    return Promise.reject(new Error('服务器繁忙,请稍后再试'))
  }
  if (response.data.code === 401 || response.data.code === 5112) {
    if (response.config.autoLogin !== false) {
    // if (response.config.autoLogin !== false) {
      Cookies.set('dm_user_token','')
      window.location.href = process.env.VUE_APP_ROUTER_MODE === 'hash' ? (process.env.VUE_APP_CONTEXT_PATH +'/#/login') : (process.env.VUE_APP_CONTEXT_PATH+'/login')
    }
      router.replace({name: 'login'})
    // }
    return Promise.reject(response.data)
  }
  // ä¸šåŠ¡å¤±è´¥
admin/src/views/business/relativeMember.vue
@@ -119,6 +119,7 @@
            <span v-if="row.status == 2" style="color: red">拉黑/冻结</span>
          </template>
        </el-table-column>-->
        <el-table-column prop="trainEndTime" label="培训有效期" min-width="100px">  </el-table-column>
        <el-table-column label="部门类型" min-width="100px">
          <template slot-scope="{row}">
            <span v-if="row.companyType == 0">相关方组织</span>
admin/src/views/login.vue
@@ -3,6 +3,7 @@
    <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
    <div class="login_wrap">
      <div class="login_img">
        <div class="h2">安徽安泰物流有限责任公司</div>
        <div class="h3">智慧物流园区安消一体化系统</div>
      </div>
      <div class="form_wrap">
@@ -264,8 +265,19 @@
      background: url("../assets/images/login_img@2x.png");
      background-size: 100% 100%;
      padding-left: 40px;
      padding-top: 80px;
      padding-top: 60px;
      .h2{
        color: $primary-color;
        background-color: #fff;
        height: 24px;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 4px;
        width: 186px;
        display: flex;
        margin-bottom: 12px;
      }
      .h3 {
        font-size: 28px;
        font-weight: 700;
admin/src/views/operation/danger/areaSet.vue
@@ -5,6 +5,9 @@
      <el-form-item label="隐患区域" prop="name">
        <el-input v-model="searchForm.name" clearable placeholder="请输入隐患区域" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="责任部门" prop="companyName">
        <el-input v-model="searchForm.companyName" clearable placeholder="请输入部门名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
@@ -23,14 +26,15 @@
          @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="name" label="隐患区域" min-width="200px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码"  min-width="100px"></el-table-column>
        <el-table-column prop="memberNames" label="安全员" min-width="200px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="200px"></el-table-column>
        <el-table-column prop="name" label="隐患区域" min-width="120px"></el-table-column>
        <el-table-column prop="companyName" label="责任部门" min-width="120px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码"  min-width="70px"></el-table-column>
        <el-table-column prop="memberNames" label="安全员" min-width="80px"></el-table-column>
        <el-table-column prop="editDate" label="操作时间" min-width="160px"></el-table-column>
        <el-table-column
            v-if="containPermissions(['business:hiddendangerparam:update', 'business:hiddendangerparam:delete' ])"
            label="操作"
            min-width="250"
            min-width="140"
            fixed="right"
        >
          <template slot-scope="{row}">
admin/src/views/operation/danger/record.vue
@@ -8,6 +8,9 @@
      <el-form-item label="提报人组织" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入" clearable @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="责任部门" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入" clearable @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="隐患区域" prop="areaId">
        <el-select v-model="searchForm.areaId" placeholder="请选择隐患区域" clearable  @change="search">
          <el-option
@@ -72,6 +75,7 @@
          @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="companyName" label="责任部门" min-width="150px"></el-table-column>
        <el-table-column prop="areaName" label="隐患区域" min-width="150px"></el-table-column>
        <el-table-column prop="categoryName" label="隐患类型" min-width="150px"></el-table-column>
        <el-table-column prop="memberName" label="提报人" min-width="80px"></el-table-column>
@@ -128,6 +132,7 @@
        memberName: '',
        companyName: '',
        queryStartTime: '',
        companyName: '',
        queryEndTime: '',
        areaId: null,
        cateId: null,
admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -109,6 +109,9 @@
            type: 'select',
            label: '作业状态',
            options: [
              { value: 0, label: '待确认' },
              { value: 1, label: '待签到' },
              { value: 2, label: '等待叫号' },
              { value: 3, label: '入园等待' },
              { value: 4, label: '月台等待' },
              { value: 5, label: '作业中' },
screen/src/api/index.js
@@ -26,24 +26,74 @@
}
// æ¶ˆé˜²ç®¡æŽ§å¤§å± æŠ¥è­¦ä¿¡æ¯
export const getStoreTaskList = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
export const getFightingalarmData = (data) => {
  return request('visitsAdmin/cloudService/board/api/fightingAdmin/alarmData', data)
}
// æ¶ˆé˜²ç®¡æŽ§å¤§å± å‘Šè­¦å¤„理分析
export const getStoreTaskList = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
export const getFightingHandle = (data) => {
  return request('visitsAdmin/cloudService/board/api/fightingAdmin/alarmHandleData', data)
}
// æ¶ˆé˜²ç®¡æŽ§å¤§å± ä¸­å¿ƒæ•°æ®
export const getStoreTaskList = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
export const getFightingcenterData = (data) => {
  return request('visitsAdmin/cloudService/board/api/fightingAdmin/centerData', data)
}
// æ¶ˆé˜²ç®¡æŽ§å¤§å± ä»Šæ—¥å„系统设备状态及告警数量
export const getStoreTaskList = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
export const getFightingDeAlarm = (data) => {
  return request('visitsAdmin/cloudService/board/api/fightingAdmin/deviceAlarmData', data)
}
// æ¶ˆé˜²ç®¡æŽ§å¤§å± æœ¬å¹´æ¶ˆé˜²è®¾å¤‡-设施维护情况
export const getStoreTaskList = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
export const getFightingDeviceY = (data) => {
  return request('visitsAdmin/cloudService/board/api/fightingAdmin/yearDeviceData', data)
}
// åœºå†…调度看板 ä»Šæ—¥æœˆå°å®Œæˆè®¢å•统计
export const cnplatformGroupFinish = (data) => {
  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformGroupFinish', data)
}
// åœºå†…调度看板 ä»Šæ—¥æœˆå°å·¥ä½œæ—¶é•¿è¶‹åŠ¿
export const cnplatformDuration = (data) => {
  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformDuration', data)
}
// åœºå†…调度看板 å®žæ—¶æœˆå°ä½œä¸šä¿¡æ¯
export const cnplatformWorkData = (data) => {
  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformWorkData', data)
}
// åœºå†…调度看板 ä¸­å¿ƒæ•°æ®
export const cncenterData = (data) => {
  return request('visitsAdmin/cloudService/board/api/onSitDispatch/centerData', data)
}
// åœºå†…调度看板 ä»Šæ—¥è½¦è¾†ä½œä¸šæƒ…况
export const cncarWorkSituation  = (data) => {
  return request('visitsAdmin/cloudService/board/api/onSitDispatch/carWorkSituation', data)
}
// åœºå†…调度看板 å®žæ—¶ä½œä¸šæ•ˆçއ
export const cnworkEfficiency = (data) => {
  return request('visitsAdmin/cloudService/board/api/onSitDispatch/workEfficiency', data)
}
// ç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿ ä¸­å¿ƒæ•°æ®
export const wlcenterData = (data) => {
  return request('visitsAdmin/cloudService/board/api/platformJobRun/centerData', data)
}
// ç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿ å‡ºå…¥åº“任务量
export const wljobData = (data) => {
  return request('visitsAdmin/cloudService/board/api/platformJobRun/jobData', data)
}
// ç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿ å½“日运输任务
export const wlplatformJobList = (data) => {
  return request('visitsAdmin/cloudService/board/api/platformJobRun/platformJobList', data)
}
// ç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿ åº“存情况
export const wlstockList = (data) => {
  return request('visitsAdmin/cloudService/board/api/platformJobRun/stockList', data)
}
// ç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿ ä»Šæ—¥å…¥åº“量统计
export const wltotalInList = (data) => {
  return request('visitsAdmin/cloudService/board/api/platformJobRun/totalInList', data)
}
// ç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿ è¿è¾“任务分析
export const wltransportMeasure = (data) => {
  return request('visitsAdmin/cloudService/board/api/platformJobRun/transportMeasure', data)
}
screen/src/router/index.js
@@ -5,7 +5,7 @@
  routes: [
    {
      path: '/',
      component: () => import('../views/FireFighting.vue')
      component: () => import('../views/SecurityControl.vue')
    },
    {
      path: '/PlatformCall', // æœˆå°å«å·å¤§å±
screen/src/views/FireFighting.vue
@@ -31,14 +31,14 @@
                  <span class="item">故障</span>
                  <span class="item">离线</span>
                </div>
                <template v-for="i in 5">
                <template v-for="(item, i) in dataList1" :key="i">
                  <div class="line">
                    <span class="item name">火灶报警系统</span>
                    <span class="item">11</span>
                    <span class="item">11</span>
                    <span class="item">11</span>
                    <span class="item">11</span>
                    <span class="item">11</span>
                    <span class="item name">{{ item.deviceTypeName }}</span>
                    <span class="item">{{ item.statusTotal }}</span>
                    <span class="item">{{ item.alarmNum }}</span>
                    <span class="item">{{ item.shieldNum }}</span>
                    <span class="item">{{ item.errNum }}</span>
                    <span class="item">{{ item.offlineNum }}</span>
                  </div>
                  <div class="separate"></div>
                </template>
@@ -54,12 +54,12 @@
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="police_wrap">
              <div class="item" v-for="(ind, i) in 4">
              <div class="item" v-for="(item, i) in dataList2">
                <div class="head">
                  <div class="name">真实报警数</div>
                  <div class="name">{{ i }}次</div>
                  <div class="name">{{ item.name }}</div>
                  <div class="name">{{ item.num }}次</div>
                </div>
                <FirePercent :color="policeColors[i]" :rate="40" />
                <FirePercent :color="policeColors[i]" :rate="item.rate" />
              </div>
            </div>
@@ -84,35 +84,35 @@
                <img src="@/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png" alt="">
                <div class="content">
                  <div class="name">在线</div>
                  <div class="num">1000</div>
                  <div class="num">{{ dataList4.onlineDeviceNum }}</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt="">
                <div class="content">
                  <div class="name">报警</div>
                  <div class="num num2">12</div>
                  <div class="num num2">{{ dataList4.alarmDeviceNum }}</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt="">
                <div class="content">
                  <div class="name">故障</div>
                  <div class="num num3">12</div>
                  <div class="num num3">{{ dataList4.errDeviceNum }}</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/FireFighting/xiaofang_ic_lixian@2x.png" alt="">
                <div class="content">
                  <div class="name">离线</div>
                  <div class="num num4">12</div>
                  <div class="num num4">{{ dataList4.offlineDeviceNum }}</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt="">
                <div class="content">
                  <div class="name">屏蔽</div>
                  <div class="num num5">12</div>
                  <div class="num num5">{{ dataList4.shieldDeviceNum }}</div>
                </div>
              </div>
            </div>
@@ -206,20 +206,26 @@
            </div>
            <div class="content_wrap">
              <div class="list">
                <template v-for="i in 3">
                  <div class="item">
                    <div>已维保</div>
                    <div class="num active">500</div>
                  </div>
                  <div v-if="i < 3" class="separate"></div>
                </template>
                <div class="item">
                  <div>已维保</div>
                  <div class="num active">{{ dataList5.protectNum }}</div>
                </div>
                <div class="separate"></div>
                <div class="item">
                  <div>计划维保</div>
                  <div class="num active">{{ dataList5.planProtectTotal }}</div>
                </div>
                <div class="separate"></div>
                <div class="item">
                  <div>维保率</div>
                  <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="num active">{{ ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div>
                </div>
              </div>
              <div class="footer">
                <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt="">
                <div class="content">
                  <div>本月新增维保</div>
                  <div class="num">40 <span>个</span></div>
                  <div class="num">{{ dataList5.monthAddNum }} <span>个</span></div>
                </div>
              </div>
            </div>
@@ -241,14 +247,14 @@
                <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt="">
                <div class="content">
                  <div class="name">提报隐患数</div>
                  <div class="num"><span>10</span>个</div>
                  <div class="num"><span>{{ dataList4.todayDangerNum }}</span>个</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt="">
                <div class="content">
                  <div class="name">处理隐患数</div>
                  <div class="num"><span class="today">3</span>个</div>
                  <div class="num"><span class="today">{{ dataList4.dealDangerNum }}</span>个</div>
                </div>
              </div>
            </div>
@@ -277,7 +283,7 @@
                    </div>
                    <div class="title">
                      <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt="">
                      <span>address</span>
                      <span>A厂房3车间门口</span>
                    </div>
                  </div>
                </div>
@@ -295,8 +301,15 @@
import VScaleScreen from 'v-scale-screen'
import FirePercent from '@/components/FirePercent.vue'
import dayjs from 'dayjs'
import * as echarts from 'echarts'
import {
  getFightingalarmData,
  getFightingHandle,
  getFightingcenterData,
  getFightingDeAlarm,
  getFightingDeviceY,
} from '@/api'
const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
const weekMap = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六',]
const date = ref(dayjs().format('YYYY.MM.DD'))
@@ -309,166 +322,7 @@
}, 1000)
const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
const initEchart2 = () => {
  var myChart = echarts.init(document.querySelector('.echart2'))
  // ç”Ÿæˆæ•°æ®å’Œæ—¥æœŸ
  function getLastSevenDays() {
    const days = []
    const today = new Date()
    for (let i = 10; i >= 0; i--) {
      days.push(`${i + 1}月`) // æ ¼å¼åŒ–日期为 "X月X日"
    }
    return days
  }
  // ç¤ºä¾‹æ•°æ®
  const data1 = [13, 14, 14, 14, 14, 12, 11, 23, 12, 1] // å‡†æ—¶
  const data2 = [1, 1, 2, 1, 1, 2, 2, 3, 2, 1, 5] // è¿Ÿåˆ°
  const data3 = [1, 0, 0, 0, 0, 0, 2, 2, 3, 1, 2] // è¯·å‡
  const data4 = [8, 5, 4, 7, 4, 5, 7, 4, 2, 1, 3] // åŠ ç­
  const option = {
    legend: {
      x: "center",
      textStyle: {
        color: "#FFFFFF", // å›¾ä¾‹æ–‡å­—设为白色
        fontSize: 12
      },
      icon: 'circle',
      top: '6%',
      itemWidth: 8,
      itemHeight: 8,
      itemGap: 20,
      data: ['告警数', '进行中', '已处理', '误报数'] // æ›´æ–°å›¾ä¾‹åç§°
    },
    grid: {
      left: '2%',
      right: '0%',
      top: '18%',
      bottom: '10%',
      containLabel: true,
    },
    tooltip: {
      trigger: "axis",
      axisPointer: {
        type: "shadow"
      },
      textStyle: {
        color: "rgba(255, 255, 255, 1)"
      },
      backgroundColor: "rgba(0,0,0,0.8)",
      borderColor: "rgba(219, 230, 255, 0.8)",
    },
    xAxis: {
      data: getLastSevenDays(), // ä½¿ç”¨è¿‘七天日期
      axisLabel: {
        color: "#FFFFFF", // X è½´æ–‡å­—设为白色
        fontSize: 14,
      },
      axisLine: {
        lineStyle: {
          color: '#1E294C'
        }
      },
      axisTick: {
        show: false
      }
    },
    yAxis: {
      show: true,
      axisLabel: {
        color: "#FFFFFF", // Y è½´æ–‡å­—设为白色
        fontSize: 12,
      },
      axisLine: {
        lineStyle: {
          color: '#A9AEB2'
        }
      },
      axisTick: {
        lineStyle: {
          color: '#A9AEB2'
        }
      },
      splitLine: {
        show: true,
        lineStyle: {
          color: ["#0f1d27"],
          width: 1
        },
      },
    },
    series: [
      {
        name: "告警数",
        type: "bar",
        stack: "attendance",
        data: data1,
        itemStyle: {
          color: '#FEAF01',
        },
        label: {
          show: false,
          color: "#FFFFFF",
        },
        emphasis: {
          focus: "series",
        },
        barWidth: 6,
      },
      {
        name: "进行中", // è¿Ÿåˆ°æ•°æ®
        type: "bar",
        stack: "attendance",
        data: data2,
        itemStyle: {
          color: '#28F0C4', // è¿Ÿåˆ°çš„颜色
        },
        label: {
          show: false,
          color: "#FFFFFF",
        },
        emphasis: {
          focus: "series",
        },
      },
      {
        name: "已处理", // è¯·å‡æ•°æ®
        type: "bar",
        stack: "attendance",
        data: data3,
        itemStyle: {
          color: '#0193FE', // è¯·å‡çš„颜色
        },
        label: {
          show: false,
          color: "#FFFFFF",
        },
        emphasis: {
          focus: "series",
        },
      },
      {
        name: "误报数", // å•独的加班柱子
        type: "bar",
        data: data4,
        barWidth: 6,
        itemStyle: {
          color: '#FEED01', // é«˜äº®çš„紫色
        },
        emphasis: {
          focus: "series",
        },
      },
    ],
  }
  myChart.setOption(option)
  window.addEventListener('resize', function () {//执行
    myChart.resize()
  })
}
const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
const initWatergage = () => {
  const myChart = echarts.init(document.getElementById('watergage'))
  var data_value = 2
@@ -834,8 +688,209 @@
  })
}
const dataList1 = ref([])
const getData1 = () => {
  getFightingDeAlarm().then(res => {
    dataList1.value = res.data
  })
}
const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
const dataList2 = ref([])
const getData2 = () => {
  getFightingalarmData().then(res => {
    const result = res.data || {}
    let temp = []
    temp.push({ name: '真实报警数', num: result.realNum, rate: (result.realNum / result.totalNum) * 100 })
    temp.push({ name: '误报警数', num: result.errNum, rate: (result.errNum / result.totalNum) * 100 })
    temp.push({ name: '已解除', num: result.liftNum, rate: (result.liftNum / result.totalNum) * 100 })
    temp.push({ name: '处理中', num: result.processingNum, rate: (result.processingNum / result.totalNum) * 100 })
    dataList2.value = temp
  })
}
const dataList3 = ref([])
const getData3 = () => {
  getFightingHandle({ type: 0 }).then(res => {
    dataList3.value = res.data || []
    initEchart2()
  })
}
const initEchart2 = () => {
  var myChart = echarts.init(document.querySelector('.echart2'))
  // ç”Ÿæˆæ•°æ®å’Œæ—¥æœŸ
  // ç¤ºä¾‹æ•°æ®
  const data1 = dataList3.value.map(i => i.alarmNum)
  const data2 = dataList3.value.map(i => i.processingNum)
  const data3 = dataList3.value.map(i => i.liftNum)
  const data4 = dataList3.value.map(i => i.errNum)
  const option = {
    legend: {
      x: "center",
      textStyle: {
        color: "#FFFFFF", // å›¾ä¾‹æ–‡å­—设为白色
        fontSize: 12
      },
      icon: 'circle',
      top: '6%',
      itemWidth: 8,
      itemHeight: 8,
      itemGap: 20,
      data: ['告警数', '进行中', '已处理', '误报数'] // æ›´æ–°å›¾ä¾‹åç§°
    },
    grid: {
      left: '2%',
      right: '0%',
      top: '20%',
      bottom: '10%',
      containLabel: true,
    },
    tooltip: {
      trigger: "axis",
      axisPointer: {
        type: "shadow"
      },
      textStyle: {
        color: "rgba(255, 255, 255, 1)"
      },
      backgroundColor: "rgba(0,0,0,0.8)",
      borderColor: "rgba(219, 230, 255, 0.8)",
    },
    xAxis: {
      data: dataList3.value.map(i => i.monthStr),
      axisLabel: {
        color: "#FFFFFF", // X è½´æ–‡å­—设为白色
        fontSize: 14,
      },
      axisLine: {
        lineStyle: {
          color: '#1E294C'
        }
      },
      axisTick: {
        show: false
      }
    },
    yAxis: {
      show: true,
      axisLabel: {
        color: "#FFFFFF", // Y è½´æ–‡å­—设为白色
        fontSize: 12,
      },
      axisLine: {
        lineStyle: {
          color: '#A9AEB2'
        }
      },
      axisTick: {
        lineStyle: {
          color: '#A9AEB2'
        }
      },
      splitLine: {
        show: true,
        lineStyle: {
          color: ["#0f1d27"],
          width: 1
        },
      },
    },
    series: [
      {
        name: "告警数",
        type: "bar",
        stack: "attendance",
        data: data1,
        itemStyle: {
          color: '#FEAF01',
        },
        label: {
          show: false,
          color: "#FFFFFF",
        },
        emphasis: {
          focus: "series",
        },
        barWidth: 6,
      },
      {
        name: "进行中", // è¿Ÿåˆ°æ•°æ®
        type: "bar",
        stack: "attendance",
        data: data2,
        itemStyle: {
          color: '#28F0C4', // è¿Ÿåˆ°çš„颜色
        },
        label: {
          show: false,
          color: "#FFFFFF",
        },
        emphasis: {
          focus: "series",
        },
      },
      {
        name: "已处理", // è¯·å‡æ•°æ®
        type: "bar",
        stack: "attendance",
        data: data3,
        itemStyle: {
          color: '#0193FE', // è¯·å‡çš„颜色
        },
        label: {
          show: false,
          color: "#FFFFFF",
        },
        emphasis: {
          focus: "series",
        },
      },
      {
        name: "误报数", // å•独的加班柱子
        type: "bar",
        data: data4,
        barWidth: 6,
        itemStyle: {
          color: '#FEED01', // é«˜äº®çš„紫色
        },
        emphasis: {
          focus: "series",
        },
      },
    ],
  }
  myChart.setOption(option)
  window.addEventListener('resize', function () {//执行
    myChart.resize()
  })
}
const dataList4 = ref({})
const getData4 = () => {
  getFightingcenterData().then(res => {
    dataList4.value = res.data || {}
  })
}
const dataList5 = ref({}) // ç»´ä¿
const getData5 = () => {
  getFightingDeviceY().then(res => {
    dataList5.value = res.data || {}
  })
}
const dataList6 = ref([])
const getData6 = () => {
  getFightingHandle({type: 1}).then(res => {
    dataList6.value = res.data
  })
}
onMounted(() => {
  initEchart2()
  getData1()
  getData2()
  getData3()
  getData4()
  getData5()
  getData6()
  initWatergage()
  initLiquidlevel()
})
screen/src/views/LogisticsEfficiency.vue
@@ -248,6 +248,14 @@
import dayjs from 'dayjs'
import * as echarts from 'echarts'
import ahJSON from '@/assets/anhui.json'
import {
  wlcenterData,
  wljobData,
  wlplatformJobList,
  wlstockList,
  wltotalInList,
  wltransportMeasure,
} from '@/api'
const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
const weekMap = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六',]
@@ -626,7 +634,50 @@
  })
}
const dataList1 = ref([])
const getData1 = () => {
  wlcenterData().then(res => {
    const result = res
  })
}
const dataList2 = ref([])
const getData2 = () => {
  wlcenterData().then(res => {
    const result = res
  })
}
const dataList3 = ref([])
const getData3 = () => {
  wlcenterData().then(res => {
    const result = res
  })
}
const dataList4 = ref([])
const getData4 = () => {
  wlcenterData().then(res => {
    const result = res
  })
}
const dataList5 = ref([])
const getData5 = () => {
  wlcenterData().then(res => {
    const result = res
  })
}
const dataList6 = ref([])
const getData6 = () => {
  wlcenterData().then(res => {
    const result = res
  })
}
onMounted(() => {
  getData1()
  getData2()
  getData3()
  getData4()
  getData5()
  getData6()
  return
  initEnergy()
  initEchart1()
  initMap()
screen/src/views/TaskEfficiency.vue
@@ -24,20 +24,20 @@
            <div class="car_static">
              <div class="echart_wrap">
                <div class="pie_text">
                  <div class="fs30"><strong>300</strong></div>
                  <div class="fs30"><strong>{{ data1 }}</strong></div>
                  <div>完成量</div>
                </div>
                <div class="echart1" id="echart1"></div>
              </div>
              <div class="list">
                <div class="item">
                <div class="item" v-for="item, i in dataList1" :key="i">
                  <div class="line">
                    <div :style="{ background: colors[0] }" class="icon"></div>
                    <div class="text">安泰物流装货月台组</div>
                    <div :style="{ background: colors[i] }" class="icon"></div>
                    <div class="text">{{ item.name }}</div>
                  </div>
                  <div :style="{ color: colors[0] }" class="num">100万支</div>
                  <div :style="{ color: colors[i] }" class="num">{{ item.value }}万支</div>
                </div>
                <div class="item">
                <!-- <div class="item">
                  <div class="line">
                    <div :style="{ background: colors[1] }" class="icon"></div>
                    <div class="text">安泰物流卸货月台组</div>
@@ -50,7 +50,7 @@
                    <div class="text">市公司卸货月台组</div>
                  </div>
                  <div :style="{ color: colors[2] }" class="num">100万支</div>
                </div>
                </div> -->
              </div>
            </div>
          </div>
@@ -63,13 +63,13 @@
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="list">
              <div class="line" v-for="item, i in 5">
              <div class="line" v-for="item, i in dataList2" :key="i">
                <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
                <div class="id_card">皖A12313</div>
                <div class="id_card">{{ item.platformName }}</div>
                <div class="wrap">
                  <ChargeRate :rate="15" :color />
                  <ChargeRate :rate="item.rate" />
                </div>
                <div class="num">6小时34分钟</div>
                <div class="num">{{ item.workTotalTimeT }}</div>
              </div>
            </div>
          </div>
@@ -80,9 +80,9 @@
                <div>实时作业效率</div>
              </div>
              <div class="tabs">
                <div class="tab active">出库</div>
                <div class="tab" :class="{ active: activeTab3 == 1 }" @click="tabClick3(1)">出库</div>
                <div class="separate"></div>
                <div class="tab">入库</div>
                <div class="tab" :class="{ active: activeTab3 == 0 }" @click="tabClick3(0)">入库</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
@@ -96,32 +96,32 @@
            <div class="static_wrap">
              <div class="item">
                <div class="name">月台数量</div>
                <div class="nums">
                  <div class="num" v-for="i in '010'">{{ i }}</div>
                <div v-if="data4.platformTotal" class="nums">
                  <div class="num" v-for="n, i in data4.platformTotal + ''" :key="i">{{ n }}</div>
                </div>
              </div>
              <div class="item">
                <div class="name">空闲月台</div>
                <div class="nums">
                  <div class="num" v-for="i in '010'">{{ i }}</div>
                <div v-if="data4.freePlatform" class="nums">
                  <div class="num" v-for="n, i in data4.freePlatform + ''" :key="i">{{ n }}</div>
                </div>
              </div>
              <div class="item">
                <div class="name">预约车辆</div>
                <div class="nums">
                  <div class="num" v-for="i in '010'">{{ i }}</div>
                <div v-if="data4.reservationCar" class="nums">
                  <div class="num" v-for="n, i in data4.reservationCar + ''" :key="i">{{ n }}</div>
                </div>
              </div>
              <div class="item">
                <div class="name">作业车辆</div>
                <div class="nums">
                  <div class="num" v-for="i in '010'">{{ i }}</div>
                <div v-if="data4.workingCar" class="nums">
                  <div class="num" v-for="n, i in data4.workingCar + ''" :key="i">{{ n }}</div>
                </div>
              </div>
              <div class="item">
                <div class="name">排队车辆</div>
                <div class="nums">
                  <div class="num" v-for="i in '010'">{{ i }}</div>
                <div class="nums" v-if="data4.lineUpCar">
                  <div class="num" v-for="n, i in data4.lineUpCar + ''" :key="i">{{ n }}</div>
                </div>
              </div>
            </div>
@@ -139,13 +139,15 @@
                <div>预计完成时间</div>
                <div>月台状态</div>
              </div>
              <div class="line" v-for="i in 6">
                <div>月台名称</div>
                <div>作业车辆</div>
                <div>作业量</div>
                <div>作业时长</div>
                <div>预计完成时间</div>
                <div>月台状态</div>
              <div class="line" v-for="item, i in dataList5" :key="i">
                <div>{{ item.platformName }}</div>
                <div>{{ item.carNo || '-' }}</div>
                <div>{{ item.workNum }}{{ item.workNum ? '万支' : '-' }}</div>
                <div>{{ item.workTime || '-' }}</div>
                <div>{{ item.finishTime || '-' }}</div>
                <div :style="{
                  color: item.status == 1 ? '#869CC9' : item.status == 2 ? '#FE5501' : '#D2E0FF'
                }">{{ item.statusTemp }}</div>
              </div>
            </div>
          </div>
@@ -162,34 +164,34 @@
            <div class="static_wrap">
              <div class="item">
                <div class="name">签到数</div>
                <div class="num">1</div>
                <div class="num">{{ data6.inNum || 0 }}</div>
              </div>
              <div class="item">
                <div class="name">已叫号</div>
                <div class="num">1</div>
                <div class="num">{{ data6.callNum || 0 }}</div>
              </div>
              <div class="item">
                <div class="name">已作业</div>
                <div class="num">1</div>
                <div class="num">{{ data6.workingNum || 0 }}</div>
              </div>
              <div class="item">
                <div class="name">已完成</div>
                <div class="num">1</div>
                <div class="num">{{ data6.finishNum || 0 }}</div>
              </div>
            </div>
            <div class="echart_wrap">
              <div class="echart3" id="echart3"></div>
            </div>
            <div class="list">
              <div class="line" v-for=" i in 7">
              <div class="line" v-for="item, i in data6.platformLogList">
                <div class="time_wrap">
                  <div class="time">12.40</div>
                  <div class="time" v-if="item.createDate">{{ item.createDate.slice(11, 16) }}</div>
                  <div class="sp"></div>
                  <div class="dian"></div>
                </div>
                <div class="id_card">皖A12313</div>
                <div class="id_card">{{ item.carCodeFront }}</div>
                <div class="status">开始作业</div>
                <div class="desc">排队等待叫号</div>
                <div class="desc">{{ item.content }}</div>
              </div>
            </div>
          </div>
@@ -242,6 +244,14 @@
import dayjs from 'dayjs'
import ChargeRate from '@/components/ChargeRate.vue'
import * as echarts from 'echarts'
import {
  cnplatformGroupFinish,
  cnplatformDuration,
  cnplatformWorkData,
  cncenterData,
  cncarWorkSituation,
  cnworkEfficiency,
} from '@/api'
const weekMap = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六',]
@@ -275,11 +285,7 @@
        labelLine: {
          show: false
        },
        data: [
          { value: 1048, name: 'Search Engine' },
          { value: 735, name: 'Direct' },
          { value: 580, name: 'Email' }
        ]
        data: dataList1.value
      }
    ]
  }
@@ -336,7 +342,7 @@
      axisTick: {
        show: false,
      },
      data: ['2017', '2018', '2019', '2020', '2021', '2022', '2023',],
      data: dataList3.value.map(i => i.workTime),
    }],
    yAxis: [
      {
@@ -424,7 +430,7 @@
          shadowColor: 'rgba(124,248,255, 0)',
          shadowBlur: 20
        },
        data: [393, 438, 485, 631, 389, 224, 287]
        data: dataList3.value.map(i => i.workNum)
      },
      {
        name: '累计作业量',
@@ -452,7 +458,7 @@
          },
          barBorderRadius: [30, 30, 0, 0],
        },
        data: [393, 438, 485, 631, 689, 524, 687]
        data: dataList3.value.map(i => i.totalWorkNum)
      },
    ]
  }
@@ -493,6 +499,13 @@
      offset: 1,
      color: '#61d3f9'
    }])]
  const temp = []
  temp.push({ name: '预约数', value: data6.value.reservationNum || 0 })
  temp.push({ name: '已进场', value: data6.value.inNum || 0 })
  temp.push({ name: '已作业', value: data6.value.workingNum || 0 })
  temp.push({ name: '已离场', value: data6.value.leaveNum || 0 })
  console.log('temp', temp);
  const option = {
    color: colors,
    tooltip: {
@@ -519,12 +532,7 @@
          borderWidth: 0,
          borderColor: '#fff'
        },
        data: [
          { value: 100, name: '预约数', },
          { value: 50, name: '已进场' },
          { value: 20, name: '已作业' },
          { value: 30, name: '已离场' },
        ]
        data: temp
      },
      {
        type: 'funnel',
@@ -570,12 +578,7 @@
            opacity: 1
          }
        },
        data: [
          { value: 100, name: '预约数', },
          { value: 50, name: '已进场' },
          { value: 20, name: '已作业' },
          { value: 30, name: '已离场' },
        ]
        data: temp
      },
    ]
  }
@@ -585,13 +588,102 @@
  })
}
const dataList1 = ref([])
const data1 = ref(0)
const getData1 = () => {
  cnplatformGroupFinish().then(res => {
    const result = res.data || []
    let count = 0
    dataList1.value = result.map(i => {
      count += i.finishData
      return {
        value: i.finishData,
        name: i.platformGroupName
      }
    })
    data1.value = count
    initEchart1()
  })
}
const dataList2 = ref([])
const getData2 = () => {
  cnplatformDuration().then(res => {
    const result = res.data || []
    dataList2.value = result.map(item => {
      if (item.workTotalTime) {
        if (item.workTotalTime > 60) {
          item.workTotalTimeT = (item.workTotalTime / 60).toFixed(0) + '小时' + item.workTotalTime % 60 + '分钟'
        } else {
          item.workTotalTimeT = item.workTotalTime
        }
      }
      item.rate = ((item.workTotalTime / item.openTotalTime) * 30).toFixed(0)
      return item
    })
  })
}
const dataList3 = ref([])
const activeTab3 = ref(1)
const tabClick3 = (val) => {
  activeTab3.value = val
  getData3()
}
const getData3 = () => {
  cnworkEfficiency({ type: activeTab3.value }).then(res => {
    const result = res.data
    dataList3.value = result
    initEchart2()
  })
}
const data4 = ref({})
const getData4 = () => {
  cncenterData().then(res => {
    const result = res.data
    data4.value = result
  })
}
const dataList5 = ref([])
const getData5 = () => {
  cnplatformWorkData().then(res => {
    const result = res.data || []
    dataList5.value = result.map(i => {
      i.statusTemp = i.status == 0 ? '作业中' : i.status == 1 ? '空闲中' : '作业超时'
      if (i.workTime) {
        if (item.workTime > 60) {
          item.workTime = (item.workTime / 60).toFixed(0) + 'h' + item.workTime % 60 + 'm'
        } else {
          item.workTime = item.workTime
        }
      }
      i.finishTime = dayjs(i.finishTime).format('HH:mm')
      return i
    })
  })
}
const data6 = ref({})
const getData6 = () => {
  cncarWorkSituation().then(res => {
    const result = res.data
    data6.value = result
    initEchart3()
  })
}
onMounted(() => {
  // initEnergy()
  initEchart1()
  initEchart2()
  initEchart3()
  getData1()
  getData2()
  getData3()
  getData4()
  getData5()
  getData6()
  // initEchart1()
  // initEchart2()
  // initEchart3()
})
@@ -613,7 +705,6 @@
    .left_box_one {
      width: 100%;
      margin-bottom: 20px;
      border: 1px solid;
      .car_static {
        display: flex;
@@ -692,7 +783,6 @@
      .list {
        padding: 20px 24px 4px;
        height: 227px;
        border: 1px solid;
        .line {
          display: flex;
@@ -715,15 +805,21 @@
          .id_card {
            color: #DBEAEA;
            font-weight: 500;
            margin-right: 14px;
            margin-right: 2px;
            font-size: 14px;
            width: 80px;
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
          }
          .num {
            font-weight: 500;
            width: 82px;
            text-align: right;
            font-size: 13px;
            color: #DBEAEA;
            margin-left: 15px;
            margin-left: 2px;
          }
          .wrap {
@@ -1161,6 +1257,10 @@
      margin: 0 6px;
    }
    .tab {
      cursor: pointer;
    }
    .active {
      color: #0094eb;
    }
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -1209,9 +1209,13 @@
        response.setPrefix(prefix);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH)
                    .getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
            String localPath = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_LOCAL_RESOURCE_PATH)
                    .getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
            for (Multifile multifile:multifileList) {
                multifile.setFileurlFull(path + multifile.getFileurl());
                multifile.setLocalFileurlFull(localPath + multifile.getFileurl());
            }
            response.setMultifileList(multifileList);
        }
server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -10,6 +10,7 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.LoginPhoneDTO;
import com.doumee.service.common.CaptchaService;
import com.doumee.service.system.SystemLoginService;
import com.doumee.service.system.SystemUserService;
@@ -70,6 +71,26 @@
            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
        }
    }
    @PreventRepeat(limit = 10, lockTime = 10000)
    @ApiOperation("短信验证码登录")
    @PostMapping("/loginByPhone")
    @LoginNoRequired
    public ApiResponse<String> loginByPhone (@Validated @RequestBody LoginPhoneDTO dto, ServerWebExchange serverWebExchange) {
        try {
            ServerHttpRequest request = serverWebExchange.getRequest();
            LoginUserInfo user = systemLoginService.loginByPhone(dto,request);
            String token = jwtTokenUtil.generateToken(user);
            return ApiResponse.success(token);
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
        }
    }
    @PreventRepeat(limit = 10, lockTime = 10000)
@@ -136,6 +157,9 @@
    public ApiResponse<String> logout(@RequestHeader(Constants.HEADER_USER_TOKEN) String oldToken){
        try {
             jwtTokenUtil.logout(oldToken);
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
        }catch (Exception e){
@@ -145,6 +169,8 @@
    }
    /**
     * åˆ·æ–°JWT令牌,用旧的令牌换新的令牌
     */
server/system_service/src/main/java/com/doumee/api/system/SystemController.java
@@ -1,25 +1,45 @@
package com.doumee.api.system;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.system.SystemUserBiz;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.UpdatePwdDto;
import com.doumee.service.system.SystemLoginService;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.util.HttpUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
 * @author Eva.Caesar Liu
@@ -38,6 +58,7 @@
    @Autowired
    private SystemLoginService systemLoginService;
    @PreventRepeat(limit = 10, lockTime = 10000)
    @ApiOperation("登录")
    @PostMapping("/login")
@@ -54,6 +75,8 @@
        return ApiResponse.success(null);
    }
    @Trace(withRequestParameters = false)
    @ApiOperation("修改当前用户密码")
    @PostMapping("/updatePwd")
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -165,6 +165,16 @@
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "工号【"+systemUser.getEmpNo()+"】已存在");
            }
        }
       //验证手机号
        if (StringUtils.isNotBlank(systemUser.getMobile())) {
            queryUserDto = new SystemUser();
            queryUserDto.setDeleted(Boolean.FALSE);
            queryUserDto.setMobile(systemUser.getMobile());
            user = systemUserService.findOne(queryUserDto);
            if (user != null) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+systemUser.getMobile()+"】已存在");
            }
        }
        // ç”Ÿæˆå¯†ç ç›
        String salt = RandomStringUtils.randomAlphabetic(6);
        // ç”Ÿæˆå¯†ç 
@@ -233,6 +243,16 @@
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "工号【"+systemUser.getEmpNo()+"】已存在");
            }
        }
        //验证手机号
        if (StringUtils.isNotBlank(systemUser.getMobile())) {
            queryUserDto = new SystemUser();
            queryUserDto.setMobile(systemUser.getMobile());
            queryUserDto.setDeleted(Boolean.FALSE);
            user = systemUserService.findOne(queryUserDto);
            if (user != null && !user.getId().equals(systemUser.getId())) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+systemUser.getMobile()+"】已存在");
            }
        }
        // ä¿®æ”¹ç”¨æˆ·
        systemUserService.updateById(systemUser);
        // è®¾ç½®éƒ¨é—¨
server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -1,28 +1,41 @@
package com.doumee.config.jwt;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.HttpsUtil;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
public class JwtTokenUtil {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Resource
    private JwtProperties jwtProperties;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz ;
    /**
     * ç”Ÿæˆtoken令牌
@@ -113,12 +126,50 @@
     */
    public void logout(String token) {
        try {
            //登出海康系统数据
            LoginUserInfo loginUserInfo = this.getUserInfoByToken(token);
            String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HTTPS).getCode() +
                    systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HOST).getCode() +
                    systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LOGIN_OUT_URL).getCode();
            if(StringUtils.isNotBlank(loginUserInfo.getHkMenuToken())){
                log.info("调起海康退出登录=======================>"+url+"?token="+loginUserInfo.getHkMenuToken());
//                this.hkLoginOut(url+"?token="+loginUserInfo.getHkMenuToken());
                HttpsUtil.get(url+"?token="+loginUserInfo.getHkMenuToken(),true);
            }
            redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token);//删除老的token
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void hkLoginOut(String url){
        try {
            // åˆ›å»ºHttpClient对象
            HttpClient httpClient = HttpClientBuilder.create().build();
            // åˆ›å»ºHttpGet对象,指定要访问的URL地址
            HttpGet httpGet = new HttpGet(url);
            // å‘送GET请求,获取响应
            HttpResponse response = httpClient.execute(httpGet);
            // èŽ·å–å“åº”çŠ¶æ€ç 
            int statusCode = response.getStatusLine().getStatusCode();
            // åˆ¤æ–­è¯·æ±‚是否成功
            if (statusCode == 200) {
                // èŽ·å–å“åº”å†…å®¹
                HttpEntity entity = response.getEntity();
                String responseContent = EntityUtils.toString(entity, "UTF-8");
                System.out.println(responseContent);
                log.info("调起海康退出登录返回信息=======================>"+responseContent);
            } else {
                System.out.println("请求失败,响应码:" + statusCode);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * éªŒè¯ä»¤ç‰Œ
     *
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -40,6 +40,7 @@
    private Integer needChangePwd;
    private String mobile;
    private String sessionId;
    private String hkMenuToken;
    private Date loginDate;
    @ApiModelProperty(value = "账户来源:0=后台添加 ï¼› 2=司机注册")
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -39,6 +39,7 @@
    public static final String LED_CONTENT_SPEED ="LED_CONTENT_SPEED" ;
    public static final String HK_HOST ="HK_HOST" ;
    public static final String HK_APPKEY ="HK_APPKEY" ;
    public static final String LOGIN_OUT_URL ="LOGIN_OUT" ;
    public static final String HK_APPSECRET ="HK_APPSECRET" ;
    public static final String HK_HTTPS ="HK_HTTPS" ;
    public static final String HK_PUSH_URL = "HK_PUSH_URL";
@@ -46,6 +47,8 @@
    public static final String HK_ROOTORG_NAME ="HK_ROOTORG_NAME" ;
    public static final String PLATFORM ="PLATFORM" ;
    public static final String POWER_MINUTE ="POWER_MINUTE" ;
    public static final String SPECIAL_COMPANY_ID ="SPECIAL_COMPANY_ID" ;
    public static final String RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
    public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
    public static final String SIGN_IN_PLACE_LNT ="SIGN_IN_PLACE_LNT" ;
@@ -104,6 +107,7 @@
    public static final String FTP_USERNAME ="FTP_USERNAME" ;
    public static final String FTP_PWD ="FTP_PWD" ;
    public static final String FTP_RESOURCE_PATH ="FTP_RESOURCE_PATH" ;
    public static final String FTP_LOCAL_RESOURCE_PATH ="FTP_LOCAL_RESOURCE_PATH" ;
    public static final String ERP_ORGLIST_URL ="ERP_ORGLIST_URL" ;
    public static final String ERP_USERLIST_URL ="ERP_USERLIST_URL" ;
    public static final String ERP_APPROVE_URL ="ERP_APPROVE_URL" ;
@@ -864,7 +868,7 @@
        CALLING(1, "叫号中","${param}请前往${param2}等待作业"),
        DONE(2, "作业完成","${param}作业完成,请尽快驶离" ),
        WRONG_IN(3, "错误停靠","${param}月台停靠错误,请尽快驶离" ),
        TIMEOUT_IN(4, "超时停靠","${param}月台停靠超时,请尽快驶离请尽快驶离" ),
        TIMEOUT_IN(4, "超时停靠","${param}月台停靠超时,请尽快驶离" ),
        TIMEOUT_WORK(5, "作业超时","${param}作业超时" ),
        ;
@@ -879,6 +883,7 @@
            this.info = info;
            this.name = name;
        }
        public static String getName(int index) {
            for (PlatformBroadcastContent c : PlatformBroadcastContent.values()) {
                if (c.getKey() == index) {
server/system_service/src/main/java/com/doumee/dao/business/dao/SmsEmailMapper.java
ÎļþÃû´Ó server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsEmailMapper.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.doumee.dao.business;
package com.doumee.dao.business.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.SmsEmail;
server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.system.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
 * @author Eva.Caesar Liu
 * @date 2023/02/14 11:14
 */
@Data
@ApiModel("手机号登录参数")
public class LoginPhoneDTO implements Serializable {
    @NotBlank(message = "手机号不能为空")
    @ApiModelProperty(value = "手机号")
    private String phone;
    @NotBlank(message = "验证码不能为空")
    @ApiModelProperty(value = "验证码")
    private String code;
}
server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
@@ -40,6 +40,7 @@
    @ApiModelProperty(value = "角色ID")
    private Integer roleId;
    @ApiModelProperty(value = "企业编码")
    private Integer companyId;
@@ -52,5 +53,11 @@
    @ApiModelProperty(value = "用户类型:0=相关方;1=内部" ,hidden = true)
    private Integer companyType;
    @ApiModelProperty(value = "是否查询固定人员:0=否;1=是" )
    private Integer querySpecial;
    @ApiModelProperty(value = "是否查询固定人员组织主键" ,hidden = true)
    private String companySpecialId;
}
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -79,4 +79,10 @@
    @TableField(exist = false)
    private String fileurlFull;
    @ApiModelProperty(value = "内网文件地址")
    @TableField(exist = false)
    private String localFileurlFull;
}
server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -3,6 +3,7 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.dao.system.dto.LoginByOpenidDTO;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.LoginPhoneDTO;
import org.springframework.http.server.reactive.ServerHttpRequest;
import javax.servlet.http.HttpServletRequest;
@@ -23,6 +24,9 @@
    LoginUserInfo loginByPasswordNew (LoginDTO dto, ServerHttpRequest request);
    LoginUserInfo loginByPhone(LoginPhoneDTO dto, ServerHttpRequest request);
    LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request);
    /**
     * æ ¹æ® openId登录
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -1,5 +1,6 @@
package com.doumee.service.system.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.doumee.config.jwt.JwtTokenUtil;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
@@ -7,9 +8,12 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.SmsEmail;
import com.doumee.dao.system.dto.LoginByOpenidDTO;
import com.doumee.dao.system.dto.LoginDTO;
import com.doumee.dao.system.dto.LoginPhoneDTO;
import com.doumee.dao.system.model.*;
import com.doumee.service.common.CaptchaService;
import com.doumee.service.system.*;
@@ -43,6 +47,9 @@
    @Lazy
    @Autowired
    private SystemUserService systemUserService;
    @Autowired
    private SmsEmailMapper smsEmailMapper;
    @Lazy
    @Autowired
@@ -172,6 +179,80 @@
    @Override
    public LoginUserInfo loginByPhone(LoginPhoneDTO dto, ServerHttpRequest request) {
        SystemLoginLog loginLog = new SystemLoginLog();
        loginLog.setLoginUsername(dto.getPhone());
        loginLog.setLoginTime(new Date());
        loginLog.setSystemVersion(systemVersion);
        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
        if(request!=null&&request.getHeaders()!=null && request.getHeaders().size()>0){
            loginLog.setIp(Utils.User_Client.getIP(request));
            loginLog.setPlatform(Utils.User_Client.getPlatform(request));
            loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
            loginLog.setOsInfo(Utils.User_Client.getOS(request));
        }
        loginLog.setServerIp(Utils.Server.getIP());
        // æ ¹æ®ç”¨æˆ·åæŸ¥è¯¢ç”¨æˆ·å¯¹è±¡
        SystemUser queryDto = new SystemUser();
        queryDto.setMobile(dto.getPhone());
        queryDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserService.findOne(queryDto);
        if (user == null) {
            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
        }
        if(!Constants.equalsInteger(user.getSource(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN);
        }
        if(isDebug == null  || !isDebug){
            //验证 çŸ­ä¿¡ç 
            SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
                    .eq(SmsEmail::getType, Constants.ZERO)
                    .eq(SmsEmail::getPhone, dto.getPhone())
                    .eq(SmsEmail::getRemark, dto.getCode())
                    .eq(SmsEmail::getIsdeleted, Constants.ZERO)
            );
            if(model == null){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码不正确,请重新发送再试!");
            }
            if(!Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试!");
            }
            if(model.getCreateDate() !=null &&
                    System.currentTimeMillis() - model.getCreateDate().getTime() > 3*60*1000){
                model.setStatus(Constants.ONE);
                model.setEditDate(new Date());
                smsEmailMapper.updateById(model);
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试~");
            }
            model.setStatus(Constants.ONE);
            model.setEditDate(new Date());
            smsEmailMapper.updateById(model);
        }
        Company company = new Company();
        if(Objects.nonNull(user.getCompanyId())){
            company = companyMapper.selectById(user.getCompanyId());
        }
        // èŽ·å–ç™»å½•ç”¨æˆ·ä¿¡æ¯
        List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
        List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
        SystemRole rt = new SystemRole();
        rt.setDeleted(Boolean.FALSE);
        //数据部门权限集合
        user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,company,null);
        return  userInfo;
    }
    @Override
    public LoginUserInfo driverLogin(LoginDTO dto, ServerHttpRequest request) {
        SystemLoginLog loginLog = new SystemLoginLog();
server/system_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -32,6 +32,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -140,6 +141,15 @@
            List<Integer> collect = list.stream().map(s -> s.getId()).collect(Collectors.toList());
            pageWrap.getModel().setDepartmentIds(collect);
        }*/
        //查询特殊的42人配置
        if(Objects.nonNull(pageWrap.getModel()) && Constants.equalsInteger(pageWrap.getModel().getQuerySpecial(),Constants.ONE)){
            String companySpecialId = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SPECIAL_COMPANY_ID).getCode();
            if(StringUtils.isNotBlank(companySpecialId)){
                pageWrap.getModel().setCompanySpecialId(companySpecialId);
            }
        }
        // æ‰§è¡ŒæŸ¥è¯¢
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
        List<SystemUserListVO> userList = systemUserMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause());
server/system_service/src/main/resources/mappers/SystemUserMapper.xml
@@ -75,6 +75,9 @@
      <if test="dto.companyType != null ">
        AND  sd.`type` = #{dto.companyType}
      </if>
      <if test="dto.querySpecial != null and dto.querySpecial = 1 ">
            AND find_in_set(#{dto.companySpecialId},REPLACE(sd.company_path,"/",","))
      </if>
    </where>
    ${orderByClause}
  </select>
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -67,12 +67,19 @@
    @ApiOperation("【访客系统】定时更新微信公众号accesstoken")
    @GetMapping("/timer/wxtoken/updateWxAccessToken")
    ApiResponse updateWxAccessToken();
    @ApiOperation("【数字化月台】月台作业报警业务")
    @GetMapping("/timer/platformJob/platformJobTimer")
    ApiResponse platformJobTimer();
    @ApiOperation("【访客系统】访客数据即将超时预警")
    @GetMapping("/timer/visit/visitTimeOut")
    ApiResponse visitTimeOut() ;
    @ApiOperation("【数字化月台】月台停靠超时报警业务")
    @GetMapping("/timer/platformJob/platformJobTimer")
    ApiResponse platformJobTimer();
    @ApiOperation("【数字化月台】月台作业超时报警业务")
    @GetMapping("/timer/platformJob/platformJobWorkTimeOut")
    ApiResponse platformJobWorkTimeOut();
    @ApiOperation("【数字化月台】月台等待作业超时业务")
    @GetMapping("/timer/platformJob/platformJobWaitTimeOut")
    ApiResponse platformJobWaitTimeOut();
}
server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java
@@ -36,14 +36,27 @@
    private PlatformJobService platformJobService;
    @ApiOperation("月台作业报警业务")
    @ApiOperation("月台停靠超时报警业务")
    @GetMapping("/platformJobTimer")
    public ApiResponse platformJobTimer() {
        platformJobService.timeOutReport();
        platformJobService.timeOutCallIn();
        platformJobService.timeOutWork();
        return ApiResponse.success("月台作业报警业务");
        return ApiResponse.success("月台停靠超时报警业务");
    }
    @ApiOperation("月台作业超时报警业务")
    @GetMapping("/platformJobWorkTimeOut")
    public ApiResponse platformJobWorkTimeOut() {
        platformJobService.timeOutWork();
        return ApiResponse.success("月台作业超时报警业务");
    }
    @ApiOperation("月台等待作业超时业务")
    @GetMapping("/platformJobWaitTimeOut")
    public ApiResponse platformJobWaitTimeOut() {
        platformJobService.timeOutCallIn();
        return ApiResponse.success("月台等待作业超时业务");
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -4,6 +4,8 @@
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
@@ -19,6 +21,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Objects;
/**
 * @author æ±Ÿè¹„蹄
@@ -39,6 +42,9 @@
    public ApiResponse create(@RequestBody CarUseBook carUseBook,@RequestHeader(Constants.HEADER_USER_TOKEN) String token)  throws Exception {
        LoginUserInfo loginUserInfo = getLoginUser(token);
        carUseBook.setCreator(loginUserInfo.getId());
        if(Objects.isNull(loginUserInfo.getMemberId())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非内部人员无法进行该操作");
        }
        carUseBook.setMemberId(loginUserInfo.getMemberId());
        return ApiResponse.success(carUseBookService.create(carUseBook));
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java
@@ -103,6 +103,15 @@
        return ApiResponse.success(companyService.findPage(pageWrap));
    }
    @ApiOperation("组织列表")
    @PostMapping("/list")
    @CloudRequiredPermission("business:company:query")
    public ApiResponse<List<Company>> list (@RequestBody Company company,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(companyService.findList(company));
    }
    @ApiOperation("组织树查询")
    @GetMapping("/tree")
    @ApiImplicitParams({
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
@@ -4,7 +4,10 @@
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
@@ -16,6 +19,7 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Objects;
/**
 * @author æ±Ÿè¹„蹄
@@ -34,7 +38,11 @@
    @PostMapping("/create")
    @CloudRequiredPermission("business:hiddendanger:create")
    public ApiResponse create(@RequestBody HiddenDanger hiddenDanger,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        hiddenDanger.setLoginUserInfo(this.getLoginUser(token));
        LoginUserInfo loginUserInfo = this.getLoginUser(token);
        if(Objects.isNull(loginUserInfo.getMemberId())||Objects.isNull(loginUserInfo)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户无法进行该操作");
        }
        hiddenDanger.setLoginUserInfo(loginUserInfo);
        return ApiResponse.success(hiddenDangerService.create(hiddenDanger));
    }
@@ -58,7 +66,11 @@
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:hiddendanger:update")
    public ApiResponse updateById(@RequestBody HiddenDanger hiddenDanger,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        hiddenDanger.setLoginUserInfo(this.getLoginUser(token));
        LoginUserInfo loginUserInfo = this.getLoginUser(token);
        if(Objects.isNull(loginUserInfo.getMemberId())||Objects.isNull(loginUserInfo)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户无法进行该操作");
        }
        hiddenDanger.setLoginUserInfo(loginUserInfo);
        hiddenDangerService.updateById(hiddenDanger);
        return ApiResponse.success(null);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HkSyncCloudController.java
@@ -1,9 +1,11 @@
package com.doumee.cloud.admin;
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.config.jwt.JwtProperties;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.*;
@@ -35,10 +37,8 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
 * @author æ±Ÿè¹„蹄
@@ -71,6 +71,8 @@
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    @Autowired
    private JwtProperties jwtProperties;
    @PreventRepeat
    @ApiOperation("【海康】全量同步月台信息接口")
@@ -241,9 +243,34 @@
        String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HTTPS).getCode() +
        systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HOST).getCode()
                 + HKService.getMenuUrl(type,hkToken);
        try {
            if(redisTemplate!=null&& jwtProperties!=null){
                loginUserInfo.setHkMenuToken(hkToken);
                redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token, JSONObject.toJSONString(loginUserInfo),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return ApiResponse.success( url);
    }
    @ApiOperation(value = "获取安防平台系统免密菜单配置" )
    @GetMapping("/getHkMenuConfig")
    public ApiResponse<List<Integer>> getHkMenuConfig(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        LoginUserInfo loginUserInfo = getLoginUser(token);
        List<Integer> menuConfigList = new ArrayList<>();
        if(Objects.nonNull(loginUserInfo) && StringUtils.isNotBlank(loginUserInfo.getUsername())){
            menuConfigList = hkSyncPlatformsService.getMenuConfig(loginUserInfo.getUsername());
        }
        return ApiResponse.success(menuConfigList);
    }
    @ApiOperation("【海康】设置LED屏文案")
    @PostMapping("/setLedContent")
    public ApiResponse<List<Map<String,Object>>> setLedContent(@RequestBody TransparentChannelSingleRequest body  , HttpServletResponse response) {
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/PlatformBooksCloudController.java
@@ -4,6 +4,8 @@
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageWrap;
@@ -25,6 +27,7 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
 * @author æ±Ÿè¹„蹄
@@ -118,6 +121,9 @@
    @PostMapping("/apply")
    public ApiResponse<Integer> apply (@RequestBody PlatformBooksApplyDTO platformBooksApplyDTO , @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo loginUserInfo = getLoginUser(token);
        if(Objects.isNull(loginUserInfo.getMemberId())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"非内部人员无法进行该操作");
        }
        platformBooksApplyDTO.setUserId(loginUserInfo.getMemberId());
        platformBooksApplyDTO.setDriverId(loginUserInfo.getMemberId());
        return ApiResponse.success(platformBooksService.apply(platformBooksApplyDTO));
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/EnergyController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
package com.doumee.cloud.board;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.dao.web.response.platformReport.*;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/28 13:42
 */
@Api(tags = "能耗看板")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/energy")
public class EnergyController extends BaseController {
    @LoginNoRequired
    @ApiOperation("中心数据")
    @GetMapping("/centerData")
    public ApiResponse<EnergyBoardVO> centerData() {
        EnergyBoardVO data = new EnergyBoardVO();
        Random random = new Random();
        data.setSmokeBoxTotal(random.nextInt(20000));
        data.setCarbon(new BigDecimal(random.nextInt(1000)));
        data.setElectricityQuantity(random.nextInt(1000));
        data.setElectricityYear(new BigDecimal(random.nextInt(10)));
        data.setElectricityMonth(new BigDecimal(random.nextInt(10)));
        data.setWaterQuantity(new BigDecimal(random.nextInt(1000)));
        data.setWaterYear(new BigDecimal(random.nextInt(10)));
        data.setWaterMonth(new BigDecimal(random.nextInt(10)));
        data.setGasQuantity(new BigDecimal(random.nextInt(1000)));
        data.setGasYear(new BigDecimal(random.nextInt(10)));
        data.setGasMonth(new BigDecimal(random.nextInt(10)));
        data.setOfficeQuantity(random.nextInt(20));
        data.setPowerQuantity(random.nextInt(20));
        data.setWorkHouseQuantity(random.nextInt(20));
        data.setParkQuantity(random.nextInt(20));
        data.setTodayElectricity(random.nextInt(20));
        data.setMonthElectricity(random.nextInt(20));
        data.setYesterdayElectricity(random.nextInt(20));
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("实时负荷曲线")
    @GetMapping("/loadCurve")
    public ApiResponse<List<EnergyDataVO>> loadCurve() {
        List<EnergyDataVO> loadCurveList = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 23; i++) {
            EnergyDataVO data = new EnergyDataVO();
            data.setTimeData(StringUtils.leftPad(i+"",2,"0") +":00");
            data.setEnergy(new BigDecimal(random.nextInt(200)));
            loadCurveList.add(data);
        }
        return ApiResponse.success(loadCurveList);
    }
    @LoginNoRequired
    @ApiOperation("月能耗、油耗分析")
    @GetMapping("/energyDataList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "查询类型:0=水;1=气;2=电;3=油耗", required = true),
    })
    public ApiResponse<List<EnergyDataVO>> energyDataList(@RequestParam Integer type) {
        List<EnergyDataVO> energyDataVOList = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 12; i++) {
            EnergyDataVO data = new EnergyDataVO();
            data.setTimeData(i +"月");
            data.setEnergy(new BigDecimal(random.nextInt(200)));
            energyDataVOList.add(data);
        }
        return ApiResponse.success(energyDataVOList);
    }
    @LoginNoRequired
    @ApiOperation("上月油耗排行")
    @GetMapping("/lastMonthOil")
    public ApiResponse<List<OilDataVO>> lastMonthOil() {
        List<OilDataVO> oilDataVOList = new ArrayList<>();
        Random random = new Random();
        BigDecimal maxOil = BigDecimal.ZERO;
        BigDecimal lastOil = BigDecimal.ZERO;
        for (int i = 1; i <= 7; i++) {
            OilDataVO oilDataVO = new OilDataVO();
            oilDataVO.setCarNo("皖A8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
            if(i==1){
                oilDataVO.setQuantity(new BigDecimal(random.nextInt(100)));
                maxOil = oilDataVO.getQuantity();
            }else{
                oilDataVO.setQuantity(new BigDecimal(random.nextInt(lastOil.intValue())));
            }
            lastOil = oilDataVO.getQuantity();
            oilDataVO.setMaxOil(maxOil);
            oilDataVOList.add(oilDataVO);
        }
        return ApiResponse.success(oilDataVOList);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.doumee.cloud.board;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.PlatformLogMapper;
import com.doumee.dao.business.model.PlatformLog;
import com.doumee.dao.web.response.platformReport.*;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/28 13:42
 */
@Api(tags = "消防管控大屏")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/fightingAdmin")
public class FightingAdminController extends BaseController {
    @LoginNoRequired
    @ApiOperation("中心数据")
    @GetMapping("/centerData")
    public ApiResponse<FightingAdminBoardVO> centerData() {
        FightingAdminBoardVO data = new FightingAdminBoardVO();
        Random random = new Random();
        data.setOfflineDeviceNum(random.nextInt(20));
        data.setOnlineDeviceNum(random.nextInt(20));
        data.setErrDeviceNum(random.nextInt(20));
        data.setShieldDeviceNum(random.nextInt(20));
        data.setTodayDangerNum(random.nextInt(20));
        data.setDealDangerNum(random.nextInt(20));
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("今日各系统设备状态及告警数量")
    @GetMapping("/deviceAlarmData")
    public ApiResponse<List<DeviceAlarmDataVO>> deviceAlarmData() {
        List<DeviceAlarmDataVO> deviceAlarmDataVOList = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 5; i++) {
            DeviceAlarmDataVO deviceAlarmDataVO = new DeviceAlarmDataVO();
            deviceAlarmDataVO.setDeviceTypeName("设备名称_"+i);
            deviceAlarmDataVO.setAlarmNum(random.nextInt(20));
            deviceAlarmDataVO.setErrNum(random.nextInt(20));
            deviceAlarmDataVO.setOfflineNum(random.nextInt(20));
            deviceAlarmDataVO.setShieldNum(random.nextInt(20));
            deviceAlarmDataVO.setStatusTotal(deviceAlarmDataVO.getAlarmNum() + deviceAlarmDataVO.getErrNum() + deviceAlarmDataVO.getOfflineNum() + deviceAlarmDataVO.getShieldNum());
            deviceAlarmDataVOList.add(deviceAlarmDataVO);
        }
        return ApiResponse.success(deviceAlarmDataVOList);
    }
    @LoginNoRequired
    @ApiOperation("报警信息")
    @GetMapping("/alarmData")
    public ApiResponse<AlarmDataVO> alarmData() {
        AlarmDataVO alarmDataVO = new AlarmDataVO();
        Random random = new Random();
        alarmDataVO.setTotalNum(random.nextInt(30));
        alarmDataVO.setRealNum(random.nextInt(alarmDataVO.getTotalNum()));
        alarmDataVO.setErrNum(random.nextInt(alarmDataVO.getRealNum()));
        alarmDataVO.setLiftNum(random.nextInt(alarmDataVO.getErrNum()));
        alarmDataVO.setProcessingNum(random.nextInt(alarmDataVO.getErrNum()));
        return ApiResponse.success(alarmDataVO);
    }
    @LoginNoRequired
    @ApiOperation("告警处理分析")
    @GetMapping("/alarmHandleData")
    public ApiResponse<List<AlarmHandleDataVO>> alarmHandleData(@RequestParam Integer type) {
        List<AlarmHandleDataVO> alarmHandleDataVOList = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 12; i++) {
            AlarmHandleDataVO alarmHandleDataVO = new AlarmHandleDataVO();
            alarmHandleDataVO.setMonthStr(i+"月");
            alarmHandleDataVO.setAlarmNum(random.nextInt(20));
            alarmHandleDataVO.setErrNum(random.nextInt(20));
            alarmHandleDataVO.setLiftNum(random.nextInt(20));
            alarmHandleDataVO.setProcessingNum(random.nextInt(20));
            alarmHandleDataVOList.add(alarmHandleDataVO);
        }
        return ApiResponse.success(alarmHandleDataVOList);
    }
    @LoginNoRequired
    @ApiOperation("本年消防设备/设施维护情况")
    @GetMapping("/yearDeviceData")
    public ApiResponse<YearDeviceDataVO> yearDeviceData() {
        Random random = new Random();
        YearDeviceDataVO yearDeviceDataVO = new YearDeviceDataVO();
        yearDeviceDataVO.setMonthAddNum(random.nextInt(100));
        yearDeviceDataVO.setPlanProtectTotal(random.nextInt(1000));
        yearDeviceDataVO.setProtectNum(yearDeviceDataVO.getPlanProtectTotal());
        return ApiResponse.success(yearDeviceDataVO);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/OnSitDispatchController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
package com.doumee.cloud.board;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.PlatformLogMapper;
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformJob;
import com.doumee.dao.business.model.PlatformLog;
import com.doumee.dao.openapi.request.HkBaseTokenRequest;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.web.response.platformReport.*;
import com.doumee.service.business.PlatformJobService;
import com.doumee.service.business.PlatformLogService;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/28 13:42
 */
@Api(tags = "场内调度看板")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/onSitDispatch")
public class OnSitDispatchController extends BaseController {
    @Autowired
    private PlatformLogMapper platformLogMapper;
    @LoginNoRequired
    @ApiOperation("中心数据")
    @GetMapping("/centerData")
    public ApiResponse<OnSitDispatchBoardVO> centerData() {
        OnSitDispatchBoardVO data = new OnSitDispatchBoardVO();
        data.setPlatformTotal(100);
        data.setFreePlatform(8);
        data.setReservationCar(97);
        data.setWorkingCar(56);
        data.setLineUpCar(35);
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("今日月台完成订单统计")
    @GetMapping("/platformGroupFinish")
    public ApiResponse<List<PlatformGroupFinishVO>> platformGroupFinish() {
        List<PlatformGroupFinishVO> platformGroupFinishVOList = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            PlatformGroupFinishVO platformGroupFinishVO = new PlatformGroupFinishVO();
            platformGroupFinishVO.setPlatformGroupName(i+"_月台组名称");
            platformGroupFinishVO.setPlatformId(i);
            platformGroupFinishVO.setFinishData(300+random.nextInt(100));
            platformGroupFinishVOList.add(platformGroupFinishVO);
        }
        return ApiResponse.success(platformGroupFinishVOList);
    }
    @LoginNoRequired
    @ApiOperation("今日月台工作时长趋势")
    @GetMapping("/platformDuration")
    public ApiResponse<List<PlatformDurationVO>> platformDuration() {
        List<PlatformDurationVO> platformDurationList = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            PlatformDurationVO platformDurationVO = new PlatformDurationVO();
            platformDurationVO.setPlatformName(i+"_月台名称");
            platformDurationVO.setPlatformId(i);
            platformDurationVO.setWorkTotalTime(100+random.nextInt(100));
            platformDurationVO.setOpenTotalTime(200+random.nextInt(100));
            platformDurationList.add(platformDurationVO);
        }
        return ApiResponse.success(platformDurationList);
    }
    @LoginNoRequired
    @ApiOperation("今日月台工作时长趋势")
    @GetMapping("/workEfficiency")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "type", value = "查询类型:0=入库;1=出库", required = true),
    })
    public ApiResponse<List<WorkEfficiencyVO>> workEfficiency(@RequestParam Integer type) {
        List<WorkEfficiencyVO> workEfficiencyVOList = new ArrayList<>();
        Random random = new Random();
        Integer totalWorkNum = 0;
        for (int i = 8; i <= 20; i++) {
            if(i%2==0){
                WorkEfficiencyVO workEfficiencyVO = new WorkEfficiencyVO();
                workEfficiencyVO.setWorkNum(200+random.nextInt(100));
                totalWorkNum = totalWorkNum + workEfficiencyVO.getWorkNum();
                workEfficiencyVO.setTotalWorkNum(totalWorkNum);
                workEfficiencyVO.setWorkTime(StringUtils.leftPad(i+"",2,"0") +":00");
                workEfficiencyVOList.add(workEfficiencyVO);
            }
        }
        return ApiResponse.success(workEfficiencyVOList);
    }
    @LoginNoRequired
    @ApiOperation("今日车辆作业情况")
    @GetMapping("/carWorkSituation")
    public ApiResponse<CarWorkSituationVO> carWorkSituation() {
        Random random = new Random();
        CarWorkSituationVO carWorkSituationVO = new CarWorkSituationVO();
        carWorkSituationVO.setCallNum(200+random.nextInt(100));
        carWorkSituationVO.setFinishNum(100+random.nextInt(100));
        carWorkSituationVO.setCallNum(100+random.nextInt(100));
        carWorkSituationVO.setWorkingNum(100+random.nextInt(100));
        carWorkSituationVO.setFinishNum(100+random.nextInt(100));
        carWorkSituationVO.setInNum(100+random.nextInt(100));
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
                .orderByDesc(PlatformLog::getCreateDate)
                .last(" limit 7 ")
        );
        carWorkSituationVO.setPlatformLogList(platformLogList);
        return ApiResponse.success(carWorkSituationVO);
    }
    @LoginNoRequired
    @ApiOperation("实时月台作业信息")
    @GetMapping("/platformWorkData")
    public ApiResponse<List<PlatformWorkDataVO>> platformWorkData() {
        List<PlatformWorkDataVO> platformWorkDataVOList = new ArrayList<>();
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO();
            platformDurationVO.setPlatformName(i+"_月台名称");
            platformDurationVO.setCarNo("皖A8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
            platformDurationVO.setWorkType(random.nextInt(1));
            platformDurationVO.setWorkNum(100+random.nextInt(100));
            platformDurationVO.setFinishTime(Long.valueOf(System.currentTimeMillis()/1000 + 200+random.nextInt(100)));
            platformDurationVO.setStatus(random.nextInt(2));
            platformWorkDataVOList.add(platformDurationVO);
        }
        return ApiResponse.success(platformWorkDataVOList);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/PlatformJobRunController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
package com.doumee.cloud.board;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.PlatformJobMapper;
import com.doumee.dao.business.join.PlatformJobJoinMapper;
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformBooks;
import com.doumee.dao.business.model.PlatformJob;
import com.doumee.dao.business.model.PlatformWmsJob;
import com.doumee.dao.web.response.platformReport.*;
import com.doumee.service.business.PlatformJobService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/28 13:42
 */
@Api(tags = "园区物流运行调度看板")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/platformJobRun")
public class PlatformJobRunController extends BaseController {
    @ApiModelProperty
    private PlatformJobJoinMapper platformJobJoinMapper;
    @LoginNoRequired
    @ApiOperation("中心数据")
    @GetMapping("/centerData")
    public ApiResponse<PlatformJobRunBoardVO> centerData() {
        PlatformJobRunBoardVO data = new PlatformJobRunBoardVO();
        Random random = new Random();
        data.setMonthOutTotal(BigDecimal.valueOf(random.nextInt(100)).multiply(new BigDecimal(10000)));
        data.setMonthOutTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
        data.setMonthOutTimes(random.nextInt(1000));
        data.setYearOutTotal(data.getMonthOutTotal().multiply(new BigDecimal(11)));
        data.setYearOutTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
        data.setYearOutTimes(random.nextInt(1000) * 11);
        data.setTodayInRata(new BigDecimal(random.nextInt(100)));
        data.setMonthInRata(data.getTodayInRata().multiply(new BigDecimal(30)));
        data.setTodayOutRata(new BigDecimal(random.nextInt(100)));
        data.setMonthOutRata(data.getTodayOutRata().multiply(new BigDecimal(30)));
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("运输任务分析")
    @GetMapping("/transportMeasure")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "查询类型:0=周;1=月;2=年;", required = true),
    })
    public ApiResponse<List<TransportMeasureVO>> transportMeasure(@RequestParam Integer queryType) {
        List<TransportMeasureVO> list = new ArrayList<>();
        Random random = new Random();
        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
        if(Constants.equalsInteger(queryType,Constants.ONE)){
            dayList = DateUtil.getBeforDays(new Date(),30);
        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
            dayList = DateUtil.getBeforMonth(new Date(),12);
        }
        for (String str:dayList) {
            TransportMeasureVO data = new TransportMeasureVO();
            data.setPlanTimes(str);
            data.setPlanTaskNum(new BigDecimal(random.nextInt(1000)));
            data.setFinishTaskNum(new BigDecimal(data.getPlanTaskNum().intValue()));
            list.add(data);
        }
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("当日运输任务")
    @GetMapping("/platformJobList")
    public ApiResponse<List<PlatformJob>> platformJobList() {
        List<PlatformJob> list =  platformJobJoinMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAll(PlatformJob.class)
                        .selectAs(PlatformBooks::getId,PlatformJob::getBookId)
                        .selectAs(Platform::getName,PlatformJob::getPlatformName)
                        .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate)
                        .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName)
                        .selectAs(PlatformWmsJob::getRepertotyAddress,PlatformJob::getRepertotyAddress)
                        .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                        .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode)
                        .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getStatus
                                ,Constants.PlatformJobStatus.WAIT_CALL.getKey()
                                ,Constants.PlatformJobStatus.CALLED.getKey()
                                ,Constants.PlatformJobStatus.IN_WAIT.getKey()
                                ,Constants.PlatformJobStatus.WORKING.getKey()
                                ,Constants.PlatformJobStatus.TRANSFERING.getKey()
                                ,Constants.PlatformJobStatus.EXCEPTION.getKey()
                                ,Constants.PlatformJobStatus.DONE.getKey()
                        )
                        .orderByDesc(PlatformJob::getSignNum)
                        .last(" limit 20 ")
        );
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("出入库任务量")
    @GetMapping("/jobData")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "查询类型:0=出库;1=入库;", required = true),
    })
    public ApiResponse<JobDataVO> jobData(@RequestParam Integer queryType) {
        Random random = new Random();
        JobDataVO jobDataVO = new JobDataVO();
        jobDataVO.setPlanTaskNum(BigDecimal.valueOf(random.nextInt(1000)));
        jobDataVO.setFinishTaskNum(BigDecimal.valueOf(jobDataVO.getPlanTaskNum().intValue()));
        return ApiResponse.success(jobDataVO);
    }
    @LoginNoRequired
    @ApiOperation("今日入库量统计")
    @GetMapping("/totalInList")
    public ApiResponse<List<GeneralVO>> totalInList() {
        List<GeneralVO> list = new ArrayList<>();
        for (int i = 1; i < 4; i++) {
            Random random = new Random();
            GeneralVO data = new GeneralVO();
            data.setName("厂区名称_"+i);
            data.setNum(BigDecimal.valueOf(random.nextInt(1000)));
            list.add(data);
        }
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("库存情况")
    @GetMapping("/stockList")
    public ApiResponse<List<GeneralVO>> stockList() {
        List<GeneralVO> list = new ArrayList<>();
        for (int i = 1; i < 10; i++) {
            Random random = new Random();
            GeneralVO data = new GeneralVO();
            data.setName("名称"+i);
            data.setNum(BigDecimal.valueOf(random.nextInt(1000)));
            list.add(data);
        }
        return ApiResponse.success(list);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/SecurityController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.doumee.cloud.board;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.dao.web.response.platformReport.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/28 13:42
 */
@Api(tags = "安防管控大屏")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/security")
public class SecurityController extends BaseController {
    @LoginNoRequired
    @ApiOperation("中心数据")
    @GetMapping("/centerData")
    public ApiResponse<SecurityBoardVO> centerData() {
        SecurityBoardVO data = new SecurityBoardVO();
        Random random = new Random();
        data.setParkingLotTotal(random.nextInt(200));
        data.setFreeParkingLot(random.nextInt(data.getParkingLotTotal()));
        data.setInternalCarTotal(random.nextInt(100));
        data.setRelatedCarTotal(random.nextInt(100));
        data.setVisitCarTotal(random.nextInt(100));
        data.setInParkCarTotal(data.getInternalCarTotal() + data.getRelatedCarTotal() + data.getVisitCarTotal());
        data.setInternalTotal(random.nextInt(100));
        data.setRelatedTotal(random.nextInt(100));
        data.setVisitTotal(random.nextInt(100));
        data.setInParkTotal(data.getInternalTotal() + data.getRelatedTotal() + data.getVisitTotal());
        data.setDeviceTotal(random.nextInt(20));
        data.setErrTotal(random.nextInt(20));
        data.setInternalJobCarTotal(random.nextInt(20));
        data.setVisitJobCarTotal(random.nextInt(20));
        data.setRelatedJobCarTotal(random.nextInt(20));
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("园区安防设备")
    @GetMapping("/securityDeviceData")
    public ApiResponse<List<SecurityDeviceDataVO>> securityDeviceData() {
        List<SecurityDeviceDataVO> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 3; i++) {
            SecurityDeviceDataVO data = new SecurityDeviceDataVO();
            data.setDeviceType("设备类型_"+i);
            data.setOnlineNum(random.nextInt(10));
            data.setOfflineDeviceNum(random.nextInt(10));
            data.setTotalNum(data.getOnlineNum() + data.getOfflineDeviceNum() );
            list.add(data);
        }
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("访客滞留情况")
    @GetMapping("/visitRetentionData")
    public ApiResponse<List<VisitRetentionDataVO>> visitRetentionData() {
        List<VisitRetentionDataVO> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 3; i++) {
            VisitRetentionDataVO data = new VisitRetentionDataVO();
            data.setName("小明_"+i);
            data.setCompanyName("运维组_"+i);
            data.setTimeOutMinute(Long.valueOf(random.nextInt(200)));
            list.add(data);
        }
        return ApiResponse.success(list);
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/WholeProvinceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
package com.doumee.cloud.board;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.web.response.platformReport.*;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/28 13:42
 */
@Api(tags = "全省一库制管理看板")
@RestController
@Slf4j
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/board/api/wholeProvince")
public class WholeProvinceController extends BaseController {
    @LoginNoRequired
    @ApiOperation("中心数据")
    @GetMapping("/centerData")
    public ApiResponse<WholeProvinceBoardVO> centerData() {
        WholeProvinceBoardVO data = new WholeProvinceBoardVO();
        Random random = new Random();
        data.setYearOutTotal(BigDecimal.valueOf(random.nextInt(200)));
        data.setYearOutTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
        data.setYearOutTimes(random.nextInt(200));
        data.setYearProvinceRata(BigDecimal.valueOf(random.nextInt(100)).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP));
        data.setYearInPlanTotal(BigDecimal.valueOf(random.nextInt(200)));
        data.setYearInTotal(BigDecimal.valueOf(random.nextInt(data.getYearInPlanTotal().intValue())));
        data.setYearInTotalOnYear(BigDecimal.valueOf(random.nextInt(10)));
        data.setYearInTimes(random.nextInt(200));
        data.setOutPlanTotal(BigDecimal.valueOf(random.nextInt(200)));
        data.setOutPlanTimes(random.nextInt(200));
        data.setOutTotal(BigDecimal.valueOf(random.nextInt(data.getOutPlanTotal().intValue())));
        data.setOutTimes(random.nextInt(data.getOutPlanTimes()));
        data.setOutRata(BigDecimal.valueOf(random.nextInt(100)));
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("近七日到货情况")
    @GetMapping("/arriveGoodsList")
    public ApiResponse<List<ArriveGoodsVO>> arriveGoodsList() {
        List<ArriveGoodsVO> list = new ArrayList<>();
        Random random = new Random();
        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
        for (String str:dayList) {
            ArriveGoodsVO data = new ArriveGoodsVO();
            data.setDateStr(str);
            data.setArriveNum(new BigDecimal(random.nextInt(1000)));
            data.setInTransitNum(new BigDecimal(random.nextInt(1000)));
            list.add(data);
        }
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("当前运输任务")
    @GetMapping("/transportTaskList")
    public ApiResponse<List<TransportTaskVO>> transportTaskList() {
        List<TransportTaskVO> list = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i < 11; i++) {
            TransportTaskVO data = new TransportTaskVO();
            data.setCarNo("皖A8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
            data.setStatusStr("到达卸货地");
            data.setAddress("安徽合肥");
            data.setTaskDate(new Date());
            list.add(data);
        }
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("进销存运营")
    @GetMapping("/salesOperationList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "queryType", value = "查询类型:0=周;1=月;2=年;", required = true),
    })
    public ApiResponse<List<SalesOperationVO>> salesOperationList(@RequestParam Integer queryType) {
        List<SalesOperationVO> list = new ArrayList<>();
        Random random = new Random();
        List<String> dayList = DateUtil.getBeforDays(new Date(),7);
        if(Constants.equalsInteger(queryType,Constants.ONE)){
            dayList = DateUtil.getBeforDays(new Date(),30);
        }else if(Constants.equalsInteger(queryType,Constants.TWO)){
            dayList = DateUtil.getBeforMonth(new Date(),12);
        }
        for (String str:dayList) {
            SalesOperationVO data = new SalesOperationVO();
            data.setDateStr(str);
            data.setStockNum(new BigDecimal(random.nextInt(1000)));
            data.setTotalInNum(new BigDecimal(random.nextInt(1000)));
            data.setTotalOutNum(new BigDecimal(random.nextInt(1000)));
            list.add(data);
        }
        return ApiResponse.success(list);
    }
    @LoginNoRequired
    @ApiOperation("库存利用率")
    @GetMapping("/energyDataList")
    public ApiResponse<List<StockRataVO>> energyDataList() {
        List<StockRataVO> energyDataVOList = new ArrayList<>();
        Random random = new Random();
        for (int i = 1; i <= 5; i++) {
            StockRataVO data = new StockRataVO();
            data.setPlaceName("地点_"+i);
            data.setNowStockNum(new BigDecimal(random.nextInt(200)));
            data.setStockRataNum(new BigDecimal(random.nextInt(200)));
            data.setTotalStockNum(new BigDecimal(random.nextInt(100)));
            energyDataVOList.add(data);
        }
        return ApiResponse.success(energyDataVOList);
    }
    @LoginNoRequired
    @ApiOperation("上月油耗排行")
    @GetMapping("/lastMonthOil")
    public ApiResponse<List<OilDataVO>> lastMonthOil() {
        List<OilDataVO> oilDataVOList = new ArrayList<>();
        Random random = new Random();
        BigDecimal maxOil = BigDecimal.ZERO;
        BigDecimal lastOil = BigDecimal.ZERO;
        for (int i = 1; i <= 7; i++) {
            OilDataVO oilDataVO = new OilDataVO();
            oilDataVO.setCarNo("皖A8" + random.nextInt(9) + random.nextInt(9) + random.nextInt(9) + random.nextInt(9));
            if(i==1){
                oilDataVO.setQuantity(new BigDecimal(random.nextInt(100)));
                maxOil = oilDataVO.getQuantity();
            }else{
                oilDataVO.setQuantity(new BigDecimal(random.nextInt(lastOil.intValue())));
            }
            lastOil = oilDataVO.getQuantity();
            oilDataVO.setMaxOil(maxOil);
            oilDataVOList.add(oilDataVO);
        }
        return ApiResponse.success(oilDataVOList);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -39,8 +39,11 @@
     * 3、能管中心:ngzx
     */
    public interface MenuPageId{
        String afzx = "afzx";//安防中心
        String xkzx = "xkzx";//消控中心
        String ngzx = "ngzx";//能管中心
        String jsc = "jsc";//物业后勤
        String kqgzt = "attendance_workstand";//考勤管理
    }
    /**
@@ -133,6 +136,9 @@
        String[] fireDeviceStatusSearch= new String[]{"/api/fpnms/v2/device/status/search","查询消防设备部件状态"};//查询消防设备部件状态
        String[] findDeviceAlarmPage= new String[]{"/api/v1/alarm/findDeviceAlarmPage","分页查询设备下的所有报警记录"};//分页查询设备下的所有报警记录
        String[] getTodoListPage= new String[]{"/api/v3/todo/getTodoListPage","分页获取待办列表"};//1.10.1分页获取待办列表
        String[] loginOut= new String[]{"/xauthplus-plugin/logout","退出登录"};//退出登录
        String[] sendSms= new String[]{"/api/smsps/v1/smsService/sms","短信验证码"};//短信验证码
        String[] getMenus= new String[]{"/api/privilegeService/v1/menus/list","获取用户有权限的菜单功能项"};//获取用户有权限的菜单功能项
    }
    /**
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -753,6 +753,11 @@
            return startDoPostStringArtemis(HKConstants.InterfacePath.platformStatus,null);
        }
    }
    public static String getHkMenu(Map<String,String> body) {
        return startDoGetStringArtemis(HKConstants.InterfacePath.getMenus,body);
    }
    /**
     * èŽ·å–æœˆå°ç»„ä»¶é…ç½®çš„LED设备清单
     * @param body
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/MenuDataResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.doumee.core.haikang.model.param.respose;
import lombok.Data;
import java.util.List;
@Data
public class MenuDataResponse {
    private Integer    total;
    private List<String> list;
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -1,7 +1,10 @@
package com.doumee.core.haikang.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.HKTools;
import com.doumee.core.haikang.model.param.BaseListPageResponse;
@@ -10,6 +13,7 @@
import com.doumee.core.haikang.model.param.request.*;
import com.doumee.core.haikang.model.param.respose.*;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.HttpsUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -21,6 +25,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Slf4j
public class HKService {
@@ -1320,6 +1325,10 @@
        }
        return  null;
    }
    /**
     *获取月台组件配置的LED设备清单
     * @return
@@ -1457,6 +1466,42 @@
        }
        return  null;
    }
    public static BaseResponse sendSmsByHk(Map<String,Object> param,String url){
        log.info("【海康发送短信】================开始===="+JSONObject.toJSONString(param));
        try {
            TypeReference typeReference =
                    new TypeReference<BaseResponse>(){};
            String res = HttpsUtil.postJson(url, JSONObject.toJSONString(param));
            BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"海康发送短信");
            return  result;
        }catch (Exception e){
            log.error("【海康发送短信】================失败====:\n"+ e.getMessage());
            e.printStackTrace();
        }
       return null;
    }
    public static BaseResponse<MenuDataResponse> getMenuConfig(Map<String,String> param){
        log.info("【获取菜单功能配置项】================开始===="+ JSONObject.toJSONString(param));
        try {
            String res = HKTools.getHkMenu(param);
            TypeReference typeReference =
                    new TypeReference<BaseResponse<MenuDataResponse>>(){};
            BaseResponse<MenuDataResponse>   result = JSONObject.parseObject(res, typeReference.getType());
            logResult(result,"获取菜单功能配置项");
            return  result;
        }catch (Exception e){
            log.error("【获取菜单功能配置项】================失败====:\n"+ e.getMessage());
            e.printStackTrace();
        }
        return null;
    }
    private static void logResult(BaseResponse res,String name) {
        if(StringUtils.equals(res.getCode(),HKConstants.RESPONSE_SUCCEE)){
            log.info("【"+name+"】================成功====\n"+res);
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/HiddenDangerParam.java
@@ -87,9 +87,10 @@
    @ApiModelProperty(value = "责任部门编码(关联company)", example = "1")
//    @ExcelColumn(name="提报人编码(关联member)")
    private Integer companyId;
    @ApiModelProperty(value = "责任部门编码", example = "1")
//    @ExcelColumn(name="提报人编码(关联member)")
    @TableField(exist = false)
    private Integer companyName;
    private String companyName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -276,4 +276,9 @@
    @TableField(exist = false)
    private List<String> roleNames;
    @ApiModelProperty(value = "是否查询固定人员:0=否;1=是" )
    @TableField(exist = false)
    private Integer querySpecial;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -292,6 +292,7 @@
    @TableField(exist = false)
    private String carrierName ;
    @ApiModelProperty(value = "距离签到点距离")
    @TableField(exist = false)
    private BigDecimal getDistance;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * æŠ¥è­¦ä¿¡æ¯
 *
 * @Author : Rk
 * @create 2024/10/25 14:26
 */
@Data
public class AlarmDataVO {
    @ApiModelProperty(value = "总数")
    private Integer totalNum;
    @ApiModelProperty(value = "真实报警数量")
    private Integer realNum;
    @ApiModelProperty(value = "误报警数")
    private Integer errNum;
    @ApiModelProperty(value = "已解除数量")
    private Integer liftNum;
    @ApiModelProperty(value = "处理中数量")
    private Integer processingNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/AlarmHandleDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * å‘Šè­¦å¤„理分析
 *
 * @Author : Rk
 * @create 2024/10/25 14:26
 */
@Data
public class AlarmHandleDataVO {
    @ApiModelProperty(value = "月份")
    private String monthStr;
    @ApiModelProperty(value = "报警数量")
    private Integer alarmNum;
    @ApiModelProperty(value = "误报警数")
    private Integer errNum;
    @ApiModelProperty(value = "已处理数量")
    private Integer liftNum;
    @ApiModelProperty(value = "进行中数量")
    private Integer processingNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/ArriveGoodsVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * é€šç”¨
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class ArriveGoodsVO {
    @ApiModelProperty(value = "日期")
    private String dateStr;
    @ApiModelProperty(value = "在途数量")
    private BigDecimal inTransitNum;
    @ApiModelProperty(value = "到货数量")
    private BigDecimal arriveNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/CarWorkSituationVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.doumee.dao.web.response.platformReport;
import com.doumee.dao.business.model.PlatformLog;
import com.doumee.dao.system.model.Notices;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * è½¦è¾†ä½œä¸šæƒ…况
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class CarWorkSituationVO {
    @ApiModelProperty(value = "预约数量")
    private Integer reservationNum;
    @ApiModelProperty(value = "进场数量")
    private Integer inNum;
    @ApiModelProperty(value = "已叫号数量")
    private Integer callNum;
    @ApiModelProperty(value = "已作业数量")
    private Integer workingNum;
    @ApiModelProperty(value = "已完成数量")
    private Integer finishNum;
    @ApiModelProperty(value = "已离场数量")
    private Integer leaveNum;
    @ApiModelProperty(value = "作业日志")
    private List<PlatformLog> platformLogList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/DeviceAlarmDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * ä»Šæ—¥å„系统设备状态及告警数
 *
 * @Author : Rk
 * @create 2024/10/25 14:26
 */
@Data
public class DeviceAlarmDataVO {
    @ApiModelProperty(value = "设备类型名称")
    private String deviceTypeName;
    @ApiModelProperty(value = "总数")
    private Integer statusTotal;
    @ApiModelProperty(value = "报警数量")
    private Integer alarmNum;
    @ApiModelProperty(value = "故障数量")
    private Integer errNum;
    @ApiModelProperty(value = "故障数量")
    private Integer offlineNum;
    @ApiModelProperty(value = "屏蔽数量")
    private Integer shieldNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyBoardVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * èƒ½è€—看板
 *
 * @Author : Rk
 * @create 2024/10/25 13:53
 */
@Data
public class EnergyBoardVO {
    @ApiModelProperty(value = "本年度循环烟箱")
    private Integer smokeBoxTotal;
    @ApiModelProperty(value = "碳排放 å•位 å¨")
    private BigDecimal carbon;
    @ApiModelProperty(value = "上月用电 å•位 kw·h")
    private Integer electricityQuantity;
    @ApiModelProperty(value = "用电环比")
    private BigDecimal electricityYear;
    @ApiModelProperty(value = "用电同比")
    private BigDecimal electricityMonth;
    @ApiModelProperty(value = "上月用水 å•位 t")
    private BigDecimal waterQuantity;
    @ApiModelProperty(value = "用水环比")
    private BigDecimal waterYear;
    @ApiModelProperty(value = "用水同比")
    private BigDecimal waterMonth;
    @ApiModelProperty(value = "上月用气 å•位 ")
    private BigDecimal gasQuantity;
    @ApiModelProperty(value = "用气环比")
    private BigDecimal gasYear;
    @ApiModelProperty(value = "用气同比")
    private BigDecimal gasMonth;
    @ApiModelProperty(value = "办公楼用电 å•位 kw·h")
    private Integer officeQuantity;
    @ApiModelProperty(value = "成品库用电 å•位 kw·h")
    private Integer productHouseQuantity;
    @ApiModelProperty(value = "联合工房用电 å•位 kw·h")
    private Integer workHouseQuantity;
    @ApiModelProperty(value = "物流园区用电 å•位 kw·h")
    private Integer parkQuantity;
    @ApiModelProperty(value = "动力站房用电 å•位 kw·h")
    private Integer powerQuantity;
    @ApiModelProperty(value = "今日用电 å•位 kw·h")
    private Integer todayElectricity;
    @ApiModelProperty(value = "本月用电 å•位 kw·h")
    private Integer monthElectricity;
    @ApiModelProperty(value = "昨日用电 å•位 kw·h")
    private Integer yesterdayElectricity;
    @ApiModelProperty(value = "实时负荷曲线",hidden = true)
    private List<EnergyDataVO> loadCurveList;
    @ApiModelProperty(value = "月能耗分析 - æ°´",hidden = true)
    private List<EnergyDataVO> energyDataWaterList;
    @ApiModelProperty(value = "月能耗分析 - æ°”",hidden = true)
    private List<EnergyDataVO> energyDataGasList;
    @ApiModelProperty(value = "月能耗分析 - ç”µ",hidden = true)
    private List<EnergyDataVO> energyDataElectricityList;
    @ApiModelProperty(value = "月油耗分析",hidden = true)
    private List<EnergyDataVO> oilList;
    @ApiModelProperty(value = "上月油耗排行",hidden = true)
    private List<OilDataVO> lastMonthOilList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/EnergyDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/25 16:25
 */
@Data
public class EnergyDataVO {
    @ApiModelProperty(value = "时间")
    private String timeData;
    @ApiModelProperty(value = "能耗")
    private BigDecimal energy;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/FightingAdminBoardVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * æ¶ˆé˜²ç®¡æŽ§å¤§å±
 *
 * @Author : Rk
 * @create 2024/10/25 13:53
 */
@Data
public class FightingAdminBoardVO {
    @ApiModelProperty(value = "在线设备数量")
    private Integer onlineDeviceNum;
    @ApiModelProperty(value = "报警设备数量")
    private Integer alarmDeviceNum;
    @ApiModelProperty(value = "故障设备数量")
    private Integer errDeviceNum;
    @ApiModelProperty(value = "离线设备数量")
    private Integer offlineDeviceNum;
    @ApiModelProperty(value = "屏蔽设备数量")
    private Integer shieldDeviceNum;
    @ApiModelProperty(value = "提报隐患数量")
    private Integer todayDangerNum;
    @ApiModelProperty(value = "处理隐患数量")
    private Integer dealDangerNum;
    @ApiModelProperty(value = "今日各系统设备状态及告警数量" , hidden = true)
    private List<DeviceAlarmDataVO> deviceAlarmDataList;
    @ApiModelProperty(value = "报警信息" , hidden = true)
    private AlarmDataVO alarmData;
    @ApiModelProperty(value = "告警处理分析" , hidden = true)
    private List<AlarmHandleDataVO> alarmHandleDataList;
    //TODO æ¸©åº¦ä¼ æ„Ÿå™¨
    //TODO æ¹¿åº¦ä¼ æ„Ÿå™¨
    @ApiModelProperty(value = "本年消防设备/设施维护情况" , hidden = true)
    private YearDeviceDataVO yearDeviceData;
    //TODO å‘Šè­¦ä¿¡æ¯
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/GeneralVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * é€šç”¨
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class GeneralVO {
    @ApiModelProperty(value = "名称")
    private String name;
    @ApiModelProperty(value = "数量")
    private BigDecimal num;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/JobDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * å½“日任务信息
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class JobDataVO {
    @ApiModelProperty(value = "当日任务总量 ä¸‡æ”¯")
    private BigDecimal planTaskNum;
    @ApiModelProperty(value = "当日完成任务总量 ä¸‡æ”¯")
    private BigDecimal finishTaskNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OilDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/10/25 16:31
 */
@Data
public class OilDataVO {
    @ApiModelProperty(value = "最高油耗")
    private BigDecimal maxOil;
    @ApiModelProperty(value = "油耗")
    private BigDecimal quantity;
    @ApiModelProperty(value = "车牌照")
    private String carNo;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/OnSitDispatchBoardVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * åœºå†…调度看板
 *
 * @Author : Rk
 * @create 2024/10/25 9:54
 */
@Data
public class OnSitDispatchBoardVO {
    @ApiModelProperty(value = "月台数量")
    private Integer platformTotal;
    @ApiModelProperty(value = "空闲月台数量")
    private Integer freePlatform;
    @ApiModelProperty(value = "预约车辆")
    private Integer reservationCar;
    @ApiModelProperty(value = "作业车辆")
    private Integer workingCar;
    @ApiModelProperty(value = "排队车辆")
    private Integer lineUpCar;
    @ApiModelProperty(value = "今日月台完成订单统计" , hidden = true)
    private List<PlatformGroupFinishVO> platformGroupFinishList;
    @ApiModelProperty(value = "今日月台工作时长趋势" , hidden = true)
    private List<PlatformDurationVO> platformDurationList;
    @ApiModelProperty(value = "实时作业效率 - å…¥åº“" , hidden = true)
    private List<WorkEfficiencyVO> workEfficiencyInList;
    @ApiModelProperty(value = "实时作业效率 - å‡ºåº“" , hidden = true)
    private List<WorkEfficiencyVO> workEfficiencyOutList;
    @ApiModelProperty(value = "今日车辆作业情况" , hidden = true)
    private CarWorkSituationVO carWorkSituation;
    @ApiModelProperty(value = "实时月台作业信息" , hidden = true)
    private List<PlatformWorkDataVO> platformWorkDataList;
    //TODO å®žæ—¶å‘Šè­¦ä¿¡æ¯
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformDurationVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * æœˆå°å·¥ä½œæ—¶é•¿è¶‹åŠ¿
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class PlatformDurationVO {
    @ApiModelProperty(value = "作业时长信息  å•位分钟")
    private Integer workTotalTime;
    @ApiModelProperty(value = "开放总时长 å•位分钟")
    private Integer openTotalTime;
    @ApiModelProperty(value = "月台主键")
    private Integer platformId;
    @ApiModelProperty(value = "月台名称")
    private String platformName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformGroupFinishVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * ä»Šæ—¥æœˆå°å®Œæˆè®¢å•统计
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class PlatformGroupFinishVO {
    @ApiModelProperty(value = "完成量 ä¸‡æ”¯")
    private Integer finishData;
    @ApiModelProperty(value = "月台主键")
    private Integer platformId;
    @ApiModelProperty(value = "月台组名称")
    private String platformGroupName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformJobRunBoardVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.doumee.dao.web.response.platformReport;
import com.doumee.dao.business.model.PlatformJob;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * å›­åŒºç‰©æµè¿è¡Œè°ƒåº¦çœ‹æ¿
 *
 * @Author : Rk
 * @create 2024/10/25 9:54
 */
@Data
public class PlatformJobRunBoardVO {
    @ApiModelProperty(value = "累计出库量 - æœˆåº¦")
    private BigDecimal monthOutTotal;
    @ApiModelProperty(value = "累计出库量月度 - åŒæ¯”")
    private BigDecimal monthOutTotalOnYear;
    @ApiModelProperty(value = "累计出库量 - å¹´åº¦")
    private BigDecimal yearOutTotal;
    @ApiModelProperty(value = "累计出库量年度 - åŒæ¯”")
    private BigDecimal yearOutTotalOnYear;
    @ApiModelProperty(value = "累计出库车次 - æœˆåº¦")
    private Integer monthOutTimes;
    @ApiModelProperty(value = "累计出库车次 - å¹´åº¦")
    private Integer yearOutTimes;
    @ApiModelProperty(value = "今日出库效率")
    private BigDecimal todayOutRata;
    @ApiModelProperty(value = "本月出库效率")
    private BigDecimal monthOutRata;
    @ApiModelProperty(value = "今日入库效率")
    private BigDecimal todayInRata;
    @ApiModelProperty(value = "本月入库效率")
    private BigDecimal monthInRata;
    @ApiModelProperty(value = "运输任务分析 - 7日" , hidden = true)
    private List<TransportMeasureVO> transportMeasureWeekList;
    @ApiModelProperty(value = "运输任务分析 - æœˆåº¦", hidden = true)
    private List<TransportMeasureVO> transportMeasureMonthList;
    @ApiModelProperty(value = "运输任务分析 - å¹´åº¦", hidden = true)
    private List<TransportMeasureVO> transportMeasureYearList;
    @ApiModelProperty(value = "当日运输任务")
    private List<PlatformJob> platformJobList;
    @ApiModelProperty(value = "出库任务")
    private JobDataVO outJob;
    @ApiModelProperty(value = "入库任务")
    private JobDataVO inJob;
    @ApiModelProperty(value = "今日入库量统计")
    private List<GeneralVO> totalInList;
    @ApiModelProperty(value = "库存情况")
    private List<GeneralVO> stockList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.doumee.dao.web.response.platformReport;
import com.doumee.dao.system.model.Notices;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * æœˆå°å½“前作业情况
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class PlatformWorkDataVO {
    @ApiModelProperty(value = "月台名称")
    private String platformName;
    @ApiModelProperty(value = "车牌号")
    private String carNo;
    @ApiModelProperty(value = "作业量")
    private Integer workNum;
    @ApiModelProperty(value = "作业类型:0=卸货;1=装货")
    private Integer workType;
    @ApiModelProperty(value = "作业时长 å•位 åˆ†é’Ÿ")
    private Integer workTime;
    @ApiModelProperty(value = "预计完成时间 å•位:时间戳")
    private Long finishTime;
    @ApiModelProperty(value = "月台状态:0=作业中;1=空闲中;2=作业超时")
    private Integer status;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SalesOperationVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * è¿›é”€å­˜åº“å­˜
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class SalesOperationVO {
    @ApiModelProperty(value = "日期")
    private String dateStr;
    @ApiModelProperty(value = "总入库数 ä¸‡æ”¯")
    private BigDecimal totalInNum;
    @ApiModelProperty(value = "总出库数 ä¸‡æ”¯")
    private BigDecimal totalOutNum;
    @ApiModelProperty(value = "库存值 ä¸‡æ”¯")
    private BigDecimal stockNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityBoardVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * å®‰é˜²ç®¡æŽ§å¤§å±
 *
 * @Author : Rk
 * @create 2024/10/25 13:53
 */
@Data
public class SecurityBoardVO {
    @ApiModelProperty(value = "总车位数量")
    private Integer parkingLotTotal;
    @ApiModelProperty(value = "剩余车位数量")
    private Integer freeParkingLot;
    @ApiModelProperty(value = "员工车辆")
    private Integer internalCarTotal;
    @ApiModelProperty(value = "相关方车辆")
    private Integer relatedCarTotal;
    @ApiModelProperty(value = "访客车辆")
    private Integer visitCarTotal;
    @ApiModelProperty(value = "当前在园人数")
    private Integer inParkTotal;
    @ApiModelProperty(value = "在园内部人员数量")
    private Integer internalTotal;
    @ApiModelProperty(value = "在园相关方数量")
    private Integer relatedTotal;
    @ApiModelProperty(value = "在园访客数量")
    private Integer visitTotal;
    @ApiModelProperty(value = "当前在园车辆总数")
    private Integer inParkCarTotal;
    @ApiModelProperty(value = "当前设备总数")
    private Integer deviceTotal;
    @ApiModelProperty(value = "当前报警总数")
    private Integer errTotal;
    @ApiModelProperty(value = "内运车(安泰自有车)")
    private Integer internalJobCarTotal;
    @ApiModelProperty(value = "外协运输车辆")
    private Integer relatedJobCarTotal;
    @ApiModelProperty(value = "市公司车辆")
    private Integer visitJobCarTotal;
    //TODO å®‰é˜²å‘Šè­¦
    @ApiModelProperty(value = "园区安防设备", hidden = true)
    private List<SecurityDeviceDataVO> securityDeviceDataList;
    @ApiModelProperty(value = "访客滞留情况", hidden = true)
    private List<VisitRetentionDataVO> visitRetentionDataList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/SecurityDeviceDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * å›­åŒºå®‰é˜²è®¾å¤‡
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class SecurityDeviceDataVO {
    @ApiModelProperty(value = "设备类型")
    private String deviceType;
    @ApiModelProperty(value = "总数")
    private Integer totalNum;
    @ApiModelProperty(value = "在线数量")
    private Integer onlineNum;
    @ApiModelProperty(value = "离线数量")
    private Integer offlineDeviceNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/StockRataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * åº“存利用率
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class StockRataVO {
    @ApiModelProperty(value = "地点")
    private String placeName;
    @ApiModelProperty(value = "总库数 ä¸‡æ”¯")
    private BigDecimal totalStockNum;
    @ApiModelProperty(value = "当前库数 ä¸‡æ”¯")
    private BigDecimal nowStockNum;
    @ApiModelProperty(value = "库存利用率 ä¸‡æ”¯")
    private BigDecimal stockRataNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportMeasureVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * è¿è¾“量
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class TransportMeasureVO {
    @ApiModelProperty(value = "计划任务量 ä¸‡æ”¯")
    private BigDecimal planTaskNum;
    @ApiModelProperty(value = "任务完成量 ä¸‡æ”¯")
    private BigDecimal finishTaskNum;
    @ApiModelProperty(value = "计划任务数")
    private String planTimes;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/TransportTaskVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * è¿è¾“任务
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class TransportTaskVO {
    @ApiModelProperty(value = "车牌号")
    private String carNo;
    @ApiModelProperty(value = "状态")
    private String statusStr;
    @ApiModelProperty(value = "位置")
    private String address;
    @ApiModelProperty(value = "任务下达时间")
    private Date taskDate;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/VisitRetentionDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * è®¿å®¢æ»žç•™ä¿¡æ¯
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class VisitRetentionDataVO {
    @ApiModelProperty(value = "访客姓名")
    private String name;
    @ApiModelProperty(value = "拜访部门")
    private String companyName;
    @ApiModelProperty(value = "超时时长 å•位:分钟")
    private Long timeOutMinute;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WholeProvinceBoardVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.doumee.dao.web.response.platformReport;
import com.doumee.dao.business.model.PlatformJob;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * å…¨çœä¸€åº“制管理看板
 *
 * @Author : Rk
 * @create 2024/10/25 9:54
 */
@Data
public class WholeProvinceBoardVO {
    @ApiModelProperty(value = "累计出库量  - å¹´åº¦")
    private BigDecimal yearOutTotal;
    @ApiModelProperty(value = "累计出库量  - å¹´åº¦åŒæ¯”")
    private BigDecimal yearOutTotalOnYear;
    @ApiModelProperty(value = "累计出库车次 - å¹´åº¦")
    private Integer yearOutTimes;
    @ApiModelProperty(value = "省内占比")
    private BigDecimal yearProvinceRata;
    @ApiModelProperty(value = "累计入库量  - å¹´åº¦")
    private BigDecimal yearInTotal;
    @ApiModelProperty(value = "累计入库量  - å¹´åº¦åŒæ¯”")
    private BigDecimal yearInTotalOnYear;
    @ApiModelProperty(value = "累计入库车次 - å¹´åº¦")
    private Integer yearInTimes;
    @ApiModelProperty(value = "计划入库量 - å¹´åº¦")
    private BigDecimal yearInPlanTotal;
    @ApiModelProperty(value = "今日计划出库量")
    private BigDecimal outPlanTotal;
    @ApiModelProperty(value = "今日计划出库次数")
    private Integer outPlanTimes;
    @ApiModelProperty(value = "今日出库量")
    private BigDecimal outTotal;
    @ApiModelProperty(value = "今日出库次数")
    private Integer outTimes;
    @ApiModelProperty(value = "出库能力占比")
    private BigDecimal outRata;
    @ApiModelProperty(value = "近七日到货情况" , hidden = true)
    private List<ArriveGoodsVO> arriveGoodsList;
    @ApiModelProperty(value = "当前运输任务" , hidden = true)
    private List<TransportTaskVO> transportTaskList;
    @ApiModelProperty(value = "进销存运营 - 7日" , hidden = true)
    private List<SalesOperationVO> salesOperationWeekList;
    @ApiModelProperty(value = "进销存运营 - æœˆåº¦" , hidden = true)
    private List<SalesOperationVO> salesOperationMonthList;
    @ApiModelProperty(value = "进销存运营 - å¹´åº¦" , hidden = true)
    private List<SalesOperationVO> salesOperationYearList;
    @ApiModelProperty(value = "库存利用率" , hidden = true)
    private List<StockRataVO> stockRataVOListList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/WorkEfficiencyVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * å®žæ—¶ä½œä¸šæ•ˆçއ
 *
 * @Author : Rk
 * @create 2024/10/25 10:59
 */
@Data
public class WorkEfficiencyVO {
    @ApiModelProperty(value = "作业时段时间 HH-mm  ")
    private String workTime;
    @ApiModelProperty(value = "分时作业量 å•位 ä¸‡æ”¯")
    private Integer workNum;
    @ApiModelProperty(value = "累计作业量 å•位 ä¸‡æ”¯")
    private Integer totalWorkNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/YearDeviceDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.web.response.platformReport;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * æœ¬å¹´æ¶ˆé˜²è®¾å¤‡/设施维护情况
 *
 * @Author : Rk
 * @create 2024/10/25 14:26
 */
@Data
public class YearDeviceDataVO {
    @ApiModelProperty(value = "已维保数量")
    private Integer protectNum;
    @ApiModelProperty(value = "计划维保数")
    private Integer planProtectTotal;
    @ApiModelProperty(value = "本月新增维保")
    private Integer monthAddNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsEmailService.java
@@ -96,4 +96,5 @@
     * @return long
     */
    long count(SmsEmail smsEmail);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -17,6 +17,7 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.dto.ApproveDTO;
import com.doumee.dao.business.join.ApproveJoinMapper;
import com.doumee.dao.business.join.CarUseBookJoinMapper;
@@ -40,7 +41,6 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -8,13 +8,14 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.*;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.join.ApproveJoinMapper;
import com.doumee.dao.business.join.CarUseBookJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.ApproveDataVO;
import com.doumee.dao.business.vo.DateIntervalVO;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.ApproveService;
import com.doumee.service.business.CarUseBookService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -23,7 +24,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.third.EmayService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -33,10 +33,8 @@
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Date;
import java.util.stream.Collectors;
/**
 * è½¦è¾†_用车申请信息表Service实现
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -355,8 +355,111 @@
    @Override
    public List<Company> findList(Company company) {
        QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
        return companyMapper.selectList(wrapper);
        MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>();
        company.setIsdeleted(Constants.ZERO);
        if (company.getId() != null) {
            queryWrapper.eq(Company::getId, company.getId());
        }
        if (company.getCreator() != null) {
            queryWrapper.eq(Company::getCreator, company.getCreator());
        }
        if (company.getCreateDate() != null) {
            queryWrapper.ge(Company::getCreateDate, Utils.Date.getStart(company.getCreateDate()));
            queryWrapper.le(Company::getCreateDate, Utils.Date.getEnd(company.getCreateDate()));
        }
        if (company.getEditor() != null) {
            queryWrapper.eq(Company::getEditor, company.getEditor());
        }
        if (company.getEditDate() != null) {
            queryWrapper.ge(Company::getEditDate, Utils.Date.getStart(company.getEditDate()));
            queryWrapper.le(Company::getEditDate, Utils.Date.getEnd(company.getEditDate()));
        }
        if (company.getIsdeleted() != null) {
            queryWrapper.eq(Company::getIsdeleted, company.getIsdeleted());
        }
        if (company.getName() != null) {
            queryWrapper.like(Company::getName, company.getName());
        }
        if (company.getRemark() != null) {
            queryWrapper.eq(Company::getRemark, company.getRemark());
        }
        if (company.getStatus() != null) {
            queryWrapper.eq(Company::getStatus, company.getStatus());
        }
        if (company.getSortnum() != null) {
            queryWrapper.eq(Company::getSortnum, company.getSortnum());
        }
        if (company.getImgurl() != null) {
            queryWrapper.eq(Company::getImgurl, company.getImgurl());
        }
        if (company.getType() != null) {
            queryWrapper.eq(Company::getType, company.getType());
        }
        if (company.getCategoryId() != null) {
            queryWrapper.eq(Company::getCategoryId, company.getCategoryId());
        }
        if (company.getCode() != null) {
            queryWrapper.eq(Company::getCode, company.getCode());
        }
        if (company.getParentId() != null) {
            queryWrapper.eq(Company::getParentId, company.getParentId());
        }
        if (company.getLinkName() != null) {
            queryWrapper.eq(Company::getLinkName, company.getLinkName());
        }
        if (company.getLinkPhone() != null) {
            queryWrapper.eq(Company::getLinkPhone, company.getLinkPhone());
        }
        if (company.getHkId() != null) {
            queryWrapper.eq(Company::getHkId, company.getHkId());
        }
        if (company.getHkStatus() != null) {
            queryWrapper.eq(Company::getHkStatus, company.getHkStatus());
        }
        if (company.getHkDate() != null) {
            queryWrapper.ge(Company::getHkDate, Utils.Date.getStart(company.getHkDate()));
            queryWrapper.le(Company::getHkDate, Utils.Date.getEnd(company.getHkDate()));
        }
        if (company.getErpId() != null) {
            queryWrapper.eq(Company::getErpId, company.getErpId());
        }
        if (company.getErpDate() != null) {
            queryWrapper.ge(Company::getErpDate, Utils.Date.getStart(company.getErpDate()));
            queryWrapper.le(Company::getErpDate, Utils.Date.getEnd(company.getErpDate()));
        }
        if (company.getErpStatus() != null) {
            queryWrapper.eq(Company::getErpStatus, company.getErpStatus());
        }
        if (company.getDdId() != null) {
            queryWrapper.eq(Company::getDdId, company.getDdId());
        }
        if (company.getDdDate() != null) {
            queryWrapper.ge(Company::getDdDate, Utils.Date.getStart(company.getDdDate()));
            queryWrapper.le(Company::getDdDate, Utils.Date.getEnd(company.getDdDate()));
        }
        if (company.getDdStatus() != null) {
            queryWrapper.eq(Company::getDdStatus, company.getDdStatus());
        }
        if (company.getFsId() != null) {
            queryWrapper.eq(Company::getFsId, company.getFsId());
        }
        if (company.getFsStatus() != null) {
            queryWrapper.eq(Company::getFsStatus, company.getFsStatus());
        }
        if (company.getFsDate() != null) {
            queryWrapper.ge(Company::getFsDate, Utils.Date.getStart(company.getFsDate()));
            queryWrapper.le(Company::getFsDate, Utils.Date.getEnd(company.getFsDate()));
        }
        queryWrapper.orderByDesc(Company::getCreateDate);
        queryWrapper.leftJoin(Company.class,Company::getId,Company::getParentId);
        queryWrapper.select(" t.* ")
                .select("(select count(m.id) from member m where m.COMPANY_ID=t.id and m.ISDELETED=0) as countNum") ;
        queryWrapper.select("t1.name",Company::getParentName);
        queryWrapper.select("t1.company_path",Company::getParentCompanyPath);
        queryWrapper.eq(Objects.nonNull(company.getStatus()),Company::getStatus,Constants.ZERO);
        queryWrapper.like(StringUtils.isNotBlank(company.getName()),Company::getName,company.getName());
        queryWrapper.like(StringUtils.isNotBlank(company.getParentName()),"c.name",company.getParentName());
        return companyMapper.selectList(queryWrapper);
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
@@ -1,30 +1,23 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.SmsConstants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.HiddenDangerParamMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.SmsConfigMapper;
import com.doumee.dao.business.SmsEmailMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.HiddenDangerParamService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.third.EmayService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -67,7 +60,7 @@
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,安全员信息不正确,请按要求填写内容!");
            }
           List<Member>  memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                    .eq(Member::getType,Constants.TWO)
//                    .eq(Member::getType,Constants.TWO)
                    .eq(Member::getCompanyId,model.getCompanyId())
                    .in(Member::getId,ids)
                    .eq(Member::getIsdeleted,Constants.ZERO));
@@ -227,6 +220,7 @@
                .eq(pageWrap.getModel().getEditor() != null, HiddenDangerParam::getEditor, pageWrap.getModel().getEditor())
                .eq(pageWrap.getModel().getIsdeleted() != null, HiddenDangerParam::getIsdeleted, pageWrap.getModel().getIsdeleted())
                .like(pageWrap.getModel().getName() != null, HiddenDangerParam::getName, pageWrap.getModel().getName())
                .like(pageWrap.getModel().getCompanyName() != null, Company::getName, pageWrap.getModel().getCompanyName())
                .eq(pageWrap.getModel().getRemark() != null, HiddenDangerParam::getRemark, pageWrap.getModel().getRemark())
                .eq(pageWrap.getModel().getStatus() != null, HiddenDangerParam::getStatus, pageWrap.getModel().getStatus())
                .eq(pageWrap.getModel().getSortnum() != null, HiddenDangerParam::getSortnum, pageWrap.getModel().getSortnum())
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -16,20 +16,19 @@
import com.doumee.core.utils.SmsConstants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.Notices;
import com.doumee.service.business.HiddenDangerLogService;
import com.doumee.service.business.HiddenDangerService;
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.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -1125,6 +1125,7 @@
                .selectAs(Company::getName,Member::getCompanyName) ;
        queryWrapper.selectAs(Position::getName,Member::getPositionName);
        queryWrapper.leftJoin(Position.class,Position::getId,Member::getPositionId);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        if(StringUtils.isNotBlank(member.getName())){
            queryWrapper.like(Member::getName,member.getName());
        }
@@ -1139,6 +1140,12 @@
        }
        if(null != member.getCompanyId()) {
            queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
        }
        if(null != member.getQuerySpecial() && Constants.equalsInteger(member.getQuerySpecial(),Constants.ONE)){
            String companySpecialId = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SPECIAL_COMPANY_ID).getCode();
            if(StringUtils.isNotBlank(companySpecialId)){
                queryWrapper.apply(" find_in_set('"+companySpecialId+"',REPLACE(t2.company_path,'/','')) ");
            }
        }
        queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
        queryWrapper.eq(Member::getWorkStatus,Constants.ZERO);
@@ -1375,6 +1382,8 @@
        queryWrapper.selectAs(Company::getCompanyNamePath,Member::getCompanyNamePath);
        queryWrapper.selectAs(Company::getCompanyPath,Member::getCompanyPath);
        queryWrapper.select(" ( select count(1) from member_card mc where mc.isdeleted = 0 and  mc.member_id = t.id ) as  memberCardCount ");
        queryWrapper.select(" ( select max(tt.END_TIME) from train_time tt where tt.isdeleted = 0 and  tt.member_id = t.id ) as  trainEndTime ");
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Member::getEditor);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.selectAs(Position::getName,Member::getPositionName);
@@ -1629,9 +1638,11 @@
        }catch (Exception e){
        }
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>()
                .lambda().eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getType,Constants.memberType.internal)
        List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>()
                .selectAll(Member.class)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Company::getType,Constants.ZERO)
                .eq(Member::getStatus,Constants.ZERO)
                .isNotNull(Member::getHkId)
                .apply("to_days(LAST_VISIT_DATE)+ "+days+" < to_days(now())" ));
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -1,7 +1,5 @@
package com.doumee.service.business.impl;
import cn.emay.sdk.util.StringUtil;
import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
@@ -13,11 +11,12 @@
import com.doumee.core.utils.SmsConstants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.join.ApproveJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.ApproveDataVO;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.web.reqeust.ConfirmTaskDTO;
import com.doumee.dao.web.reqeust.PlatformBooksApplyDTO;
import com.doumee.dao.web.reqeust.PlatformBooksCheckNumDTO;
import com.doumee.dao.web.reqeust.RevokeDTO;
@@ -29,7 +28,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.third.EmayService;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.bcel.Const;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformGroupServiceImpl.java
@@ -304,18 +304,6 @@
                platformWorkVO.setCallNum(
                        platformJobs.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),platform.getId())  && Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())).collect(Collectors.toList()).size()
                );
                System.out.printf(String.valueOf(platformJobs.stream().filter(i->
                        Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())
                ).collect(Collectors.toList()).size())
                );
                System.out.printf(String.valueOf(platformJobList.stream().filter(i->
                                Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey()) ||
                                        ( Constants.equalsInteger(platform.getId(),i.getPlatformId()) &&
                                                Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.TRANSFERING.getKey())
                                        )
                        ).collect(Collectors.toList()).size())
                );
                platformWorkVO.setWaitNum(
                        platformJobs.stream().filter(i->
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -18,12 +18,14 @@
import com.doumee.core.tms.model.response.TmsLockStatusQueryResponse;
import com.doumee.core.utils.*;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.join.PlatformJobJoinMapper;
import com.doumee.dao.business.join.PlatformJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.LargeScreenDataVO;
import com.doumee.dao.openapi.request.*;
import com.doumee.dao.openapi.response.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.reqeust.*;
import com.doumee.dao.web.response.DriverHomeVO;
@@ -35,10 +37,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl;
import com.doumee.service.business.impl.thrid.WmsServiceImpl;
import com.doumee.service.business.third.EmayService;
import com.doumee.service.business.third.TmsService;
import com.doumee.service.business.third.WmsService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -418,22 +418,28 @@
    public void queryWaitNum(PlatformJob platformJob){
        if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){
            //查询前方排队数量
            List<PlatformJob> lineUpNum =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda()
            //查询当前所有排队数量
            List<PlatformJob> lineUpAllList =  platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda()
                    .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                    .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()
                            ,Constants.PlatformJobStatus.IN_WAIT.getKey()
                            ,Constants.PlatformJobStatus.TRANSFERING.getKey())
                    .gt(PlatformJob::getSignDate,platformJob.getSignDate())
//                    .lt(PlatformJob::getSignDate,platformJob.getSignDate())
                    .eq(PlatformJob::getPlatformGroupId,platformJob.getPlatformGroupId())
                    .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(platformJob.getArriveDate(),"yyyy-MM-dd")));
            platformJob.setLineUpNum(lineUpNum.size());
            BigDecimal sumWorkRate = platformJob.getTotalNum();
            for (PlatformJob linePlatformJob:lineUpNum) {
//                    .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(platformJob.getArriveDate(),"yyyy-MM-dd"))
            );
            for (PlatformJob linePlatformJob:lineUpAllList) {
                this.getWmsJobData(linePlatformJob);
                sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum());
            }
            if(lineUpNum.size()>Constants.ZERO){
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(lineUpAllList)){
                //查询排队在我前面的数据
                List<PlatformJob> lineUpNum = lineUpAllList.stream().filter(i->Objects.nonNull(i.getSignDate())&&i.getSignDate().getTime()<platformJob.getSignDate().getTime()).collect(Collectors.toList());
                platformJob.setLineUpNum(lineUpNum.size());
                BigDecimal sumWorkRate = platformJob.getTotalNum();
                for (PlatformJob linePlatformJob:lineUpNum) {
                    sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum());
                }
                //计算预计等待时间
                List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda().eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId()));
                BigDecimal workRate = platformList.stream().map(m->m.getWorkRate()).reduce(BigDecimal.ZERO,BigDecimal::add);
@@ -497,7 +503,6 @@
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                .eq(PlatformJob::getDrivierPhone,loginUserInfo.getMobile())
//                .like(PlatformJob::getArriveDate,DateUtil.getCurrDate())
                .orderByDesc(PlatformJob::getId)
        );
        for (PlatformJob platformJob:platformJobList) {
@@ -743,12 +748,12 @@
                            .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                            .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                            .eq(PlatformJob::getPlatformGroupId,platformGroup.getId())
                            .le(Objects.nonNull(platformJob),PlatformJob::getSignDate,DateUtil.dateTypeToString(platformJob.getSignDate(),"yyyy-MM-dd HH:mm:ss"))
                            .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(),
                                    Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                    Constants.PlatformJobStatus.CALLED.getKey())
                            .orderByDesc(PlatformJob::getStatus)
                            .orderByDesc(PlatformJob::getSignDate));
                            .orderByAsc(PlatformJob::getSignDate)
                            .orderByAsc(PlatformJob::getSignNum)
            );
            platformGroup.setSignJobList(platformJobSignInList);
            //查询当前月台组下
            List<PlatformJob> platformJobWorkList = platformJobJoinMapper.selectJoinList(PlatformJob.class,
@@ -1181,7 +1186,8 @@
                SmsConstants.platformJobContent.platformJobMove,oldPlatform.getName(),platform.getName()
        );
        platformJob.setPlatformName(platform.getName());
        platformJob.setPlatformName(oldPlatform.getName());
        platformJob.setPlatformId(oldPlatform.getId());
        this.broadcastAndLEed(platformJob, StringUtils.isBlank(oldPlatform.getLedContent())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getLedContent(),
                null
        );
@@ -1391,8 +1397,6 @@
            //TODO å¤–协车卸货 æˆ–者 å¸‚公司车卸货 åˆ™æ ¹æ®ä»»åŠ¡æƒ…å†µ
        }
        //发送短信信息
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java
@@ -119,10 +119,10 @@
                                    wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getLockStatus()
                            );
                        }
                        wmsJobContractVO.setStatus(
                                wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getStatus()
                        );
                    }
                    wmsJobContractVO.setStatus(
                            wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getStatus()
                    );
                }
                wmsJobContractVOList.add(wmsJobContractVO);
            }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -1,6 +1,7 @@
package com.doumee.service.business.impl;
import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -8,29 +9,27 @@
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.SmsConstants;
import com.doumee.core.utils.Utils;
import com.doumee.core.utils.*;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.SmsEmailService;
import com.doumee.service.business.third.EmayService;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.net.URLEncoder;
import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * çŸ­ä¿¡é‚®ä»¶ä¿¡æ¯è¡¨Service实现
@@ -51,7 +50,7 @@
    @Value("${debug_model}")
    private boolean debugModel;
    public static void isCaptcheValide(SmsEmailMapper smsEmailMapper, String phone, String captche) {
    public static void isCaptcheValide(com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper, String phone, String captche) {
        SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
                .eq(SmsEmail::getType, Constants.ZERO)
                .eq(SmsEmail::getPhone, phone)
@@ -75,6 +74,8 @@
        model.setEditDate(new Date());
        smsEmailMapper.updateById(model);
    }
    @Override
    public Integer create(SmsEmail smsEmail) {
@@ -100,10 +101,11 @@
        String content = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode()+"验证码为:"+code+",此验证码有效为3分钟。请勿泄露";
        boolean result=   emayService.sendSingleSms(smsEmail.getPhone(),content);
        if(!result){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信验证码发送失败,请稍后重试!");
        }
//        boolean result=   emayService.sendSingleSms(smsEmail.getPhone(),content);
        emayService.sendSmsByHk(smsEmail.getPhone(),content);
//        if(!result){
//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信验证码发送失败,请稍后重试!");
//        }
        smsEmail.setRemark(code);
        smsEmail.setIsdeleted(Constants.ZERO);
@@ -265,7 +267,7 @@
     * @param msg
     * @param auditUser
     */
    public static void sendVisitSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
    public static void sendVisitSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                    VisitsMapper visitsMapper, Integer objId, String objCode, String msg, List<String> auditUser){
        try{
            SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
@@ -319,8 +321,8 @@
     * @param msg
     * @param auditUser
     */
    public static void sendVisitReportSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                    VisitsMapper visitsMapper, Integer objId, String objCode, String msg, List<String> auditUser){
    public static void sendVisitReportSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                          VisitsMapper visitsMapper, Integer objId, String objCode, String msg, List<String> auditUser){
        try{
            SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
                    objCode).last(" limit 1 "));
@@ -373,8 +375,8 @@
     * @param objCode
     * @param auditUser
     */
    public static void sendHiddenDangerSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                    HiddenDangerMapper hiddenDangerMapper, Integer objId, String objCode,List<String> auditUser){
    public static void sendHiddenDangerSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                           HiddenDangerMapper hiddenDangerMapper, Integer objId, String objCode, List<String> auditUser){
        try{
            SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
                    objCode).last(" limit 1 "));
@@ -407,8 +409,8 @@
     * @param msg
     * @param userList
     */
    public static void sendCarUseSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                           CarUseBookMapper carUseBookMapper, Integer objId, String objCode, String msg, List<String> userList){
    public static void sendCarUseSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                     CarUseBookMapper carUseBookMapper, Integer objId, String objCode, String msg, List<String> userList){
        //您有一条【用车申请】需要处理,详细信息请前往微信公众号查看。
        try{
            SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
@@ -448,8 +450,8 @@
     * @param msg
     * @param auditUser
     */
    public static void sendPlatformBookSms(SystemDictDataBiz systemDictDataBiz,EmayService emayService ,SmsEmailMapper smsEmailMapper ,SmsConfigMapper smsConfigMapper,
            PlatformBooksMapper platformBooksMapper,Integer objId,String objCode,String msg,List<String> auditUser){
    public static void sendPlatformBookSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                           PlatformBooksMapper platformBooksMapper, Integer objId, String objCode, String msg, List<String> auditUser){
        try{
            SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getCode,
                    objCode).last(" limit 1 "));
@@ -493,8 +495,8 @@
     * @param objCode
     * @param platformName
     */
    public static void sendPlatformJobSms(SystemDictDataBiz systemDictDataBiz,EmayService emayService , SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                          PlatformJobMapper platformJobMapper, Integer objId, String objCode, String platformName,String newPlatformName){
    public static void sendPlatformJobSms(SystemDictDataBiz systemDictDataBiz, EmayService emayService , com.doumee.dao.business.dao.SmsEmailMapper smsEmailMapper , SmsConfigMapper smsConfigMapper,
                                          PlatformJobMapper platformJobMapper, Integer objId, String objCode, String platformName, String newPlatformName){
        //platformJobNewJob    {车牌号}车主您好,您有一个新的运输任务,详细信息请前往微信公众号查看。
        //platformJobStopJob    {车牌号}车主您好,您的运输任务已被取消,详细信息请前往微信公众号查看。
        //platformJobCallIn    {车牌号}车主您好,请在10分钟内,前往园区等待区等待叫号作业。
@@ -542,7 +544,8 @@
            smsEmail.setObjType(objType);
            smsEmail.setObjId(objId);
            smsEmailMapper.insert(smsEmail);
            emayService.sendSingleSms(phone,content);
            emayService.sendSmsByHk(phone,content);
        }
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -12,12 +12,10 @@
import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.BaseListPageResponse;
import com.doumee.core.haikang.model.param.BaseResponse;
import com.doumee.core.haikang.model.param.request.FacePictureCheckRequest;
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.AscDeviceStatusInfoResponse;
import com.doumee.core.haikang.model.param.respose.FacePictureCheckResponse;
import com.doumee.core.haikang.model.param.respose.VisitAppointmentResponse;
import com.doumee.core.haikang.service.HKService;
@@ -30,12 +28,13 @@
import com.doumee.dao.admin.response.PCWorkPlatformDataVO;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.dto.ResetPasswordDTO;
import com.doumee.dao.business.join.DeviceJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.dto.NoticesDTO;
import com.doumee.dao.system.dto.ResetSystemUserPwdDTO;
import com.doumee.dao.system.join.NoticesJoinMapper;
import com.doumee.dao.system.model.Notices;
@@ -58,23 +57,13 @@
import com.doumee.service.business.third.EmayService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.Date;
import java.util.stream.Collectors;
@@ -1551,7 +1540,7 @@
            //今日在园人数
            pcWorkPlatformDataVO.setTodayInParkUserNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)).count()
                    retentionList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.THREE)).count()
            );
            pcWorkPlatformDataVO.setTodayInUserNum(Constants.ZERO);
@@ -1567,7 +1556,7 @@
            //在园访客数量
            pcWorkPlatformDataVO.setInParkVisitUserNum(
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO)&&Objects.isNull(i.getCompanyType())).count()
                    retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&Objects.isNull(i.getCompanyType())).count()
            );
            pcWorkPlatformDataVO.setVisitUserNum(Constants.ZERO);
            pcWorkPlatformDataVO.setSignLevelNum(Constants.ZERO);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPlatformsServiceImpl.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
@@ -20,14 +21,15 @@
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformDevice;
import com.doumee.dao.business.model.PlatformJob;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * è®¾å¤‡ä¿¡æ¯è¡¨Service实现
@@ -42,6 +44,10 @@
    private PlatformJobMapper platformJobMapper;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Autowired
    @Lazy
    private SystemDictDataBiz systemDictDataBiz;
    /**
     * åŒæ­¥æµ·åº·æœˆå°æ•°æ®
@@ -276,4 +282,46 @@
        return  true;
    }
    public  List<Integer> getMenuConfig(String userId){
        try {
            List<Integer> resultList= new ArrayList<>();
            Map<String,String> param = new HashMap<>();
            param.put("userId",userId);
            BaseResponse<MenuDataResponse> result = HKService.getMenuConfig(param);
            if(result !=null){
                if(!StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),result.getMsg());
                }
                MenuDataResponse menuDataResponse = result.getData();
                List<String> list = menuDataResponse.getList();
                if(CollectionUtils.isNotEmpty(list)){
                    //分别判断4个菜单
                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.afzx)).collect(Collectors.toList()).size()>Constants.ZERO){
                        resultList.add(0);
                    }
                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.xkzx)).collect(Collectors.toList()).size()>Constants.ZERO){
                        resultList.add(1);
                    }
                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.ngzx)).collect(Collectors.toList()).size()>Constants.ZERO){
                        resultList.add(2);
                    }
                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.jsc)).collect(Collectors.toList()).size()>Constants.ZERO){
                        resultList.add(3);
                    }
                    if(list.stream().filter(i->i.equals("Infovision iPark Platform_"+HKConstants.MenuPageId.kqgzt)).collect(Collectors.toList()).size()>Constants.ZERO){
                        resultList.add(4);
                    }
                }
                return resultList;
            }else{
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取菜单失败!");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取菜单失败,请稍后重试!");
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -27,6 +27,12 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -34,6 +40,7 @@
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -88,6 +95,13 @@
    private PlatformLogMapper platformLogMapper;
    @Autowired
    private PlatformWarnEventServiceImpl platformWarnEventService;
    /**
     * æµ·åº·é—¨ç¦äº‹ä»¶æŽ¨é€
     * @param param
@@ -840,10 +854,8 @@
                                    Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                    Constants.PlatformJobStatus.CALLED.getKey(),
                                    Constants.PlatformJobStatus.WORKING.getKey(),
                                    Constants.PlatformJobStatus.DONE.getKey(),
                                    Constants.PlatformJobStatus.TRANSFERING.getKey(),
                                    Constants.PlatformJobStatus.EXCEPTION.getKey(),
                                    Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                    Constants.PlatformJobStatus.EXCEPTION.getKey()
                            )
                    )==Constants.ZERO){
                        PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda()
@@ -1263,12 +1275,12 @@
            if(StringUtils.isBlank(device.getHkId())){
                continue;
            }
            if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
            /*if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
                //如果是LED
                PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1);
                logList.add(log);
                ledList.add(device.getHkId());
            }else  if(Constants.equalsInteger(device.getType(),Constants.TWO)){
            }else  */if(Constants.equalsInteger(device.getType(),Constants.TWO)){
                //如果是广播点
                bNames += device.getName()+";";
                broadcastList.add(device.getHkId());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/WmsServiceImpl.java
@@ -13,11 +13,14 @@
import com.doumee.core.wms.model.response.WmsBaseResponse;
import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.SmsEmailMapper;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.impl.SmsEmailServiceImpl;
import com.doumee.service.business.third.EmayService;
import com.doumee.service.business.third.WmsService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -85,10 +88,22 @@
        }
        WmsOrderPlatformRequest  param  = new WmsOrderPlatformRequest();
         param.setData(new ArrayList<>());
         WmsOrderPlatformInfoRequest o = new WmsOrderPlatformInfoRequest();
         o.setCarrierBillCode(job.getBillCode());
         o.setRailwayNo(job.getPlatformWmsCode());
         param.getData().add(o);
        List<PlatformWmsDetail> platformWmsDetailList = platformWmsDetailMapper.selectList(new QueryWrapper<PlatformWmsDetail>().lambda()
                .eq(PlatformWmsDetail::getJobId,job.getId())
                .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsDetailList)){
            for (PlatformWmsDetail platformWmsDetail:platformWmsDetailList) {
                if(StringUtils.isNotBlank(platformWmsDetail.getIocode())){
                    WmsOrderPlatformInfoRequest o = new WmsOrderPlatformInfoRequest();
                    o.setCarrierBillCode(platformWmsDetail.getIocode());
                    o.setRailwayNo(job.getPlatformWmsCode());
                    param.getData().add(o);
                }
            }
        }
         String url = type == 0?systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_INBOUND_PLATFROM_URL).getCode():
                 systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_OUTBOUND_PLATFROM_URL).getCode();;
         String name = type ==0?"【WMS】入库作业单分配月台":"【WMS】出库作业的分配月台";
@@ -503,6 +518,35 @@
                    .set(PlatformWmsDetail::getStatus,Constants.TWO)
                    .in(PlatformWmsDetail::getIocode,iocodeList)
                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO));
            platformWmsJobMapper.update(null,new UpdateWrapper<PlatformWmsJob>().lambda()
                    .set(PlatformWmsJob::getStatus,Constants.TWO)
                    .in(PlatformWmsJob::getIocode,iocodeList)
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO));
            List<PlatformWmsJob> platformWmsJob = platformWmsJobMapper.selectList(new QueryWrapper<PlatformWmsJob>().lambda()
                    .in(PlatformWmsJob::getIocode,iocodeList)
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO)
            );
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsJob)){
                List<Integer> jobIds = platformWmsJob.stream().filter(i->Objects.nonNull(i.getJobId())).map(i->i.getJobId()).collect(Collectors.toList());
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIds)){
                    Set<Integer> setJobIds = new HashSet<>(jobIds);
                    platformJobMapper.update(null,new UpdateWrapper<PlatformJob>()
                            .lambda()
                            .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                            .in(PlatformJob::getId,setJobIds)
                    );
                    for (Integer jobId:setJobIds
                    ) {
                        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz,
                                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId,
                                SmsConstants.platformJobContent.platformJobStopJob,null,null
                        );
                    }
                }
            }
        }catch (Exception e){
            log.error("【WMS】处理入库取消通知业务===============业务处理异常"+e.getMessage());
            return returnFailReuslt("业务处理异常");
@@ -534,6 +578,36 @@
                    .set(PlatformWmsDetail::getStatus,Constants.TWO)
                    .in(PlatformWmsDetail::getIocode,iocodeList)
                    .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO));
            platformWmsJobMapper.update(null,new UpdateWrapper<PlatformWmsJob>().lambda()
                    .set(PlatformWmsJob::getStatus,Constants.TWO)
                    .in(PlatformWmsJob::getIocode,iocodeList)
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO));
            List<PlatformWmsJob> platformWmsJob = platformWmsJobMapper.selectList(new QueryWrapper<PlatformWmsJob>().lambda()
                    .in(PlatformWmsJob::getIocode,iocodeList)
                    .eq(PlatformWmsJob::getIsdeleted, Constants.ZERO)
            );
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(platformWmsJob)){
                List<Integer> jobIds = platformWmsJob.stream().filter(i->Objects.nonNull(i.getJobId())).map(i->i.getJobId()).collect(Collectors.toList());
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(jobIds)){
                    Set<Integer> setJobIds = new HashSet<>(jobIds);
                    platformJobMapper.update(null,new UpdateWrapper<PlatformJob>()
                            .lambda()
                            .set(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey())
                            .in(PlatformJob::getId,setJobIds)
                    );
                    for (Integer jobId:setJobIds
                         ) {
                        SmsEmailServiceImpl.sendPlatformJobSms(systemDictDataBiz,
                                emayService,smsEmailMapper,smsConfigMapper,platformJobMapper,jobId,
                                SmsConstants.platformJobContent.platformJobStopJob,null,null
                        );
                    }
                }
            }
        }catch (Exception e){
            log.error("【WMS】出库取消通知任务业务处理===============业务处理异常"+e.getMessage());
            return returnFailReuslt("业务处理异常");
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/third/EmayService.java
@@ -6,15 +6,23 @@
import cn.emay.sdk.core.dto.sms.response.SmsResponse;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
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.service.HKService;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.InterfaceLog;
import com.doumee.service.business.InterfaceLogService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class EmayService {
@@ -89,4 +97,28 @@
    }
    public  void sendSmsByHk(String phone,String content){
        try {
            String url = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HTTPS).getCode() +
                    systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_HOST).getCode() +
                    HKConstants.ARTEMIS_PATH +
                    HKConstants.InterfacePath.sendSms[0];
            Map<String,Object> map = new HashMap<>();
            map.put("phoneNo",phone.split(","));
            map.put("content",content);
            BaseResponse result = HKService.sendSmsByHk(map,url);
            if(result !=null){
                if(!StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),result.getMsg());
                }
            }else{
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信发送失败,请稍后重试!");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信发送失败,请稍后重试!");
    }
}