jiangbiao 10 mēneši atpakaļ
vecāks
revīzija
8697d37136

+ 55 - 3
cpms-admin/src/main/java/com/cpms/project/asset/controller/TLeakagePointsPatrolController.java

@@ -6,6 +6,7 @@ import com.cpms.common.core.domain.AjaxResult;
 import com.cpms.common.core.page.TableDataInfo;
 import com.cpms.common.enums.BusinessType;
 import com.cpms.common.utils.DateUtils;
+import com.cpms.common.utils.StringUtils;
 import com.cpms.common.utils.poi.ExcelUtil;
 import com.cpms.project.asset.domain.TLeakagePoints;
 import com.cpms.project.asset.domain.TLeakagePointsPatrol;
@@ -19,13 +20,15 @@ import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.regex.Pattern;
 
 /**
  * 漏点巡检Controller
@@ -66,6 +69,55 @@ public class TLeakagePointsPatrolController extends BaseController {
         return getDataTable(list);
     }
 
+    @GetMapping("/getTeams/{today}")
+    public AjaxResult getTeams(@PathVariable String today) {
+        String regex = "^[^a-zA-Z]*$";
+        Pattern pattern = Pattern.compile(regex);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        //  以2024年6月5日为基准计算
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(2024, Calendar.JUNE, 5);
+        calendar.set(Calendar.HOUR, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date time = calendar.getTime();
+        logger.info("==============time:{}", sdf.format(time));
+        Date date;
+        if (StringUtils.isNotEmpty(today) && pattern.matcher(today).matches()) {
+            date = DateUtils.parseDate(today);
+        } else {
+            date = new Date();
+        }
+        calendar.setTime(date);
+        calendar.set(Calendar.HOUR, 1);
+        calendar.set(Calendar.MINUTE, 1);
+        calendar.set(Calendar.SECOND, 1);
+        date = calendar.getTime();
+        logger.info("==============date:{}", sdf.format(date));
+        int i = DateUtils.differentDaysByMillisecond(date, time);
+        logger.info("==============distance:{}", i);
+        TLeakagePointsPatrol tLeakagePointsPatrol = new TLeakagePointsPatrol();
+        switch (i % 4) {
+            case 0:
+                tLeakagePointsPatrol.setTeamM("10");
+                tLeakagePointsPatrol.setTeamN("12");
+                break;
+            case 1:
+                tLeakagePointsPatrol.setTeamM("14");
+                tLeakagePointsPatrol.setTeamN("10");
+                break;
+            case 2:
+                tLeakagePointsPatrol.setTeamM("16");
+                tLeakagePointsPatrol.setTeamN("14");
+                break;
+            case 3:
+                tLeakagePointsPatrol.setTeamM("12");
+                tLeakagePointsPatrol.setTeamN("16");
+                break;
+        }
+        return AjaxResult.success(tLeakagePointsPatrol);
+    }
+
     /**
      * 导出漏点巡检列表
      */
