| | |
| | | |
| | | # VUE_APP_API_URL = 'http://192.168.1.45:10010' |
| | | |
| | | VUE_APP_API_URL = 'http://192.168.0.7/system_gateway' |
| | | #VUE_APP_API_URL = 'http://192.168.0.7/system_gateway' |
| | | |
| | | VUE_APP_API_URL = 'http://localhost:10010' |
| | | |
| | |
| | | export function getList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/device/getList', data) |
| | | } |
| | | export function allList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/device/list', data) |
| | | } |
| | | export function getDeviceRoleList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/deviceRole/list', data) |
| | | } |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="50%" |
| | | width="80%" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | @confirm="confirm" |
| | |
| | | 2.发生区域非必填,不填则表示该规则下所有区域的相应报警类型均通知;<br> |
| | | </p> |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <el-form-item label="选择签到通知人员" prop="memberIds" style="margin-bottom: 30px" > |
| | | <el-select v-model="memberSelect" filterable multiple clearable placeholder="请选择" @change="changeMembers"> |
| | | <el-option v-for="item in memberList" :key="'member_'+item.id" :label="item.name+'-'+item.companyName" :value="item.id+''"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <div style="display: flex;" v-for="(item,index) in form.detailList" :key="'region_'+item.random" > |
| | | <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'规则'+(index +1)}}</span> |
| | | <el-form-item label="" style="display: inline-block;margin-left: 10px; " > |
| | |
| | | <el-form-item label="发生间隔时间(秒)" prop="intervalSec"> |
| | | <el-input type="number" v-model="form.intervalSec" placeholder="请输入多规则间隔时间(秒)" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="钉钉通知" prop="memberNotice" style="display:inline-block;width: 50%;"> |
| | | <el-switch style="margin-right:30px;width:100px" v-model="form.memberNotice" :active-value="1" :inactive-value="0" active-text="开" inactive-text="关"></el-switch> |
| | | </el-form-item> |
| | | <el-form-item label="选择钉钉通知人员" v-if="form.memberNotice ==1" prop="memberIds" style="margin-bottom: 30px" > |
| | | <el-select v-model="memberSelect" filterable multiple clearable placeholder="请选择" @change="changeMembers"> |
| | | <el-option v-for="item in memberList" :key="'member_'+item.id" :label="item.name+'-'+item.companyName" :value="item.id+''"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="广播通知" prop="deviceNotice" style="display:inline-block;width: 50%;" > |
| | | <el-switch style="margin-right:30px;width: 100px" v-model="form.deviceNotice" :active-value="1" :inactive-value="0" active-text="开" inactive-text="关">></el-switch> |
| | | </el-form-item> |
| | | <el-form-item label="选择播报广播" v-if="form.deviceNotice ==1" prop="deviceIds" style="margin-bottom: 30px" > |
| | | <el-select v-model="deviceSelect" filterable multiple clearable placeholder="请选择" @change="changeDevices"> |
| | | <el-option v-for="item in deviceList" :key="'device_'+item.id" :label="item.name" :value="item.id+''"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="广播播报内容" v-if="form.deviceNotice ==1" prop="deviceNoticeContent"> |
| | | <el-input type="text" v-model="form.deviceNoticeContent" placeholder="请输入播报内容" v-trim/> |
| | | </el-form-item> |
| | | </el-form> |
| | | </GlobalWindow> |
| | | </template> |
| | |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { allList } from '@/api/business/member' |
| | | import { allList as allDveiceList } from '@/api/business/device' |
| | | import { allList as warningList, regionList } from '@/api/business/warning' |
| | | export default { |
| | | name: 'OperaWarningRuleWindow', |
| | |
| | | form: { |
| | | id: null, |
| | | memberIds: '', |
| | | deviceIds: '', |
| | | deviceNoticeContent: '', |
| | | deviceNotice: 1, |
| | | memberNotice: 1, |
| | | intervalSec: '', |
| | | sortnum: '', |
| | | status: 0, |
| | | detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null ,warningId:null}] |
| | | detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }] |
| | | }, |
| | | deviceSelect: [], |
| | | memberSelect: [], |
| | | memberList: [], |
| | | deviceList: [], |
| | | warningList: [], |
| | | regionList: [], |
| | | // 验证规则 |
| | | rules: { |
| | | memberNotice: [{ required: true, message: '请选择钉钉通知' }], |
| | | deviceNotice: [{ required: true, message: '请选择是否广播通知' }], |
| | | deviceIds: [{ required: true, message: '请选择播报广播', tigger: 'blur' }], |
| | | memberIds: [{ required: true, message: '请选择通知人员', tigger: 'blur' }], |
| | | status: [{ required: true, message: '请选择状态'}] |
| | | status: [{ required: true, message: '请选择状态' }] |
| | | } |
| | | } |
| | | }, |
| | |
| | | children: node.childList |
| | | } |
| | | }, |
| | | changeSel(opt){ |
| | | changeSel (opt) { |
| | | var item = this.form.detailList[opt] |
| | | this.form.detailList[opt].regionCode = null |
| | | this.form.detailList[opt].regionName = null |
| | | if(item.regionId){ |
| | | if (item.regionId) { |
| | | var reg = this.getSelectedObject(item.regionId) |
| | | if(reg){ |
| | | if (reg) { |
| | | this.form.detailList[opt].regionCode = reg.indexCode |
| | | this.form.detailList[opt].regionName = reg.name |
| | | } |
| | | } |
| | | console.log(" this.form.detailList[opt]",reg, this.form.detailList[opt]) |
| | | console.log(' this.form.detailList[opt]', reg, this.form.detailList[opt]) |
| | | }, |
| | | getSelectedObject(id) { |
| | | getSelectedObject (id) { |
| | | if (!id) { |
| | | return null // 没有选中项时返回 null 或 {} 根据需要处理 |
| | | return null // 没有选中项时返回 null 或 {} 根据需要处理 |
| | | } |
| | | const findSelected = (options) => { |
| | | for (const option of options) { |
| | |
| | | if (found) return found // 如果找到返回该对象 |
| | | } |
| | | } |
| | | return null; // 未找到返回 null 或 {} 根据需要处理 |
| | | return null // 未找到返回 null 或 {} 根据需要处理 |
| | | } |
| | | return findSelected(this.regionList); // 开始搜索并返回结果 |
| | | return findSelected(this.regionList) // 开始搜索并返回结果 |
| | | }, |
| | | addDo () { |
| | | this.form.detailList.push({random:Math.random(), regionId: null, regionName: null, regionCode: null,warningId:null }) |
| | | this.form.detailList.push({ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }) |
| | | }, |
| | | delDo (index) { |
| | | if (this.form.detailList.length > 1 && this.form.detailList.length > index) { |
| | |
| | | } |
| | | this.form.memberIds = this.memberSelect.join(',') |
| | | }, |
| | | changeDevices () { |
| | | console.log(this.deviceSelect) |
| | | this.form.deviceIds = '' |
| | | if (!this.deviceSelect || !this.deviceSelect.length) { |
| | | return |
| | | } |
| | | this.form.deviceIds = this.deviceSelect.join(',') |
| | | }, |
| | | open (title, target) { |
| | | this.memberSelect =[] |
| | | this.memberSelect = [] |
| | | this.deviceSelect = [] |
| | | this.title = title |
| | | this.loadMember() |
| | | this.loadDevice() |
| | | this.loadRegions() |
| | | this.loadWarning() |
| | | this.visible = true |
| | | this.form = { |
| | | id: null, |
| | | memberIds: '', |
| | | deviceIds: '', |
| | | intervalSec: '', |
| | | sortnum: '', |
| | | deviceNotice: 1, |
| | | deviceNoticeContent: '', |
| | | memberNotice: 1, |
| | | status: 0, |
| | | detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }] |
| | | detailList: [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }] |
| | | } |
| | | // 新建 |
| | | if (target == null) { |
| | |
| | | this.form[key] = target[key] |
| | | } |
| | | if (!this.form.detailList || !this.form.detailList.length) { |
| | | this.form.detailList = [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }] |
| | | this.form.detailList = [{ random: Math.random(), regionId: null, regionName: null, regionCode: null, warningId: null }] |
| | | } |
| | | if(this.form.memberIds){ |
| | | this.memberSelect = this.form.memberIds.split(",") |
| | | if (this.form.memberIds) { |
| | | this.memberSelect = this.form.memberIds.split(',') |
| | | } |
| | | if (this.form.deviceIds) { |
| | | this.deviceSelect = this.form.deviceIds.split(',') |
| | | } |
| | | }) |
| | | }, |
| | |
| | | this.memberList = res |
| | | }) |
| | | }, |
| | | loadDevice () { |
| | | allDveiceList({ |
| | | type: 4 |
| | | }).then(res => { |
| | | this.deviceList = res |
| | | }) |
| | | }, |
| | | loadWarning () { |
| | | warningList({ |
| | | }).then(res => { |
| | |
| | | <el-form-item label="人员/部门" prop="memberNames"> |
| | | <el-input v-model="searchForm.memberNames" placeholder="请输入人员或部门名" clearable @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="广播名称" prop="memberNames"> |
| | | <el-input v-model="searchForm.deviceNames" placeholder="请输入广播名称" clearable @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="状态" prop="status" > |
| | | <el-select v-model="searchForm.status" placeholder="请选择状态" clearable @change="search"> |
| | | <el-option label="禁用" value="0"></el-option> |
| | |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="title" label="报警规则" min-width="200px" show-tooltip-when-overflow></el-table-column> |
| | | <el-table-column prop="memberNames" label="报警接收人" min-width="200px" show-tooltip-when-overflow></el-table-column> |
| | | <el-table-column prop="memberNames" label="报警接收人" min-width="200px" show-tooltip-when-overflow> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.memberNotice === 1">{{row.memberNames}}</span> |
| | | <span v-else class="red">未开启</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="deviceNames" label="报警播报广播" min-width="200px" show-tooltip-when-overflow> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.deviceNotice === 1">{{row.deviceNames}}</span> |
| | | <span v-else class="red">未开启</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="intervalSec" label="间隔时间(秒)" min-width="100px" ></el-table-column> |
| | | <el-table-column prop="status" label="状态" min-width="100px" > |
| | | <template slot-scope="{row}"> |
| | |
| | | searchForm: { |
| | | title: '', |
| | | memberNames: '', |
| | | deviceNames: '', |
| | | status:'', |
| | | } |
| | | } |
| | |
| | | public ApiResponse<PageData<Device>> findPage (@RequestBody PageWrap<Device> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | return ApiResponse.success(deviceService.findPage(pageWrap)); |
| | | } |
| | | @ApiOperation("查询全部") |
| | | @PostMapping("/list") |
| | | @CloudRequiredPermission("business:device:query") |
| | | public ApiResponse<List<Device>> findPage (@RequestBody Device model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ |
| | | return ApiResponse.success(deviceService.findList(model)); |
| | | } |
| | | |
| | | @ApiOperation("导出Excel") |
| | | @PostMapping("/exportExcel") |
| | |
| | | param.setWithCameras(0); |
| | | List<PageRegionInfoResponse> result = new ArrayList<>(); |
| | | try { |
| | | // result = boardService.getRegionTree( param); |
| | | result = boardService.getRegionTree( param); |
| | | //------TODO---------测试模拟数据----start----- |
| | | for (int i = 0; i < 5; i++) { |
| | | /* for (int i = 0; i < 5; i++) { |
| | | PageRegionInfoResponse t = new PageRegionInfoResponse(); |
| | | t.setName("总区域_"+i); |
| | | t.setIndexCode(i+"_code"); |
| | |
| | | t.getChildList().add(t1); |
| | | } |
| | | result.add(t); |
| | | } |
| | | }*/ |
| | | //------TODO---------测试模拟数据----end----- |
| | | }catch (Exception e){ |
| | | |
| | |
| | | spring: |
| | | profiles: |
| | | active: pro |
| | | active: dev |
| | | application: |
| | | name: visitsAdmin |
| | | # 安全配置 |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.doumee.dao.business.model.Device; |
| | | import com.github.yulichang.base.MPJBaseMapper; |
| | | |
| | | import java.util.Collection; |
| | | |
| | |
| | | * @author 江蹄蹄 |
| | | * @date 2023/11/30 15:33 |
| | | */ |
| | | public interface DeviceMapper extends BaseMapper<Device> { |
| | | public interface DeviceMapper extends MPJBaseMapper<Device> { |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "状态 0禁用 1启用", example = "1") |
| | | @ExcelColumn(name="状态 0禁用 1启用") |
| | | private Integer status; |
| | | @ApiModelProperty(value = "是否人员通知 0否 1是", example = "1") |
| | | private Integer memberNotice; |
| | | @ApiModelProperty(value = "是否广播通知 0否 1是", example = "1") |
| | | private Integer deviceNotice; |
| | | |
| | | @ApiModelProperty(value = "报警类型编码(关联warning)", example = "1") |
| | | @ExcelColumn(name="报警类型编码(关联warning)") |
| | |
| | | |
| | | @ApiModelProperty(value = "通知人员-部门集合,多个英文分号隔开", example = "1") |
| | | private String memberNames; |
| | | |
| | | |
| | | @ApiModelProperty(value = "广播编码集合(关联device),多个英文逗号隔开", example = "1") |
| | | private String deviceIds; |
| | | @ApiModelProperty(value = "广播名称集合,多个英文分号隔开", example = "1") |
| | | private String deviceNames; |
| | | @ApiModelProperty(value = "广播播报内容", example = "1") |
| | | private String deviceNoticeContent; |
| | | |
| | | @ApiModelProperty(value = "人员部门", example = "1") |
| | | @TableField(exist = false) |
| | | private String companyName; |
| | |
| | | |
| | | @Override |
| | | public List<Device> findList(Device device) { |
| | | device.setIsdeleted(Constants.ZERO); |
| | | QueryWrapper<Device> wrapper = new QueryWrapper<>(device); |
| | | return deviceMapper.selectList(wrapper); |
| | | } |
| | |
| | | } |
| | | String input = ""; |
| | | |
| | | model.setSendInfo(param.getSendInfo()); |
| | | return sendBroadcaseBobaoHttpBiz(model); |
| | | } |
| | | public static String sendBroadcaseBobaoHttpBiz(Device model){ |
| | | //重新下发计划 |
| | | JSONObject jsonObject = new JSONObject(); |
| | | |
| | | /* { |
| | | "command": "start", |
| | | "TTSContent": "冀G70122,毛重48.68吨,称重结束,请下磅", |
| | | "audioLevel": 6, |
| | | "audioOutID": [ |
| | | 1 |
| | | ], |
| | | "audioVolume": 100, |
| | | "voiceType": "female", |
| | | "TTSLanguageType": "chinese" |
| | | }*/ |
| | | jsonObject.put("command","start"); |
| | | jsonObject.put("TTSContent",param.getSendInfo()); |
| | | jsonObject.put("TTSContent",model.getSendInfo()); |
| | | jsonObject.put("audioLevel",6); |
| | | jsonObject.put("audioVolume",100); |
| | | jsonObject.put("TTSLanguageType","chinese"); |
| | |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.dao.business.DeviceMapper; |
| | | import com.doumee.dao.business.WarningMapper; |
| | | import com.doumee.dao.business.WarningRuleDetailMapper; |
| | | import com.doumee.dao.business.dao.MemberMapper; |
| | |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private DeviceMapper deviceMapper; |
| | | @Autowired |
| | | private WarningRuleDetailMapper warningRuleDetailMapper; |
| | | |
| | | @Override |
| | |
| | | detail.setEditor(warning.getCreator()); |
| | | } |
| | | |
| | | warning.setMemberNames( initMemberInfo(warning)); |
| | | initMemberInfo(warning); |
| | | initDeviceInfo(warning); |
| | | warning.setTitle(title); |
| | | warningRuleMapper.insert(warning); |
| | | for(WarningRuleDetail detail : warning.getDetailList()){ |
| | |
| | | } |
| | | |
| | | private String initMemberInfo(WarningRule warning) { |
| | | if(Constants.equalsInteger(warning.getMemberNotice(),Constants.ZERO)){ |
| | | return null; |
| | | } |
| | | String[] members = warning.getMemberIds().split(","); |
| | | List<Integer> mIds = new ArrayList<>(); |
| | | for(String str :members){ |
| | |
| | | warning.setMemberIds(memberIds); |
| | | warning.setMemberNames(memberNames); |
| | | return memberNames; |
| | | } |
| | | private String initDeviceInfo(WarningRule warning) { |
| | | if(Constants.equalsInteger(warning.getDeviceNotice(),Constants.ZERO)){ |
| | | return null; |
| | | } |
| | | String[] ids = warning.getDeviceIds().split(","); |
| | | List<Integer> mIds = new ArrayList<>(); |
| | | for(String str :ids){ |
| | | try { |
| | | mIds.add(Integer.parseInt(str)); |
| | | }catch (Exception e){ |
| | | } |
| | | } |
| | | if(mIds.size() ==0){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的设备信息"); |
| | | } |
| | | List<Device> list = deviceMapper.selectJoinList(Device.class,new MPJLambdaWrapper<Device>() |
| | | .selectAll(Device.class ) |
| | | .eq(Device::getIsdeleted,Constants.ZERO ) |
| | | .eq(Device::getType,Constants.FOUR ) |
| | | .in(Device::getId,mIds )); |
| | | if(list == null || list.size() ==0){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的设备信息!"); |
| | | } |
| | | String dids = ""; |
| | | String names = ""; |
| | | for(Device m : list){ |
| | | dids += (StringUtils.isNotBlank(dids)?",":"")+m.getId(); |
| | | names += StringUtils.defaultString(m.getName(),"") +"; "; |
| | | } |
| | | warning.setDeviceIds(dids); |
| | | warning.setDeviceNames(names); |
| | | return names; |
| | | } |
| | | |
| | | @Override |
| | |
| | | detail.setEditDate(warning.getCreateDate()); |
| | | detail.setEditor(warning.getCreator()); |
| | | } |
| | | warning.setMemberNames( initMemberInfo(warning)); |
| | | initMemberInfo(warning); |
| | | initDeviceInfo(warning); |
| | | warning.setTitle(title); |
| | | warningRuleMapper.updateById(warning); |
| | | for(WarningRuleDetail detail : warning.getDetailList()){ |
| | |
| | | queryWrapper.selectAll(WarningRule.class ); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getMemberNames()),WarningRule::getMemberNames, pageWrap.getModel().getMemberNames()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTitle()),WarningRule::getTitle, pageWrap.getModel().getTitle()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDeviceNames()),WarningRule::getDeviceNames, pageWrap.getModel().getDeviceNames()); |
| | | |
| | | if (pageWrap.getModel().getId() != null) { |
| | | queryWrapper.eq(WarningRule::getId, pageWrap.getModel().getId()); |
| | |
| | | if (pageWrap.getModel().getIsdeleted() != null) { |
| | | queryWrapper.eq(WarningRule::getIsdeleted, pageWrap.getModel().getIsdeleted()); |
| | | } |
| | | if (pageWrap.getModel().getMemberNotice() != null) { |
| | | queryWrapper.eq(WarningRule::getMemberNotice, pageWrap.getModel().getMemberNotice()); |
| | | } |
| | | if (pageWrap.getModel().getDeviceNotice() != null) { |
| | | queryWrapper.eq(WarningRule::getDeviceNotice, pageWrap.getModel().getDeviceNotice()); |
| | | } |
| | | if (pageWrap.getModel().getInfo() != null) { |
| | | queryWrapper.eq(WarningRule::getInfo, pageWrap.getModel().getInfo()); |
| | | } |