1,模版图片-链接形式

2,没营销的不更新
3,一键同步只更新当前登录人店铺的数据
4,同步自配送授权
This commit is contained in:
wangshuai 2024-07-18 16:28:29 +08:00
parent 661c503aee
commit 693b8feaea
13 changed files with 148 additions and 12 deletions

View File

@ -2,6 +2,9 @@ package com.ruoyi.business.controller;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -42,7 +45,11 @@ public class BusMarketOperationInfoController extends BaseController
public TableDataInfo list(BusMarketOperationInfo busMarketOperationInfo) public TableDataInfo list(BusMarketOperationInfo busMarketOperationInfo)
{ {
startPage(); startPage();
List<BusMarketOperationInfo> list = busMarketOperationInfoService.selectBusMarketOperationInfoList(busMarketOperationInfo); LoginUser user = SecurityUtils.getLoginUser();
if(!"admin".equals(user.getUsername())){
busMarketOperationInfo.setUpdateId(user.getUserId());
}
List<BusMarketOperationInfo> list = busMarketOperationInfoService.selectBusMarketOperationInfoListByPid(busMarketOperationInfo);
return getDataTable(list); return getDataTable(list);
} }

View File

@ -122,4 +122,5 @@ public class BusTemplateInfoController extends BaseController
{ {
return toAjax(busTemplateInfoService.deleteBusTemplateInfoByIds(ids)); return toAjax(busTemplateInfoService.deleteBusTemplateInfoByIds(ids));
} }
} }

View File

@ -7,11 +7,12 @@ ruoyi:
# 版权年份 # 版权年份
copyrightYear: 2024 copyrightYear: 2024
# 文件路径 示例( Windows配置 F:/home/youshi/uploadPathLinux配置 /home/ruoyi/uploadPath # 文件路径 示例( Windows配置 F:/home/youshi/uploadPathLinux配置 /home/ruoyi/uploadPath
profile: /home/ruoyi/uploadPath profile: F:/home/youshi/uploadPath
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: false addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证 # 验证码类型 math 数字计算 char 字符验证
captchaType: math captchaType: math
baseUrl: http://localhost/dev-api
# 开发环境配置 # 开发环境配置
server: server:
@ -124,7 +125,7 @@ xss:
# 过滤开关 # 过滤开关
enabled: true enabled: true
# 排除链接(多个用逗号分隔) # 排除链接(多个用逗号分隔)
excludes: /system/notice excludes: /system/notice,/business/template
# 匹配链接 # 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*,/business/* urlPatterns: /system/*,/monitor/*,/tool/*,/business/*

View File

@ -30,6 +30,8 @@ public class RuoYiConfig
/** 验证码类型 */ /** 验证码类型 */
private static String captchaType; private static String captchaType;
private static String baseUrl;
public String getName() public String getName()
{ {
return name; return name;
@ -119,4 +121,12 @@ public class RuoYiConfig
{ {
return getProfile() + "/upload"; return getProfile() + "/upload";
} }
public static String getBaseUrl() {
return baseUrl;
}
public static void setBaseUrl(String baseUrl) {
RuoYiConfig.baseUrl = baseUrl;
}
} }

View File

@ -58,4 +58,6 @@ public interface BusMarketOperationInfoMapper
* @return 结果 * @return 结果
*/ */
public int deleteBusMarketOperationInfoByIds(Long[] ids); public int deleteBusMarketOperationInfoByIds(Long[] ids);
List<BusMarketOperationInfo> selectBusMarketOperationInfoListByPid(BusMarketOperationInfo busMarketOperationInfo);
} }

View File

@ -58,4 +58,6 @@ public interface IBusMarketOperationInfoService
* @return 结果 * @return 结果
*/ */
public int deleteBusMarketOperationInfoById(Long id); public int deleteBusMarketOperationInfoById(Long id);
List<BusMarketOperationInfo> selectBusMarketOperationInfoListByPid(BusMarketOperationInfo busMarketOperationInfo);
} }