@@ -162,9 +214,9 @@ public class TLeakagePointsPatrolController extends BaseController {
             row0.createCell(3).setCellValue(DateUtils.dateTime(patrol.getCheckDateM()));
             row0.createCell(5).setCellValue(DateUtils.dateTime(patrol.getCheckDateN()));
             row1.createCell(3).setCellValue(
-                    sysDictDataService.selectDictLabel("team_divide",patrol.getTeamM()) + "班");
+                    sysDictDataService.selectDictLabel("team_divide", patrol.getTeamM()) + "班");
             row1.createCell(5).setCellValue(
-                    sysDictDataService.selectDictLabel("team_divide",patrol.getTeamN())  + "班");
+                    sysDictDataService.selectDictLabel("team_divide", patrol.getTeamN()) + "班");
             int i = 3;
             for (TLeakagePointsRecord patrolRecord : patrol.getRecords()) {
                 i++;

+ 31 - 58
cpms-common/src/main/java/com/cpms/common/utils/DateUtils.java

@@ -1,25 +1,21 @@
 package com.cpms.common.utils;
 
+import org.apache.commons.lang3.time.DateFormatUtils;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.regex.Pattern;
 
-import org.apache.commons.lang3.time.DateFormatUtils;
-
 /**
  * 时间工具类
- * 
+ *
  * @author admin
  */
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils
-{
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
     public static String YYYY = "yyyy";
 
     public static String YYYY_MM = "yyyy-MM";
@@ -31,63 +27,52 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
 
     private static String[] parsePatterns = {
-            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
     /**
      * 获取当前Date型日期
-     * 
+     *
      * @return Date() 当前日期
      */
-    public static Date getNowDate()
-    {
+    public static Date getNowDate() {
         return new Date();
     }
 
     /**
      * 获取当前日期, 默认格式为yyyy-MM-dd
-     * 
+     *
      * @return String
      */
-    public static String getDate()
-    {
+    public static String getDate() {
         return dateTimeNow(YYYY_MM_DD);
     }
 
-    public static final String getTime()
-    {
+    public static final String getTime() {
         return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
     }
 
-    public static final String dateTimeNow()
-    {
+    public static final String dateTimeNow() {
         return dateTimeNow(YYYYMMDDHHMMSS);
     }
 
-    public static final String dateTimeNow(final String format)
-    {
+    public static final String dateTimeNow(final String format) {
         return parseDateToStr(format, new Date());
     }
 
-    public static final String dateTime(final Date date)
-    {
+    public static final String dateTime(final Date date) {
         return parseDateToStr(YYYY_MM_DD, date);
     }
 
-    public static final String parseDateToStr(final String format, final Date date)
-    {
+    public static final String parseDateToStr(final String format, final Date date) {
         return new SimpleDateFormat(format).format(date);
     }
 
-    public static final Date dateTime(final String format, final String ts)
-    {
-        try
-        {
+    public static final Date dateTime(final String format, final String ts) {
+        try {
             return new SimpleDateFormat(format).parse(ts);
-        }
-        catch (ParseException e)
-        {
+        } catch (ParseException e) {
             throw new RuntimeException(e);
         }
     }
@@ -95,8 +80,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期路径 即年/月/日 如2018/08/08
      */
-    public static final String datePath()
-    {
+    public static final String datePath() {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyy/MM/dd");
     }
@@ -104,8 +88,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期路径 即年/月/日 如20180808
      */
-    public static final String dateTime()
-    {
+    public static final String dateTime() {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyyMMdd");
     }
@@ -113,18 +96,13 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期型字符串转化为日期 格式
      */
-    public static Date parseDate(Object str)
-    {
-        if (str == null)
-        {
+    public static Date parseDate(Object str) {
+        if (str == null) {
             return null;
         }
-        try
-        {
+        try {
             return parseDate(str.toString(), parsePatterns);
-        }
-        catch (ParseException e)
-        {
+        } catch (ParseException e) {
             return null;
         }
     }
@@ -132,8 +110,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 获取服务器启动时间
      */
-    public static Date getServerStartDate()
-    {
+    public static Date getServerStartDate() {
         long time = ManagementFactory.getRuntimeMXBean().getStartTime();
         return new Date(time);
     }
@@ -141,20 +118,18 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 计算相差天数
      */
-    public static int differentDaysByMillisecond(Date date1, Date date2)
-    {
+    public static int differentDaysByMillisecond(Date date1, Date date2) {
         return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
     }
 
     /**
      * 计算时间差
      *
-     * @param endDate 最后时间
+     * @param endDate   最后时间
      * @param startTime 开始时间
      * @return 时间差(天/小时/分钟)
      */
-    public static String timeDistance(Date endDate, Date startTime)
-    {
+    public static String timeDistance(Date endDate, Date startTime) {
         long nd = 1000 * 24 * 60 * 60;
         long nh = 1000 * 60 * 60;
         long nm = 1000 * 60;
@@ -175,8 +150,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 增加 LocalDateTime ==> Date
      */
-    public static Date toDate(LocalDateTime temporalAccessor)
-    {
+    public static Date toDate(LocalDateTime temporalAccessor) {
         ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
@@ -184,8 +158,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 增加 LocalDate ==> Date
      */
-    public static Date toDate(LocalDate temporalAccessor)
-    {
+    public static Date toDate(LocalDate temporalAccessor) {
         LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());

+ 3 - 3
cpms-ui/build/index.js

@@ -1,4 +1,4 @@
-const { run } = require('runjs')
+// const { run } = require('runjs')
 const chalk = require('chalk')
 const config = require('../vue.config.js')
 const rawArgv = process.argv.slice(2)
@@ -7,7 +7,7 @@ const args = rawArgv.join(' ')
 if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
   const report = rawArgv.includes('--report')
 
-  run(`vue-cli-service build ${args}`)
+  // run(`vue-cli-service build ${args}`)
 
   const port = 9526
   const publicPath = config.publicPath
@@ -31,5 +31,5 @@ if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
 
   })
 } else {
-  run(`vue-cli-service build ${args}`)
+  // run(`vue-cli-service build ${args}`)
 }

+ 5 - 4
cpms-ui/package.json

@@ -37,6 +37,7 @@
   },
   "dependencies": {
     "@riophae/vue-treeselect": "0.4.0",
+    "@yun-jie/tasksfile": "^5.1.1",
     "axios": "0.24.0",
     "clipboard": "2.0.8",
     "core-js": "3.25.3",
@@ -46,6 +47,7 @@
     "file-saver": "2.0.5",
     "fuse.js": "6.4.3",
     "highlight.js": "9.18.5",
+    "html2canvas": "^1.4.1",
     "js-beautify": "1.13.0",
     "js-cookie": "3.0.1",
     "jsencrypt": "3.0.0-rc.1",
@@ -56,12 +58,12 @@
     "vue": "2.6.12",
     "vue-count-to": "1.0.13",
     "vue-cropper": "0.5.5",
+    "vue-draggable-resizable": "^2.3.0",
     "vue-meta": "2.4.0",
+    "vue-print-nb": "^1.7.5",
     "vue-router": "3.4.9",
     "vuedraggable": "2.24.3",
-    "vuex": "3.6.0",
-    "vue-draggable-resizable": "^2.3.0",
-    "html2canvas": "^1.4.1"
+    "vuex": "3.6.0"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "4.4.6",
@@ -75,7 +77,6 @@
     "eslint": "7.15.0",
     "eslint-plugin-vue": "7.2.0",
     "lint-staged": "10.5.3",
-    "runjs": "4.4.2",
     "sass": "1.32.13",
     "sass-loader": "10.1.1",
     "script-ext-html-webpack-plugin": "2.1.5",

+ 7 - 0
cpms-ui/src/api/asset/pointPatrol.js

@@ -9,6 +9,13 @@ export function listPointPatrol(query) {
   })
 }
 
+export function getTeams(date) {
+  return request({
+    url: '/asset/pointPatrol/getTeams/'+date,
+    method: 'get'
+  })
+}
+
 // 查询漏点巡检详细
 export function getPointPatrol(id) {
   return request({

+ 3 - 0
cpms-ui/src/main.js

@@ -41,6 +41,8 @@ import DictData from '@/components/DictData'
 import echarts from '@/api/cpms/echarts.min.js'
 import '@/assets/iconfont/iconfont.css'
 import '@/assets/iconfont/iconfont.js'
+// 打印机
+import Print from 'vue-print-nb'
 
 // 全局方法挂载
 Vue.prototype.bus = new Vue()
@@ -67,6 +69,7 @@ Vue.component('ImagePreview', ImagePreview)
 Vue.use(directive)
 Vue.use(plugins)
 Vue.use(VueMeta)
+Vue.use(Print)
 DictData.install()
 
 /**

+ 43 - 14
cpms-ui/src/views/asset/points/index.vue

@@ -265,11 +265,12 @@
           <el-button type="primary" icon="el-icon-search" size="mini" @click="handleRecordQuery">搜索</el-button>
           <el-button icon="el-icon-refresh" size="mini" @click="resetRecordQuery">重置</el-button>
           <el-button icon="el-icon-download" size="mini" @click="handleExportPatrol">导出</el-button>
+          <el-button icon="el-icon-printer" size="mini" @click="" v-print="printInfoObj">打印</el-button>
         </el-form-item>
         <right-toolbar :showSearch.sync="record.showSearch" @queryTable="getRecordList" :search="false"></right-toolbar>
       </el-form>
 
-      <table style="width: 100%; margin-bottom: 30px">
+      <table style="width: 100%; margin-bottom: 30px" id="printInfo">
         <tr>
           <td rowspan="3" colspan="2">漏点巡检记录表</td>
           <td>日期</td>
@@ -279,8 +280,8 @@
         <tr>
           <td>班组</td>
           <td colspan="2">
-            <span v-if="record.isEdit||isEmpty(record.pointPatrol.teamM)">
-              <el-select clearable v-model="record.pointPatrol.teamM" placeholder="请选择消漏结果">
+            <span v-if="record.isEdit&&!isNotEmpty(record.pointPatrol.teamM)">
+              <el-select clearable v-model="record.pointPatrol.teamM" placeholder="请选择班组">
                 <el-option v-for="dict in dict.type.team_divide"
                            :value="dict.value"
                            :label="dict.label"
@@ -290,15 +291,15 @@
             <span v-else><dict-tag :options="dict.type.team_divide" :value="record.pointPatrol.teamM"/></span>
           </td>
           <td colspan="2">
-            <span v-if="record.isEdit||isEmpty(record.pointPatrol.teamN)">
-              <el-select clearable v-model="record.pointPatrol.teamN" placeholder="请选择消漏结果">
+            <span v-if="record.isEdit&&!isNotEmpty(record.pointPatrol.teamN)">
+              <el-select clearable v-model="record.pointPatrol.teamN" placeholder="请选择班组">
                 <el-option v-for="dict in dict.type.team_divide"
                            :value="dict.value"
                            :label="dict.label"
                            :key="dict.value"/>
               </el-select>
             </span>
-            <span v-else><dict-tag :options="dict.type.team_divide" :value="record.pointPatrol.teamM"/></span>
+            <span v-else><dict-tag :options="dict.type.team_divide" :value="record.pointPatrol.teamN"/></span>
           </td>
         </tr>
         <tr>
@@ -320,30 +321,40 @@
           <td>{{ item.leakagePosition }}</td>
           <td>{{ item.leakageMedium }}</td>
           <td>
-            <el-radio-group v-model="item.suspendPlateM">
+            <el-radio-group v-model="item.suspendPlateM" v-if="record.isEdit||!isNotEmpty(item.suspendPlateM)">
               <el-radio label="是">是</el-radio>
               <el-radio label="否">否</el-radio>
             </el-radio-group>
+            <span v-else>
+              {{item.suspendPlateM}}
+              <el-button  class="no-print" type="text" @click="item.suspendPlateM=''">修改</el-button>
+            </span>
           </td>
           <td>
-            <el-radio-group v-model="item.leakageStatusM">
+            <el-radio-group v-model="item.leakageStatusM" v-if="record.isEdit||!isNotEmpty(item.leakageStatusM)">
               <el-radio label="未检出">未检出</el-radio>
               <el-radio label="轻微">轻微</el-radio>
               <el-radio label="严重">严重</el-radio>
             </el-radio-group>
+            <span v-else>{{item.leakageStatusM}}
+              <el-button  class="no-print" type="text" @click="item.leakageStatusM=''">修改</el-button> </span>
           </td>
           <td>
-            <el-radio-group v-model="item.suspendPlateN">
+            <el-radio-group v-model="item.suspendPlateN" v-if="record.isEdit||!isNotEmpty(item.suspendPlateN)">
               <el-radio label="是">是</el-radio>
               <el-radio label="否">否</el-radio>
             </el-radio-group>
+            <span v-else>{{item.suspendPlateN}}
+              <el-button  class="no-print" type="text" @click="item.suspendPlateN=''">修改</el-button> </span>
           </td>
           <td>
-            <el-radio-group v-model="item.leakageStatusN">
+            <el-radio-group v-model="item.leakageStatusN" v-if="record.isEdit||!isNotEmpty(item.leakageStatusN)">
               <el-radio label="未检出">未检出</el-radio>
               <el-radio label="轻微">轻微</el-radio>
               <el-radio label="严重">严重</el-radio>
             </el-radio-group>
+            <span v-else>{{item.leakageStatusN}}
+              <el-button  class="no-print" type="text" @click="item.leakageStatusN=''">修改</el-button> </span>
           </td>
         </tr>
       </table>
@@ -398,7 +409,7 @@ import {addPoints, delPoints, getPoints, listPoints, updatePoints} from "@/api/a
 import PointRecord from "@/views/asset/pointRecord/index.vue";
 import PointPatrol from "@/views/asset/pointPatrol/index.vue";
 import {getToken} from "@/utils/auth";
-import {addPointPatrol, listPointPatrol, updatePointPatrol} from "@/api/asset/pointPatrol";
+import {addPointPatrol, getTeams, listPointPatrol, updatePointPatrol} from "@/api/asset/pointPatrol";
 
 export default {
   dicts: ['leakage_result', 'team_divide'],
@@ -406,6 +417,12 @@ export default {
   components: {PointPatrol, PointRecord},
   data() {
     return {
+      // 打印区域配置对象
+      printInfoObj:{
+        id:"printInfo",
+        popTitle:"漏点清单",
+        preview:false,  // 是否开启预览
+      },
       fullscreenLoading: false,
       record: {
         open: false,
@@ -506,7 +523,7 @@ export default {
     });
   },
   methods: {
-    isEmpty(value){
+    isNotEmpty(value){
       if (value !== null && value !== "" && typeof (value) !== "undefined") {
         return true
       }else {
@@ -531,8 +548,16 @@ export default {
         if (list.length > 0) {
           this.record.pointPatrol = list[0]
           this.record.isEdit = false
+          getTeams(this.record.queryParams.checkDateM).then(res=>{
+            this.record.pointPatrol.teamM=res.data.teamM;
+            this.record.pointPatrol.teamN=res.data.teamN;
+          })
         } else {
-          this.record.pointPatrol = {}
+          getTeams(this.record.queryParams.checkDateM).then(res=>{
+            this.record.pointPatrol = {};
+            this.record.pointPatrol.teamM=res.data.teamM;
+            this.record.pointPatrol.teamN=res.data.teamN;
+          })
           this.record.isEdit = true
         }
       });
@@ -738,5 +763,9 @@ table td {
   padding: 10px;
   text-align: center;
 }
-
+@media print {
+  .no-print {
+    display: none;
+  }
+}
 </style>

+ 1 - 1
cpms-ui/src/views/plant/staffmgr/index.vue

@@ -749,7 +749,7 @@ import {addRecord, listRecord, updateRecord} from "@/api/plant/record";
 import {deptTreeSelect} from "@/api/system/user";
 
 export default {
-  dicts: ['sys_user_sex', 'staff_unit', 'team_divide', 'actualpost', 'education', 'special_duty', 'plant_divide'],
+  dicts: ['sys_user_sex', 'staff_unit', 'team_divide', 'actualpost', 'education', 'special_duty', 'plant_divide', 'reassignment'],
   name: "Staffmgr",
   components: {TeamChart, EduChart, Treeselect},
   data() {