dever 4 years ago
parent
commit
85f259633f
2 changed files with 166 additions and 13 deletions
  1. 155 2
      admin/page/setting.py
  2. 11 11
      front/templates/mobile/device/index.html

+ 155 - 2
admin/page/setting.py

@@ -5,6 +5,7 @@
     author:rabin
 """
 from .__load__ import *
+import xlrd
 
 class server_path(Load):
 	@Web.auth
@@ -136,6 +137,7 @@ class modbus_code_path(Load):
 			,path = '/setting/modbus_code'
 			,width = '600'
 			,height = '600'
+			,button = ({'name':'批量上传','link':'/setting/upload_update'},)
 			,search = (('label-1','cdate-time-start','cdate-time-end','name-input-mlike','product_id-select-'), (u'日期范围',u'开始时间',u'截止时间',u'设备名称',u'选择产品'))
 			,thead = (u'命令码名称', u'所属产品',u'关联设备类型', u'表达式', u'更新时间')
 			,tbody = ('name', 'product','device_type_key', 'exp', 'cdate')
@@ -149,6 +151,157 @@ class modbus_code_path(Load):
 				self.data['list'][key]['product'] = product['name']
 		self.show('list')
 
+class upload_update_path(Load):
+	@Web.auth
+	@Web.setting
+	def get(self):
+		self.set(
+			path = '/setting/upload'
+			,label = (u'所属产品', u'上传输入点' ,u'上传输出点')
+			,update = ('product_id-select-required','input-file--','output-file--')
+			,update_product_id = self.service('common').list('setting_product')
+		)
+		#self.one('setting_upload')
+		self.data['info'] = {}
+		self.show('update')
+	@Web.auth
+	@Web.setting
+	def post(self):
+		product_id = self.input('update_product_id')
+		inputs = self.input('update_input')
+		output = self.input('update_output')
+		sensor = self.input('update_sensor')
+		#self.inputs(inputs, product_id)
+		self.output(output, product_id)
+		#self.sensor(sensor)
+
+		self.out('操作成功,请关闭本窗口并刷新页面')
+
+	def output(self, source, product_id):
+		temp = source.split('/upload/')
+		path = Demeter.path + '/runtime/upload/' + temp[1]
+		data = xlrd.open_workbook(path)
+		table = data.sheets()[0] 
+		rows = table.nrows
+		cols = table.ncols
+		result = {}
+		for i in range(rows):
+			if i >= 2:
+				name = str(table.cell_value(i,1))
+				cn_name = str(table.cell_value(i,2))
+				if name:
+					temp_slave = str(table.cell_value(i,0))
+					if temp_slave:
+						slave = temp_slave.replace('.0', '')
+
+					temp_read = str(table.cell_value(i,5))
+					if temp_read:
+						read = temp_read
+
+					control_open = str(table.cell_value(i,3)).replace(slave + ',', '') + '#1'
+					control_close = str(table.cell_value(i,4)).replace(slave + ',', '') + '#2'
+					key = str(name) + '_' + str(slave)
+					if key not in result:
+						result[key] = []
+					result[key].append(name)
+					result[key].append(cn_name)
+					result[key].append(slave)
+					result[key].append(read)
+					result[key].append(control_open)
+					result[key].append(control_close)
+
+		#product_id = 1
+		hardware_type = 3
+		device_type_key = 'sw'
+		model = Demeter.model('setting_modbus_code')
+		for i in result:
+			name = result[i][1]
+			slave = result[i][2]
+			read = result[i][3]
+			control_open = result[i][4]
+			control_close = result[i][5]
+			name = name + '_' + i
+			model.product_id = product_id
+			model.name = name
+			info = model.select(type='fetchone')
+			if not info:
+				model.product_id = product_id
+				model.name = name
+				if '转' in name:
+					model.device_type_key = 'zhuan'
+				else:
+					model.device_type_key = 'sw'
+				model.exp = '{n}'
+				model.hardware_type = hardware_type
+				model.slave_id = int(slave)
+				model.register_read_address = str(read)
+				model.register_write_address = control_open + '||' + control_close
+				model.insert()
+
+	def inputs(self, source, product_id):
+		temp = source.split('/upload/')
+		path = Demeter.path + '/runtime/upload/' + temp[1]
+		data = xlrd.open_workbook(path)
+		table = data.sheets()[0] 
+		rows = table.nrows
+		cols = table.ncols
+		result = {}
+		for i in range(rows):
+			if i >= 2:
+				name = str(table.cell_value(i,1))
+				cn_name = str(table.cell_value(i,2))
+				if name:
+					temp_slave = str(table.cell_value(i,3))
+					if temp_slave:
+						slave = temp_slave.replace('.0', '')
+
+					temp_read = str(table.cell_value(i,4))
+					if temp_read:
+						read = temp_read
+
+					write = str(table.cell_value(i,5)).replace('.0', '')
+					key = str(name) + '_' + str(slave)
+					if key not in result:
+						result[key] = []
+					result[key].append(name)
+					result[key].append(cn_name)
+					result[key].append(slave)
+					result[key].append(read)
+					result[key].append(write)
+
+		#product_id = product_id
+		hardware_type = 2
+		device_type_key = 'zhuan'
+		model = Demeter.model('setting_modbus_code')
+		for i in result:
+			name = result[i][1]
+			slave = result[i][2]
+			read = result[i][3]
+			write = result[i][4]
+			name = name + '_' + i
+			model.product_id = product_id
+			model.name = name
+			info = model.select(type='fetchone')
+			if not info:
+				model.product_id = product_id
+				model.name = name
+				if '转' in name:
+					model.device_type_key = 'zhuan'
+				else:
+					model.device_type_key = 'sw'
+				model.exp = '{n}'
+				model.hardware_type = hardware_type
+				model.slave_id = int(slave)
+				model.register_read_address = str(read)
+				model.register_write_address = ''
+				model.insert()
+		
+	@Web.auth
+	@Web.setting
+	def delete(self):
+		self.drop('setting_upload')
+		
+
 class modbus_code_update_path(Load):
 	@Web.auth
 	@Web.setting
@@ -156,7 +309,7 @@ class modbus_code_update_path(Load):
 		self.set(
 			path = '/setting/modbus_code'
 			,label = (u'命令码名称',u'所属产品',u'设备类型',u'表达式',u'硬件类型',u'从机id',u'寄存器读取地址',u'寄存器写入地址')
-			,update = ('name-input-required','product_id-select-required','device_type_key-text-required-直接输入设备类型的key,多个用换行隔开','exp-text--{n}为当前数据,多个用换行隔开','hardware_type-select-required','slave_id-input-required','register_read_address-text-required-多个用换行隔开,寄存器类型,地址,长度','register_write_address-text--多个用换行隔开,寄存器类型,地址,长度(可为空)')
+			,update = ('name-input-required','product_id-select-required','device_type_key-text-required-直接输入设备类型的key,多个用换行隔开','exp-text--{n}为当前数据,多个用换行隔开','hardware_type-select-required','slave_id-input-required','register_read_address-text-required-多个用换行隔开,寄存器类型,地址,长度','register_write_address-text--多个用换行隔开,寄存器类型,地址,值#1||寄存器类型,地址,值#2||寄存器类型,地址,值#5&&寄存器类型,地址,值,其中,1是开启或者升起,2是关闭或者下降,5是停止')
 			,update_product_id = self.service('common').list('setting_product')
 			,update_device_type = self.service('common').list('setting_device_type')
 			#,update_oper_type = Demeter.service('core', 'setting').oper_type()
@@ -168,7 +321,7 @@ class modbus_code_update_path(Load):
 	@Web.auth
 	@Web.setting
 	def post(self):
-		id = self.update('setting_modbus_code')
+		self.update('setting_modbus_code')
 	@Web.auth
 	@Web.setting
 	def delete(self):

+ 11 - 11
front/templates/mobile/device/index.html

@@ -23,16 +23,6 @@
                     <i class="ico ico-3"></i><span>批量控制</span><p><i>&gt;</i></p>
                 </a>
             </li>
-            <li class="form-input">
-                <a href="/device/group">
-                    <i class="ico ico-4"></i><span>设备分组</span><p><i>&gt;</i></p>
-                </a>
-            </li>
-            <li class="form-input">
-                <a href="/device/set_mul">
-                    <i class="ico ico-6"></i><span>智能设置</span><p><i>&gt;</i></p>
-                </a>
-            </li>
         </ul>
         <div class="form-group-head">设备管理</div>
         <ul>
@@ -44,8 +34,18 @@
             </li>
             {% end %}
         </ul>
-        <div class="form-group-head">基础信息</div>
+        <div class="form-group-head">基础管理</div>
         <ul>
+            <li class="form-input">
+                <a href="/device/group">
+                    <i class="ico ico-4"></i><span>设备分组</span><p><i>&gt;</i></p>
+                </a>
+            </li>
+            <li class="form-input">
+                <a href="/device/set_mul">
+                    <i class="ico ico-6"></i><span>智能设置</span><p><i>&gt;</i></p>
+                </a>
+            </li>
             <li class="form-input">
                 <a href="/msg">
                     <i class="ico ico-5"></i><span>消息通知提醒</span><p>{% if 'msgNum' in data['setting'] and data['setting']['msgNum']%}<b>{{data['setting']['msgNum']}}</b>{% end %}<i>&gt;</i></p>