jiangping
2025-01-17 1465eb9dc666715143d75a6ffcac4312f923e947
最新版本541200007
已添加3个文件
已修改16个文件
455 ■■■■ 文件已修改
admin/src/api/business/retentionCars.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/retentionCars.vue 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/components/OperaRoomsWindow.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/meeting/rooms.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/.hbuilderx/launch.json 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/manifest.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/package-lock.json 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/pages/index/index.vue 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/service/business/third/model/response/TmsOutQtyAndVehicleQtyResponse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/RetentionCloudController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/RetentionCarsVO.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/RetentionService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/retentionCars.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/visitsAdmin/cloudService/business/retention/pageCars', data, {
    trim: true
  })
}
// å¯¼å‡ºExcel
export function exportExcel (data) {
  return request.post('/visitsAdmin/cloudService/business/retention/exportExcelCars', data, {
    trim: true,
    download: true
  })
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/retention/delete/${id}`)
}
admin/src/views/business/retentionCars.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
<template>
  <TableLayout :permissions="['business:retention:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="车牌号" prop="carNo">
        <el-input v-model="searchForm.carNo" placeholder="请输入车牌号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="姓名/手机号" prop="keyWords">
        <el-input v-model="searchForm.keyWords" placeholder="请输入姓名/手机号" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="组织" prop="companyName">
        <el-input v-model="searchForm.companyName" placeholder="请输入组织名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="车辆类型" prop="carType">
        <el-select v-model="searchForm.carType" placeholder="请选择">
          <el-option label="内部车辆" value="0"></el-option>
          <el-option label="相关方车辆" value="1"></el-option>
          <el-option label="访客车辆" value="2"></el-option>
          <el-option label="内运物流车" value="3"></el-option>
          <el-option label="外协车辆" value="4"></el-option>
          <el-option label="市公司卸货车" value="5"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="起止时间" prop="startTime">
        <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
          value-format="yyyy-MM-dd HH:mm:ss" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间">
        </el-date-picker>
      </el-form-item>
      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
        <el-radio-button label="0">当天</el-radio-button>
        <el-radio-button label="1">近7天</el-radio-button>
        <el-radio-button label="2">近30天</el-radio-button>
      </el-radio-group>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:retention:exportExcel']">
        <li>
          <el-button type="primary" :loading="isWorking.export" v-permissions="['business:retention:exportExcel']"
            @click="exportExcel">导出</el-button>
        </li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="createDate" label="进场时间" min-width="150px"></el-table-column>
        <el-table-column prop="carNo" label="车牌号" min-width="100px"></el-table-column>
        <el-table-column prop="companyName" label="组织" min-width="250px">
          <template slot-scope="{ row }">
            <span>{{row.companyName || row.visitCompanyName || '' }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="carType" label="车辆类型" min-width="100px">
          <template slot-scope="{ row }">
            <span v-if="row.carType == 0">内部车辆</span>
            <span v-else-if="row.carType == 1">相关方车辆</span>
            <span v-else-if="row.carType == 2">访客车辆</span>
            <span v-else-if="row.carType == 3">内运物流车</span>
            <span v-else-if="row.carType == 4">外协车辆</span>
            <span v-else-if="row.carType == 5">市公司卸货车</span>
          </template>
        </el-table-column>
        <el-table-column prop="name" label="姓名" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
<!--        <el-table-column label="进场门禁" min-width="100px">
          <template slot-scope="{ row }">
            &lt;!&ndash; <span v-if="row.type === 1">-</span> &ndash;&gt;
            <span>{{ row.deviceName || '-' }}</span>
          </template>
        </el-table-column>-->
        <el-table-column label="操作" min-width="120" fixed="right">
          <template slot-scope="{ row }">
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
              v-permissions="['business:retention:delete']">标记离场</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
      </pagination>
    </template>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import { timeForMat } from '@/utils/util'
export default {
  name: 'Retention',
  extends: BaseTable,
  components: { TableLayout, Pagination },
  data() {
    return {
      // æœç´¢
      searchForm: {
        carNo: '',
        carType: '',
        keyWords: '',
        startTime: '',
        endTime: '',
        radio: 0
      },
      time: []
    }
  },
  created() {
    this.config({
      module: '在园人员信息 è¡¨ï¼ˆæ»žç•™ï¼‰',
      api: '/business/retentionCars',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.changeRadio('0')
  },
  methods: {
    changeRadio(e) {
      if (e === '0') {
        this.searchForm.startTime = timeForMat(0)[0]
        this.searchForm.endTime = timeForMat(0)[1]
        this.time = timeForMat(0)
      } else if (e === '1') {
        this.searchForm.startTime = timeForMat(6)[0]
        this.searchForm.endTime = timeForMat(6)[1]
        this.time = timeForMat(6)
      } else if (e === '2') {
        this.searchForm.startTime = timeForMat(29)[0]
        this.searchForm.endTime = timeForMat(29)[1]
        this.time = timeForMat(29)
      }
      this.search()
    },
    reset() {
      this.$refs.searchForm.resetFields()
      this.searchForm.startTime = ''
      this.searchForm.radio = '0'
      this.searchForm.endTime = ''
      this.time = []
      this.search()
    },
    seleTime(e) {
      if(e && e.length >2){
        this.searchForm.startTime = e[0]
        this.searchForm.endTime = e[1]
        this.searchForm.radio = null
      }
    }
  }
}
</script>
admin/src/views/meeting/components/OperaRoomsWindow.vue
@@ -16,10 +16,10 @@
        <el-input v-model="form.limitNum" type="number" placeholder="请输入容纳人数" v-trim />
      </el-form-item>
      <el-form-item label="管理员" prop="sysList">
        <el-select v-model="form.sysList" filterable multiple clearable placeholder="请选择部门">
        <el-select style="width: 100%" v-model="form.sysList" filterable multiple clearable placeholder="请选择部门">
          <!-- :label="`${item.department.name}-${item.realname}`" -->
          <el-option v-for="item in userList()" :key="item.id" :value="item.id"
            :label="item.companyId ? `${item.companyName}-${item.companyName}` : item.realname" />
            :label="item.companyId ? `${item.realname}-${item.companyName}` : item.realname" />
        </el-select>
      </el-form-item>
      <el-form-item label="提供服务项目" prop="projectList">
@@ -373,4 +373,4 @@
  max-height: 90px;
  display: block;
}
</style>
</style>
admin/src/views/meeting/rooms.vue
@@ -18,7 +18,7 @@
            v-for="item in userList"
            :key="item.id"
            :value="item.id"
            :label="item.companyId?`${item.companyName}-${item.companyName}`:item.realname"
            :label="item.companyId?`${item.realname}-${item.companyName}`:item.realname"
            ></el-option>
            <!-- :label="`${item.department.name}-${item.realname}`" -->
          <!-- <el-option :key="1" :value="1" label="禁用" /> -->
@@ -125,7 +125,7 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaRoomsWindow from '@/views/meeting/components/OperaRoomsWindow'
import { fetchList as userList } from '@/api/system/user'
import { findAllList as userList } from '@/api/system/user'
// import selectMember from '@/components/meeting/selectMember'
import { updateStatusById } from '@/api/meeting/rooms'
export default {
@@ -168,14 +168,9 @@
      'field.id': 'id',
      'field.main': 'id'
    })
    userList({
      page: 1,
      capacity: 9999,
      memberType: 2,
      model: { realname: this.filterText }
    })
    userList({ queryParam: this.filterText ,workStatus:0,type:2} )
      .then(res => {
        this.userList = res.records
        this.userList = res
      })
    this.search()
  },
h5_meeting/.hbuilderx/launch.json
@@ -5,12 +5,15 @@
            "openVueDevtools" : false,
            "type" : "uni-app:h5"
        },
    {
        "app-plus" :
        {
            "launchtype" : "local"
        },
        "type" : "uniCloud"
    }
        {
            "app-plus" : {
                "launchtype" : "local"
            },
            "type" : "uniCloud"
        },
        {
            "playground" : "standard",
            "type" : "uni-app:app-android"
        }
    ]
}
h5_meeting/manifest.json
@@ -1,6 +1,6 @@
{
    "name" : "安泰会议室",
    "appid" : "__UNI__EF8BAA7",
    "appid" : "__UNI__C77DAC4",
    "description" : "",
    "versionName" : "1.0.0",
    "versionCode" : "100",
@@ -96,9 +96,10 @@
            "disableHostCheck" : true,
            "proxy" : {
                "/gateway_interface" : {
                    // "target" : "http://10.50.250.253:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "http://10.50.250.253:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "http://192.168.0.173/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "https://atwl.ahzyssl.com/zhyq_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target" : "https://atwl.ahzyssl.com/zhyq_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin" : true, // å…è®¸è·¨åŸŸ 
                    "pathRewrite" : {
                        "^/gateway_interface" : ""
h5_meeting/package-lock.json
@@ -4,9 +4,14 @@
  "dependencies": {
    "dayjs": {
      "version": "1.11.13",
      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
    },
    "qrcodejs": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/qrcodejs/-/qrcodejs-1.0.0.tgz",
      "integrity": "sha512-67rj3mMBhSBepaD57qENnltO+r8rSYlqM7HGThks/BiyDAkc86sLvkKqjkqPS5v13f7tvnt6dbEf3qt7zq+BCg=="
    },
    "uqrcodejs": {
      "version": "4.0.7",
      "resolved": "https://registry.npmjs.org/uqrcodejs/-/uqrcodejs-4.0.7.tgz",
h5_meeting/package.json
@@ -1,6 +1,7 @@
{
  "dependencies": {
    "dayjs": "^1.11.13",
    "qrcodejs": "^1.0.0",
    "uqrcodejs": "^4.0.7"
  }
}
h5_meeting/pages/index/index.vue
@@ -21,7 +21,7 @@
            <text
                v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">已撤销</text>
        </view>
        <view v-if="meetingInfo.meetingName" class="meeting_name">{{meetingInfo.meetingName}}</view>
        <view v-if="meetingInfo.meetingName" class="meeting_name_box"><view  class="meeting_name">{{meetingInfo.meetingName}}</view></view>
        <view class="">
            <view v-if="meetingInfo.meetingTime && meetingInfo.bookingUser" class="meeting_con">
                <view class="content">
@@ -57,7 +57,9 @@
            </view>
            <view class="list">
                <view class="item" v-for="item in info.meetingListResponseList">
                    <view class="name">{{item.meetingName}}</view>
                    <view class="nameBox">
                        <view  class="name">{{item.meetingName}}</view>
                    </view>
                    <view class="line">预约人:{{item.bookingUser}}</view>
                    <view class="line">{{item.meetingTime}}({{statusMap[item.meetingStatus]}})</view>
                    <image src="@/static/ic_meeting@2x.png" class="item_bg"></image>
@@ -148,6 +150,9 @@
                    roomId: this.param.code
                }).then(res => {
                    this.info = res.data
                /*     if(this.info.title && this.info.title.length>0){
                        this.info.title = this.info.title.slice(0,20)+"..."
                    } */
                    if (this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0) {
                        this.meetingInfo = this.info.meetingListResponseList[0]
                        this.$nextTick(() => {
@@ -171,7 +176,7 @@
                    qr.data =
                        "https://atwl.ahzyssl.com/zhyq_h5/#/pages/login/login/?type=2&yw=1&ywid=" + this.meetingInfo.id
                    // è®¾ç½®äºŒç»´ç å¤§å°ï¼Œå¿…须与canvas设置的宽高一致
                    qr.size = 104;
                    qr.size = this.rpxToPx(208);
                    // è°ƒç”¨åˆ¶ä½œäºŒç»´ç æ–¹æ³•
                    qr.make();
                    // èŽ·å–canvas上下文
@@ -195,6 +200,17 @@
                    }
                    this.touchNum = 0
                }, 250)
            },
            //rpx转px
            rpxToPx(rpx) {
                const screenWidth = uni.getSystemInfoSync().screenWidth
                    return (screenWidth * Number.parseInt(rpx)) / 750
            },
            //px转rpx
            pxToRpx(px) {
                const screenWidth = uni.getSystemInfoSync().screenWidth
                return (750 * Number.parseInt(px)) / screenWidth
            },
            initDatetime() {
                let weeks = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
@@ -263,8 +279,10 @@
        .meeting_wrap {
            margin-left: 42rpx;
            // margin-top: 60rpx;
            // margin-top: 60rpx;
            .titleBox{
                height: 124rpx;
            }
            .title {
                font-weight: 500;
                font-size: 42rpx;
@@ -309,17 +327,23 @@
                        bottom: 0;
                        // z-index: -1;
                    }
                    .name {
                        flex: 1;
                        font-weight: bold;
                        font-size: 39rpx;
                    .nameBox{
                        flex: 1;
                        width: 100%;
                    }
                    .name {
                        font-weight: bold;
                        line-height: 40rpx;
                        max-height: 120rpx;
                        font-size: 39rpx;
                        word-break: break-all;
                        text-overflow: ellipsis;
                        display: -webkit-box;
                        -webkit-box-orient: vertical;
                        -webkit-line-clamp: 3;
                        -webkit-line-clamp: 3;
                        overflow: hidden;
                         white-space: normal; /* ä¿è¯æ–‡æœ¬æ­£å¸¸æ¢è¡Œ */
                        /* è¶…出几行省略 */
                    }
@@ -360,16 +384,16 @@
            .qrcode_wrap {
                width: 110px;
                height: 110px;
                width: 208rpx;
                height: 208rpx;
                display: flex;
                align-items: center;
                justify-content: center;
                background-color: #fff;
                .qrcode {
                    width: 104px;
                    height: 104px;
                    width: 200rpx;
                    height: 200rpx;
                }
            }
@@ -380,22 +404,33 @@
            display: flex;
            justify-content: flex-end;
            color: rgba(255, 255, 255, 0.6);
            padding-right: 64rpx;
            padding-right: 65rpx;
            margin-top: 18rpx;
            .text {
                width: 110px;
                text-align: center;
                font-size: 22rpx;
                width: 200rpx;
                text-align: right;
                padding-right: 8rpx;
                font-size: 21rpx;
                // transform: scale(.84);
            }
        }
        .meeting_name_box {
            // max-height: 150rpx;
        }
        .meeting_name {
            margin-bottom: 12rpx;
            font-weight: bold;
            font-size: 49rpx;
            // height: 150rpx;
            padding-left: 42rpx;
            padding-right: 64rpx;
            word-break: break-all;
            text-overflow: ellipsis;
            display: -webkit-box;
            -webkit-box-orient: vertical;
            -webkit-line-clamp: 2;
            overflow: hidden;
             white-space: normal; /* ä¿è¯æ–‡æœ¬æ­£å¸¸æ¢è¡Œ */
        }
        .home_status {
h5_meeting/utils/config.js
@@ -1,7 +1,7 @@
// export const baseUrl = 'gateway_interface/'
// export const baseUrl = 'http://192.168.5.13/gateway_interface/'
export const baseUrl = 'http://192.168.0.173/gateway_interface/'
export const baseUrl = 'http://192.168.5.13/gateway_interface/'
// export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
// export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/'
export const statusMap = {
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
@@ -383,6 +383,8 @@
        roomsMapper.update(rooms, Wrappers.<Rooms>lambdaUpdate()
                .set(Rooms::getFileType, rooms.getFileType())
//                .set(Rooms::getEndTime, rooms.getEndTime())
//                .set(Rooms::getStartTime, rooms.getStartTime())
                .set(Rooms::getLimitNum, rooms.getLimitNum())
                .set(Rooms::getTips, rooms.getTips())
                .set(Rooms::getImgurl, rooms.getImgurl())
server/system_service/src/main/java/com/doumee/service/business/third/model/response/TmsOutQtyAndVehicleQtyResponse.java
@@ -16,7 +16,7 @@
public class TmsOutQtyAndVehicleQtyResponse {
    @ApiModelProperty(value = "累计出库量 ç´¯è®¡å€¼")
    private BigDecimal totalOutQty;//数字    ç´¯è®¡å‡ºåº“量(totalOutT01Qty+totalOutT03Qty)
    private BigDecimal totalOutQty;//数字
    @ApiModelProperty(value = "省外累计出库量  ç´¯è®¡å€¼")
    private BigDecimal outSideProvinceOutQty;//    æ•°å­—    çœå¤–累计出库量
    @ApiModelProperty(value = "省内累计出库量  ç´¯è®¡å€¼")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/RetentionCloudController.java
@@ -4,6 +4,7 @@
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.dao.business.vo.RetentionCarsVO;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -73,7 +74,19 @@
    public ApiResponse<PageData<Retention>> findPage (@RequestBody PageWrap<Retention> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(retentionService.findTrainTimePage(pageWrap));
    }
    @ApiOperation("分页查询")
    @PostMapping("/pageCars")
    @CloudRequiredPermission("business:retention:query")
    public ApiResponse<PageData<RetentionCarsVO>> findPageForCars (@RequestBody PageWrap<RetentionCarsVO> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(retentionService.findPageForCars(pageWrap));
    }
    @ApiOperation("导出车辆Excel")
    @PostMapping("/exportExcelCars")
    @CloudRequiredPermission("business:retention:exportExcel")
    public void exportExcelCars (@RequestBody PageWrap<RetentionCarsVO> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        ExcelExporter.build(RetentionCarsVO.class).export(retentionService.findPageForCars(pageWrap).getRecords(), "实时在场车辆", response);
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:retention:exportExcel")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/RetentionCarsVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.doumee.dao.business.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.service.business.third.model.LoginUserModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * åœ¨åŽ‚äººå‘˜ä¿¡æ¯ è¡¨ï¼ˆæ»žç•™ï¼‰
 * @author æ±Ÿè¹„蹄
 * @date 2023/11/30 15:33
 */
@Data
@ApiModel("在厂人员信息 è¡¨ï¼ˆè½¦è¾†ï¼‰")
public class RetentionCarsVO extends LoginUserModel {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "进场时间")
    @ExcelColumn(name="进场时间" ,index = 1,width = 12,dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "车牌号 ")
    @ExcelColumn(name="车牌号" ,index = 2,width = 8)
    private String carNo;
    @ApiModelProperty(value = "访客ID(关联member)")
    private Integer memberId;
    @ApiModelProperty(value = "车辆类型 0内部车辆 1相关方车辆 2访客车辆 3内运物流车 4外协车辆 5市公司卸货车 ")
    @ExcelColumn(name="车辆类型" ,index = 3, valueMapping="0=内部车辆;1=相关方车辆;2=访客车辆;3=内运物流车;4=外协车辆;5=市公司卸货车;",width = 8)
    private Integer carType  ;
    @ApiModelProperty(value = "公司组织")
    @ExcelColumn(name="公司组织" ,index = 4,width = 12)
    public String companyName;
    @ApiModelProperty(value = "人员姓名")
    @ExcelColumn(name="人员姓名" ,index = 5,width = 8)
    public String name;
    @ApiModelProperty(value = "人员手机号")
    @ExcelColumn(name="人员手机号" ,index = 6,width = 12)
    public String phone;
    @ApiModelProperty(value = "海康门禁名称")
//    @ExcelColumn(name="进厂门禁" ,index = 7,width = 12)
    private String deviceName;
    @ApiModelProperty(value = "姓名/手机号")
    private String keyWords;
    @ApiModelProperty(value = "开始时间")
    private Date startTime;
    @ApiModelProperty(value = "结束时间")
    private Date endTime;
    @ApiModelProperty(value = "访客公司名称")
    private String visitCompanyName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/RetentionService.java
@@ -1,5 +1,6 @@
package com.doumee.service.business;
import com.doumee.dao.business.vo.RetentionCarsVO;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.model.Retention;
@@ -111,4 +112,6 @@
     * @return PageData<RetentionVo>
     */
    List<RetentionVo> findPageExcel(PageWrap<Retention> pageWrap);
    PageData<RetentionCarsVO> findPageForCars(PageWrap<RetentionCarsVO> pageWrap);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
@@ -3,6 +3,7 @@
import cn.hutool.core.lang.PatternPool;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ReUtil;
import com.doumee.dao.business.vo.RetentionCarsVO;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Constants;
@@ -216,6 +217,44 @@
        }
        return PageData.from(retentionIPage);
    }
    @Override
    public PageData<RetentionCarsVO> findPageForCars(PageWrap<RetentionCarsVO> pageWrap) {
        IPage<RetentionCarsVO> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Retention> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.select(Retention::getId,Retention::getCarNo,Retention::getCreateDate,Retention::getCarType,Retention::getType)
                .leftJoin(Member.class,Member::getId,Retention::getMemberId)
                .leftJoin(Member.class,Member::getId,Retention::getMemberId)
                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .selectAs(Company::getCompanyNamePath,Retention::getCompanyName)
                .selectAs(Member::getName,Retention::getName)
                .selectAs(Member::getPhone,Retention::getPhone)
                .selectAs(Member::getVisitCompanyName,Retention::getVisitCompanyName)
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),w->{
                    w.like( Retention::getPhone,pageWrap.getModel().getKeyWords())
                            .or().like( Retention::getName,pageWrap.getModel().getKeyWords()); })
                .eq(Retention::getType,3)
                .eq(Retention::getIsdeleted,Constants.ZERO)
                .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
                        p-> p.like(Company::getName, pageWrap.getModel().getCompanyName())
                                .or().like(Member::getVisitCompanyName, pageWrap.getModel().getCompanyName()))
                .eq(Objects.nonNull(pageWrap.getModel().getCarType()),
                        Retention::getCarType,pageWrap.getModel().getCarType())
                .like(Objects.nonNull(pageWrap.getModel().getCarNo()),
                        Retention::getCarNo,pageWrap.getModel().getCarNo())
                .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
                        Retention::getCreateDate,pageWrap.getModel().getStartTime())
                .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
                        Retention::getCreateDate,pageWrap.getModel().getEndTime());
        queryWrapper.orderByDesc(Retention::getCreateDate);
        IPage<RetentionCarsVO> retentionIPage = retentionJoinMapper.selectJoinPage(page, RetentionCarsVO.class, queryWrapper);
        if(retentionIPage!=null && retentionIPage.getRecords()!=null){
            for(RetentionCarsVO model : retentionIPage.getRecords()){
                model.setCompanyName(StringUtils.defaultString(model.getCompanyName(),model.getVisitCompanyName()));
            }
        }
        return PageData.from(retentionIPage);
    }
    @Override
@@ -250,11 +289,11 @@
    private  IPage<Retention> getDataInfo(PageWrap<Retention> pageWrap) {
        //是否是数字
        boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
        //是否包含中文
        boolean b = Validator.hasChinese(pageWrap.getModel().getKeyWords());
        //是否包含英文
        boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords());
//        boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
//        //是否包含中文
//        boolean b = Validator.hasChinese(pageWrap.getModel().getKeyWords());
//        //是否包含英文
//        boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords());
        IPage<Retention> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Retention> queryWrapper = new MPJLambdaWrapper<>();
@@ -265,8 +304,9 @@
                .selectAs(Company::getType,Retention::getCompanyType)
                .select(" ( SELECT v.company_name FROM visits v WHERE v.member_id = t.member_id and v.status = "+Constants.VisitStatus.signin+" ORDER BY create_date DESC limit 1 ) as visitCompanyName ");
        queryWrapper.eq(Retention::getIsdeleted,Constants.ZERO)
                .like(number,Retention::getPhone,pageWrap.getModel().getKeyWords())
                .like((b||hasWord),Retention::getName,pageWrap.getModel().getKeyWords())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),w->{
                    w.like( Retention::getPhone,pageWrap.getModel().getKeyWords())
                            .or().like( Retention::getName,pageWrap.getModel().getKeyWords()); })
                .eq(Objects.nonNull(pageWrap.getModel().getType()),
                        Retention::getType,
                        pageWrap.getModel().getType())
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -316,7 +316,7 @@
        List<SmsEmail> smsEmails = smsEmailMapper.selectList(wrapper);
        if(smsEmails!=null && smsEmails.size()>0){
            for(SmsEmail model : smsEmails){
                if(Constants.equalsInteger(model.getType(),Constants.ONE)){
                if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
                    if(model.getPhone() == null){
                        model.setStatus(Constants.THREE);//发送失败
                        model.setRemark("手机号为空,取消任务发送!");
@@ -348,7 +348,6 @@
            }
        }
    }
    /**
     * è®¿å®¢ç”³è¯·ä¸šåŠ¡çŸ­ä¿¡é€šçŸ¥
     * @param systemDictDataBiz
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -1722,10 +1722,12 @@
                );
                for (Company company:companyList) {
                    Integer count = retentionList.stream().filter(i->Constants.equalsInteger(i.getCompanyId(),company.getId())).collect(Collectors.toList()).size();
                    InterestedListVO lw = new InterestedListVO();
                    lw.setNum(count);
                    lw.setName(company.getName());
                    lwList.add(lw);
                    if(count>0){
                        InterestedListVO lw = new InterestedListVO();
                        lw.setNum(count);
                        lw.setName(company.getName());
                        lwList.add(lw);
                    }
                }
            }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -2448,8 +2448,10 @@
                data.setCurrentOutNum(data.getCurrentOutNum().add(Constants.formatBigdecimal(model.getOutSideProvinceOutQty())));
                data.setCurrentInNum(data.getCurrentInNum().add(Constants.formatBigdecimal(model.getInSideProvinceOutQty())));
                data.setTotalCarNum(data.getTotalCarNum()+Constants.formatIntegerNum(model.getVehicleQty()));//累计车次
                data.setCurrentProvinceNum(data.getCurrentProvinceNum().add(model.getOutSideProvinceOutQty()).add(model.getInSideProvinceOutT01Qty()));//省内省外销售量
                data.setCurrentOtherNum(data.getCurrentOtherNum().add(model.getOutSideProvinceOutT03Qty()).add(model.getInSideProvinceOutT03Qty()));//省内省外其他出库量
                data.setCurrentProvinceNum(data.getCurrentProvinceNum().add(Constants.formatBigdecimal(model.getOutSideProvinceOutQty()))
                        .add(Constants.formatBigdecimal(model.getInSideProvinceOutT01Qty())));//省内省外销售量
                data.setCurrentOtherNum(data.getCurrentOtherNum().add(Constants.formatBigdecimal(model.getOutSideProvinceOutT03Qty()))
                        .add(Constants.formatBigdecimal(model.getInSideProvinceOutT03Qty())));//省内省外其他出库量
            }
        }
        param.setDateEnd(DateUtil.getShortTime(lastEnd));