admin/src/api/business/customerLog.js
@@ -24,6 +24,12 @@ export function updateById (data) { return request.post('/business/customerLog/updateById', data) } export function reSubmit (data) { return request.post('/business/customerLog/reSubmit', data) } export function reSubmitAll (data) { return request.post('/business/customerLog/reSubmitAll', data) } // 删除 export function deleteById (id) { admin/src/components/business/OperaShopWindow.vue
@@ -167,9 +167,12 @@ .then(res => { this.provinces = res }) if(this.form.provinceCode){ this.selectProvince(this.form.provinceCode,true) } }, // 选择省份 selectProvince (val) { selectProvince (val,isInit) { this.provinces.forEach(item => { if (item.id == val) { this.form.provinceName = item.name @@ -177,29 +180,35 @@ }) this.cities = [] this.areas = [] this.form.cityName = '' this.form.areaCode = '' this.form.cityCode = '' this.form.areaName = '' if(!isInit){ this.form.cityName = '' this.form.areaCode = '' this.form.cityCode = '' this.form.areaName = '' } if(!val || val ==''){ return } this.api.areaList({ pid: val }) .then(res => { this.cities = res this.selectCity(this.form.cityId) if(isInit){ this.selectCity(this.form.cityCode,isInit) } }) }, // 选择城市 selectCity (val) { selectCity (val,isInit) { this.cities.forEach(item => { if (item.id == val) { this.form.cityName = item.name } }) this.areas = [] this.form.areaCode = '' this.form.areaName = '' if(!isInit){ this.form.areaCode = '' this.form.areaName = '' } if(!val || val ==''){ return } admin/src/views/business/customerLog.vue
@@ -42,25 +42,27 @@ </el-form> <!-- 表格和分页 --> <template v-slot:table-wrap> <!-- <ul class="toolbar" v-permissions="['business:customerlog:create', 'business:customerlog:delete']"> <li><el-button type="primary" @click="$refs.operaCustomerLogWindow.open('新建客户留资记录信息表')" icon="el-icon-plus" v-permissions="['business:customerlog:create']">新建</el-button></li> <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:customerlog:delete']">删除</el-button></li> </ul>--> <ul class="toolbar" v-permissions="['business:customerlog:create', 'business:customerlog:delete']"> <li><el-button type="primary" @click="reSubmitAll(0)" icon="el-icon-plus" v-permissions="['business:customerlog:update']">提交全部【未提交】数据</el-button></li> <li><el-button type="primary" @click="reSubmitAll(2)" icon="el-icon-plus" v-permissions="['business:customerlog:update']">重新提交【失败】数据</el-button></li> </ul> <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="createDate" label="创建时间" min-width="120px"></el-table-column> <el-table-column prop="type" label="提交类型" min-width="100px"> <el-table-column prop="index" width="55"><template slot-scope="scope">{{scope.$index+1}}</template></el-table-column> <el-table-column prop="type" label="提交类型" fixed min-width="100px"> <template slot-scope="{row}"> <span v-if="row.type ==0">测试装修风格</span> <span v-if="row.type ==1">0元定制</span> <span v-if="row.type ==2">装修计算器</span> </template> </el-table-column> <el-table-column prop="phone" label="手机号" fixed min-width="100px"></el-table-column> <el-table-column prop="name" label="姓名" fixed min-width="100px"></el-table-column> <el-table-column prop="createDate" label="创建时间" min-width="120px"></el-table-column> <el-table-column prop="orderDate" label="预约量房时间" min-width="120px"></el-table-column> <el-table-column prop="plaDate" label="计划装修开始时间" min-width="120px"> <template slot-scope="{row}"> @@ -119,7 +121,6 @@ <el-table-column prop="styleInfo" label="风格" min-width="100px"></el-table-column> <el-table-column prop="provinceName" label="省份名称" min-width="100px"></el-table-column> <el-table-column prop="cityName" label="城市名称" min-width="100px"></el-table-column> <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column> <el-table-column prop="budget" label="装修预算(元)" min-width="100px"></el-table-column> <el-table-column prop="crmStatus" label="crm提交状态" min-width="100px"> <template slot-scope="{row}"> @@ -133,12 +134,13 @@ <el-table-column v-if="containPermissions(['business:customerlog:update', 'business:customerlog:delete'])" label="操作" min-width="120" min-width="150" fixed="right" align="center" > <template slot-scope="{row}"> <el-button type="text" @click="$refs.operaCustomerLogWindow.open('编辑客户留资记录信息表', row)" icon="el-icon-edit" v-permissions="['business:customerlog:update']">编辑</el-button> <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:customerlog:update']" v-if="row.crmStatus !=1">重新提交crm</el-button> <!-- <el-button type="text" @click="$refs.operaCustomerLogWindow.open('编辑客户留资记录信息表', row)" icon="el-icon-edit" v-permissions="['business:customerlog:update']">编辑</el-button>--> <el-button type="text" @click="reSubmit(row)" icon="el-icon-edit" v-permissions="['business:customerlog:update']" v-if="row.crmStatus !=1">重新提交crm</el-button> </template> </el-table-column> </el-table> @@ -165,6 +167,7 @@ components: { TableLayout, Pagination, OperaCustomerLogWindow }, data () { return { running: false, // 搜索 searchForm: { queryEndDate: '', @@ -188,6 +191,31 @@ }, methods: { // 查询数据 reSubmit (row) { this.api.reSubmit({ id: row.id }) .then(res => { this.handlePageChange() }) .finally(() => { }) }, reSubmitAll (status) { this.$dialog.actionConfirm('确认进行该操作吗??') .then(() => { this.running = true this.api.reSubmitAll({ crmStatus: status }) .then(res => { this.handlePageChange() }) .finally(() => { }) .catch(e => { }) .finally(() => { this.running = false }) }) } } } </script> server/admin/src/main/java/com/doumee/api/business/CustomerLogController.java
@@ -66,6 +66,20 @@ customerLogService.updateById(customerLog); return ApiResponse.success(null); } @ApiOperation("根据ID重新提交crm") @PostMapping("/reSubmit") @RequiresPermissions("business:customerlog:update") public ApiResponse reSubmit(@RequestBody CustomerLog customerLog) { customerLogService.reSubmit(customerLog); return ApiResponse.success(null); } @ApiOperation("根据crm状态批量提交至crm") @PostMapping("/reSubmitAll") @RequiresPermissions("business:customerlog:update") public ApiResponse reSubmitAll(@RequestBody CustomerLog customerLog) { customerLogService.reSubmitAll(customerLog); return ApiResponse.success(null); } @ApiOperation("分页查询") @PostMapping("/page") server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
@@ -54,6 +54,9 @@ @Override @Async public void dealCustomerLogData(CustomerLog customerLog){ if(StringUtils.isBlank(customerLog.getPhone())){ return; } CrmCustomerInfoRequest entity = new CrmCustomerInfoRequest(); entity.setId(customerLog.getId()); entity.setName(customerLog.getName()); server/service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
@@ -25,21 +25,9 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Bean // @Bean public WxMpConfigStorage wxMpConfigStorage() { WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl(); try { // 公众号appId configStorage.setAppId(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode()); // 公众号appSecret configStorage.setSecret(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode()); // 公众号Token configStorage.setToken(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode()); // 公众号EncodingAESKey // configStorage.setAesKey(); }catch (Exception e){ log.error("读取微信小程序相关配置错误========"+e.getMessage()); } return configStorage; } server/service/src/main/java/com/doumee/service/business/CustomerLogService.java
@@ -54,7 +54,7 @@ * @param customerLogs 实体集 */ void updateByIdInBatch(List<CustomerLog> customerLogs); void reSubmitAll(CustomerLog log); /** * 主键查询 * @@ -94,4 +94,6 @@ * @return long */ long count(CustomerLog customerLog); void reSubmit(CustomerLog customerLog); } server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java
@@ -1,5 +1,8 @@ package com.doumee.service.business.impl; import com.doumee.biz.zbom.ZbomCRMService; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; @@ -29,6 +32,8 @@ @Autowired private CustomerLogMapper customerLogMapper; @Autowired private ZbomCRMService zbomCRMService; @Override public Long create(CustomerLog customerLog) { @@ -61,6 +66,37 @@ } @Override public void reSubmit(CustomerLog customerLog){ CustomerLog log = customerLogMapper.selectById(customerLog.getId()); if(log ==null || Constants.equalsInteger(log.getIsdeleted(),Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(Constants.equalsInteger(log.getCrmStatus(),Constants.ONE)){ //如果已经提交成功过 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该留资数据已提交,无需重新提交!"); } zbomCRMService.dealCustomerLogData(log); } @Override public void reSubmitAll(CustomerLog log){ List<CustomerLog> logList = customerLogMapper.selectList(new QueryWrapper<CustomerLog>() .lambda() .eq(CustomerLog::getIsdeleted,Constants.ZERO) .eq(log.getCrmStatus()!=null,CustomerLog::getCrmStatus,log.getCrmStatus()) .ne(CustomerLog::getCrmStatus,Constants.ONE)); if(logList ==null || logList.size() ==0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,不存在待处理数据"); } if(Constants.equalsInteger(log.getCrmStatus(),Constants.ONE)){ //如果已经提交成功过 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该留资数据已提交,无需重新提交!"); } for(CustomerLog model :logList){ zbomCRMService.dealCustomerLogData(model); } } @Override public void updateByIdInBatch(List<CustomerLog> customerLogs) { if (CollectionUtils.isEmpty(customerLogs)) { return; server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,7 +2,10 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.biz.zbom.ZbomZhongTaiService; import com.doumee.biz.zbom.model.zhongtai.ZTBaseRequst; @@ -18,47 +21,31 @@ import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.oss.FileModel; import com.doumee.core.utils.*; import com.doumee.core.utils.CodeVerifyUtils; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.core.wx.WxMiniConfig; import com.doumee.dao.business.CustomerUserMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.UsersMapper; import com.doumee.dao.business.model.CustomerUser; import com.doumee.dao.business.model.InterfaceLog; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Users; import com.doumee.dao.system.model.SystemDictData; import com.doumee.dao.web.reqeust.EditMemberRequest; import com.doumee.dao.web.reqeust.WxPhoneRequest; import com.doumee.dao.web.response.AccountResponse; import com.doumee.dao.web.response.ZTBaseInfoResponse; import com.doumee.service.business.CustomerService; import com.doumee.service.business.MemberService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.hikvision.artemis.sdk.util.HttpUtils; import me.chanjar.weixin.common.error.WxErrorException; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.apache.catalina.User; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.util.ThreadContext; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.*; import java.util.Date; import java.util.concurrent.TimeUnit; import java.util.List; import java.util.Objects; /** * 用户信息表Service实现