Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

peiguo 5 vuotta sitten
vanhempi
commit
385d199b7e

+ 189 - 0
admin-ui/FileSaver.js

@@ -0,0 +1,189 @@
+/* FileSaver.js
+ * A saveAs() FileSaver implementation.
+ * 1.3.2
+ * 2016-06-16 18:25:19
+ *
+ * By Eli Grey, http://eligrey.com
+ * License: MIT
+ *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
+ */
+
+/* global self */
+/* jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
+
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
+
+var saveAs = saveAs || (function (view) {
+  'use strict'
+  // IE <10 is explicitly unsupported
+  if (typeof view === 'undefined' || typeof navigator !== 'undefined' && /MSIE [1-9]\./.test(navigator.userAgent)) {
+    return
+  }
+  var
+    doc = view.document
+  // only get URL when necessary in case Blob.js hasn't overridden it yet
+  var get_URL = function () {
+    return view.URL || view.webkitURL || view
+  }
+  var save_link = doc.createElementNS('http://www.w3.org/1999/xhtml', 'a')
+  var can_use_save_link = 'download' in save_link
+  var click = function (node) {
+    var event = new MouseEvent('click')
+    node.dispatchEvent(event)
+  }
+  var is_safari = /constructor/i.test(view.HTMLElement) || view.safari
+  var is_chrome_ios = /CriOS\/[\d]+/.test(navigator.userAgent)
+  var throw_outside = function (ex) {
+    (view.setImmediate || view.setTimeout)(function () {
+      throw ex
+    }, 0)
+  }
+  var force_saveable_type = 'application/octet-stream'
+  // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
+  var arbitrary_revoke_timeout = 1000 * 40 // in ms
+  var revoke = function (file) {
+    var revoker = function () {
+      if (typeof file === 'string') { // file is an object URL
+        get_URL().revokeObjectURL(file)
+      } else { // file is a File
+        file.remove()
+      }
+    }
+    setTimeout(revoker, arbitrary_revoke_timeout)
+  }
+  var dispatch = function (filesaver, event_types, event) {
+    event_types = [].concat(event_types)
+    var i = event_types.length
+    while (i--) {
+      var listener = filesaver['on' + event_types[i]]
+      if (typeof listener === 'function') {
+        try {
+          listener.call(filesaver, event || filesaver)
+        } catch (ex) {
+          throw_outside(ex)
+        }
+      }
+    }
+  }
+  var auto_bom = function (blob) {
+    // prepend BOM for UTF-8 XML and text/* types (including HTML)
+    // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
+    if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
+      return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type})
+    }
+    return blob
+  }
+  var FileSaver = function (blob, name, no_auto_bom) {
+    if (!no_auto_bom) {
+      blob = auto_bom(blob)
+    }
+    // First try a.download, then web filesystem, then object URLs
+    var
+      filesaver = this
+    var type = blob.type
+    var force = type === force_saveable_type
+    var object_url
+    var dispatch_all = function () {
+      dispatch(filesaver, 'writestart progress write writeend'.split(' '))
+    }
+    // on any filesys errors revert to saving with object URLs
+    var fs_error = function () {
+      if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
+        // Safari doesn't allow downloading of blob urls
+        var reader = new FileReader()
+        reader.onloadend = function () {
+          var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;')
+          var popup = view.open(url, '_blank')
+          if (!popup) view.location.href = url
+          url = undefined // release reference before dispatching
+          filesaver.readyState = filesaver.DONE
+          dispatch_all()
+        }
+        reader.readAsDataURL(blob)
+        filesaver.readyState = filesaver.INIT
+        return
+      }
+      // don't create more object URLs than needed
+      if (!object_url) {
+        object_url = get_URL().createObjectURL(blob)
+      }
+      if (force) {
+        view.location.href = object_url
+      } else {
+        var opened = view.open(object_url, '_blank')
+        if (!opened) {
+          // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
+          view.location.href = object_url
+        }
+      }
+      filesaver.readyState = filesaver.DONE
+      dispatch_all()
+      revoke(object_url)
+    }
+
+    filesaver.readyState = filesaver.INIT
+
+    if (can_use_save_link) {
+      object_url = get_URL().createObjectURL(blob)
+      setTimeout(function () {
+        save_link.href = object_url
+        save_link.download = name
+        click(save_link)
+        dispatch_all()
+        revoke(object_url)
+        filesaver.readyState = filesaver.DONE
+      })
+      return
+    }
+
+    fs_error()
+  }
+  var FS_proto = FileSaver.prototype
+  var saveAs = function (blob, name, no_auto_bom) {
+    return new FileSaver(blob, name || blob.name || 'download', no_auto_bom)
+  }
+
+  // IE 10+ (native saveAs)
+  if (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {
+    return function (blob, name, no_auto_bom) {
+      name = name || blob.name || 'download'
+
+      if (!no_auto_bom) {
+        blob = auto_bom(blob)
+      }
+      return navigator.msSaveOrOpenBlob(blob, name)
+    }
+  }
+
+  FS_proto.abort = function () {
+  }
+  FS_proto.readyState = FS_proto.INIT = 0
+  FS_proto.WRITING = 1
+  FS_proto.DONE = 2
+
+  FS_proto.error =
+    FS_proto.onwritestart =
+      FS_proto.onprogress =
+        FS_proto.onwrite =
+          FS_proto.onabort =
+            FS_proto.onerror =
+              FS_proto.onwriteend =
+                null
+
+  return saveAs
+}(
+  typeof self !== 'undefined' && self ||
+  typeof window !== 'undefined' && window ||
+  this.content
+))
+// `self` is undefined in Firefox for Android content script context
+// while `this` is nsIContentFrameMessageManager
+// with an attribute `content` that corresponds to the window
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports.saveAs = saveAs
+} else if ((typeof define !== 'undefined' && define !== null) && (define.amd !== null)) {
+  define('FileSaver.js', function () {
+    return saveAs
+  })
+}

+ 1 - 1
admin-ui/app/whepi/index.html

@@ -278,7 +278,7 @@
 <!--<script type="text/javascript" src='/device/camera/camera.js'></script>-->
 <!--<script type="text/javascript" src='/device/labelPrinter/labelPrinter.js'></script>-->
 <!-- Device end -->
-
+<script type="text/javascript" src="/FileSaver.js"></script>
 <script type="text/javascript" src="/app.js"></script>
 <script type="text/javascript" src="/fileApi.js"></script>
 <script type="text/javascript" src="/format.js"></script>

+ 2 - 0
admin-ui/app/whepi/lingyun/dialogDetail.js

@@ -57,6 +57,8 @@ define(function (require) {
             {field: 'bingqingDesc', title: '病情表述', maxWidth: 300, align: 'left',},
             {field: 'workLoalDesc', title: '工作驻地', maxWidth: 100, align: 'left',},
             {field: 'todayLoalDesc', title: '今晚住地', maxWidth: 100, align: 'left',},
+            {field: 'autoLocal', title: '定位地区', maxWidth: 200, align: 'left',},
+            {field: 'autoAddr', title: '定位地址', maxWidth: 200, align: 'left',},
             {field: 'isTrip', title: '是否出行', maxWidth: 100, align: 'center',formatter: function (value) {
                 if (value == 0) {
                   return "<span style='color: green;'>否<span>";

+ 83 - 0
admin-ui/app/whepi/lingyun/dialogDetail7.js

@@ -0,0 +1,83 @@
+define(function (require) {
+  return function (context) {
+
+    var $dlg, $grid;
+
+    function queryGrid1() {
+      $grid.reload({
+        mtype: 'GET',
+        url: api('/sweepCode/selectLingyunUserHistory'),
+        queryParams: {userId: context.userId}
+      }, true);
+    }
+
+    return {
+      xtype: 'dialog',
+      dialogId: 'dialogDetail',
+      title: '历史上报' + context.linkman,
+      width: '80%',
+      height: '60%',
+      onOpen: function () {
+        $dlg = $(this);
+      },
+      center: {
+        items: {
+          onRender: function () {
+            $grid = $(this);
+            queryGrid1();
+          },
+          xtype: 'grid',
+          idField: "userId",
+          pagination: false,
+          columns: [[
+            {field: 'reportDate', title: '上报时间', align: 'left', formatter: 'tsymd'},
+            {field: 'userId', title: '用户ID', hidden: true},
+            // {field: 'linkman', title: '姓名', maxWidth: 200, align: 'left',},
+            {
+              field: 'reportStatus', title: '上报', maxWidth: 100, align: 'center', formatter: function (value) {
+                if (value == 0) {
+                  return "<span style='color: #ffb717;'>未上报<span>";
+                } else {
+                  return "<span style='color: green;'>已上报<span>";
+                }
+              }
+            },
+            {
+              field: 'msStatus', title: '上报状态', maxWidth: 100, align: 'center', formatter: function (value, row) {
+                if (row.rowData.reportStatus  == 0) {
+                  return "<span style='color: #ffb717;'>未上报<span>";
+                } else if (value == 1) {
+                  return "<span style='color: green;'>正常<span>";
+                } else {
+                  return "<span style='color: red;'>异常<span>";
+                }
+              }
+            },
+            {field: 'temperature', title: '温度', maxWidth: 100, align: 'right',},
+            {field: 'bingqingDesc', title: '病情表述', maxWidth: 300, align: 'left',},
+            {field: 'workLoalDesc', title: '工作驻地', maxWidth: 100, align: 'left',},
+            {field: 'todayLoalDesc', title: '今晚住地', maxWidth: 100, align: 'left',},
+            {field: 'isTrip', title: '是否出行', maxWidth: 100, align: 'center',formatter: function (value) {
+                if (value == 0) {
+                  return "<span style='color: green;'>否<span>";
+                } else {
+                  return "<span style='color: #ff6d02;'>是<span>";
+                }
+              }
+            },
+            {field: 'tripDetDesc', title: '出行详细', align: 'left'}
+
+          ]],
+        }
+      },
+      buttons: [
+        {
+          text: "关闭", iconCls: "fa fa-times", onClick: function () {
+            $dlg.dialog('close');
+          }
+        }
+      ]
+    }
+      ;
+  };
+});

+ 2 - 0
admin-ui/app/whepi/lingyun/lingyunUser.js

@@ -227,6 +227,8 @@ define(function (require) {
                     {field: 'bingqingDesc', title: '病情表述', align: 'left',},
                     {field: 'workLoalDesc', title: '工作驻地', maxWidth: 200, align: 'left',},
                     {field: 'todayLoalDesc', title: '今晚住地', maxWidth: 200, align: 'left',},
+                    {field: 'autoLocal', title: '定位地区', maxWidth: 200, align: 'left',},
+                    {field: 'autoAddr', title: '定位地址', maxWidth: 200, align: 'left',},
                     {field: 'isTripDesc', title: '是否出行', maxWidth: 200, align: 'left',},
                     {field: 'tripDetDesc', title: '出行详细', align: 'left',},
                   ]

+ 239 - 0
admin-ui/app/whepi/lingyun/lingyunUser7.js

@@ -0,0 +1,239 @@
+define(function (require) {
+    return function (context) {
+
+      var $grid1, $form;
+
+      // 输入搜索文本后点击回车按钮查询列表
+      function enterQueryGrid1(e) {
+        if (e.keyCode === 13) {
+          var tmp = $(this).val();
+          $form.formSet({queryProperties: tmp});
+          queryGrid1();
+        }
+      }
+
+      // 弹框的方式
+      var widgets = {
+        // 搜索分类检索
+        selectTableUnit: {
+          url: 'app/whepi/home/selectLYbumen.js',
+          bind: {
+            unitId: 'unitId',
+            unit: 'unit',
+          },
+        },
+      };
+
+      // 检索条件查询
+      function queryGrid1() {
+        var queryForm = $form.formGet();
+        $grid1.reload({
+          mtype: 'POST',
+          url: api('/sweepCode/selectLingyunUser'),
+          queryParams: queryForm
+        }, true);
+      }
+
+      var queryToolbar = {
+        xtype: 'toolbar',
+        title: '用户管理',
+        items: [
+          {
+            text: '查询', iconCls: 'fa fa-search', onClick: function () {
+              queryGrid1();
+            }
+          }, {
+            text: '重置', iconCls: 'fa fa-refresh', onClick: function () {
+              $form.formClear();
+              queryGrid1();
+            }
+          }, {
+            text: '关闭', iconCls: 'fa fa-times-circle', onClick: function () {
+              App.closeMe(this);
+            }
+          }
+        ]
+      };
+
+      var queryForm = {
+        onRender: function () {
+          $form = $(this);
+        },
+        xtype: 'form',
+        items: [[
+          {
+            xtype: 'textbox',
+            label: '检索条件',
+            name: 'queryProperties',
+            prompt: "用户名称/电话号码",
+            labelWidth: 'auto',
+            events: {keydown: enterQueryGrid1}, width: 200
+          },
+          {xtype: 'hidden', name: 'unitId'},
+          {
+            name: 'reportStatus',
+            xtype: 'combobox',
+            label: '是否上报',
+            data: [{id: '', text: '全部'}, {id: '0', text: '有数据未上报'}, {id: '1', text: '已上报'}, {id: '2', text: '无数据'}],
+            value: '',
+            onChange: function (value) {
+              queryGrid1();
+            },
+          },
+          {
+            xtype: 'searchbox',
+            label: '部门',
+            labelWidth: 'auto',
+            name: 'unit',
+            prompt: "部门",
+            width: 250,
+            widget: widgets.selectTableUnit,// 弹出框方法
+            onChange: function (value) {
+              if (!isNotNullOrEmpty(value)) {
+                $form.formSet({
+                  unitId : ''
+                })
+              }
+              queryGrid1();
+            },
+          },
+          {
+            name: 'date',
+            label: '导出时间',
+            prompt: '导出时间',
+            xtype: 'datebox',
+            labelWidth: 'auto',
+            width: 200,
+          },
+        ]]
+      };
+
+      return {
+        north: {
+          height: 88,
+          /* split: true,
+           border: false,*///底框是否可变动
+          items: [
+            queryToolbar,
+            queryForm
+          ]
+        },
+        center: {
+          height: '60%',
+          split: true,
+          items:
+            {
+              onRender: function () {
+                $grid1 = $(this);
+                queryGrid1()
+              },
+              xtype: 'grid',
+              toolbar: {
+                xtype: 'toolbar',
+                title: '用户列表',
+                items: [
+                  {
+                    text: '生成健康及旅居申请表', iconCls: 'fa fa-cloud-upload', onClick: function () {
+                      var row = $grid1.checkedData();
+                      if (row.length == 0) {
+                        $.yvan.msg('请至少选择一行数据');
+                        return;
+                      }
+                      var ids = "";
+                      for (var i = 0; i < row.length; i++) {
+                        ids += row[i].userId + ","
+                      }
+                      ids=ids.substring(0,ids.length-1);
+                      window.open(api('/export/lyReports?userId=' + ids));
+                    }
+                  },
+                  {
+                    text: '生成隔离人员解除隔离审批表', iconCls: 'fa fa-cloud-upload', onClick: function () {
+                      var row = $grid1.checkedData();
+                      if (row.length == 0) {
+                        $.yvan.msg('请至少选择一行数据');
+                        return;
+                      }
+                      var ids = "";
+                      for (var i = 0; i < row.length; i++) {
+                        ids += row[i].userId + ","
+                      }
+                      ids=ids.substring(0,ids.length-1);
+                      window.open(api('/export/lyApproves?userId=' + ids));
+                    }
+                  },
+                  {
+                    text: '导出人员报表', iconCls: 'fa fa-cloud-upload', onClick: function () {
+                      var queryProperties = $form.formGet().queryProperties;
+                      var unitId = $form.formGet().unitId;
+                      var date = $form.formGet().date;
+                      if ( date == null || date == "") {
+                        $.yvan.msg('请选择导出时间');
+                        return
+                      }
+                      window.open(api('/sweepCode/exSelectLingyunUser?queryProperties='+queryProperties+"&unitId="+unitId + "&date="+date));
+                    }
+                  },
+                  {
+                    text: '查看人员上报情况', iconCls: 'fa fa-search', onClick: function () {
+                      var row = $grid1.rowData();
+                      if ( row == null || row == undefined || row.userId == null || row.userId == "") {
+                        $.yvan.msg('请选择数据');
+                        return
+                      }
+                      $.yvan.showDialog(this,
+                        require('/app/whepi/lingyun/dialogDetail7.js')({
+                          userId: row.userId,
+                          linkman: row.linkman,
+                          confirm: function () {
+                            // $grid2.reload();
+                          }
+                        })
+                      );
+                    }
+                  },
+                  {
+                    text: '查看人员可复工状况', iconCls: 'fa fa-search', onClick: function () {
+                      var row = $grid1.rowData();
+                      if ( row == null || row == undefined || row.userId == null || row.userId == "") {
+                        $.yvan.msg('请选择数据');
+                        return
+                      }
+                      $.yvan.showDialog(this,
+                        require('/app/whepi/lingyun/dialogFugong.js')({
+                          userId: row.userId,
+                          confirm: function () {
+                            // $grid2.reload();
+                          }
+                        })
+                      );
+                    }
+                  },
+                ]
+              },
+              multiselect: true, /// 表格多选
+              idField: 'userId',
+              editable: true,
+              editOnSelected: true,
+              autoSizeColumns: true,
+              columns:
+                [
+                  [
+                    {field: 'userId', title: '用户ID', hidden: true},
+                    {field: 'linkman', title: '姓名', maxWidth: 200, align: 'left',},
+                    {field: 'loudong', title: '部门名称', maxWidth: 200, align: 'left',},
+                    {field: 'phone', title: '联系电话', maxWidth: 200, align: 'left',},
+                    {field: 'doorplate', title: '工号', maxWidth: 200, align: 'left',},
+                    {field: 'bingqingDesc', title: '病情表述', align: 'left',},
+                    {field: 'workLoalDesc', title: '工作驻地', maxWidth: 200, align: 'left',},
+                    {field: 'todayLoalDesc', title: '今晚住地', maxWidth: 200, align: 'left',},
+                    {field: 'isTripDesc', title: '是否出行', maxWidth: 200, align: 'left',},
+                    {field: 'tripDetDesc', title: '出行详细', align: 'left',},
+                  ]
+                ]
+            }
+        }
+      };
+    };
+  }
+);

