jiangping
2025-04-23 c44c76ea3e1f6b70bb84bdde85ffd1b389e5b8f4
Merge remote-tracking branch 'origin/master'
已修改14个文件
171 ■■■■■ 文件已修改
h5/App.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/chart_details/chart_details.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/details_dca/details_dca.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/report/report.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/workOrder/workOrder.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/decryption.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/http.api.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/utils/http.interceptor.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/web/WebWorkOrderController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Workorder.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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:
    # 默认时区