h5/App.vue
@@ -11,13 +11,14 @@ }, methods: { async init() { // if (!this.$store.state.userInfo) { // let res = await this.$u.api.login({ code: 'ShiXuHui' }) // if (res.code === 200) { // this.$store.commit('setUserInfo', res.data) // } // } // return // ShiXuHui GuoJiWenWu if (!this.$store.state.userInfo) { let res = await this.$u.api.login({ code: 'GuoJiWenWu' }) if (res.code === 200) { this.$store.commit('setUserInfo', res.data) } } return let code = this.getQueryVariable('code') if (code) { if (!uni.getStorageSync('code')) { @@ -81,7 +82,7 @@ } } } } else { let loc_href = encodeURIComponent("https://dmtest.ahapp.net/lianhelihua_web/") h5/main.js
@@ -10,8 +10,8 @@ App.mpType = 'app' Vue.use(uView); Vue.prototype.$baseUrl = 'https://dmtest.ahapp.net/lianhelihua_interface' // Vue.prototype.$baseUrl = 'http://192.168.0.131:10040' // Vue.prototype.$baseUrl = 'https://dmtest.ahapp.net/lianhelihua_interface' Vue.prototype.$baseUrl = 'http://192.168.0.134:10040' Vue.prototype.$store = store; Vue.prototype.$ww = ww; Vue.prototype.$vConsole= new Vconsole() h5/pages/chart_details/chart_details.vue
@@ -7,11 +7,11 @@ </view> <view class="search_item" v-if="['2'].includes(this.type)" @click="$refs.pengTree._show()"> <view class="search_item_label">位置</view> <view class="search_item_value">{{ model.localtionName ? model.localtionName : '全部' }}</view> <view class="search_item_value">{{ model.localtionId ? model.localtionName : '全部' }}</view> </view> <view class="search_item" v-if="['2'].includes(this.type)" @click="openZT"> <view class="search_item_label">主题</view> <view class="search_item_value">{{ model.typeName ? model.typeName : '全部' }}</view> <view class="search_item_value">{{ model.typeId ? model.typeName : '全部' }}</view> </view> <view class="search_item" @click="openRQ"> <view class="search_item_label">日期</view> @@ -230,6 +230,7 @@ async getLocation() { let res = await this.$u.api.categoryTree({ categoryType: 3 }) if (res.code === 200) { res.data.unshift({ name: '全部', id: '', childList: [] }) this.address = res.data } }, @@ -237,6 +238,7 @@ async getZhuti() { let res = await this.$u.api.categoryList({ categoryType: 4, isRoot: 1 }) if (res.code === 200) { res.data.unshift({ name: '全部', id: '', childList: [] }) this.theme = [res.data] } }, h5/pages/details_dca/details_dca.vue
@@ -62,6 +62,9 @@ <view class="dca_wt_list_item_btn" v-if="item.closeButton === 1"> <view class="btn" @click="handle(item.id)">处理</view> </view> <view class="dca_wt_list_item_btn" v-else> <view class="btn" @click="handle(item.id)">查看</view> </view> </view> </view> </view> h5/pages/report/report.vue
@@ -10,11 +10,11 @@ <u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon> </view> <view class="report_search_row" @click="$refs.pengTree._show()" v-if="['3'].includes(typeId)"> <text>{{locationName ? locationName : '发生地点'}}</text> <text>{{localtionId ? locationName : '发生地点'}}</text> <u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon> </view> <view class="report_search_row" @click="$refs.pengTree1._show()" v-if="['1'].includes(typeId)"> <text>{{locationName ? locationName : '位置'}}</text> <text>{{localtionId ? locationName : '位置'}}</text> <u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon> </view> </view> @@ -150,7 +150,7 @@ this.$refs.pengTree._hide() }, // 位置 selectAddress(e) { selectAddress1(e) { this.localtionId = e[0].id this.locationName = e[0].name this.search.page = 1 @@ -163,6 +163,7 @@ async getLocation() { let res = await this.$u.api.categoryTree({ categoryType: 2 }) if (res.code === 200) { res.data.unshift({ name: '全部', id: '', childList: [] }) this.address = res.data } }, @@ -170,6 +171,7 @@ async getLocation1() { let res = await this.$u.api.categoryTree({ categoryType: 3 }) if (res.code === 200) { res.data.unshift({ name: '全部', id: '', childList: [] }) this.address1 = res.data } }, h5/pages/workOrder/workOrder.vue
@@ -10,11 +10,11 @@ <u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon> </view> <view class="report_search_row" @click="$refs.pengTree._show()" v-if="['3'].includes(typeId)"> <text>{{locationName ? locationName : '发生地点'}}</text> <text>{{localtionId ? locationName : '发生地点'}}</text> <u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon> </view> <view class="report_search_row" @click="$refs.pengTree1._show()" v-if="['1'].includes(typeId)"> <text>{{locationName ? locationName : '位置'}}</text> <text>{{localtionId ? locationName : '位置'}}</text> <u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon> </view> </view> @@ -163,6 +163,7 @@ async getLocation() { let res = await this.$u.api.categoryTree({ categoryType: 2 }) if (res.code === 200) { res.data.unshift({ name: '全部', id: '', childList: [] }) this.address = res.data } }, @@ -170,6 +171,7 @@ async getLocation1() { let res = await this.$u.api.categoryTree({ categoryType: 3 }) if (res.code === 200) { res.data.unshift({ name: '全部', id: '', childList: [] }) this.address1 = res.data } }, h5/utils/decryption.js
@@ -10,15 +10,15 @@ // const privateKey = uni.getStorageSync('aes_private_key') export function decryptedData (msg, data) { console.log(msg) console.log(data) // console.log(msg) // console.log(data) // 变换key:将当月位数字符串去除,然后倒序 const monthIndex = new Date().getMonth() + 1 const msgStr = msg.slice(0, monthIndex) + msg.slice(monthIndex + 1) const reverseMsgStr = msgStr.split('').reverse().join('') const str1 = data.replace(/\s/g, '') console.log(reverseMsgStr) console.log(str1) // console.log(reverseMsgStr) // console.log(str1) // 解密并返回结果 return ( JSON.parse( h5/utils/http.api.js
@@ -7,23 +7,23 @@ return config; }) let login = (data = {}) => vm.$u.http.post('web/member/loginH5', data); // 登录 encryptData(data) let login = (data = {}) => vm.$u.http.post('web/member/loginH5', encryptData(data)); // 登录 let categoryTree = (params = {}) => vm.$u.http.get('web/category/categoryTree', { params }); // 查询树 let workOrderCreate = (data = {}) => vm.$u.http.post('web/workOrder/create', data); // 创建工单 let workOrderCreate = (data = {}) => vm.$u.http.post('web/workOrder/create', encryptData(data)); // 创建工单 let upload = (data = {}) => vm.$u.http.post('web/public/upload', data); // 上传 let uploadBatch = (data = {}) => vm.$u.http.post('web/public/uploadBatch', data); // 批量上传文件到FTP let detail = (params = {}) => vm.$u.http.get('web/workOrder/detail', { params }); // 风险上报详情 let managersList = (data = {}) => vm.$u.http.post('web/workOrder/managersList', data); // 上传 let managersList = (data = {}) => vm.$u.http.post('web/workOrder/managersList', encryptData(data)); // 上传 let categoryList = (params = {}) => vm.$u.http.get('web/category/categoryList', { params }); // 获取分类类别获取分类列表 let page = (data = {}) => vm.$u.http.post('web/workOrder/page', data); // 分页查询 let getWorkOrderData = (data = {}) => vm.$u.http.post('web/workOrder/getWorkOrderData', data); // 分页查询 let passOn = (data = {}) => vm.$u.http.post('web/workOrder/passOn', data); // 工单指派 let closeWorkOrder = (data = {}) => vm.$u.http.post('web/workOrder/closeWorkOrder', data); // 工单关闭 let page = (data = {}) => vm.$u.http.post('web/workOrder/page', encryptData(data)); // 分页查询 let getWorkOrderData = (data = {}) => vm.$u.http.post('web/workOrder/getWorkOrderData', encryptData(data)); // 分页查询 let passOn = (data = {}) => vm.$u.http.post('web/workOrder/passOn', encryptData(data)); // 工单指派 let closeWorkOrder = (data = {}) => vm.$u.http.post('web/workOrder/closeWorkOrder', encryptData(data)); // 工单关闭 let urge = (params = {}) => vm.$u.http.get('web/workOrder/urge', { params }); // 工单催促 let sendCopy = (data = {}) => vm.$u.http.post('web/workOrder/sendCopy', data); // 工单抄送 let getQwSignature = (data = {}) => vm.$u.http.post('web/member/getQwSignature', data); // 获取titket let sendCopy = (data = {}) => vm.$u.http.post('web/workOrder/sendCopy', encryptData(data)); // 工单抄送 let getQwSignature = (data = {}) => vm.$u.http.post('web/member/getQwSignature', encryptData(data)); // 获取titket let getCategoryVOForGCXTree = (params = {}) => vm.$u.http.get('web/category/getCategoryVOForGCXTree', { params }); // 查询树 let getCopySendUserPage = (data = {}) => vm.$u.http.post('web/member/getCopySendUserPage', data); // 查询可被抄送人分页 let getCopySendUserPage = (data = {}) => vm.$u.http.post('web/member/getCopySendUserPage', encryptData(data)); // 查询可被抄送人分页 vm.$u.api = { login, h5/utils/http.interceptor.js
@@ -30,6 +30,7 @@ if (response.data.code === 5112) { uni.showToast({ title: '登录过期,正在重新跳转授权', icon: 'none', duration: 2000, success() { setTimeout(() => { @@ -50,16 +51,17 @@ duration: 2000 }); } // if (response.data.message) { // const tm = response.data.message // const list = tm.split(' ') // let msg = list[0] // if (list.length > 1 && response.data.data) { // msg = decryptedData(list[1], list[0]) // response.data.data = decryptedData(list[1], response.data.data) // response.data.message = msg // } // } if (response.data.message) { const tm = response.data.message const list = tm.split(' ') let msg = list[0] if (list.length > 1 && response.data.data) { msg = decryptedData(list[1], list[0]) response.data.data = decryptedData(list[1], response.data.data) console.log(response.data.data) response.data.message = msg } } return response.data; }, (response) => { return Promise.reject(response) server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
@@ -4,6 +4,7 @@ import com.doumee.config.annotation.EncryptionReq; import com.doumee.config.annotation.EncryptionResp; import com.doumee.config.annotation.LoginRequired; import com.doumee.core.constants.Constants; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.ApiResponse; @@ -17,6 +18,7 @@ import com.doumee.service.business.ManagersService; import com.doumee.service.business.MemberService; import com.doumee.service.business.WorkorderService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.java.Log; @@ -212,7 +214,8 @@ try { Member member = jwtTokenUtil.getUserInfoByToken(token); pageWrap.getModel().setQwId(member.getQwId()); return ApiResponse.success(workorderService.findPage(pageWrap)); PageData<Workorder> pageData = workorderService.findPage(pageWrap); return ApiResponse.success(pageData); }catch (BusinessException e){ return ApiResponse.failed(e.getCode(),e.getMessage()); }catch (Exception e){ server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -222,7 +222,6 @@ @TableField(exist = false) private Long num; @ApiModelProperty("文件路径前缀") @TableField(exist = false) private String path; server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -90,7 +90,7 @@ Category com = new Category(); com.setId(category.getId()); com.setIdPath(idPath+category.getId()+"/"); com.setIdPath(idPath+"/"+category.getId()+"/"); categoryMapper.updateById(com); return category.getId(); server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -207,7 +207,7 @@ //处理上报日志 DCA工单 日志存储至子业务 不存在于父级 与跌绊滑 String logTitle = Constants.equalsInteger(workorder.getType(), Constants.THREE) ? "跌绊滑风险" : "DCA"; workorder.setCreateDate(workorder.getSubmitDate()); this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId(),workOrderStatus.getLogTitle().replace("{title}",logTitle),null,null); this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId(),workOrderStatus.getLogTitle().replace("{title}",logTitle),null,null,null); } } @@ -404,7 +404,7 @@ * @param memberId * @param paramr2 转交给的处理人 */ public Integer saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId,String title,String content,String paramr2){ public Integer saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId,String title,String content,String paramr2,String remark){ WorkorderLog workorderLog = new WorkorderLog(); workorderLog.setCreateDate(afterWorkorder.getEditDate()); workorderLog.setEditDate(afterWorkorder.getEditDate()); @@ -417,6 +417,7 @@ workorderLog.setObjType(objType); workorderLog.setTitle(title); workorderLog.setContent(content); workorderLog.setRemark(remark); workorderLogMapper.insert(workorderLog); return workorderLog.getId(); } @@ -613,18 +614,19 @@ } } } //查询附件信息 List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() .eq(Multifile::getIsdeleted,Constants.ZERO) .ne(Multifile::getObjType,Constants.multiFileType.upload) .eq(Multifile::getObjId,workorderLog.getId()) .orderByAsc(Multifile::getId)); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ for (Multifile multifile:multifileList) { multifile.setFileurlFull(path+multifile.getFileurl()); if(!Constants.equalsInteger(workorderLog.getObjType(),Constants.FOUR)){ //查询附件信息 List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda() .eq(Multifile::getIsdeleted,Constants.ZERO) .ne(Multifile::getObjType,Constants.multiFileType.upload) .eq(Multifile::getObjId,workorderLog.getId()) .orderByAsc(Multifile::getId)); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ for (Multifile multifile:multifileList) { multifile.setFileurlFull(path+multifile.getFileurl()); } workorderLog.setMultifileList(multifileList); } workorderLog.setMultifileList(multifileList); } } } @@ -706,7 +708,8 @@ .ne(org.apache.commons.lang3.StringUtils.isNotBlank(pageWrap.getQwId()),Workorder::getType,Constants.TWO) .in(Objects.nonNull(pageWrap.getDealStatus())&& Constants.equalsInteger(pageWrap.getDealStatus(),Constants.ZERO), Workorder::getStatus,Constants.WorkOrderStatus.waitConfirm.getKey(),Constants.WorkOrderStatus.waitAllocation.getKey(),Constants.WorkOrderStatus.waitDeal.getKey()) Workorder::getStatus,Constants.WorkOrderStatus.waitConfirm.getKey(), Constants.WorkOrderStatus.waitAllocation.getKey(),Constants.WorkOrderStatus.waitDeal.getKey()) .in(Objects.nonNull(pageWrap.getDealStatus())&& Constants.equalsInteger(pageWrap.getDealStatus(),Constants.ONE), Workorder::getStatus,Constants.WorkOrderStatus.sheClose.getKey(),Constants.WorkOrderStatus.close.getKey(),Constants.WorkOrderStatus.wtsClose.getKey()) @@ -847,7 +850,13 @@ if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO && !workorder.getManagerId().equals(closeDTO.getMember().getQwId())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理"); } workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey()); if(workorder.getManagerId().equals(closeDTO.getMember().getQwId())){ workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey()); }else if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())>Constants.ZERO){ workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey()); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理"); } qwIds.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(","))); qwIds.add(workorder.getManagerId()); qwIds.remove(closeDTO.getMember().getQwId()); @@ -857,7 +866,15 @@ && !workorder.getDealerId().equals(closeDTO.getMember().getQwId()) ){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理"); } workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey()); if(workorder.getManagerId().equals(closeDTO.getMember().getQwId())){ workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey()); }else if(workorder.getDealerId().equals(closeDTO.getMember().getQwId())){ workorder.setStatus(Constants.WorkOrderStatus.close.getKey()); }else if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())>Constants.ZERO){ workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey()); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理"); } qwIds.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(","))); qwIds.add(workorder.getManagerId()); qwIds.remove(closeDTO.getMember().getQwId()); @@ -867,9 +884,21 @@ workorder.setEditDate(new Date()); workorder.setDealTime(new Date()); workorder.setDealInfo(closeDTO.getInfo()); //子工单 则查询父级工单数据 是否付存在未完成的 如果不存在未完成的则进行主工单状态变化 if(Constants.equalsInteger(workorder.getType(),Constants.TWO)&& workorderMapper.selectCount(new QueryWrapper<Workorder>().lambda().eq(Workorder::getDcaRecordId,workorder.getDcaRecordId()).eq(Workorder::getIsdeleted,Constants.ZERO) .ne(Workorder::getId,workorder.getId()).in(Workorder::getStatus, Constants.WorkOrderStatus.waitConfirm.getKey(),Constants.WorkOrderStatus.waitAllocation.getKey(),Constants.WorkOrderStatus.waitDeal.getKey() ))<=Constants.ZERO){ Workorder parentWorkorder = new Workorder(); parentWorkorder.setId(workorder.getDcaRecordId()); parentWorkorder.setEditDate(new Date()); parentWorkorder.setStatus(Constants.WorkOrderStatus.close.getKey()); workorderMapper.updateById(parentWorkorder); } workorderMapper.updateById(workorder); //处理上报日志 Integer logId = this.saveLog(beforeJson,workorder,Constants.THREE,closeDTO.getMember().getId(),"任务已处理",closeDTO.getInfo(),null); Integer logId = this.saveLog(beforeJson,workorder,Constants.THREE,closeDTO.getMember().getId(),"任务已处理",closeDTO.getInfo(),null,closeDTO.getInfo()); List<Multifile> multifileList = closeDTO.getMultifileList(); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ for (Multifile multifile:multifileList) { @@ -935,7 +964,7 @@ //处理上报日志 Integer logId = this.saveLog(beforeJson,workorder, Constants.equalsInteger(passOnDTO.getPassOnType(),Constants.ZERO)?Constants.ONE:Constants.TWO ,passOnDTO.getMember().getId(),"任务分配",passOnDTO.getInfo(),paramr2); ,passOnDTO.getMember().getId(),"任务分配",passOnDTO.getInfo(),paramr2,null); List<Multifile> multifileList = passOnDTO.getMultifileList(); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ for (Multifile multifile:multifileList) { @@ -1152,7 +1181,7 @@ this.saveLog(null,workorder, Constants.FOUR ,member.getId(),"催促","已催促 "+urgeUser.getCompanyName() + "/" + urgeUser.getName(),null); ,member.getId(),"催促","已催促 "+urgeUser.getCompanyName() + "/" + urgeUser.getName(),null,null); //发送企微通知 Category category = categoryMapper.selectById(workorder.getTypeId()); if(Objects.nonNull(category)){ server/src/main/resources/application.yml
@@ -9,7 +9,7 @@ spring: profiles: active: dev active: test # JSON返回配置 jackson: # 默认时区