+ 1 - 1
admin-ui/app/whepi/mock/menu7.json

@@ -5,7 +5,7 @@
     {
       "id": "ENT10001",
       "text": "凌云导出报表",
-      "href": "/app/whepi/lingyun/lingyunUser.js",
+      "href": "/app/whepi/lingyun/lingyunUser7.js",
       "iconCls": "icon-blank fa fa-align-justify",
       "state": "close",
       "children": []

+ 2 - 0
whepi-doc/mrsb.sql

@@ -67,6 +67,8 @@ CREATE TABLE ms_trip  (
   today_local       int(11)    NOT NULL DEFAULT 0                           COMMENT '今日驻地:0未填写,1武汉市,2宜昌市,3当阳市,其他地点',
   today_local_other varchar(50)  NOT NULL DEFAULT ''                        COMMENT '今日驻地其他地点',
   is_trip           int(11)    NOT NULL DEFAULT 0                           COMMENT '是否出行:0否,1是',
+  auto_local        varchar(20)  NOT NULL DEFAULT ''                        COMMENT '今日定位地区',
+  auto_addr         varchar(50)  NOT NULL DEFAULT ''                        COMMENT '今日定位详细',
   PRIMARY KEY (trip_id) USING BTREE
 ) ENGINE = InnoDB default charset=utf8mb4 comment = '家庭出行表';
 

+ 2 - 0
whepi-ui/templates/home/frag.foot.ftl

@@ -13,4 +13,6 @@
 <script src="${s3('/jquery-weui/1.2.1/js/jquery-weui.min.js')}"></script>
 <script src="${s3('/jquery-weui/1.2.1/js/swiper.min.js')}"></script>
 <script src="${s3('/jquery-weui/1.2.1/js/city-picker.min.js')}"></script>
+<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
+<script src="http://map.qq.com/api/js?v=2.exp&key=VKJBZ-2RQ6S-HVXOD-63CQT-CMCL2-D6FA7"></script>
 <#--<script src="https://www.w3cways.com/demo/vconsole/vconsole.min.js?v=2.2.0"></script>-->

+ 39 - 0
whepi-ui/templates/home/getLocation.js

@@ -0,0 +1,39 @@
+// wx.config({
+//   debug: true,
+//   appId: 'wxa3991865de920847',
+//   timestamp: 1583378561,
+//   nonceStr: '<?php echo $signPackage["nonceStr"]; ?>',
+//   signature: '7c909d41d5f99a35fd9d39c179dae233b001678d',
+//   jsApiList: [
+//   // 所有要调用的 API 都要加到这个列表中
+//   'getLocation',
+// ]
+// });
+function getLocation() {
+
+  wx.getLocation({
+    type: 'wgs84',
+    success: function (res) {
+      // alert(JSON.stringify(res));
+
+      var geocoder = new qq.maps.Geocoder({
+        complete: function (result) {
+          if ('当阳市' === result.detail.addressComponents.district) {
+            autoLocal='当阳市';
+          } else {
+            autoLocal = result.detail.addressComponents.city;
+          }
+          autoAddr = result.detail.address;
+          // alert(result.detail.address)
+          console.log(result);
+        }
+      })
+      var coord = new qq.maps.LatLng(res.latitude, res.longitude)
+      geocoder.getAddress(coord)
+
+    },
+    cancel: function (res) {
+      alert('用户拒绝授权获取地理位置');
+    }
+  });
+}

+ 4 - 0
whepi-ui/templates/home/home.ftl

@@ -47,8 +47,12 @@
     var ceshixiaoquId = '5';
     var canSahngbao = true;
     var cantijiao = true;
+    var autoLocal='';
+    var autoAddr='';
     <#include "/home/ribao.js" />
     <#include "/home/qiuzhu.js" />
+    <#include "/home/getLocation.js" />
+
     (function ($) {
 
         $(function () {

+ 4 - 4
whepi-ui/templates/home/ribao.ftl

@@ -259,7 +259,7 @@
                                        style="border: 1px solid rgba(0,0,0,.2);box-sizing:border-box; border-radius: 5px; height: 5vh;width: 50%"
                                        onchange="selectinput1(this)"/>
                                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                <input id="js_input_qtdd" placeholder="其它地点" disabled="disabled" type="text"
+                                <input id="js_input_qtdd" placeholder="仅填市级如,上海市" disabled="disabled" type="text"
                                        style="width: 80%;text-align: center;border-top-width: 0px;border-right-width: 0px;border-bottom-width: 1px;border-left-width: 0px;border-color: #75859f;height: 5vh;font-size:inherit;color:inherit;"/>
                             </div>
                             <div style="display:flex; flex-direction: row; justify-content: space-between; margin-top: 1vh;">
@@ -268,7 +268,7 @@
                                        style="border: 1px solid rgba(0,0,0,.2);box-sizing:border-box; border-radius: 5px; height: 5vh;width: 50%"
                                        onchange="selectinput2(this)"/>
                                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                <input id="js_input_jrszq" placeholder="其它地点" disabled="disabled" type="text"
+                                <input id="js_input_jrszq" placeholder="仅填市级如,上海市" disabled="disabled" type="text"
                                        style="width: 80%;text-align: center;border-top-width: 0px;border-right-width: 0px;border-bottom-width: 1px;border-left-width: 0px;border-color: #75859f;height: 5vh;font-size:inherit;color:inherit;"/>
                             </div>
                             <div style="display:flex; flex-direction: row; justify-content: space-between; margin-top: 1vh;">
@@ -295,7 +295,7 @@
                                            style="border: 1px solid rgba(0,0,0,.2);box-sizing:border-box; border-radius: 5px; height: 5vh;width: 50%"
                                            onchange="selectinput3(this)"/>
                                     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                    <input id="js_input_cfdq" placeholder="其它地点" disabled="disabled" type="text"
+                                    <input id="js_input_cfdq" placeholder="仅填市级如,上海市" disabled="disabled" type="text"
                                            style="width: 80%;text-align: center;border-top-width: 0px;border-right-width: 0px;border-bottom-width: 1px;border-left-width: 0px;border-color: #75859f;height: 5vh;font-size:inherit;color:inherit;"/>
                                 </div>
                                 <div style="display:flex; flex-direction: row; justify-content: space-between; margin-top: 1vh;">
@@ -304,7 +304,7 @@
                                            style="border: 1px solid rgba(0,0,0,.2);box-sizing:border-box; border-radius: 5px; height: 5vh;width: 50%"
                                            onchange="selectinput4(this)"/>
                                     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                                    <input id="js_input_mddq" placeholder="其它地点" disabled="disabled" type="text"
+                                    <input id="js_input_mddq" placeholder="仅填市级如,上海市" disabled="disabled" type="text"
                                            style="width: 80%;text-align: center;border-top-width: 0px;border-right-width: 0px;border-bottom-width: 1px;border-left-width: 0px;border-color: #75859f;height: 5vh;font-size:inherit;color:inherit;"/>
                                 </div>
                                 <div style="display:flex; flex-direction: row; justify-content: space-between; margin-top: 1vh;">

+ 49 - 0
whepi-ui/templates/home/ribao.js

@@ -1,7 +1,49 @@
 function ribao_init() {
+  $.ajax({
+    url: '/wx/jsApiConfig',
+    type: "get",
+    data: {
+      "url": location.href.split('#')[0]
+    },
+    success: function (data) {
+      wx.config({
+        debug: false,
+        appId: data.data.appId,
+        timestamp: data.data.timestamp,
+        nonceStr: data.data.nonceStr,
+        signature: data.data.signature,
+        jsApiList: [
+          // 所有要调用的 API 都要加到这个列表中
+          'getLocation'
+        ]
+      });
+      wx.ready(function () {
+        wx.checkJsApi({
+          jsApiList: [
+            'getLocation'
+          ],
+
+          success: function (res) {
+            // alert(JSON.stringify(res));
+            // alert(JSON.stringify(res.checkResult.getLocation));
+            if (res.checkResult.getLocation == false) {
+              alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!');
+              return;
+            }
+          }
+        });
+        wx.error(function(res){
+          alert("接口调取失败")
+        });
+      });
+    },
+  });
+
   //lingyun
 
 
+
+
   $('#btnRB').on('click', function () {
     window.location.href = "/yeweihui/home.html";
   });
@@ -974,6 +1016,8 @@ function ribao_add() {
     //     }
     //   },
     // });
+    // 获取定位
+    getLocation();
 
   });
 }
@@ -1234,6 +1278,8 @@ function ribaoCommit() {
     "workLocalOther": workLocalOther,
     "todayLocal": todyLocal,
     "todayLocalOther": todyLocalOther,
+    "autoLocal": autoLocal,
+    "autoAddr": autoAddr,
     "isTrip": isTrip,
     "tripDet": listcx,
   };
@@ -1522,6 +1568,9 @@ function updateSuspected(suspectedId) {
             tab();
           },
         });
+
+        // 获取定位
+        getLocation();
       }
     },
   });