View File

@ -92,4 +92,9 @@ public class BusMarketOperationInfoServiceImpl implements IBusMarketOperationInf
{ {
return busMarketOperationInfoMapper.deleteBusMarketOperationInfoById(id); return busMarketOperationInfoMapper.deleteBusMarketOperationInfoById(id);
} }
@Override
public List<BusMarketOperationInfo> selectBusMarketOperationInfoListByPid(BusMarketOperationInfo busMarketOperationInfo) {
return busMarketOperationInfoMapper.selectBusMarketOperationInfoListByPid(busMarketOperationInfo);
}
} }

View File

@ -4,6 +4,7 @@ import java.util.List;
import com.ruoyi.business.domain.BusTemplateAttrInfo; import com.ruoyi.business.domain.BusTemplateAttrInfo;
import com.ruoyi.business.mapper.BusTemplateAttrInfoMapper; import com.ruoyi.business.mapper.BusTemplateAttrInfoMapper;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
@ -117,6 +118,18 @@ public class BusTemplateInfoServiceImpl implements IBusTemplateInfoService
List<BusTemplateInfo> list = busTemplateInfoMapper.selectBusTemplateInfoList(busTemplateInfo); List<BusTemplateInfo> list = busTemplateInfoMapper.selectBusTemplateInfoList(busTemplateInfo);
if(list.size() == 1){ if(list.size() == 1){
BusTemplateInfo busTemplateInfo1 = list.get(0); BusTemplateInfo busTemplateInfo1 = list.get(0);
String content = busTemplateInfo1.getTemplateContent();
String http = RuoYiConfig.getBaseUrl()==null?"http://localhost/dev-api":"";
if(content.contains("img src")){
int img = content.indexOf("<img");
String[] array = content.split("/dev-api");
// int start = array[1].indexOf("http");
int end = array[1].indexOf("\">");
String addr = http + array[1].substring(0,end);
content = busTemplateInfo1.getTemplateContent().substring(0,img)+addr;
busTemplateInfo1.setTemplateContent(content);
}
BusTemplateAttrInfo busTemplateAttrInfo = new BusTemplateAttrInfo(); BusTemplateAttrInfo busTemplateAttrInfo = new BusTemplateAttrInfo();
busTemplateAttrInfo.setTemplateId(busTemplateInfo1.getId()); busTemplateAttrInfo.setTemplateId(busTemplateInfo1.getId());
List<BusTemplateAttrInfo> list1 = busTemplateAttrInfoMapper.selectBusTemplateAttrInfoList(busTemplateAttrInfo); List<BusTemplateAttrInfo> list1 = busTemplateAttrInfoMapper.selectBusTemplateAttrInfoList(busTemplateAttrInfo);

View File

@ -107,7 +107,6 @@ public class MeituanServiceImpl implements IMeituanService {
storeInfo.setStoreCookie(cookie.getCookie()); storeInfo.setStoreCookie(cookie.getCookie());
storeInfo.setPlatformType(String.valueOf(cookie.getBingType())); storeInfo.setPlatformType(String.valueOf(cookie.getBingType()));
storeInfo.setBindTime(date); storeInfo.setBindTime(date);
storeInfo.setUpdateTime(date);
storeInfo.setGrantStatus("1");//授权登录状态 storeInfo.setGrantStatus("1");//授权登录状态
storeInfo.setReturnVisitStatus("2");// 营销状态 storeInfo.setReturnVisitStatus("2");// 营销状态
storeInfo.setSelfDeliveryStatus("1");// 1 正常 2 自配送 3 删除 storeInfo.setSelfDeliveryStatus("1");// 1 正常 2 自配送 3 删除
@ -131,10 +130,13 @@ public class MeituanServiceImpl implements IMeituanService {
return R.ok(); return R.ok();
} else if (list.size() == 1) { } else if (list.size() == 1) {
// 不同代理人绑定
if (!cookie.getUserName().equals(list.get(0).getBindUser())) { if (!cookie.getUserName().equals(list.get(0).getBindUser())) {
// 如果未删除 不可以继续绑定
if(!"3".equals(list.get(0).getSelfDeliveryStatus())){ if(!"3".equals(list.get(0).getSelfDeliveryStatus())){
throw new ServiceException("授权失败,已绑定其他代理账号!"); throw new ServiceException("授权失败,已绑定其他代理账号!");
} }
// 如果已删除 可以继续绑定
storeInfo.setId(list.get(0).getId()); storeInfo.setId(list.get(0).getId());
storeInfo.setBindId(list1.get(0).getId()); storeInfo.setBindId(list1.get(0).getId());
storeInfo.setBindUser(cookie.getUserName()); storeInfo.setBindUser(cookie.getUserName());
@ -177,6 +179,8 @@ public class MeituanServiceImpl implements IMeituanService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String getComments() { public String getComments() {
BusStoreInfo busStoreInfo = new BusStoreInfo(); BusStoreInfo busStoreInfo = new BusStoreInfo();
busStoreInfo.setReturnVisitStatus("1");
busStoreInfo.setBindUser(SecurityUtils.getUsername());
List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo); List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo);
for (BusStoreInfo store : busStoreInfoList) { for (BusStoreInfo store : busStoreInfoList) {
Boolean flag = getCommentsOne(store); Boolean flag = getCommentsOne(store);
@ -191,6 +195,8 @@ public class MeituanServiceImpl implements IMeituanService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String getYestodayCount() { public String getYestodayCount() {
BusStoreInfo busStoreInfo = new BusStoreInfo(); BusStoreInfo busStoreInfo = new BusStoreInfo();
busStoreInfo.setReturnVisitStatus("1");
busStoreInfo.setBindUser(SecurityUtils.getUsername());
List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo); List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo);
for (BusStoreInfo store : busStoreInfoList) { for (BusStoreInfo store : busStoreInfoList) {
Boolean flag = yesterdayCountOne(store); Boolean flag = yesterdayCountOne(store);
@ -210,6 +216,8 @@ public class MeituanServiceImpl implements IMeituanService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String getScore() { public String getScore() {
BusStoreInfo busStoreInfo = new BusStoreInfo(); BusStoreInfo busStoreInfo = new BusStoreInfo();
busStoreInfo.setReturnVisitStatus("1");
busStoreInfo.setBindUser(SecurityUtils.getUsername());
List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo); List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo);
for (BusStoreInfo store : busStoreInfoList) { for (BusStoreInfo store : busStoreInfoList) {
Boolean flag = getScoreOne(store); Boolean flag = getScoreOne(store);
@ -230,7 +238,7 @@ public class MeituanServiceImpl implements IMeituanService {
public String orderInfoList() { public String orderInfoList() {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
BusStoreInfo busStoreInfo = new BusStoreInfo(); BusStoreInfo busStoreInfo = new BusStoreInfo();
// busStoreInfo.setGrantStatus("1"); busStoreInfo.setReturnVisitStatus("1");
List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo); List<BusStoreInfo> busStoreInfoList = busStoreInfoMapper.selectBusStoreInfoList(busStoreInfo);
for (BusStoreInfo store : busStoreInfoList) { for (BusStoreInfo store : busStoreInfoList) {
R flag = orderInfo(store.getStoreCode(),now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),store.getStoreCookie()); R flag = orderInfo(store.getStoreCode(),now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),store.getStoreCookie());
@ -655,7 +663,8 @@ public class MeituanServiceImpl implements IMeituanService {
try { try {
result = EntityUtils.toString(httpClient.execute(request).getEntity()); result = EntityUtils.toString(httpClient.execute(request).getEntity());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); System.out.println(e.getMessage());
return false;
} }
if (result != null) { if (result != null) {
JSONObject jsonObject = JSONObject.parseObject(result); JSONObject jsonObject = JSONObject.parseObject(result);
@ -678,6 +687,10 @@ public class MeituanServiceImpl implements IMeituanService {
busStoreDayInfoService.insertBusStoreDayInfo(dayInfo); busStoreDayInfoService.insertBusStoreDayInfo(dayInfo);
} }
} }
}else if ("1001".equals(jsonObject.getString("code"))) {
store.setGrantStatus("2");
busStoreInfoService.updateBusStoreInfo(store);
return false;
} }
} }
// System.out.println(result); // System.out.println(result);
@ -722,6 +735,8 @@ public class MeituanServiceImpl implements IMeituanService {
int code = jsonObject.getInteger(("code")); int code = jsonObject.getInteger(("code"));
if (code != 0) { if (code != 0) {
System.out.println(result); System.out.println(result);
store.setGrantStatus("2");
busStoreInfoService.updateBusStoreInfo(store);
return false; return false;
} }
JSONArray array = jsonObject.getJSONObject("data").getJSONArray("list"); JSONArray array = jsonObject.getJSONObject("data").getJSONArray("list");

View File

@ -35,6 +35,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectBusMarketOperationInfoVo"/> <include refid="selectBusMarketOperationInfoVo"/>
where id = #{id} where id = #{id}
</select> </select>
<select id="selectBusMarketOperationInfoListByPid" parameterType="BusMarketOperationInfo" resultMap="BusMarketOperationInfoResult">
<include refid="selectBusMarketOperationInfoVo"/>
<where>
<if test="storeId != null "> and store_id = #{storeId}</if>
<if test="storeCode != null and storeCode != ''"> and store_code = #{storeCode}</if>
<if test="storeName != null and storeName != ''"> and store_name like concat('%', #{storeName}, '%')</if>
<if test="updateId != null "> and (update_id = #{updateId} or update_id in (select id from bus_agent_info where superior_agent_code = #{updateId}))</if>
<if test="updateUser != null and updateUser != ''"> and update_user = #{updateUser}</if>
<if test="operationStatus != null and operationStatus != ''"> and operation_status = #{operationStatus}</if>
</where>
</select>
<insert id="insertBusMarketOperationInfo" parameterType="BusMarketOperationInfo"> <insert id="insertBusMarketOperationInfo" parameterType="BusMarketOperationInfo">
insert into bus_market_operation_info insert into bus_market_operation_info

View File

@ -72,7 +72,12 @@
<el-table-column label="模版名称" align="center" prop="templateName" /> <el-table-column label="模版名称" align="center" prop="templateName" />
<el-table-column label="模版类型 word excel" align="center" prop="templateType" /> <el-table-column label="模版类型 word excel" align="center" prop="templateType" />
<!-- <el-table-column label="内容" align="center" prop="templateContent" /> --> <!-- <el-table-column label="内容" align="center" prop="templateContent" /> -->
<el-table-column label="状态 1启用 2弃用" align="center" prop="templateStatus" /> <el-table-column label="状态 1启用 2停用" align="center" prop="templateStatus" >
<template slot-scope="scope">
<el-tag v-if="scope.row.templateStatus ==='1' " type="success">启用</el-tag>
<el-tag v-if="scope.row.templateStatus ==='2' " type="danger">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createUser" /> <el-table-column label="创建人" align="center" prop="createUser" />
<el-table-column label="排序" align="center" prop="sort" /> <el-table-column label="排序" align="center" prop="sort" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -113,6 +118,16 @@
<el-form-item label="排序" prop="sort"> <el-form-item label="排序" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序" /> <el-input v-model="form.sort" placeholder="请输入排序" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="templateStatus">
<!-- <el-input v-model="form.templateStatus" placeholder="请输入状态" /> -->
<el-radio-group v-model="form.templateStatus">
<el-radio
v-for="dict in dict.type.bus_template_status"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -127,6 +142,7 @@ import { listTemplate, getTemplate, delTemplate, addTemplate, updateTemplate } f
export default { export default {
name: "Template", name: "Template",
dicts: ['bus_template_status'],
data() { data() {
return { return {
// //

View File

@ -32,7 +32,12 @@
<el-table-column label="店铺名称" align="center" prop="storeName" /> <el-table-column label="店铺名称" align="center" prop="storeName" />
<el-table-column label="店铺标识" align="center" prop="storeCode" /> <el-table-column label="店铺标识" align="center" prop="storeCode" />
<el-table-column label="操作账户" align="center" prop="updateUser" /> <el-table-column label="操作账户" align="center" prop="updateUser" />
<el-table-column label="操作状态" align="center" prop="operationStatus" /> <el-table-column label="操作状态" align="center" prop="operationStatus" >
<template slot-scope="scope">
<el-tag v-if="scope.row.operationStatus ==='1' " type="success">启用</el-tag>
<el-tag v-if="scope.row.operationStatus ==='2' " type="danger">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="时间" align="center" prop="updateTime" /> <el-table-column label="时间" align="center" prop="updateTime" />
</el-table> </el-table>

View File

@ -346,6 +346,7 @@
<el-form-item label="备注"> <el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
<!-- <img class="btn" :src="imageUrl" alt="your-image-description" > -->
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -387,6 +388,9 @@
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
<!-- <el-upload src="{{ imageUrl }}"></el-upload> -->
<!-- <img src="imageUrl" title="点击上传头像" class="img-circle img-lg"></img> -->
<!-- <el-image src="{{imageUrl}}" /> -->
</template> </template>
<script> <script>
@ -429,6 +433,7 @@ export default {
open2: false, open2: false,
// //
openDataScope: false, openDataScope: false,
imageUrl: '',
map: { map: {
storeCount: 0, storeCount: 0,
openCount: 0, openCount: 0,
@ -708,9 +713,20 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleCopy(row) { handleCopy(row) {
generateWord(row).then(response => { const query = {id:row.id}
generateWord(query).then(response => {
const copyText = response.msg const copyText = response.msg
this.imageUrl = "http://localhost/dev-api/profile/upload/2024/07/18/img0_20240718113153A001.jpg";
try { try {
// ClipboardItem
// const blob = this.fetchImageAsBlob(this.imageUrl);
// const item = new ClipboardItem({ [blob.type]: blob });
// // ClipboardItem
// navigator.clipboard.write([item]).then(function() {
// console.log('');
// })
// this.copyQrCode()
navigator.clipboard.writeText(copyText); navigator.clipboard.writeText(copyText);
this.$modal.msgSuccess("复制成功"); this.$modal.msgSuccess("复制成功");
} catch (err) { } catch (err) {
@ -726,6 +742,38 @@ export default {
// }); // });
}, },
copyQrCode() {
const clipboard = new Clipboard('.copy-btn', {
text: () => this.imageUrl
});
clipboard.on('success', () => {
console.log('二维码图片链接已复制到剪贴板');
//
clipboard.destroy(); // Clipboard
});
clipboard.on('error', () => {
console.log('复制失败');
//
clipboard.destroy(); // Clipboard
});
},
fetchImageAsBlob(imageUrl) {
return fetch(imageUrl)
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
return response.blob();
})
.then(blob => {
return blob;
})
.catch(error => {
console.error('There has been a problem with your fetch operation:', error);
});
},
/** 自配送按钮操作 */ /** 自配送按钮操作 */
handleSelfDelivery(row) { handleSelfDelivery(row) {
this.$modal.confirm('是否确认将营销源 "' + row.storeCode + '" 转为自配送?确认后该营销源会变为自配送营销。').then(function() { this.$modal.confirm('是否确认将营销源 "' + row.storeCode + '" 转为自配送?确认后该营销源会变为自配送营销。').then(function() {