+ 21 - 1
whepi-web/src/main/java/com/bofeng/controller/EpiAdminController.java

@@ -59,7 +59,7 @@ public class EpiAdminController {
     }
 
 //    @Scheduled(cron = "0 44 12 * * ?") //每天19点执行一次
-    @Scheduled(cron = "0 0 15 * * ?") //每天19点执行一次
+    @Scheduled(cron = "0 0 11 * * ?") //每天19点执行一次
     public void scheduledTaskByFixedDelay() {
         System.out.println("==============执行定时任务开始================");
         Long start = 0L, count = 100L;
@@ -79,6 +79,26 @@ public class EpiAdminController {
         System.out.println("==============执行定时任务完毕================");
     }
 
+    @Scheduled(cron = "0 0 19 * * ?") //每天19点执行一次
+    public void scheduledTaskByFixedDelay2() {
+        System.out.println("==============执行定时任务开始================");
+        Long start = 0L, count = 100L;
+        while (true) {
+            List<UserOpen> userOpens = userOpenMapper.getOpenUser(start, count);
+            int re = 0;
+            for (UserOpen userOpen : userOpens) {
+                re += epiTemplateMessageService.systemSendRemindMessage(userOpen.getUserId(), userOpen.getOpenId());
+            }
+            System.out.println("==============执行定时任务"+re+"================");
+            start += count;
+            if (userOpens == null || userOpens.size()<count) {
+                break;
+            }
+        }
+
+        System.out.println("==============执行定时任务完毕================");
+    }
+
 //    @Scheduled(cron = "0 0 0 * * ?") //每天0点执行一次
     public void scheduledReportByFixedDelay() {
         System.out.println("==============执行定时任务开始================");

+ 3 - 2
whepi-web/src/main/java/com/bofeng/dao/RbMapper.java

@@ -105,7 +105,7 @@ public interface RbMapper extends BaseMapper<sysUptownUnit> {
                     "msr.sure_num as sureNum,msr.suspected_num as suspectedNum,msr.normal_num as normalNum, msr.report_date as reportDate,\n" +
                     "msr.single_num as singleNum,mss.user_name as userName,mss.grender, mss.age,mss.family_status as familyStatus,\n" +
                     "mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult,\n" +
-                    "tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other,ur.user_id as userId\n" +
+                    "tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other, tr.auto_local, tr.auto_addr, ur.user_id as userId\n" +
                     "from ms_report msr\n" +
                     "inner join sys_user_role ur on ur.property_id = msr.house_id and ur.role_id = 1 \n" +
                     "inner join sys_uptown_house suh on suh.house_id = msr.house_id\n" +
@@ -122,7 +122,8 @@ public interface RbMapper extends BaseMapper<sysUptownUnit> {
             "select suu.ridgepole,suu.unit,suh.doorplate,suho.linkman,suho.phone,msr.safety_num as safetyNum, msr.report_status as reportStatus,\n" +
                     "msr.sure_num as sureNum,msr.suspected_num as suspectedNum,msr.normal_num as normalNum, \n" +
                     "msr.single_num as singleNum,mss.user_name as userName,mss.grender, mss.age,mss.family_status as familyStatus,\n" +
-                    "mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult ,tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other\n" +
+                    "mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult ," +
+                    "tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other, tr.auto_local, tr.auto_addr\n" +
                     "from sys_uptown_house suh\n" +
                     "inner join sys_uptown_home suho on suho.house_id=suh.house_id\n" +
                     "INNER JOIN sys_uptown_unit suu ON suu.unit_id = suh.unit_id and suu.uptown_id=#{uptownId}\n" +

+ 6 - 2
whepi-web/src/main/java/com/bofeng/dao/UserOpenMapper.java

@@ -25,8 +25,12 @@ public interface UserOpenMapper extends BaseMapper<UserOpen> {
 
     List<UserOpen> getAllUser();
 
-    @Select(
-            "select user_id as userId, open_id as openId, nick_name as nickName from sys_user_open limit #{start}, #{count}"
+//    @Select(
+//            "select user_id as userId, open_id as openId, nick_name as nickName from sys_user_open limit #{start}, #{count}"
+//    )
+    @Select("select user_id as userId, open_id as openId, nick_name as nickName from sys_user_open suo \n" +
+            "left join ms_report mr on mr.user_create=suo.user_id \n" +
+            "where (mr.report_status<1 or mr.report_status is null) and (mr.report_date = curdate() or mr.report_date is null) limit #{start}, #{count}"
     )
     List<UserOpen> getOpenUser(@Param("start") Long start, @Param("count") Long count);
 

+ 3 - 0
whepi-web/src/main/java/com/bofeng/entity/ExcelRiBaoLYBM4.java

@@ -1,6 +1,7 @@
 package com.bofeng.entity;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotations.TableField;
 import com.google.common.base.Strings;
 import com.yvan.platform.Conv;
 import lombok.Getter;
@@ -41,6 +42,8 @@ public class ExcelRiBaoLYBM4 {
     private String workLocalOther = "";
     private int todayLocal = 0;
     private String todayLocalOther = "";
+    private String autoLocal="";
+    private String autoAddr="";
     private int isTrip = 0;
 
     private Date reportDate;

+ 8 - 2
whepi-web/src/main/java/com/bofeng/entity/ExcelRiBaoPrivate.java

@@ -372,7 +372,13 @@ public class ExcelRiBaoPrivate {
         return workLoalDesc;
     }
 
-    @ExcelProperty(value = "是否出行", index = 21)
+    @ExcelProperty(value = "定位地区", index = 21)
+    private String autoLocal="";
+
+    @ExcelProperty(value = "定位地址", index = 22)
+    private String autoAddr="";
+
+    @ExcelProperty(value = "是否出行", index = 23)
     private String isTripDesc = "";
 
     public String getIsTripDesc() {
@@ -384,7 +390,7 @@ public class ExcelRiBaoPrivate {
         return isTripDesc;
     }
 
-    @ExcelProperty(value = "出行详细", index = 22)
+    @ExcelProperty(value = "出行详细", index = 24)
     private String tripDetDesc = "";
 
 }

+ 6 - 0
whepi-web/src/main/java/com/bofeng/entity/MsTrip.java

@@ -31,6 +31,12 @@ public class MsTrip {
     @TableField("today_local_other")
     private String todayLocalOther;
 
+    @TableField("auto_local")
+    private String autoLocal="";
+
+    @TableField("auto_addr")
+    private String autoAddr="";
+
     @TableField("is_trip")
     private Integer isTrip;
 }

+ 1 - 1
whepi-web/src/main/java/com/bofeng/service/EpiTemplateMessageService.java

@@ -75,7 +75,7 @@ public class EpiTemplateMessageService {
             map.put("keyword3", str1);
             map.put("keyword4", "无");
             map.put("keyword5", "系统");
-            map.put("remark", "家园互助平台提醒您,为了您和他人的健康请及时提交每天的健康日报,上报情况将直接关系到您的小区临时出入");
+            map.put("remark", "家园互助平台提醒您,为了您和他人的健康请及时提交每天的健康日报,上报情况将直接关系到您的小区临时出入,如已填报忽略本消息");
             re = 1;
         }
         templateMessageService.sendSysRemindMessage(openId, "", map);

+ 7 - 1
whepi-web/src/main/java/com/bofeng/service/MsTripService.java

@@ -45,7 +45,7 @@ public class MsTripService {
     public Long addSuspectedTrip(Long suspectedId, String userName, Integer grender, Integer age, String familyStatus,
                                  String statusDesp, Integer medical, BigDecimal temperature, Integer cough, Integer muscle,
                                  Integer dyspnea, Integer fatigue, Integer diarrhea, Integer singleRoom, String others, Long userCreate, Integer scoreRezult, Integer temperatureScore, Integer scoreHistroy, Integer score
-            , Integer workLocal, String workLocalOther, Integer todayLocal, String todayLocalOther, Integer isTrip, List<MsTripDet> listTripDet) {
+            , Integer workLocal, String workLocalOther, Integer todayLocal, String todayLocalOther,String autoLocal, String autoAddr, Integer isTrip, List<MsTripDet> listTripDet) {
         Long reportId = 0L;
         //如果是当前日期 已经添加
         Date t = new Date();
@@ -155,6 +155,8 @@ public class MsTripService {
                 msTrip.setTodayLocalOther(todayLocalOther);
                 msTrip.setWorkLocal(workLocal);
                 msTrip.setWorkLocalOther(workLocalOther);
+                msTrip.setAutoLocal(autoLocal);
+                msTrip.setAutoAddr(autoAddr);
                 msTripMapper.insert(msTrip);
                 //添加出行详细
                 if (listTripDet != null && listTripDet.size() > 0) {
@@ -230,6 +232,8 @@ public class MsTripService {
                 msTrip.setTodayLocalOther(todayLocalOther);
                 msTrip.setTodayLocal(todayLocal);
                 msTrip.setIsTrip(isTrip);
+                msTrip.setAutoLocal(autoLocal);
+                msTrip.setAutoAddr(autoAddr);
                 msTripMapper.updateById(msTrip);
             } else {
                 msTrip = new MsTrip();
@@ -239,6 +243,8 @@ public class MsTripService {
                 msTrip.setTodayLocalOther(todayLocalOther);
                 msTrip.setWorkLocal(workLocal);
                 msTrip.setWorkLocalOther(workLocalOther);
+                msTrip.setAutoLocal(autoLocal);
+                msTrip.setAutoAddr(autoAddr);
                 msTripMapper.insert(msTrip);
             }
             //删除行程详细

+ 12 - 0
whepi-web/src/main/java/com/bofeng/wx/WxController.java

@@ -1,10 +1,13 @@
 package com.bofeng.wx;
 
 import com.bofeng.support.WeChatProperties;
+import com.yvan.Model;
 import com.yvan.ModelOps;
+import com.yvan.mvc.Pd;
 import lombok.extern.slf4j.Slf4j;
 import lombok.val;
 import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.bean.WxJsapiSignature;
 import me.chanjar.weixin.common.bean.menu.WxMenu;
 import me.chanjar.weixin.common.bean.menu.WxMenuButton;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -16,6 +19,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Map;
+
 /**
  * Created by luoyifan on 2017/8/24.
  */
@@ -318,4 +323,11 @@ public class WxController {
         return true;
     }
     */
+
+    /**
+     * 获取定位相关的参数*/
+    @GetMapping("/wx/jsApiConfig")
+    public Model<WxJsapiSignature> sdkConfig(@Pd(name = "url")String url) throws WxErrorException {
+        return Model.newSuccess(wxService.createJsapiSignature(url));
+    }
 }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 6 - 2
whepi-web/src/main/java/com/bofeng/wx/controller/MsTripController.java


+ 3 - 3
whepi-web/src/main/resources/mapper/RbMapper.xml

@@ -6,7 +6,7 @@
         select suu.ridgepole,suu.unit,suh.doorplate,suho.linkman,suho.phone,msr.safety_num as safetyNum, msr.report_status as reportStatus,
         msr.sure_num as sureNum,msr.suspected_num as suspectedNum,msr.normal_num as normalNum,
         msr.single_num as singleNum,mss.user_name as userName,mss.grender, mss.age,mss.family_status as familyStatus,
-        mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult,tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other
+        mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult,tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other, tr.auto_local, tr.auto_addr
         from sys_uptown_house suh
         inner join sys_uptown_home suho on suho.house_id=suh.house_id
         INNER JOIN sys_uptown_unit suu ON suu.unit_id = suh.unit_id
@@ -35,7 +35,7 @@
         msr.sure_num as sureNum,msr.suspected_num as suspectedNum,msr.normal_num as normalNum,
         msr.single_num as singleNum,mss.user_name as userName,mss.grender, mss.age,mss.family_status as familyStatus,
         mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult,
-        tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other,ur.user_id as userId
+        tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other, tr.auto_local, tr.auto_addr,ur.user_id as userId
         from sys_uptown_house suh
         inner join sys_uptown_home suho on suho.house_id=suh.house_id
         INNER JOIN sys_uptown_unit suu ON suu.unit_id = suh.unit_id and suu.uptown_id=#{uptownId}
@@ -69,7 +69,7 @@
         msr.sure_num as sureNum,msr.suspected_num as suspectedNum,msr.normal_num as normalNum,
         msr.single_num as singleNum,mss.user_name as userName,mss.grender, mss.age,mss.family_status as familyStatus,
         mss.medical,mss.temperature,mss.cough,mss.muscle ,mss.dyspnea,mss.fatigue,mss.diarrhea,mss.single_room as singleRoom,mss.score_rezult,mss.temperature_score,
-        tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other,ur.user_id as userId
+        tr.trip_id,tr.is_trip,tr.today_local,tr.today_local_other,tr.work_local,tr.work_local_other, tr.auto_local, tr.auto_addr,ur.user_id as userId
         from sys_uptown_house suh
         inner join sys_uptown_home suho on suho.house_id=suh.house_id
         INNER JOIN sys_uptown_unit suu ON suu.unit_id = suh.unit_id and suu.uptown_id=#{uptownId}