v1.1
1、提货点 2、客服(腾讯云智服) 3、接口权限控制 4、复制第三方商品可配置 4、优化附件上传配置 5、手机端核销订单 6、手机端订单统计、订单管理 7、短信优化 8、订阅消息全自动化
This commit is contained in:
6131
crmeb/sql/crmeb_java_v1.0.sql
Normal file
6131
crmeb/sql/crmeb_java_v1.0.sql
Normal file
File diff suppressed because one or more lines are too long
6698
crmeb/sql/crmeb_java_v1.1.sql
Normal file
6698
crmeb/sql/crmeb_java_v1.1.sql
Normal file
File diff suppressed because one or more lines are too long
@@ -16,6 +16,7 @@ public class Constants {
|
||||
public static final int NUM_ONE = 1;
|
||||
public static final int NUM_TWO = 2;
|
||||
public static final int NUM_THREE = 3;
|
||||
public static final int NUM_FIVE = 5;
|
||||
public static final int NUM_SEVEN = 7;
|
||||
public static final int NUM_TEN = 10;
|
||||
public static final int NUM_ONE_HUNDRED = 100;
|
||||
@@ -166,6 +167,11 @@ public class Constants {
|
||||
|
||||
public static final String CONFIG_KEY_LOGISTICS_APP_CODE = "system_express_app_code"; //快递查询密钥
|
||||
|
||||
//云智服 小程序插件
|
||||
public static final String CONFIG_KEY_YZF_H5_URL = "yzf_h5_url"; //云智服H5 url
|
||||
|
||||
|
||||
|
||||
//分销
|
||||
public static final String CONFIG_KEY_STORE_BROKERAGE_LEVEL = "store_brokerage_rate_num"; //返佣比例前缀
|
||||
public static final String CONFIG_KEY_STORE_BROKERAGE_USER_EXTRACT_MIN_PRICE = "user_extract_min_price"; //提现最低金额
|
||||
@@ -184,7 +190,10 @@ public class Constants {
|
||||
public static final String CONFIG_KEY_ADMIN_LOGIN_BACKGROUND_IMAGE = "admin_login_bg_pic"; //登录页背景图
|
||||
|
||||
//分销
|
||||
public static final String CONFIG_KEY_DISTRIBUTION_TYPE = "brokerageBindind";
|
||||
public static final String CONFIG_KEY_DISTRIBUTION_TYPE = "brokerage_bindind";
|
||||
|
||||
//验证码过期时间
|
||||
public static final String CONFIG_KEY_SMS_CODE_EXPIRE = "sms_code_expire";
|
||||
|
||||
|
||||
//config配置的formId
|
||||
@@ -196,6 +205,7 @@ public class Constants {
|
||||
public static final int THIRD_LOGIN_TOKEN_TYPE_PUBLIC = 1; //公众号
|
||||
public static final int THIRD_LOGIN_TOKEN_TYPE_PROGRAM = 2; //小程序
|
||||
public static final int THIRD_LOGIN_TOKEN_TYPE_UNION_ID = 3; //unionid
|
||||
public static final int THIRD_ADMIN_LOGIN_TOKEN_TYPE_PUBLIC = 4; //后台登录公众号
|
||||
|
||||
|
||||
// 商品类型 活动类型 0=商品,1=秒杀,2=砍价,3=拼团 attrResult表用到
|
||||
@@ -324,7 +334,7 @@ public class Constants {
|
||||
public static final int ORDER_STATUS_H5_UNPAID = 0; // 未支付
|
||||
public static final int ORDER_STATUS_H5_NOT_SHIPPED = 1; // 待发货
|
||||
public static final int ORDER_STATUS_H5_SPIKE = 2; // 待收货
|
||||
public static final int ORDER_STATUS_H5_BARGAIN = 3; // 待评价
|
||||
public static final int ORDER_STATUS_H5_VERF = 3; // 待核销
|
||||
public static final int ORDER_STATUS_H5_COMPLETE = 4; // 已完成
|
||||
public static final int ORDER_STATUS_H5_REFUNDING = -1; // 退款中
|
||||
public static final int ORDER_STATUS_H5_REFUNDED = -2; // 已退款
|
||||
@@ -356,6 +366,10 @@ public class Constants {
|
||||
public static final String PAY_TYPE_WE_CHAT_FROM_PUBLIC = "public"; //公众号
|
||||
public static final String PAY_TYPE_WE_CHAT_FROM_PROGRAM = "routine"; //小程序
|
||||
|
||||
//后台微信登录类型
|
||||
public static final String ADMIN_LOGIN_TYPE_WE_CHAT_FROM_PUBLIC = "admin_public"; //公众号
|
||||
|
||||
|
||||
|
||||
//支付方式
|
||||
public static final String PAY_TYPE_STR_WE_CHAT = "微信支付"; //微信支付
|
||||
@@ -380,6 +394,8 @@ public class Constants {
|
||||
public static final String ORDER_LOG_REFUND_APPLY = "apply_refund"; //
|
||||
public static final String ORDER_LOG_PAY_SUCCESS = "pay_success"; //支付成功
|
||||
public static final String ORDER_LOG_DELIVERY_VI = "delivery_fictitious"; //虚拟发货
|
||||
public static final String ORDER_LOG_EDIT = "order_edit"; //编辑订单
|
||||
public static final String ORDER_LOG_PAY_OFFLINE = "offline"; //线下付款订单
|
||||
|
||||
|
||||
// 订单缓存
|
||||
@@ -417,4 +433,25 @@ public class Constants {
|
||||
//物流 https://market.aliyun.com/products/56928004/cmapi021863.html#sku=yuncode15863000015
|
||||
public static String LOGISTICS_API_URL = "https://wuliu.market.alicloudapi.com/kdi";
|
||||
|
||||
// 订单 基本 操作字样
|
||||
public static String RESULT_ORDER_NOTFOUND = "订单号 ${orderCode} 未找到";
|
||||
public static String RESULT_ORDER_NOTFOUND_IN_ID = "订单id ${orderId} 未找到";
|
||||
public static String RESULT_ORDER_PAYED = "订单号 ${orderCode} 已支付";
|
||||
public static String RESULT_ORDER_EDIT_PRICE_SAME = "修改价格不能和支付价格相同 原价 ${oldPrice} 修改价 ${editPrice}";
|
||||
public static String RESULT_ORDER_EDIT_PRICE_SUCCESS = "订单号 ${orderNo} 修改价格 ${price} 成功";
|
||||
public static String RESULT_ORDER_EDIT_PRICE_LOGS = "订单价格 ${orderPrice} 修改实际支付金额为 ${price} 元";
|
||||
|
||||
// 订单 支付 操作字样
|
||||
public static String RESULT_ORDER_PAY_OFFLINE = "订单号 ${orderNo} 现在付款 ${price} 成功";
|
||||
|
||||
// 订单核销 返回字样 Order response text info
|
||||
public static String RESULT_VERIFICATION_ORDER_NOT_FUND = "核销码 ${vCode} 的订单未找到";
|
||||
public static String RESULT_VERIFICATION_ORDER_VED = "核销码 ${vCode} 的订单已核销";
|
||||
public static String RESULT_VERIFICATION_NOTAUTH = "没有核销权限";
|
||||
public static String RESULT_VERIFICATION_USER_EXIST = "当前用户已经是核销员";
|
||||
|
||||
|
||||
// QRcode Response text info
|
||||
public static String RESULT_QRCODE_PRAMERROR = "生成二维码参数不合法";
|
||||
|
||||
}
|
||||
|
||||
@@ -46,9 +46,7 @@ public class WeChatConstants {
|
||||
//获取 JsApiTicket
|
||||
public static final String PUBLIC_API_JS_API_TICKET = "cgi-bin/ticket/getticket";
|
||||
//发送公众号模板消息
|
||||
public static final String PUBLIC_API__PUBLIC_TEMPLATE_MESSAGE_SEND = "cgi-bin/message/template/send";
|
||||
//发送小程序模板消息
|
||||
public static final String PUBLIC_API__PROGRAM_TEMPLATE_MESSAGE_SEND = "cgi-bin/message/subscribe/send";
|
||||
public static final String PUBLIC_API_PUBLIC_TEMPLATE_MESSAGE_SEND = "cgi-bin/message/template/send";
|
||||
//获取设置的行业信息
|
||||
public static final String PUBLIC_API_TEMPLATE_MESSAGE_INDUSTRY = "cgi-bin/template/get_industry";
|
||||
//新增其他类型永久素材
|
||||
@@ -60,6 +58,20 @@ public class WeChatConstants {
|
||||
//发送客服消息
|
||||
public static final String PUBLIC_API_KF_MESSAGE_SEND = "cgi-bin/message/custom/send";
|
||||
|
||||
|
||||
//小程序行业消息
|
||||
public static final String PUBLIC_API_PROGRAM_CATEGORY = "wxaapi/newtmpl/getcategory";
|
||||
//小程序公共模板库
|
||||
public static final String PUBLIC_API_PROGRAM_PUBLIC_TEMP = "wxaapi/newtmpl/getpubtemplatetitles";
|
||||
//小程序模板关键词列表
|
||||
public static final String PUBLIC_API_PROGRAM_PUBLIC_TEMP_KEYWORDS = "wxaapi/newtmpl/getpubtemplatekeywords";
|
||||
//添加小程序订阅消息
|
||||
public static final String PUBLIC_API_ADD_PROGRAM_TEMPLATE = "wxaapi/newtmpl/addtemplate";
|
||||
//删除小程序订阅消息
|
||||
public static final String PUBLIC_API_DELETE_PROGRAM_TEMPLATE = "wxaapi/newtmpl/deltemplate";
|
||||
//发送小程序模板消息
|
||||
public static final String PUBLIC_API_PROGRAM_TEMPLATE_MESSAGE_SEND = "cgi-bin/message/subscribe/send";
|
||||
|
||||
//授权登录
|
||||
|
||||
//获取临时code跳转地址
|
||||
|
||||
@@ -234,22 +234,22 @@ public final class DateUtil {
|
||||
/**
|
||||
* convert long to date
|
||||
*
|
||||
* @param dateLong
|
||||
* @return
|
||||
* @param date 待转换时间戳
|
||||
* @return 转换后时间
|
||||
*/
|
||||
public static Date longToDate(long dateLong) {
|
||||
return new Date(dateLong);
|
||||
public static Date timeStamp11ToDate(Integer date) {
|
||||
return new Date(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* convert long to date string
|
||||
*
|
||||
* @param dateLong
|
||||
* @param DATE_FORMAT
|
||||
* @return
|
||||
* @param date 待转换时间戳
|
||||
* @param DATE_FORMAT 格式化时间
|
||||
* @return 格式化后的时间
|
||||
*/
|
||||
public static String longToDate(long dateLong, String DATE_FORMAT) {
|
||||
return dateToStr(new Date(dateLong), DATE_FORMAT);
|
||||
public static String timeStamp11ToDate(Integer date, String DATE_FORMAT) {
|
||||
return dateToStr(new Date(date), DATE_FORMAT);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -518,4 +518,28 @@ public final class DateUtil {
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
/**
|
||||
* 两个日期之前的相差天数
|
||||
* @param starDate 开始日期
|
||||
* @param endDate 结束日期
|
||||
* @return 相差天数
|
||||
*/
|
||||
public static int daysBetween(Date starDate,Date endDate){
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
|
||||
cal.setTime(starDate);
|
||||
|
||||
long time1 = cal.getTimeInMillis();
|
||||
|
||||
cal.setTime(endDate);
|
||||
|
||||
long time2 = cal.getTimeInMillis();
|
||||
|
||||
long between_days=(time2-time1)/(1000*3600*24);
|
||||
|
||||
return Integer.parseInt(String.valueOf(between_days));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
63
crmeb/src/main/java/com/utils/PinYinUtil.java
Normal file
63
crmeb/src/main/java/com/utils/PinYinUtil.java
Normal file
@@ -0,0 +1,63 @@
|
||||
package com.utils;
|
||||
|
||||
import net.sourceforge.pinyin4j.PinyinHelper;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
||||
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
|
||||
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
||||
|
||||
/**
|
||||
* 汉字转换为拼音
|
||||
* @author Red
|
||||
*/
|
||||
public class PinYinUtil {
|
||||
/**
|
||||
* 获取字符串拼音的第一个字母
|
||||
* @param chinese
|
||||
* @return
|
||||
*/
|
||||
public static String toFirstChar(String chinese){
|
||||
StringBuilder pinyinStr = new StringBuilder();
|
||||
char[] newChar = chinese.toCharArray(); //转为单个字符
|
||||
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
||||
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
||||
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
||||
for (char c : newChar) {
|
||||
if (c > 128) {
|
||||
try {
|
||||
pinyinStr.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0].charAt(0));
|
||||
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
pinyinStr.append(c);
|
||||
}
|
||||
}
|
||||
return pinyinStr.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 汉字转为拼音
|
||||
* @param chinese
|
||||
* @return
|
||||
*/
|
||||
public static String toPinyin(String chinese){
|
||||
StringBuilder pinyinStr = new StringBuilder();
|
||||
char[] newChar = chinese.toCharArray();
|
||||
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
|
||||
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
||||
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
||||
for (char c : newChar) {
|
||||
if (c > 128) {
|
||||
try {
|
||||
pinyinStr.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0]);
|
||||
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
pinyinStr.append(c);
|
||||
}
|
||||
}
|
||||
return pinyinStr.toString();
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,16 @@
|
||||
package com.utils;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.alibaba.druid.util.Base64;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.Random;
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.alibaba.druid.util.Base64;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 验证码生成工具类
|
||||
@@ -24,7 +21,7 @@ import org.springframework.stereotype.Component;
|
||||
public class ValidateCodeUtil {
|
||||
private static Validate validate = null; //验证码类,用于最后返回此对象,包含验证码图片base64和真值
|
||||
private static Random random = new Random(); //随机类,用于生成随机参数
|
||||
private static String randString = "0123456789abcdefghijkmnpqrtyABCDEFGHIJLMNQRTY";//随机生成字符串的取值范围
|
||||
private static String randString = "0123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";//随机生成字符串的取值范围
|
||||
|
||||
private static int width = 80; //图片宽度
|
||||
private static int height = 34; //图片高度
|
||||
@@ -103,9 +100,9 @@ public class ValidateCodeUtil {
|
||||
Graphics2D g2d = (Graphics2D) graphics;
|
||||
g2d.setFont(getFont()); //设置字体
|
||||
g2d.setColor(new Color(random.nextFloat(), random.nextFloat(), random.nextFloat()));//设置颜色
|
||||
String randChar = String.valueOf(getRandomChar(random.nextInt(randString.length())));
|
||||
String randChar = getRandomChar(random.nextInt(randString.length()));
|
||||
randomString += randChar; //组装
|
||||
int rot = getRandomNum(5,10);
|
||||
int rot = getRandomNum(1,10);
|
||||
g2d.translate(random.nextInt(3), random.nextInt(3));
|
||||
g2d.rotate(rot * Math.PI / 180);
|
||||
g2d.drawString(randChar, 13*i, 20);
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.exception.ExceptionCodeEnum;
|
||||
import com.utils.CrmebUtil;
|
||||
import com.zbkj.crmeb.authorization.manager.TokenManager;
|
||||
import com.zbkj.crmeb.system.request.SystemAdminLoginRequest;
|
||||
import com.zbkj.crmeb.system.request.SystemAdminRequest;
|
||||
import com.zbkj.crmeb.system.response.SystemAdminResponse;
|
||||
@@ -19,6 +18,7 @@ import com.zbkj.crmeb.validatecode.service.ValidateCodeService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@@ -53,9 +53,6 @@ public class adminUser {
|
||||
@Autowired
|
||||
private SystemGroupDataService systemGroupDataService;
|
||||
|
||||
@Autowired
|
||||
private TokenManager tokenManager;
|
||||
|
||||
@Autowired
|
||||
private ValidateCodeService validateCodeService;
|
||||
|
||||
@@ -75,6 +72,9 @@ public class adminUser {
|
||||
return CommonResult.failed(ExceptionCodeEnum.FAILED, "login failed");
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(systemAdminLoginRequest.getWxCode())){
|
||||
systemAdminService.bind(systemAdminLoginRequest.getWxCode(), systemAdminResponse.getId());
|
||||
}
|
||||
return CommonResult.success(systemAdminResponse, "login success");
|
||||
}
|
||||
|
||||
@@ -116,4 +116,26 @@ public class adminUser {
|
||||
map.put("banner", bannerList);
|
||||
return CommonResult.success(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信登录公共号授权登录
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-05-25
|
||||
*/
|
||||
@ApiOperation(value = "微信登录公共号授权登录")
|
||||
@RequestMapping(value = "/authorize/login", method = RequestMethod.GET)
|
||||
public CommonResult<SystemAdminResponse> login(@RequestParam(value = "code") String code, HttpServletRequest request){
|
||||
return CommonResult.success(systemAdminService.weChatAuthorizeLogin(code, CrmebUtil.getClientIp(request)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 解绑微信
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-05-25
|
||||
*/
|
||||
@ApiOperation(value = "解绑微信")
|
||||
@RequestMapping(value = "/unbind", method = RequestMethod.GET)
|
||||
public CommonResult<Boolean> bind(){
|
||||
return CommonResult.success(systemAdminService.unBind());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +65,8 @@ public class WebConfig implements WebMvcConfigurer {
|
||||
excludePathPatterns("/api/admin/login").
|
||||
excludePathPatterns("/api/admin/logout").
|
||||
excludePathPatterns("/api/admin/getLoginPic").
|
||||
excludePathPatterns("/api/admin/wechat/config").
|
||||
excludePathPatterns("/api/admin/authorize/login").
|
||||
excludePathPatterns("/api/admin/payment/callback/**").
|
||||
excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ import com.zbkj.crmeb.finance.service.UserExtractService;
|
||||
import com.zbkj.crmeb.system.service.SystemConfigService;
|
||||
import com.zbkj.crmeb.user.service.UserBillService;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForCash;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -49,6 +51,9 @@ public class UserExtractServiceImpl extends ServiceImpl<UserExtractDao, UserExtr
|
||||
@Autowired
|
||||
private SystemConfigService systemConfigService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
|
||||
/**
|
||||
* 列表
|
||||
@@ -164,6 +169,14 @@ public class UserExtractServiceImpl extends ServiceImpl<UserExtractDao, UserExtr
|
||||
userExtract.setUid(userId);
|
||||
BeanUtils.copyProperties(request, userExtract);
|
||||
userExtract.setBalance(toBeWithdrawn.subtract(request.getExtractPrice()));
|
||||
|
||||
// 微信小程序订阅提现通知
|
||||
WechatSendMessageForCash cash = new WechatSendMessageForCash(
|
||||
"提现申请成功",request.getExtractPrice()+"",request.getBankname()+request.getBankCode(),
|
||||
DateUtil.nowDateTimeStr(),"暂无",request.getRealName(),"0",request.getExtractType(),"提现",
|
||||
"暂无",request.getExtractType(),"暂无",request.getRealName()
|
||||
);
|
||||
wechatSendMessageForMinService.sendCashMessage(cash,userId);
|
||||
return save(userExtract);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.zbkj.crmeb.front.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.common.CommonResult;
|
||||
import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.zbkj.crmeb.front.service.QrCodeService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -48,6 +50,24 @@ public class QrCodeController {
|
||||
public CommonResult<Map<String, Object>> get(@RequestParam String url) {
|
||||
return CommonResult.success(qrCodeService.base64(url));
|
||||
}
|
||||
|
||||
/**
|
||||
* 远程图片转base64
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return CommonResult
|
||||
*/
|
||||
@ApiOperation(value="将字符串 转base64")
|
||||
@RequestMapping(value = "/str2base64", method = RequestMethod.POST)
|
||||
public CommonResult<Map<String, Object>> getQrcodeByString(
|
||||
@RequestParam String text,
|
||||
@RequestParam int width,
|
||||
@RequestParam int height) {
|
||||
if((width < 50 || height < 50) && (width > 500 || height > 500) && text.length() >= 999){
|
||||
throw new CrmebException(Constants.RESULT_QRCODE_PRAMERROR);
|
||||
}
|
||||
return CommonResult.success(qrCodeService.base64String(text, width,height));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -43,8 +43,9 @@ public class StoreOrderController {
|
||||
@ApiOperation(value = "确认订单")
|
||||
@RequestMapping(value = "/confirm", method = RequestMethod.POST)
|
||||
public CommonResult<ConfirmOrderResponse> OrderConForm(@RequestParam String cartIds,
|
||||
@RequestParam boolean isNew){
|
||||
return CommonResult.success(orderService.confirmOrder(CrmebUtil.stringToArrayInt(cartIds),isNew));
|
||||
@RequestParam(value = "boolean", defaultValue = "false") boolean isNew,
|
||||
@RequestParam(value = "addAgain", defaultValue = "false") boolean addAgain){
|
||||
return CommonResult.success(orderService.confirmOrder(CrmebUtil.stringToArrayInt(cartIds),isNew,addAgain));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,7 +106,7 @@ public class StoreOrderController {
|
||||
@ApiOperation(value = "订单列表")
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
@ApiImplicitParams ({
|
||||
@ApiImplicitParam(name = "type", value = "评价等级|0=未支付,1=待发货,2=待收货,3=待评价,4=已完成", required = true)
|
||||
@ApiImplicitParam(name = "type", value = "评价等级|0=未支付,1=待发货,2=待收货,3=待评价,4=已完成,-3=售后/退款", required = true)
|
||||
})
|
||||
public CommonResult<List<OrderAgainVo>> orderList(
|
||||
@RequestParam(name = "type") Integer type,
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package com.zbkj.crmeb.front.controller;
|
||||
|
||||
import com.common.CommonResult;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.front.response.LoginResponse;
|
||||
import com.zbkj.crmeb.front.service.UserCenterService;
|
||||
import com.zbkj.crmeb.user.request.RegisterThirdUserRequest;
|
||||
import com.zbkj.crmeb.wechat.model.TemplateMessage;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramMyTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.TemplateMessageService;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramMyTempService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -16,6 +20,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@@ -37,6 +42,9 @@ public class WeChatController {
|
||||
@Autowired
|
||||
private TemplateMessageService templateMessageService;
|
||||
|
||||
@Autowired
|
||||
private WechatProgramMyTempService wechatProgramMyTempService;
|
||||
|
||||
/**
|
||||
* 获取授权页面跳转地址
|
||||
* @author Mr.Zhang
|
||||
@@ -110,6 +118,17 @@ public class WeChatController {
|
||||
TemplateMessage templateMessage = templateMessageService.infoException(id);
|
||||
return CommonResult.success(templateMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订阅消息模板列表
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-03
|
||||
*/
|
||||
@ApiOperation(value = "订阅消息模板列表")
|
||||
@RequestMapping(value = "/program/my/temp/list", method = RequestMethod.POST)
|
||||
public CommonResult<List<WechatProgramMyTemp>> programMyTempList(@RequestBody @Validated WechatProgramMyTempSearchRequest request, PageParamRequest pageParamRequest){
|
||||
return CommonResult.success(wechatProgramMyTempService.getList(request, pageParamRequest));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import java.math.BigDecimal;
|
||||
public class OrderDataResponse {
|
||||
private int completeCount;
|
||||
private int evaluatedCount;
|
||||
private int verificationCount;
|
||||
private int orderCount;
|
||||
private int receivedCount;
|
||||
private int refundCount;
|
||||
|
||||
@@ -35,8 +35,8 @@ public class UserCenterResponse implements Serializable {
|
||||
@ApiModelProperty(value = "用户账号")
|
||||
private String account;
|
||||
|
||||
@ApiModelProperty(value = "用户密码")
|
||||
private String pwd;
|
||||
// @ApiModelProperty(value = "用户密码")
|
||||
// private String pwd;
|
||||
|
||||
@ApiModelProperty(value = "真实姓名")
|
||||
private String realName;
|
||||
|
||||
@@ -29,7 +29,7 @@ public interface OrderService {
|
||||
* @param cartIds 购物车id集合
|
||||
* @return 确认订单信息
|
||||
*/
|
||||
ConfirmOrderResponse confirmOrder(List<Integer> cartIds, boolean isNew);
|
||||
ConfirmOrderResponse confirmOrder(List<Integer> cartIds, boolean isNew, boolean addAgain);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,4 +14,7 @@ public interface QrCodeService {
|
||||
Map<String, Object> get(JSONObject data) throws IOException;
|
||||
|
||||
Map<String, Object> base64(String url);
|
||||
|
||||
Map<String, Object> base64String(String text,int width, int height);
|
||||
|
||||
}
|
||||
@@ -36,6 +36,9 @@ import com.zbkj.crmeb.user.model.User;
|
||||
import com.zbkj.crmeb.user.model.UserAddress;
|
||||
import com.zbkj.crmeb.user.service.UserAddressService;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForCreateOrder;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForReFundNotify;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -103,6 +106,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
@Autowired
|
||||
private LogisticService logisticsService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
/**
|
||||
* 确认订单
|
||||
* @param cartIds 购物车id集合
|
||||
@@ -110,7 +116,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
* @return 确认订单response
|
||||
*/
|
||||
@Override
|
||||
public ConfirmOrderResponse confirmOrder(List<Integer> cartIds, boolean isNew) {
|
||||
public ConfirmOrderResponse confirmOrder(List<Integer> cartIds, boolean isNew, boolean addAgain) {
|
||||
ConfirmOrderResponse response = new ConfirmOrderResponse();
|
||||
// 获取运费默认模版
|
||||
ShippingTemplates template = shippingTemplatesService.getById(69);// todo 这里的默认模版写死
|
||||
@@ -119,11 +125,12 @@ public class OrderServiceImpl implements OrderService {
|
||||
|
||||
List<StoreCartResponse> storeCartResponse = new ArrayList<>();
|
||||
// isNew=false 从购物车获取 isNew=true 从缓存中获取=再次下单
|
||||
if(isNew){
|
||||
if(addAgain){ // 获取重新购买数据
|
||||
storeCartResponse= orderUtils.getCacheOrderAgain(cartIds.get(0)+""); // todo 按照存储规格这里应该只会有一个值
|
||||
|
||||
}else {
|
||||
storeCartResponse = storeCartService.getListByUserIdAndCartIds(currentUserInfo.getUid(),cartIds);
|
||||
}else if(isNew){// 获取立即购买数据
|
||||
storeCartResponse = storeCartService.getListByUserIdAndCartIds(currentUserInfo.getUid(),cartIds,1);
|
||||
}else{ // 获取购物车数据
|
||||
storeCartResponse = storeCartService.getListByUserIdAndCartIds(currentUserInfo.getUid(),cartIds,null);
|
||||
}
|
||||
|
||||
// todo 跳过拼团秒杀和砍价
|
||||
@@ -244,6 +251,12 @@ public class OrderServiceImpl implements OrderService {
|
||||
orderPayResponse.setResult(itemResponse);
|
||||
}
|
||||
|
||||
// 小程序消息订阅发送
|
||||
WechatSendMessageForCreateOrder createOrder = new WechatSendMessageForCreateOrder(
|
||||
orderUtils.getPayTypeStrByOrder(orderCreated),orderUtils.getStoreNameAndCarNumString(orderCreated.getId()),
|
||||
orderCreated.getPayPrice()+"",orderCreated.getId()+"","CRMEB",orderCreated.getCreateTime()+"","创建订单成功","暂无地址",
|
||||
orderUtils.getPayTypeStrByOrder(orderCreated),orderCreated.getUserAddress());
|
||||
wechatSendMessageForMinService.sendCreateOrderMessage(createOrder, userService.getUserIdException());
|
||||
|
||||
return orderPayResponse;
|
||||
}
|
||||
@@ -367,8 +380,6 @@ public class OrderServiceImpl implements OrderService {
|
||||
smsInfo.put("adminName", currentUser.getNickname());
|
||||
boolean codeResult = smsService.pushCodeToList(currentUser.getPhone(),1, smsInfo);
|
||||
if(!codeResult) throw new CrmebException("短信加入发送队列失败");
|
||||
|
||||
// redisUtil.lPush(Constants.ORDER_TASK_REDIS_KEY_AFTER_REFUND_BY_USER, existStoreOrder.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -396,6 +407,17 @@ public class OrderServiceImpl implements OrderService {
|
||||
storeOrder.setRefundReason(request.getText());
|
||||
storeOrder.setRefundPrice(storeOrder.getPayPrice());
|
||||
storeOrder.setRefundReasonTime(DateUtil.nowDateTime());
|
||||
|
||||
// 发送微信小程序订阅消息
|
||||
String storeNameAndCarNumString = orderUtils.getStoreNameAndCarNumString(storeOrder.getId());
|
||||
if(StringUtils.isNotBlank(storeNameAndCarNumString)){
|
||||
WechatSendMessageForReFundNotify notify = new WechatSendMessageForReFundNotify(
|
||||
storeNameAndCarNumString,storeOrder.getPayPrice().toString(),
|
||||
storeOrder.getCreateTime().toString(),storeOrder.getOrderId()+"",DateUtil.nowDateTimeStr(),
|
||||
"CRMEB","发起申请",request.getExplain(),storeOrder.getPayPrice()+"",
|
||||
request.getText(),storeOrder.getUserPhone(),"CRMEB");
|
||||
wechatSendMessageForMinService.sendReFundNotifyMessage(notify, userService.getUserId());
|
||||
}
|
||||
return storeOrderService.updateById(storeOrder);
|
||||
}
|
||||
|
||||
@@ -533,7 +555,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
BeanUtils.copyProperties(storeOrderResult, storeOrderDetailResponse);
|
||||
// 是否开启门店自提
|
||||
String storeSelfMention = systemConfigService.getValueByKey("store_self_mention");
|
||||
if(Boolean.valueOf(storeSelfMention)) storeOrderResult.setShippingType(1);
|
||||
if(!Boolean.valueOf(storeSelfMention)) storeOrderResult.setShippingType(1);
|
||||
if(storeOrderResult.getVerifyCode().length()>0){
|
||||
String verifyCode = storeOrderResult.getVerifyCode();
|
||||
List<String> verifyCodeList = new ArrayList<>();
|
||||
@@ -547,8 +569,8 @@ public class OrderServiceImpl implements OrderService {
|
||||
storeOrderDetailResponse.setAddTimeH(dateY);
|
||||
storeOrderDetailResponse.setAddTimeH(dateH);
|
||||
SystemStore systemStorePram = new SystemStore();
|
||||
systemStorePram.setIsShow(true);
|
||||
systemStorePram.setIsDel(false);
|
||||
// systemStorePram.setIsShow(true);
|
||||
// systemStorePram.setIsDel(false);
|
||||
systemStorePram.setId(storeOrderResult.getStoreId());
|
||||
storeOrderDetailResponse.setSystemStore(systemStoreService.getByCondition(systemStorePram));
|
||||
|
||||
@@ -594,8 +616,8 @@ public class OrderServiceImpl implements OrderService {
|
||||
result.setUnShippedCount(storeOrderService.getTopDataUtil(Constants.ORDER_STATUS_H5_NOT_SHIPPED, currentUser.getUid()).size());
|
||||
// 待收货
|
||||
result.setReceivedCount(storeOrderService.getTopDataUtil(Constants.ORDER_STATUS_H5_SPIKE, currentUser.getUid()).size());
|
||||
// 待评价
|
||||
result.setEvaluatedCount(storeOrderService.getTopDataUtil(Constants.ORDER_STATUS_H5_BARGAIN, currentUser.getUid()).size());
|
||||
// 待核销
|
||||
result.setEvaluatedCount(storeOrderService.getTopDataUtil(Constants.ORDER_STATUS_H5_VERF, currentUser.getUid()).size());
|
||||
// 已完成
|
||||
result.setCompleteCount(storeOrderService.getTopDataUtil(Constants.ORDER_STATUS_H5_COMPLETE, currentUser.getUid()).size());
|
||||
// 退款中
|
||||
@@ -743,11 +765,11 @@ public class OrderServiceImpl implements OrderService {
|
||||
* 仅仅支付
|
||||
* 订单支付完之后给出状态值 以便前端使用, 后期这里也可以抽出对象
|
||||
* ORDEREEXIST, EXTENDORDER, PAYERROR, SUCCESS, WECHATPAY, PAYDEFICIENCY, WECHATH5PAY
|
||||
* @param request
|
||||
* @param ip
|
||||
* @param resultMap
|
||||
* @param existStoreOrder
|
||||
* @return
|
||||
* @param request 支付订单参数
|
||||
* @param ip 发起支付IP
|
||||
* @param resultMap 计算订单时价格集合
|
||||
* @param existStoreOrder 当前订单
|
||||
* @return 支付状态
|
||||
*/
|
||||
@Transactional(rollbackFor = {RuntimeException.class, Error.class, CrmebException.class})
|
||||
public boolean doPayOrder(OrderPayRequest request, String ip, HashMap<String, Object> resultMap, StoreOrder existStoreOrder) {
|
||||
|
||||
@@ -152,16 +152,15 @@ public class ProductServiceImpl implements ProductService {
|
||||
|
||||
// 设置点赞和收藏
|
||||
User user = userService.getInfo();
|
||||
if(null != user){
|
||||
if(null != user.getUid()){
|
||||
storeInfo.setUserLike(storeProductRelationService.getLikeOrCollectByUser(user.getUid(),id,true).size() > 0);
|
||||
storeInfo.setUserCollect(storeProductRelationService.getLikeOrCollectByUser(user.getUid(),id,false).size() > 0);
|
||||
user = userService.updateForPromoter(user);
|
||||
productDetailResponse.setPriceName(getPacketPriceRange(productResponse,user.getIsPromoter()));
|
||||
}
|
||||
if(null != user && null != user.getUid()){
|
||||
storeInfo.setUserLike(storeProductRelationService.getLikeOrCollectByUser(user.getUid(),id,true).size() > 0);
|
||||
storeInfo.setUserCollect(storeProductRelationService.getLikeOrCollectByUser(user.getUid(),id,false).size() > 0);
|
||||
// user = userService.updateForPromoter(user);
|
||||
productDetailResponse.setPriceName(getPacketPriceRange(productResponse,user.getIsPromoter()));
|
||||
}else{
|
||||
storeInfo.setUserLike(false);
|
||||
storeInfo.setUserCollect(false);
|
||||
}
|
||||
storeInfo.setUserLike(false);
|
||||
storeInfo.setUserCollect(false);
|
||||
productDetailResponse.setStoreInfo(storeInfo);
|
||||
|
||||
// 根据制式设置attr属性
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.zbkj.crmeb.front.service.impl;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.exception.CrmebException;
|
||||
import com.utils.CrmebUtil;
|
||||
import com.utils.QRCodeUtil;
|
||||
import com.utils.RestTemplateUtil;
|
||||
import com.zbkj.crmeb.front.service.QrCodeService;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
@@ -71,5 +72,24 @@ public class QrCodeServiceImpl implements QrCodeService {
|
||||
map.put("code", base64Image);
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 讲字符串转为QRcode
|
||||
* @param text 待转换字符串
|
||||
* @return QRcode base64格式
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> base64String(String text,int width, int height) {
|
||||
|
||||
String base64Image = null;
|
||||
try {
|
||||
base64Image = QRCodeUtil.crateQRCode(text,width,height);
|
||||
}catch (Exception e){
|
||||
throw new CrmebException("生成二维码异常");
|
||||
}
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("code", base64Image);
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,8 @@ import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginUserInfoResponse;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatProgramAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForTopped;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -98,6 +100,9 @@ public class UserCenterServiceImpl extends ServiceImpl<UserDao, User> implements
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@@ -425,8 +430,9 @@ public class UserCenterServiceImpl extends ServiceImpl<UserDao, User> implements
|
||||
request.setGivePrice(systemGroupData.getGiveMoney());
|
||||
|
||||
}
|
||||
User currentUser = userService.getInfoException();
|
||||
//生成系统订单
|
||||
request.setUserId(userService.getUserIdException());
|
||||
request.setUserId(currentUser.getUid());
|
||||
|
||||
UserRecharge userRecharge = userRechargeService.create(request);
|
||||
|
||||
@@ -436,6 +442,13 @@ public class UserCenterServiceImpl extends ServiceImpl<UserDao, User> implements
|
||||
if(null == responseVo){
|
||||
throw new CrmebException("下单失败!");
|
||||
}
|
||||
// 小程序订阅通知 充值成功通知
|
||||
WechatSendMessageForTopped topped = new WechatSendMessageForTopped(
|
||||
userRecharge.getOrderId(),userRecharge.getOrderId(),userRecharge.getPrice()+"",
|
||||
currentUser.getNowMoney()+"",userRecharge.getCreateTime()+"", userRecharge.getGivePrice()+"",
|
||||
"暂无",userRecharge.getPrice()+"","CRMEB","微信"
|
||||
);
|
||||
wechatSendMessageForMinService.sendToppedMessage(topped, currentUser.getUid());
|
||||
|
||||
return weChatService.response(responseVo);
|
||||
}catch (Exception e){
|
||||
|
||||
@@ -35,6 +35,15 @@ public interface StoreCouponUserService extends IService<StoreCouponUser> {
|
||||
|
||||
boolean use(Integer id, List<Integer> productIdList, BigDecimal price);
|
||||
|
||||
/**
|
||||
* 检测优惠券是否可用,计算订单价格时使用
|
||||
* @param id 优惠券id
|
||||
* @param productIdList 商品id集合
|
||||
* @param price 价格
|
||||
* @return 可用状态
|
||||
*/
|
||||
boolean canUse(Integer id, List<Integer> productIdList, BigDecimal price);
|
||||
|
||||
boolean receiveAll(UserCouponReceiveRequest request, Integer userId, String type);
|
||||
|
||||
boolean rollbackByCancelOrder(StoreOrder storeOrder);
|
||||
|
||||
@@ -197,7 +197,10 @@ public class StoreCouponUserServiceImpl extends ServiceImpl<StoreCouponUserDao,
|
||||
*/
|
||||
private void filterReceiveUserInUid(Integer couponId, List<Integer> uidList) {
|
||||
LambdaQueryWrapper<StoreCouponUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(StoreCouponUser::getCouponId, couponId).in(StoreCouponUser::getUid, uidList);
|
||||
lambdaQueryWrapper
|
||||
.eq(StoreCouponUser::getCouponId, couponId)
|
||||
.in(StoreCouponUser::getUid, uidList)
|
||||
.eq(StoreCouponUser::getStatus,0);
|
||||
List<StoreCouponUser> storeCouponUserList = dao.selectList(lambdaQueryWrapper);
|
||||
if(storeCouponUserList != null){
|
||||
List<Integer> receiveUidList = storeCouponUserList.stream().map(StoreCouponUser::getUid).distinct().collect(Collectors.toList());
|
||||
@@ -285,6 +288,67 @@ public class StoreCouponUserServiceImpl extends ServiceImpl<StoreCouponUserDao,
|
||||
return updateById(storeCouponUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测优惠券是否可用,计算订单价格时使用
|
||||
*
|
||||
* @param id 优惠券id
|
||||
* @param productIdList 商品id集合
|
||||
* @param price 价格
|
||||
* @return 可用状态
|
||||
*/
|
||||
@Override
|
||||
public boolean canUse(Integer id, List<Integer> productIdList, BigDecimal price) {
|
||||
StoreCouponUser storeCouponUser = getById(id);
|
||||
if(storeCouponUser == null || !storeCouponUser.getUid().equals(userService.getUserIdException())){
|
||||
throw new CrmebException("领取记录不存在!");
|
||||
}
|
||||
|
||||
if(storeCouponUser.getStatus() == 1){
|
||||
throw new CrmebException("此优惠券已使用!");
|
||||
}
|
||||
|
||||
if(storeCouponUser.getStatus() == 2){
|
||||
throw new CrmebException("此优惠券已失效!");
|
||||
}
|
||||
|
||||
//判断是否在使用时间内
|
||||
Date date = DateUtil.nowDateTime();
|
||||
if(storeCouponUser.getStartTime().compareTo(date) > 0){
|
||||
throw new CrmebException("此优惠券还未到达使用时间范围之内!");
|
||||
}
|
||||
|
||||
if(date.compareTo(storeCouponUser.getEndTime()) > 0){
|
||||
throw new CrmebException("此优惠券已经失效了");
|
||||
}
|
||||
|
||||
if(storeCouponUser.getMinPrice().compareTo(price) > 0){
|
||||
throw new CrmebException("总金额小于优惠券最小使用金额");
|
||||
}
|
||||
|
||||
//检测优惠券信息
|
||||
if(storeCouponUser.getUseType() > 1){
|
||||
if(productIdList.size() < 1){
|
||||
throw new CrmebException("没有找到商品");
|
||||
}
|
||||
|
||||
//拿出需要使用优惠券的商品分类集合
|
||||
List<Integer> categoryIdList = storeProductService.getSecondaryCategoryByProductId(StringUtils.join(productIdList, ","));
|
||||
|
||||
//设置优惠券所提供的集合
|
||||
List<Integer> primaryKeyIdList = CrmebUtil.stringToArray(storeCouponUser.getPrimaryKey());
|
||||
|
||||
//取两个集合的交集,如果是false则证明没有相同的值
|
||||
if(storeCouponUser.getUseType() == 2 && !primaryKeyIdList.retainAll(productIdList)){
|
||||
throw new CrmebException("此优惠券为商品券,请购买相关商品之后再使用!");
|
||||
}
|
||||
|
||||
if(storeCouponUser.getUseType() == 3 && !primaryKeyIdList.retainAll(categoryIdList)){
|
||||
throw new CrmebException("此优惠券为分类券,请购买相关分类下的商品之后再使用!");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户批量领取优惠券
|
||||
* @param request UserCouponReceiveRequest 领取参数
|
||||
@@ -393,7 +457,7 @@ public class StoreCouponUserServiceImpl extends ServiceImpl<StoreCouponUserDao,
|
||||
public List<StoreCouponUserOrder> getListByCartIds(List<Integer> cartIds) {
|
||||
|
||||
//购物车产品集合
|
||||
List<StoreCartResponse> storeCartResponseList = storeCartService.getListByUserIdAndCartIds(userService.getUserIdException(), cartIds);
|
||||
List<StoreCartResponse> storeCartResponseList = storeCartService.getListByUserIdAndCartIds(userService.getUserIdException(), cartIds,1);
|
||||
|
||||
//产品id集合
|
||||
List<Integer> productIds = storeCartResponseList.stream().map(StoreCartResponse::getProductId).distinct().collect(Collectors.toList());
|
||||
@@ -424,6 +488,12 @@ public class StoreCouponUserServiceImpl extends ServiceImpl<StoreCouponUserDao,
|
||||
return storeCouponUserOrderArrayList;
|
||||
}
|
||||
|
||||
/**
|
||||
* H5 优惠券列表
|
||||
* @param userId 用户id
|
||||
* @param pageParamRequest 分页参数
|
||||
* @return 优惠券列表
|
||||
*/
|
||||
@Override
|
||||
public List<StoreCouponUserResponse> getListFront(Integer userId, PageParamRequest pageParamRequest) {
|
||||
StoreCouponUserSearchRequest request = new StoreCouponUserSearchRequest();
|
||||
@@ -446,7 +516,7 @@ public class StoreCouponUserServiceImpl extends ServiceImpl<StoreCouponUserDao,
|
||||
type = false;
|
||||
}
|
||||
|
||||
if(date.compareTo(storeCouponUserResponse.getEndTime()) > 0){
|
||||
if(date.compareTo(storeCouponUserResponse.getEndTime()) >= 0){
|
||||
type = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,9 +71,14 @@ public class CallbackServiceImpl implements CallbackService {
|
||||
AttachVo attachVo = JSONObject.toJavaObject(JSONObject.parseObject(callbackVo.getAttach()), AttachVo.class);
|
||||
|
||||
//判断openid
|
||||
UserToken userToken = userTokenService.getUserIdByOpenId(callbackVo.getOpenid());
|
||||
UserToken userToken = userTokenService.getUserIdByOpenId(callbackVo.getOpenid(), Constants.THIRD_LOGIN_TOKEN_TYPE_PUBLIC); //公众号
|
||||
if(null == userToken || !userToken.getUid().equals(attachVo.getUserId())){
|
||||
//用户信息错误
|
||||
//继续找小程序,找不到说明没有
|
||||
userToken = userTokenService.getUserIdByOpenId(callbackVo.getOpenid(), Constants.THIRD_LOGIN_TOKEN_TYPE_PROGRAM); //小程序
|
||||
}
|
||||
|
||||
if(null == userToken || !userToken.getUid().equals(attachVo.getUserId())){
|
||||
//用户信息错误
|
||||
throw new CrmebException("用户信息错误!");
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.zbkj.crmeb.store.service.StoreOrderInfoService;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderService;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderStatusService;
|
||||
import com.zbkj.crmeb.store.service.StoreProductCouponService;
|
||||
import com.zbkj.crmeb.store.utilService.OrderUtils;
|
||||
import com.zbkj.crmeb.store.vo.StoreOrderInfoVo;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
import com.zbkj.crmeb.user.model.UserBill;
|
||||
@@ -26,8 +27,10 @@ import com.zbkj.crmeb.user.service.UserBillService;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.wechat.service.TemplateMessageService;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForPaySuccess;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -88,6 +91,9 @@ public class OrderPayServiceImpl extends PayService implements OrderPayService {
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
@Autowired
|
||||
private OrderUtils orderUtils;
|
||||
|
||||
//订单类
|
||||
private StoreOrder order;
|
||||
|
||||
@@ -105,7 +111,6 @@ public class OrderPayServiceImpl extends PayService implements OrderPayService {
|
||||
*/
|
||||
@Override
|
||||
public CreateOrderResponseVo payOrder(Integer orderId, String fromType, String clientIp) {
|
||||
// todo 这里需要根据 fromType 参数直接替换当前支付方式,
|
||||
CreateOrderResponseVo responseVo = new CreateOrderResponseVo();
|
||||
StoreOrder storeOrder = storeOrderService.getById(orderId);
|
||||
setOrder(storeOrder);
|
||||
@@ -299,20 +304,28 @@ public class OrderPayServiceImpl extends PayService implements OrderPayService {
|
||||
* @since 2020-07-01
|
||||
*/
|
||||
private void pushTempMessage() {
|
||||
String tempKey = Constants.WE_CHAT_PUBLIC_TEMP_KEY_ORDER_PAY_SUCCESS;
|
||||
String type = Constants.PAY_TYPE_WE_CHAT_FROM_PUBLIC;
|
||||
if(Constants.ORDER_PAY_CHANNEL_PROGRAM == getOrder().getIsChannel()){
|
||||
tempKey = Constants.WE_CHAT_PROGRAM_TEMP_KEY_ORDER_PAY_SUCCESS;
|
||||
type = Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM;
|
||||
}
|
||||
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put(Constants.WE_CHAT_TEMP_KEY_FIRST, "订单支付成功");
|
||||
map.put("orderId", getOrder().getOrderId());
|
||||
map.put("payAmount", getOrder().getPayPrice().toString());
|
||||
map.put(Constants.WE_CHAT_TEMP_KEY_END, "感谢购买!");
|
||||
// String tempKey = Constants.WE_CHAT_PUBLIC_TEMP_KEY_ORDER_PAY_SUCCESS;
|
||||
// String type = Constants.PAY_TYPE_WE_CHAT_FROM_PUBLIC;
|
||||
// if(Constants.ORDER_PAY_CHANNEL_PROGRAM == getOrder().getIsChannel()){
|
||||
// tempKey = Constants.WE_CHAT_PROGRAM_TEMP_KEY_ORDER_PAY_SUCCESS;
|
||||
// type = Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM;
|
||||
// }
|
||||
//
|
||||
// HashMap<String, String> map = new HashMap<>();
|
||||
// map.put(Constants.WE_CHAT_TEMP_KEY_FIRST, "订单支付成功");
|
||||
// map.put("orderId", getOrder().getOrderId());
|
||||
// map.put("payAmount", getOrder().getPayPrice().toString());
|
||||
// map.put(Constants.WE_CHAT_TEMP_KEY_END, "感谢购买!");
|
||||
|
||||
// templateMessageService.push(tempKey, map, getOrder().getUid(), type);
|
||||
// 小程序发送订阅消息
|
||||
String storeNameAndCarNumString = orderUtils.getStoreNameAndCarNumString(getOrder().getId());
|
||||
if(StringUtils.isNotBlank(storeNameAndCarNumString)){
|
||||
WechatSendMessageForPaySuccess paySuccess = new WechatSendMessageForPaySuccess(
|
||||
getOrder().getId()+"",getOrder().getPayPrice()+"",getOrder().getPayTime()+"","暂无",
|
||||
getOrder().getTotalPrice()+"",storeNameAndCarNumString);
|
||||
orderUtils.sendWeiChatMiniMessageForPaySuccess(paySuccess, userService.getById(getOrder()).getUid());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.zbkj.crmeb.pub.controller;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.common.CommonResult;
|
||||
import com.utils.RestTemplateUtil;
|
||||
import com.zbkj.crmeb.system.service.SystemAdminService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
@@ -34,6 +35,9 @@ public class WeChatPushController {
|
||||
@Resource
|
||||
private RestTemplateUtil restTemplateUtil;
|
||||
|
||||
@Resource
|
||||
private SystemAdminService systemAdminService;
|
||||
|
||||
|
||||
/**
|
||||
* 新增后台管理员表
|
||||
|
||||
@@ -5,25 +5,19 @@ import com.common.CommonPage;
|
||||
import com.common.CommonResult;
|
||||
import com.common.PageParamRequest;
|
||||
import com.constants.SmsConstants;
|
||||
import com.exception.CrmebException;
|
||||
import com.utils.ValidateCodeUtil;
|
||||
import com.utils.ValidateFormUtil;
|
||||
import com.zbkj.crmeb.sms.model.SmsRecord;
|
||||
import com.zbkj.crmeb.sms.request.RegisterRequest;
|
||||
import com.zbkj.crmeb.sms.request.SmsConfigRequest;
|
||||
import com.zbkj.crmeb.sms.request.SmsLoginRequest;
|
||||
import com.zbkj.crmeb.sms.request.SmsRecordRequest;
|
||||
import com.zbkj.crmeb.sms.service.SmsRecordService;
|
||||
import com.zbkj.crmeb.sms.service.SmsService;
|
||||
import com.zbkj.crmeb.validatecode.model.ValidateCode;
|
||||
import io.swagger.annotations.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import com.zbkj.crmeb.sms.service.SmsRecordService;
|
||||
import com.zbkj.crmeb.sms.model.SmsRecord;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
|
||||
|
||||
/**
|
||||
@@ -247,36 +241,16 @@ public class SmsRecordController {
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name="title", value="名称"),
|
||||
@ApiImplicitParam(name="status", value="状态"),
|
||||
@ApiImplicitParam(name="type", value="type (1=验证码 2=通知 3=推广)"),
|
||||
})
|
||||
public CommonResult<JSONObject> tempList(@RequestParam(name = "status", required = false) Integer status,
|
||||
@RequestParam(name = "title", required = false) String title,
|
||||
@RequestParam(name = "type", required = false) String type,
|
||||
@ModelAttribute PageParamRequest pageParamRequest){
|
||||
JSONObject result = smsService.tempList(title, status, pageParamRequest);
|
||||
JSONObject result = smsService.tempList(title, status, type, pageParamRequest);
|
||||
return CommonResult.success(getDataByResult(result));
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信提醒开关
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "短信提醒开关保存")
|
||||
@RequestMapping(value = "/config/save", method = RequestMethod.POST)
|
||||
public CommonResult<Object> saveConfig(@ModelAttribute SmsConfigRequest request){
|
||||
smsService.configSave(request);
|
||||
return CommonResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信提醒开关
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "短信提醒开关列表")
|
||||
@RequestMapping(value = "/config/list", method = RequestMethod.POST)
|
||||
public CommonResult<Object> configList(){
|
||||
return CommonResult.success(smsService.configList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 从JSONObject 中取出msg
|
||||
* @param result 结果数据
|
||||
|
||||
@@ -33,8 +33,7 @@ public class SmsRecord implements Serializable {
|
||||
|
||||
}
|
||||
|
||||
public SmsRecord(Integer id, String uid, String phone, String content, String addIp, String template, Integer resultcode, Integer recordId, String message) {
|
||||
this.id = id;
|
||||
public SmsRecord(String uid, String phone, String content, String addIp, String template, Integer resultcode, Integer recordId, String message) {
|
||||
this.uid = uid;
|
||||
this.phone = phone;
|
||||
this.content = content;
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package com.zbkj.crmeb.sms.service;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.sms.request.*;
|
||||
import com.zbkj.crmeb.sms.request.RegisterRequest;
|
||||
import com.zbkj.crmeb.sms.request.SendSmsVo;
|
||||
import com.zbkj.crmeb.sms.request.SmsLoginRequest;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
@@ -36,11 +37,7 @@ public interface SmsService{
|
||||
|
||||
JSONObject applyTempMessage(String title, String content, Integer type);
|
||||
|
||||
JSONObject tempList(String title, Integer status, PageParamRequest pageParamRequest);
|
||||
|
||||
boolean configSave(SmsConfigRequest request);
|
||||
|
||||
SmsConfigRequest configList();
|
||||
JSONObject tempList(String title, Integer status, String type, PageParamRequest pageParamRequest);
|
||||
|
||||
boolean pushCodeToList(String phone, Integer tag,HashMap<String, Object> pram);
|
||||
|
||||
|
||||
@@ -6,14 +6,12 @@ import com.common.PageParamRequest;
|
||||
import com.constants.Constants;
|
||||
import com.constants.SmsConstants;
|
||||
import com.exception.CrmebException;
|
||||
import com.exception.ExceptionCodeEnum;
|
||||
import com.utils.CrmebUtil;
|
||||
import com.utils.RedisUtil;
|
||||
import com.utils.RestTemplateUtil;
|
||||
import com.zbkj.crmeb.sms.model.SmsRecord;
|
||||
import com.zbkj.crmeb.sms.request.RegisterRequest;
|
||||
import com.zbkj.crmeb.sms.request.SendSmsVo;
|
||||
import com.zbkj.crmeb.sms.request.SmsConfigRequest;
|
||||
import com.zbkj.crmeb.sms.request.SmsLoginRequest;
|
||||
import com.zbkj.crmeb.sms.service.SmsRecordService;
|
||||
import com.zbkj.crmeb.sms.service.SmsService;
|
||||
@@ -21,7 +19,6 @@ import com.zbkj.crmeb.system.service.SystemConfigService;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -341,11 +338,12 @@ public class SmsServiceImpl implements SmsService {
|
||||
* @return JSONObject
|
||||
*/
|
||||
@Override
|
||||
public JSONObject tempList(String title, Integer status, PageParamRequest pageParamRequest) {
|
||||
public JSONObject tempList(String title, Integer status, String type, PageParamRequest pageParamRequest) {
|
||||
init();
|
||||
Map<String, Object> map = mergeToken(CrmebUtil.objectToMap(pageParamRequest));
|
||||
map.put("title", title);
|
||||
map.put("status", status);
|
||||
map.put("temp_type", type);
|
||||
return post(SmsConstants.SMS_API_URL + SmsConstants.SMS_API_TEMP_LIST_URI, map);
|
||||
}
|
||||
|
||||
@@ -363,12 +361,19 @@ public class SmsServiceImpl implements SmsService {
|
||||
//发送手机验证码, 记录到redis sms_validate_code_手机号
|
||||
switch (tag){
|
||||
case SmsConstants.SMS_CONFIG_TYPE_VERIFICATION_CODE : // 验证码 特殊处理 code
|
||||
//获取短信验证码过期时间
|
||||
String codeExpireStr = systemConfigService.getValueByKey(Constants.CONFIG_KEY_SMS_CODE_EXPIRE);
|
||||
if(StringUtils.isBlank(codeExpireStr) || Integer.parseInt(codeExpireStr) == 0){
|
||||
codeExpireStr = Constants.NUM_FIVE + "";
|
||||
}
|
||||
Integer code = CrmebUtil.randomCount(111111, 999999);
|
||||
HashMap<String, Object> justPram = new HashMap<>();
|
||||
justPram.put("code", code);
|
||||
justPram.put("time", codeExpireStr);
|
||||
push(phone,SmsConstants.SMS_CONFIG_VERIFICATION_CODE,
|
||||
SmsConstants.SMS_CONFIG_VERIFICATION_CODE_TEMP_ID,false,justPram);
|
||||
redisUtil.set(userService.getValidateCodeRedisKey(phone), code, 5L, TimeUnit.MINUTES);//5分钟过期
|
||||
|
||||
redisUtil.set(userService.getValidateCodeRedisKey(phone), code, Long.valueOf(codeExpireStr), TimeUnit.MINUTES);//5分钟过期
|
||||
|
||||
break;
|
||||
case SmsConstants.SMS_CONFIG_TYPE_LOWER_ORDER_SWITCH : // 支付成功短信提醒 pay_price order_id
|
||||
@@ -448,7 +453,7 @@ public class SmsServiceImpl implements SmsService {
|
||||
if(resultCode == Constants.HTTPSTATUS_CODE_SUCCESS){
|
||||
try{
|
||||
// 注意这里的状态仅仅是调用是否成功的状态 需要等待5分钟一周另外一个任务去查询发送状态后再更新status数据
|
||||
SmsRecord smsRecord = new SmsRecord(0,sendSmsVo.getUid(), sendSmsVo.getMobile(),sendSmsVo.getContent(),
|
||||
SmsRecord smsRecord = new SmsRecord(sendSmsVo.getUid(), sendSmsVo.getMobile(),sendSmsVo.getContent(),
|
||||
"", sendSmsVo.getTemplate().toString(),
|
||||
resultCode,Integer.parseInt(smsRecodeId), message);
|
||||
smsRecordService.save(smsRecord);
|
||||
@@ -495,42 +500,6 @@ public class SmsServiceImpl implements SmsService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信发送开关配置
|
||||
* @param request 开关配置项
|
||||
* @return 配置结果
|
||||
*/
|
||||
@Override
|
||||
public boolean configSave(SmsConfigRequest request) {
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_LOWER_ORDER_SWITCH,request.getLowerOrderSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_DELIVER_GOODS_SWITCH,request.getDeliverGoodsSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_CONFIRM_TAKE_OVER_SWITCH,request.getConfirmTakeOverSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_ADMIN_LOWER_ORDER_SWITCH,request.getAdminLowerOrderSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_ADMIN_PAY_SUCCESS_SWITCH,request.getAdminPaySuccessSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_ADMIN_REFUND_SWITCH,request.getAdminRefundSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_ADMIN_CONFIRM_TAKE_OVER_SWITCH,request.getAdminConfirmTakeOverSwitch());
|
||||
systemConfigService.updateOrSaveValueByName(SmsConstants.SMS_CONFIG_PRICE_REVISION_SWITCH,request.getPriceRevisionSwitch());
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取短信配置
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public SmsConfigRequest configList() {
|
||||
SmsConfigRequest config = new SmsConfigRequest();
|
||||
config.setLowerOrderSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_LOWER_ORDER_SWITCH));
|
||||
config.setDeliverGoodsSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_DELIVER_GOODS_SWITCH));
|
||||
config.setConfirmTakeOverSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_CONFIRM_TAKE_OVER_SWITCH));
|
||||
config.setAdminLowerOrderSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_ADMIN_LOWER_ORDER_SWITCH));
|
||||
config.setAdminPaySuccessSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_ADMIN_PAY_SUCCESS_SWITCH));
|
||||
config.setAdminRefundSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_ADMIN_REFUND_SWITCH));
|
||||
config.setAdminConfirmTakeOverSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_ADMIN_CONFIRM_TAKE_OVER_SWITCH));
|
||||
config.setPriceRevisionSwitch(systemConfigService.getValueByKey(SmsConstants.SMS_CONFIG_PRICE_REVISION_SWITCH));
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加待发送消息到redis队列
|
||||
* @param phone
|
||||
@@ -549,6 +518,7 @@ public class SmsServiceImpl implements SmsService {
|
||||
mParam.put("mobile", phone);
|
||||
mParam.put("template", msgTempId);
|
||||
mParam.put("param", JSONObject.toJSONString(mapPram));
|
||||
|
||||
if(!valid){
|
||||
redisUtil.lPush(SmsConstants.SMS_SEND_KEY, JSONObject.toJSONString(mParam));
|
||||
return;
|
||||
@@ -566,7 +536,7 @@ public class SmsServiceImpl implements SmsService {
|
||||
@Override
|
||||
public void pushByAsyncStatus(String recordIds) {
|
||||
if(null == recordIds) return;
|
||||
redisUtil.lPush(SmsConstants.SMS_SEND_RESULT_KEY, recordIds);
|
||||
redisUtil.lPush(SmsConstants.SMS_SEND_RESULT_KEY, JSONObject.toJSONString(recordIds));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -714,4 +684,3 @@ public class SmsServiceImpl implements SmsService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,15 +5,15 @@ import com.common.PageParamRequest;
|
||||
import com.exception.CrmebException;
|
||||
import com.zbkj.crmeb.express.vo.LogisticsResultVo;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderRefundRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSearchRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSendRequest;
|
||||
import com.zbkj.crmeb.store.request.*;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderInfoResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffDetail;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffTopDetail;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderVerification;
|
||||
import io.swagger.annotations.*;
|
||||
import io.swagger.models.auth.In;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -21,6 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
@@ -36,6 +38,9 @@ public class StoreOrderController {
|
||||
@Autowired
|
||||
private StoreOrderService storeOrderService;
|
||||
|
||||
@Autowired
|
||||
private StoreOrderVerification storeOrderVerification;
|
||||
|
||||
/**
|
||||
* 分页显示订单表
|
||||
* @param request 搜索条件
|
||||
@@ -186,6 +191,88 @@ public class StoreOrderController {
|
||||
public CommonResult<LogisticsResultVo> getLogisticsInfo(@RequestParam(value = "id") Integer id){
|
||||
return CommonResult.success(storeOrderService.getLogisticsInfo(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销订单头部数据
|
||||
* @author stivepeim
|
||||
* @since 2020-08-29
|
||||
*/
|
||||
@ApiOperation(value = "核销订单头部数据")
|
||||
@RequestMapping(value = "/statistics", method = RequestMethod.GET)
|
||||
public CommonResult<StoreStaffTopDetail> getStatistics(){
|
||||
return CommonResult.success(storeOrderVerification.getOrderVerificationData());
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销订单头部数据
|
||||
* @author stivepeim
|
||||
* @since 2020-08-29
|
||||
*/
|
||||
@ApiOperation(value = "核销订单 月列表数据")
|
||||
@RequestMapping(value = "/statisticsData", method = RequestMethod.GET)
|
||||
public CommonResult<List<StoreStaffDetail>> getStaffDetail(StoreOrderStaticsticsRequest request){
|
||||
return CommonResult.success(storeOrderVerification.getOrderVerificationDetail(request));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 核销码核销订单
|
||||
* @author stivepeim
|
||||
* @since 2020-09-01
|
||||
*/
|
||||
@ApiOperation(value = "核销码核销订单")
|
||||
@RequestMapping(value = "/writeUpdate/{vCode}", method = RequestMethod.GET)
|
||||
public CommonResult<Object> verificationOrder(
|
||||
@PathVariable String vCode){
|
||||
return CommonResult.success(storeOrderVerification.verificationOrderByCode(vCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销码核销订单
|
||||
* @author stivepeim
|
||||
* @since 2020-09-01
|
||||
*/
|
||||
@ApiOperation(value = "核销码查询待核销订单")
|
||||
@RequestMapping(value = "/writeConfirm/{vCode}", method = RequestMethod.GET)
|
||||
public CommonResult<Object> verificationConfirmOrder(
|
||||
@PathVariable String vCode){
|
||||
return CommonResult.success(storeOrderVerification.getVerificationOrderByCode(vCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 一键改价
|
||||
* @author stivepeim
|
||||
* @since 2020-09-01
|
||||
*/
|
||||
@ApiOperation(value = "一键改价")
|
||||
@RequestMapping(value = "/editPrice", method = RequestMethod.GET)
|
||||
public CommonResult<Object> editOrderPrice(
|
||||
@RequestParam String orderId, @RequestParam(required = true,defaultValue = "0") BigDecimal price){
|
||||
try {
|
||||
if(price.compareTo(BigDecimal.ZERO) < 0) throw new CrmebException("请输入合法参数");
|
||||
}catch (Exception e){
|
||||
throw new CrmebException("价格参数错误");
|
||||
}
|
||||
return CommonResult.success(storeOrderService.editPrice(orderId,price));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单统计详情
|
||||
* @author stivepeim
|
||||
* @since 2020-09-01
|
||||
*/
|
||||
@ApiOperation(value = "订单统计详情")
|
||||
@RequestMapping(value = "/time", method = RequestMethod.GET)
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "dateLimit", value = "today,yesterday,lately7,lately30,month,year,/yyyy-MM-dd hh:mm:ss,yyyy-MM-dd hh:mm:ss/",
|
||||
dataType = "String", required = true),
|
||||
@ApiImplicitParam(name = "type", value="1=price 2=order", required = true)
|
||||
})
|
||||
public CommonResult<Object> statisticsOrderTime(@RequestParam String dateLimit,
|
||||
@RequestParam Integer type){
|
||||
return CommonResult.success(storeOrderService.orderStatisticsByTime(dateLimit,type));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
package com.zbkj.crmeb.store.dao;
|
||||
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zbkj.crmeb.store.request.StoreDateRangeSqlPram;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderStaticsticsRequest;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderStatisticsChartItemResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffDetail;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -20,4 +26,26 @@ public interface StoreOrderDao extends BaseMapper<StoreOrder> {
|
||||
BigDecimal getRefundPrice(String where);
|
||||
|
||||
Integer getRefundTotal(String where);
|
||||
|
||||
/**
|
||||
* 核销详情 月数据
|
||||
* @param request 分页和日期
|
||||
* @return 月数据
|
||||
*/
|
||||
List<StoreStaffDetail> getOrderVerificationDetail(StoreOrderStaticsticsRequest request);
|
||||
|
||||
/**
|
||||
* 订单统计详情 price
|
||||
* @param pram 时间区间参数
|
||||
* @return 月数据
|
||||
*/
|
||||
List<StoreOrderStatisticsChartItemResponse> getOrderStatisticsPriceDetail(StoreDateRangeSqlPram pram);
|
||||
|
||||
/**
|
||||
* 订单统计详情 订单量
|
||||
* @param pram 时间区间参数
|
||||
* @return 月数据
|
||||
*/
|
||||
List<StoreOrderStatisticsChartItemResponse> getOrderStatisticsOrderCountDetail(StoreDateRangeSqlPram pram);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.zbkj.crmeb.store.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname StoreDateRangeSqlPram
|
||||
* @Description 订单时间参数,开始时间结束时间
|
||||
* @Date 9/4/20 10:09 上午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreDateRangeSqlPram {
|
||||
|
||||
public StoreDateRangeSqlPram(String startTime, String endTime) {
|
||||
this.startTime = startTime;
|
||||
this.endTime = endTime;
|
||||
}
|
||||
|
||||
private String startTime;
|
||||
private String endTime;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.zbkj.crmeb.store.request;
|
||||
|
||||
import com.constants.Constants;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname StoreOrderStaticsticsRequest
|
||||
* @Description 订单统计详情request
|
||||
* @Date 9/4/20 12:23 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderStaticsticsRequest {
|
||||
@ApiModelProperty(value = "页码", example= Constants.DEFAULT_PAGE + "")
|
||||
private int page = Constants.DEFAULT_PAGE;
|
||||
|
||||
@ApiModelProperty(value = "每页数量", example = Constants.DEFAULT_LIMIT + "")
|
||||
private int limit = Constants.DEFAULT_LIMIT;
|
||||
|
||||
@ApiModelProperty(value = "today,yesterday,lately7,lately30,month,year,/yyyy-MM-dd hh:mm:ss,yyyy-MM-dd hh:mm:ss/")
|
||||
private String dateLimit;
|
||||
|
||||
@JsonIgnore
|
||||
private String startTime;
|
||||
|
||||
@JsonIgnore
|
||||
private String endTime;
|
||||
}
|
||||
@@ -62,6 +62,9 @@ public class StoreOrderCountItemResponse implements Serializable {
|
||||
@ApiModelProperty(value = "已退款")
|
||||
private Integer refunded;
|
||||
|
||||
@ApiModelProperty(value = "0 未退款 1 申请中 2 已退款")
|
||||
private Integer refundStatus;
|
||||
|
||||
@ApiModelProperty(value = "已删除")
|
||||
private Integer deleted;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.zbkj.crmeb.store.model.StoreOrderInfo;
|
||||
import com.zbkj.crmeb.store.vo.StoreOrderInfoVo;
|
||||
import com.zbkj.crmeb.system.model.SystemStore;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@@ -15,6 +18,7 @@ import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -198,4 +202,10 @@ public class StoreOrderInfoResponse implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "用户信息")
|
||||
private User user;
|
||||
|
||||
@ApiModelProperty(value = "订单商品详情")
|
||||
List<StoreOrderInfoVo> orderInfo;
|
||||
|
||||
@ApiModelProperty(value = "提货点")
|
||||
private SystemStore systemStore;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.zbkj.crmeb.store.response;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname StoreOrderStatisticsChartItemResponse
|
||||
* @Description 订单统计 response item
|
||||
* @Date 9/4/20 10:02 上午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderStatisticsChartItemResponse {
|
||||
|
||||
private String num;
|
||||
private String time;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.zbkj.crmeb.store.response;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Classname StoreOrderStatisticsResponse
|
||||
* @Description TODO
|
||||
* @Date 9/2/20 5:58 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderStatisticsResponse {
|
||||
@ApiModelProperty(value = "订单数图标数据")
|
||||
private List<StoreOrderStatisticsChartItemResponse> chart; // 订单数图标数据
|
||||
|
||||
@ApiModelProperty(value = "时间区间增长率")
|
||||
private Integer growthRate; // 时间区间增长率
|
||||
|
||||
@ApiModelProperty(value = "同比")
|
||||
private String increaseTime;
|
||||
|
||||
@ApiModelProperty(value = "同比上个时间区间增长营业额 1=增长,2=减少")
|
||||
private Integer increaseTimeStatus; // 同比上个时间区间增长营业额 1=增长,2=减少
|
||||
|
||||
@ApiModelProperty(value = "时间区间订单数")
|
||||
private BigDecimal time;
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
package com.zbkj.crmeb.store.response;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.zbkj.crmeb.store.model.StoreOrderInfo;
|
||||
import com.zbkj.crmeb.store.vo.StoreOrderInfoVo;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Classname StoreOrderVerificationConfirmResponse
|
||||
* @Description 核销订单确认前的数据
|
||||
* @Date 9/1/20 5:26 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderVerificationConfirmResponse {
|
||||
|
||||
@ApiModelProperty(value = "订单ID")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "订单号")
|
||||
private String orderId;
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer uid;
|
||||
|
||||
@ApiModelProperty(value = "用户姓名")
|
||||
private String realName;
|
||||
|
||||
@ApiModelProperty(value = "用户电话")
|
||||
private String userPhone;
|
||||
|
||||
@ApiModelProperty(value = "详细地址")
|
||||
private String userAddress;
|
||||
|
||||
@ApiModelProperty(value = "运费金额")
|
||||
private BigDecimal freightPrice;
|
||||
|
||||
@ApiModelProperty(value = "订单商品总数")
|
||||
private Integer totalNum;
|
||||
|
||||
@ApiModelProperty(value = "订单总价")
|
||||
private BigDecimal totalPrice;
|
||||
|
||||
@ApiModelProperty(value = "邮费")
|
||||
private BigDecimal totalPostage;
|
||||
|
||||
@ApiModelProperty(value = "实际支付金额")
|
||||
private BigDecimal payPrice;
|
||||
|
||||
@ApiModelProperty(value = "支付邮费")
|
||||
private BigDecimal payPostage;
|
||||
|
||||
@ApiModelProperty(value = "抵扣金额")
|
||||
private BigDecimal deductionPrice;
|
||||
|
||||
@ApiModelProperty(value = "优惠券id")
|
||||
private Integer couponId;
|
||||
|
||||
@ApiModelProperty(value = "优惠券金额")
|
||||
private BigDecimal couponPrice;
|
||||
|
||||
@ApiModelProperty(value = "支付状态")
|
||||
private Boolean paid;
|
||||
|
||||
@ApiModelProperty(value = "支付时间")
|
||||
private Date payTime;
|
||||
|
||||
@ApiModelProperty(value = "支付方式")
|
||||
private String payType;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
// @ApiModelProperty(value = "创建时间") todo ZL
|
||||
// private String day;
|
||||
|
||||
@ApiModelProperty(value = "订单状态(-1 : 申请退款 -2 : 退货成功 0:待发货;1:待收货;2:已收货,待评价;3:已完成;)")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "0 未退款 1 申请中 2 已退款")
|
||||
private Integer refundStatus;
|
||||
|
||||
@ApiModelProperty(value = "退款图片")
|
||||
private String refundReasonWapImg;
|
||||
|
||||
@ApiModelProperty(value = "退款用户说明")
|
||||
private String refundReasonWapExplain;
|
||||
|
||||
@ApiModelProperty(value = "退款时间")
|
||||
private Date refundReasonTime;
|
||||
|
||||
@ApiModelProperty(value = "前台退款原因")
|
||||
private String refundReasonWap;
|
||||
|
||||
@ApiModelProperty(value = "不退款的理由")
|
||||
private String refundReason;
|
||||
|
||||
@ApiModelProperty(value = "退款金额")
|
||||
private BigDecimal refundPrice;
|
||||
|
||||
@ApiModelProperty(value = "快递名称/送货人姓名")
|
||||
private String deliveryName;
|
||||
|
||||
@ApiModelProperty(value = "发货类型")
|
||||
private String deliveryType;
|
||||
|
||||
@ApiModelProperty(value = "快递单号/手机号")
|
||||
private String deliveryId;
|
||||
|
||||
@ApiModelProperty(value = "消费赚取积分")
|
||||
private Integer gainIntegral;
|
||||
|
||||
@ApiModelProperty(value = "使用积分")
|
||||
private Integer useIntegral;
|
||||
|
||||
@ApiModelProperty(value = "给用户退了多少积分")
|
||||
private Integer backIntegral;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String mark;
|
||||
|
||||
@ApiModelProperty(value = "是否删除")
|
||||
private Boolean isDel;
|
||||
|
||||
@ApiModelProperty(value = "唯一id(md5加密)类似id")
|
||||
@TableField(value = "`unique`")
|
||||
private String unique;
|
||||
|
||||
@ApiModelProperty(value = "管理员备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "商户ID")
|
||||
private Integer merId;
|
||||
|
||||
private Integer isMerCheck;
|
||||
|
||||
@ApiModelProperty(value = "拼团商品id0一般商品")
|
||||
private Integer combinationId;
|
||||
|
||||
@ApiModelProperty(value = "拼团id 0没有拼团")
|
||||
private Integer pinkId;
|
||||
|
||||
@ApiModelProperty(value = "成本价")
|
||||
private BigDecimal cost;
|
||||
|
||||
@ApiModelProperty(value = "秒杀商品ID")
|
||||
private Integer seckillId;
|
||||
|
||||
@ApiModelProperty(value = "砍价id")
|
||||
private Integer bargainId;
|
||||
|
||||
@ApiModelProperty(value = "核销码")
|
||||
private String verifyCode;
|
||||
|
||||
@ApiModelProperty(value = "门店id")
|
||||
private Integer storeId;
|
||||
|
||||
@ApiModelProperty(value = "配送方式 1=快递 ,2=门店自提")
|
||||
private Integer shippingType;
|
||||
|
||||
@ApiModelProperty(value = "店员id")
|
||||
private Integer clerkId;
|
||||
|
||||
@ApiModelProperty(value = "支付渠道(0微信公众号1微信小程序)")
|
||||
private int isChannel;
|
||||
|
||||
@ApiModelProperty(value = "消息提醒")
|
||||
private Boolean isRemind;
|
||||
|
||||
@ApiModelProperty(value = "后台是否删除")
|
||||
private Boolean isSystemDel;
|
||||
|
||||
@ApiModelProperty(value = "订单详情")
|
||||
private List<StoreOrderInfoVo> storeOrderInfoVos;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.zbkj.crmeb.store.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @Classname StoreStaffDetail
|
||||
* @Description 核销月详情Response
|
||||
* @Date 8/31/20 2:50 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreStaffDetail {
|
||||
private Integer count;
|
||||
private BigDecimal price;
|
||||
private String time;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.zbkj.crmeb.store.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @Classname StoreStaffTopDetail
|
||||
* @Description 核销订单top数据对象
|
||||
* @Date 8/29/20 3:37 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class StoreStaffTopDetail {
|
||||
private Integer completeCount; // 订单完成订单数量
|
||||
private Integer evaluatedCount;// 待评价订单数量
|
||||
private Integer monthCount;
|
||||
private BigDecimal monthPrice;
|
||||
private Integer orderCount;
|
||||
private Integer proCount;
|
||||
private BigDecimal proPrice;
|
||||
private Integer receivedCount;
|
||||
private Integer refundCount;
|
||||
private BigDecimal sumPrice;
|
||||
private Integer todayCount;
|
||||
private BigDecimal todayPrice;
|
||||
private Integer unpaidCount;
|
||||
private Integer unshippedCount;
|
||||
private Integer verificationCount;// 待核销数量
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public interface StoreCartService extends IService<StoreCart> {
|
||||
* @param cartIds 购物车id集合
|
||||
* @return 购物车列表
|
||||
*/
|
||||
List<StoreCartResponse> getListByUserIdAndCartIds(Integer userId, List<Integer> cartIds);
|
||||
List<StoreCartResponse> getListByUserIdAndCartIds(Integer userId, List<Integer> cartIds,Integer isNew);
|
||||
|
||||
/**
|
||||
* 根据用户id和购物车id集合获取列表
|
||||
|
||||
@@ -7,9 +7,7 @@ import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderRefundRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSearchRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSendRequest;
|
||||
import com.zbkj.crmeb.store.response.RetailShopOrderDataResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderInfoResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderResponse;
|
||||
import com.zbkj.crmeb.store.response.*;
|
||||
import com.zbkj.crmeb.system.request.SystemWriteOffOrderSearchRequest;
|
||||
import com.zbkj.crmeb.system.response.SystemWriteOffOrderResponse;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
@@ -132,4 +130,34 @@ public interface StoreOrderService extends IService<StoreOrder> {
|
||||
LogisticsResultVo getLogisticsInfo(Integer id);
|
||||
|
||||
Map<String, String> getStatus(StoreOrder storeOrder);
|
||||
|
||||
/**
|
||||
* 更改订单价格
|
||||
* @param orderId 订单id wx开头
|
||||
* @param price 待更改价格
|
||||
* @return 更改结果
|
||||
*/
|
||||
boolean editPrice(String orderId,BigDecimal price);
|
||||
|
||||
/**
|
||||
* 确认付款
|
||||
* @param orderId 订单号
|
||||
* @return 确认付款结果
|
||||
*/
|
||||
boolean confirmPayed(String orderId);
|
||||
|
||||
/**
|
||||
* 线下付款
|
||||
* @param orderId 待付款订单id
|
||||
* @return 付款结果
|
||||
*/
|
||||
boolean payOrderOffLine(Integer orderId);
|
||||
|
||||
/**
|
||||
* 根据时间参数统计订单价格
|
||||
* @param dateLimit 时间区间
|
||||
* @param type 1=price 2=订单量
|
||||
* @return 统计订单信息
|
||||
*/
|
||||
StoreOrderStatisticsResponse orderStatisticsByTime(String dateLimit,Integer type);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.zbkj.crmeb.store.service;
|
||||
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderStaticsticsRequest;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderVerificationConfirmResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffDetail;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffTopDetail;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Classname StoreOrderVerification
|
||||
* @Description 订单核销业务
|
||||
* @Date 9/1/20 10:25 上午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
public interface StoreOrderVerification {
|
||||
/**
|
||||
* 获取订单核销数据
|
||||
*/
|
||||
StoreStaffTopDetail getOrderVerificationData();
|
||||
|
||||
/**
|
||||
* 核销月详情
|
||||
* @return 月详情
|
||||
*/
|
||||
List<StoreStaffDetail> getOrderVerificationDetail(StoreOrderStaticsticsRequest request);
|
||||
|
||||
/**
|
||||
* 根据核销码核销订单
|
||||
* @param vCode 核销码
|
||||
* @return 核销结果
|
||||
*/
|
||||
boolean verificationOrderByCode(String vCode);
|
||||
|
||||
/**
|
||||
* 根据核销码查询待核销订单
|
||||
* @param vCode 核销码
|
||||
* @return 待核销订单详情
|
||||
*/
|
||||
StoreOrderVerificationConfirmResponse getVerificationOrderByCode(String vCode);
|
||||
}
|
||||
@@ -3,12 +3,17 @@ package com.zbkj.crmeb.store.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.constants.Constants;
|
||||
import com.utils.DateUtil;
|
||||
import com.utils.RedisUtil;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.service.OrderTaskService;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderService;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderTaskService;
|
||||
import com.zbkj.crmeb.store.utilService.OrderUtils;
|
||||
import com.zbkj.crmeb.task.order.OrderRefundByUser;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForGetPackage;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForOrderCancel;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -33,6 +38,12 @@ public class OrderTaskServiceImpl implements OrderTaskService {
|
||||
@Autowired
|
||||
private StoreOrderService storeOrderService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
@Autowired
|
||||
private OrderUtils orderUtils;
|
||||
|
||||
/**
|
||||
* 用户取消订单
|
||||
* @author Mr.Zhang
|
||||
@@ -58,6 +69,14 @@ public class OrderTaskServiceImpl implements OrderTaskService {
|
||||
boolean result = storeOrderTaskService.cancelByUser(storeOrder);
|
||||
if(!result){
|
||||
redisUtil.lPush(redisKey, data);
|
||||
}else{
|
||||
WechatSendMessageForOrderCancel orderCancel = new WechatSendMessageForOrderCancel(
|
||||
"暂无",DateUtil.nowDateTimeStr(),"","暂无",orderUtils.getPayTypeStrByOrder(storeOrder),
|
||||
orderUtils.getStoreNameAndCarNumString(storeOrder.getId()),storeOrder.getOrderId(),
|
||||
storeOrder.getStatus()+"",storeOrder.getPayPrice()+"",storeOrder.getCreateTime()+"",
|
||||
"CRMEB","暂无",storeOrder.getOrderId(),"CRMEB","暂无"
|
||||
);
|
||||
wechatSendMessageForMinService.sendOrderCancelMessage(orderCancel,storeOrder.getUid());
|
||||
}
|
||||
}catch (Exception e){
|
||||
redisUtil.lPush(redisKey, data);
|
||||
@@ -155,6 +174,13 @@ public class OrderTaskServiceImpl implements OrderTaskService {
|
||||
boolean result = storeOrderTaskService.takeByUser(storeOrder);
|
||||
if(!result){
|
||||
redisUtil.lPush(redisKey, id);
|
||||
}else{
|
||||
// 微信小程序订阅消息通知 确认收货
|
||||
WechatSendMessageForGetPackage getPackage = new WechatSendMessageForGetPackage(
|
||||
orderUtils.getPayTypeStrByOrder(storeOrder),orderUtils.getStoreNameAndCarNumString(storeOrder.getId()),
|
||||
"CRMEB",storeOrder.getUserAddress(), DateUtil.nowDateTimeStr(),storeOrder.getOrderId()
|
||||
);
|
||||
wechatSendMessageForMinService.sendGetPackageMessage(getPackage, storeOrder.getUid());
|
||||
}
|
||||
}catch (Exception e){
|
||||
redisUtil.lPush(redisKey, id);
|
||||
|
||||
@@ -121,13 +121,15 @@ public class StoreCartServiceImpl extends ServiceImpl<StoreCartDao, StoreCart> i
|
||||
* 根据用户id和购物车id查询
|
||||
* @param userId 用户id
|
||||
* @param cartIds 购物车id集合
|
||||
* @param isNew 是否立即购买
|
||||
* @return 购物车列表
|
||||
*/
|
||||
@Override
|
||||
public List<StoreCartResponse> getListByUserIdAndCartIds(Integer userId, List<Integer> cartIds) {
|
||||
public List<StoreCartResponse> getListByUserIdAndCartIds(Integer userId, List<Integer> cartIds,Integer isNew) {
|
||||
LambdaQueryWrapper<StoreCart> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(StoreCart::getId,cartIds);
|
||||
lambdaQueryWrapper.eq(StoreCart::getUid, userId);
|
||||
if(null != isNew) lambdaQueryWrapper.eq(StoreCart::getIsNew, isNew);
|
||||
lambdaQueryWrapper.orderByDesc(StoreCart::getCreateTime);
|
||||
List<StoreCart> storeCarts = dao.selectList(lambdaQueryWrapper);
|
||||
List<StoreCartResponse> response = new ArrayList<>();
|
||||
@@ -205,9 +207,10 @@ public class StoreCartServiceImpl extends ServiceImpl<StoreCartDao, StoreCart> i
|
||||
storeCartPram.setProductAttrUnique(storeCart.getProductAttrUnique());
|
||||
storeCartPram.setUid(userService.getUserId());
|
||||
List<StoreCart> existCarts = getByEntity(storeCartPram); // todo 这里仅仅能获取一条以信息
|
||||
if(existCarts.size() > 0){
|
||||
if(existCarts.size() > 0 && !storeCart.getIsNew()){
|
||||
StoreCart forUpdateStoreCart = existCarts.get(0);
|
||||
forUpdateStoreCart.setCartNum(forUpdateStoreCart.getCartNum()+storeCart.getCartNum());
|
||||
storeCart.setIsNew(false);
|
||||
boolean updateResult = updateById(forUpdateStoreCart);
|
||||
storeCart.setId(forUpdateStoreCart.getId());
|
||||
return updateResult;
|
||||
@@ -215,6 +218,7 @@ public class StoreCartServiceImpl extends ServiceImpl<StoreCartDao, StoreCart> i
|
||||
User currentUser = userService.getInfo();
|
||||
storeCart.setUid(currentUser.getUid());
|
||||
storeCart.setType("product");
|
||||
storeCart.setIsNew(true);
|
||||
return dao.insert(storeCart) > 0;
|
||||
}
|
||||
}
|
||||
@@ -339,7 +343,7 @@ public class StoreCartServiceImpl extends ServiceImpl<StoreCartDao, StoreCart> i
|
||||
queryWrapper.select("sum(cart_num) as cart_num")
|
||||
.eq("uid", userId)
|
||||
.eq("type", type)
|
||||
.eq("is_new", false);
|
||||
.eq("is_new", true);
|
||||
StoreCart storeCart = dao.selectOne(queryWrapper);
|
||||
if(null == storeCart || null == storeCart.getCartNum()){
|
||||
return 0;
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.zbkj.crmeb.store.service.impl;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.common.CommonPage;
|
||||
import com.common.PageParamRequest;
|
||||
@@ -12,7 +13,6 @@ import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.utils.DateUtil;
|
||||
import com.utils.RedisUtil;
|
||||
import com.utils.ValidateFormUtil;
|
||||
import com.utils.vo.dateLimitUtilVo;
|
||||
import com.zbkj.crmeb.express.model.Express;
|
||||
@@ -21,12 +21,12 @@ import com.zbkj.crmeb.express.service.LogisticService;
|
||||
import com.zbkj.crmeb.express.vo.LogisticsResultVo;
|
||||
import com.zbkj.crmeb.finance.request.FundsMonitorSearchRequest;
|
||||
import com.zbkj.crmeb.front.vo.OrderAgainVo;
|
||||
import com.zbkj.crmeb.payment.service.OrderPayService;
|
||||
import com.zbkj.crmeb.store.dao.StoreOrderDao;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.model.StoreOrderStatus;
|
||||
import com.zbkj.crmeb.store.model.StoreProduct;
|
||||
import com.zbkj.crmeb.store.model.StoreProductAttrValue;
|
||||
import com.zbkj.crmeb.store.request.StoreDateRangeSqlPram;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderRefundRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSearchRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSendRequest;
|
||||
@@ -34,11 +34,13 @@ import com.zbkj.crmeb.store.response.*;
|
||||
import com.zbkj.crmeb.store.service.*;
|
||||
import com.zbkj.crmeb.store.utilService.OrderUtils;
|
||||
import com.zbkj.crmeb.store.vo.StoreOrderInfoVo;
|
||||
import com.zbkj.crmeb.system.model.SystemAdmin;
|
||||
import com.zbkj.crmeb.system.model.SystemStore;
|
||||
import com.zbkj.crmeb.system.model.SystemStoreStaff;
|
||||
import com.zbkj.crmeb.system.request.SystemWriteOffOrderSearchRequest;
|
||||
import com.zbkj.crmeb.system.response.StoreOrderItemResponse;
|
||||
import com.zbkj.crmeb.system.response.SystemWriteOffOrderResponse;
|
||||
import com.zbkj.crmeb.system.service.SystemAdminService;
|
||||
import com.zbkj.crmeb.system.service.SystemStoreService;
|
||||
import com.zbkj.crmeb.system.service.SystemStoreStaffService;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
@@ -47,11 +49,12 @@ import com.zbkj.crmeb.user.request.UserOperateFundsRequest;
|
||||
import com.zbkj.crmeb.user.service.UserBillService;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.wechat.service.TemplateMessageService;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForPaySuccess;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForReFundEd;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -81,10 +84,6 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
@Autowired
|
||||
private StoreOrderInfoService StoreOrderInfoService;
|
||||
|
||||
@Lazy
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@@ -118,10 +117,10 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
private StoreProductAttrValueService storeProductAttrValueService;
|
||||
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
@Autowired
|
||||
private OrderPayService orderPayService;
|
||||
private SystemAdminService systemAdminService;
|
||||
|
||||
|
||||
|
||||
@@ -206,7 +205,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
public List<StoreOrder> getUserOrderList(StoreOrder storeOrder, PageParamRequest pageParamRequest) {
|
||||
this.pageInfo = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
|
||||
LambdaQueryWrapper<StoreOrder> lqw = new LambdaQueryWrapper<>();
|
||||
statusApiByWhere(lqw,storeOrder.getStatus());
|
||||
orderUtils.statusApiByWhere(lqw,storeOrder.getStatus());
|
||||
if(null != storeOrder.getId()){
|
||||
lqw.eq(StoreOrder::getId, storeOrder.getId());
|
||||
}
|
||||
@@ -445,6 +444,16 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
userBill.setMark("余额支付" + storeOrder.getPayPrice() + "元购买商品");
|
||||
boolean saveUserBillResult = userBillService.save(userBill);
|
||||
boolean paySuccessResult = paySuccess(storeOrder,currentUser,formId);
|
||||
|
||||
// 微信小程序订阅消息 付款成功
|
||||
String storeNameAndCarNumString = orderUtils.getStoreNameAndCarNumString(storeOrder.getId());
|
||||
if(StringUtils.isNotBlank(storeNameAndCarNumString)){
|
||||
WechatSendMessageForPaySuccess paySuccess = new WechatSendMessageForPaySuccess(
|
||||
storeOrder.getOrderId(),storeOrder.getPayPrice()+"",storeOrder.getPayTime()+"","暂无",
|
||||
storeOrder.getTotalPrice()+"",storeNameAndCarNumString);
|
||||
orderUtils.sendWeiChatMiniMessageForPaySuccess(paySuccess, currentUser.getUid());
|
||||
}
|
||||
|
||||
return updateUserResult && saveUserBillResult && paySuccessResult;
|
||||
// return updateUserResult;
|
||||
}
|
||||
@@ -460,16 +469,16 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
@Override
|
||||
public SystemWriteOffOrderResponse getWriteOffList(SystemWriteOffOrderSearchRequest request, PageParamRequest pageParamRequest) {
|
||||
LambdaQueryWrapper<StoreOrder> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
String where = " is_del = 0";
|
||||
String where = " is_del = 0 and shipping_type = 2";
|
||||
// String where = " is_del = 0 and paid = 1";
|
||||
//时间
|
||||
if(!StringUtils.isBlank(request.getData())){
|
||||
dateLimitUtilVo dateLimit = DateUtil.getDateLimit(request.getData());
|
||||
if(!StringUtils.isBlank(request.getDateLimit())){
|
||||
dateLimitUtilVo dateLimit = DateUtil.getDateLimit(request.getDateLimit());
|
||||
where += " and (create_time between '" + dateLimit.getStartTime() + "' and '" + dateLimit.getEndTime() + "' )";
|
||||
}
|
||||
|
||||
if(!StringUtils.isBlank(request.getKeywords())){
|
||||
where += " and (real_name like '% "+ request.getKeywords() +" %' or user_phone = '"+ request.getKeywords() +"' or order_id = '" + request.getKeywords() + "' or id = '" + request.getKeywords() + "' )";
|
||||
where += " and (real_name like '%"+ request.getKeywords() +"%' or user_phone = '"+ request.getKeywords() +"' or order_id = '" + request.getKeywords() + "' or id = '" + request.getKeywords() + "' )";
|
||||
}
|
||||
|
||||
if(request.getStoreId() != null && request.getStoreId() > 0){
|
||||
@@ -495,7 +504,6 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
Page<StoreOrder> storeOrderPage = PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
|
||||
|
||||
lambdaQueryWrapper.apply(where);
|
||||
lambdaQueryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
lambdaQueryWrapper.orderByDesc(StoreOrder::getId);
|
||||
List<StoreOrder> storeOrderList = dao.selectList(lambdaQueryWrapper);
|
||||
|
||||
@@ -526,7 +534,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
}
|
||||
//门店id
|
||||
List<Integer> storeIdList = storeOrderList.stream().map(StoreOrder::getStoreId).distinct().collect(Collectors.toList());
|
||||
//店员id
|
||||
//店员id / 核销员id
|
||||
List<Integer> clerkIdList = storeOrderList.stream().map(StoreOrder::getClerkId).distinct().collect(Collectors.toList());
|
||||
|
||||
//订单id集合
|
||||
@@ -539,19 +547,23 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
//获取订单详情map
|
||||
HashMap<Integer, List<StoreOrderInfoVo>> orderInfoList = StoreOrderInfoService.getMapInId(orderIdList);
|
||||
|
||||
//根据用户获取推广人信息
|
||||
//根据用户获取信息
|
||||
List<Integer> userIdList = storeOrderList.stream().map(StoreOrder::getUid).distinct().collect(Collectors.toList());
|
||||
|
||||
//订单用户信息
|
||||
HashMap<Integer, User> userList = userService.getMapListInUid(userIdList);
|
||||
|
||||
//获取推广人id集合
|
||||
List<Integer> spreadPeopleUidList = new ArrayList<>();
|
||||
for(Map.Entry<Integer, User> entry : userList.entrySet()){
|
||||
spreadPeopleUidList.add(entry.getValue().getSpreadUid());
|
||||
}
|
||||
|
||||
//推广信息
|
||||
HashMap<Integer, User> mapListInUid = new HashMap<>();
|
||||
if(userIdList.size() > 0){
|
||||
//推广人信息
|
||||
List<Integer> userServiceSpreadPeopleIdList = userService.getSpreadPeopleIdList(userIdList);
|
||||
if(userServiceSpreadPeopleIdList.size() > 0){
|
||||
mapListInUid = userService.getMapListInUid(userServiceSpreadPeopleIdList);
|
||||
}
|
||||
mapListInUid = userService.getMapListInUid(spreadPeopleUidList);
|
||||
}
|
||||
|
||||
|
||||
@@ -565,24 +577,26 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
}
|
||||
storeOrderItemResponse.setStoreName(storeName);
|
||||
|
||||
// 添加核销人信息
|
||||
String clerkName = "";
|
||||
if(systemStoreStaffList.containsKey(storeOrder.getClerkId())){
|
||||
clerkName = systemStoreStaffList.get(storeOrder.getClerkId()).getStaffName();
|
||||
}
|
||||
storeOrderItemResponse.setProductList(orderInfoList.get(storeOrder.getId()));
|
||||
storeOrderItemResponse.setTotalNum(storeOrder.getTotalNum());
|
||||
|
||||
//订单状态
|
||||
storeOrderItemResponse.setStatusStr(getStatus(storeOrder));
|
||||
storeOrderItemResponse.setStatus(storeOrder.getStatus());
|
||||
//支付方式
|
||||
storeOrderItemResponse.setPayTypeStr(getPayType(storeOrder.getPayType()));
|
||||
|
||||
//推广人信息
|
||||
if(!userList.isEmpty() && userList.containsKey(storeOrder.getUid()) && !mapListInUid.isEmpty()){
|
||||
if(userList.containsKey(storeOrder.getUid()) && mapListInUid.containsKey(userList.get(storeOrder.getUid()).getUid())){
|
||||
storeOrderItemResponse.getSpreadInfo().setId(mapListInUid.get(userList.get(storeOrder.getUid()).getUid()).getUid());
|
||||
storeOrderItemResponse.getSpreadInfo().setName(mapListInUid.get(userList.get(storeOrder.getUid()).getUid()).getNickname());
|
||||
}
|
||||
if(!userList.isEmpty() && null != userList.get(storeOrder.getUid()) && mapListInUid.containsKey(userList.get(storeOrder.getUid()).getSpreadUid())){
|
||||
storeOrderItemResponse.getSpreadInfo().setId(mapListInUid.get(userList.get(storeOrder.getUid()).getSpreadUid()).getUid());
|
||||
storeOrderItemResponse.getSpreadInfo().setName(mapListInUid.get(userList.get(storeOrder.getUid()).getSpreadUid()).getNickname());
|
||||
}
|
||||
storeOrderItemResponse.setRefundStatus(storeOrder.getRefundStatus());
|
||||
|
||||
storeOrderItemResponse.setClerkName(clerkName);
|
||||
storeOrderItemResponseArrayList.add(storeOrderItemResponse);
|
||||
@@ -753,6 +767,16 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
//积分
|
||||
subtractBill(request, Constants.USER_BILL_CATEGORY_INTEGRAL, Constants.USER_BILL_TYPE_GAIN, Constants.USER_BILL_CATEGORY_INTEGRAL);
|
||||
|
||||
// 小程序订阅消息 退款成功
|
||||
String storeNameAndCarNumString = orderUtils.getStoreNameAndCarNumString(storeOrder.getId());
|
||||
WechatSendMessageForReFundEd forReFundEd = new WechatSendMessageForReFundEd(
|
||||
"退款成功",storeNameAndCarNumString,request.getAmount()+"",DateUtil.nowDateTimeStr(),"退款金额已到余额中",
|
||||
storeOrder.getOrderId(),storeOrder.getId()+"",storeOrder.getCreateTime()+"",storeOrder.getRefundPrice()+"",
|
||||
storeNameAndCarNumString,storeOrder.getRefundReason(),"CRMEB",storeOrder.getRefundReasonWapExplain(),
|
||||
"暂无"
|
||||
);
|
||||
wechatSendMessageForMinService.sendReFundEdMessage(forReFundEd, userService.getUserIdException());
|
||||
|
||||
return true;
|
||||
}catch (Exception e){
|
||||
throw new CrmebException(e.getMessage());
|
||||
@@ -768,16 +792,23 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
@Override
|
||||
public StoreOrderInfoResponse info(Integer id) {
|
||||
StoreOrder storeOrder = getInfoException(id);
|
||||
List<StoreOrderInfoVo> orderInfos = StoreOrderInfoService.getOrderListByOrderId(id);
|
||||
StoreOrderInfoResponse storeOrderInfoResponse = new StoreOrderInfoResponse();
|
||||
BeanUtils.copyProperties(storeOrder, storeOrderInfoResponse);
|
||||
storeOrderInfoResponse.setOrderInfo(orderInfos);
|
||||
storeOrderInfoResponse.setPayTypeStr(getPayType(storeOrder.getPayType()));
|
||||
storeOrderInfoResponse.setStatusStr(getStatus(storeOrder));
|
||||
SystemStore systemStorePram = new SystemStore();
|
||||
systemStorePram.setId(storeOrder.getStoreId());
|
||||
storeOrderInfoResponse.setSystemStore(systemStoreService.getByCondition(systemStorePram));
|
||||
|
||||
//用户信息
|
||||
User user = userService.getById(storeOrder.getUid());
|
||||
User spread = userService.getById(user.getSpreadUid());
|
||||
storeOrderInfoResponse.getSpreadInfo().setId(spread.getUid());
|
||||
storeOrderInfoResponse.getSpreadInfo().setName(spread.getNickname());
|
||||
if(null != spread){
|
||||
storeOrderInfoResponse.getSpreadInfo().setId(spread.getUid());
|
||||
storeOrderInfoResponse.getSpreadInfo().setName(spread.getNickname());
|
||||
}
|
||||
storeOrderInfoResponse.setUser(user);
|
||||
return storeOrderInfoResponse;
|
||||
}
|
||||
@@ -795,13 +826,16 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
|
||||
//订单信息
|
||||
StoreOrder storeOrder = getInfoException(request.getId());
|
||||
SystemAdmin currentAdmin = systemAdminService.getInfo();
|
||||
|
||||
switch (request.getType()){
|
||||
case "1":
|
||||
express(request, storeOrder);
|
||||
orderUtils.sendWeiChatMiniMessageForPackageExpress(storeOrder,currentAdmin.getId());
|
||||
break;
|
||||
case "2":
|
||||
delivery(request, storeOrder);
|
||||
orderUtils.senWeiChatMiniMessageForDeliver(storeOrder,currentAdmin.getId());
|
||||
break;
|
||||
case "3":
|
||||
virtual(request, storeOrder);
|
||||
@@ -948,14 +982,149 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
@Override
|
||||
public List<StoreOrder> getTopDataUtil(int status, int userId) {
|
||||
LambdaQueryWrapper<StoreOrder> lqw = new LambdaQueryWrapper<>();
|
||||
statusApiByWhere(lqw,status);
|
||||
orderUtils.statusApiByWhere(lqw,status);
|
||||
lqw.eq(StoreOrder::getIsDel, false);
|
||||
lqw.eq(StoreOrder::getUid,userId);
|
||||
return dao.selectList(lqw);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改订单价格
|
||||
*
|
||||
* @param orderId 订单id wx开头
|
||||
* @param price 待更改价格
|
||||
* @return 更改结果
|
||||
*/
|
||||
@Override
|
||||
public boolean editPrice(String orderId, BigDecimal price) {
|
||||
String oldPrice = null;
|
||||
StoreOrder existOrder = getInfoByEntity(new StoreOrder().setOrderId(orderId));
|
||||
// 订单不存在
|
||||
if(null == existOrder) throw new CrmebException(Constants.RESULT_ORDER_NOTFOUND.replace("${orderCode}", orderId));
|
||||
|
||||
// 订单已支付
|
||||
if(existOrder.getPaid()) throw new CrmebException(Constants.RESULT_ORDER_PAYED.replace("${orderCode}", orderId));
|
||||
|
||||
// 修改价格和原来价格相同
|
||||
if(existOrder.getPayPrice().compareTo(price) ==0)
|
||||
throw new CrmebException(Constants.RESULT_ORDER_EDIT_PRICE_SAME.replace("${oldPrice}",existOrder.getPayPrice()+"")
|
||||
.replace("${editPrice}",price+""));
|
||||
|
||||
oldPrice = existOrder.getPayPrice()+"";
|
||||
// 修改订单价格
|
||||
existOrder.setPayPrice(price);
|
||||
boolean updateOrderPrice = updateByEntity(existOrder);
|
||||
if(!updateOrderPrice) throw new CrmebException(Constants.RESULT_ORDER_EDIT_PRICE_SUCCESS
|
||||
.replace("${orderNo}", existOrder.getOrderId()).replace("${price}", price+""));
|
||||
// 订单修改状态操作
|
||||
storeOrderStatusService.createLog(existOrder.getId(),Constants.ORDER_LOG_EDIT,
|
||||
Constants.RESULT_ORDER_EDIT_PRICE_LOGS.replace("${orderPrice}",oldPrice)
|
||||
.replace("${price}", existOrder.getPayPrice()+""));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认付款
|
||||
*
|
||||
* @param orderId 订单号
|
||||
* @return 确认付款结果
|
||||
*/
|
||||
@Override
|
||||
public boolean confirmPayed(String orderId) {
|
||||
StoreOrder existOrder = getByEntityOne(new StoreOrder().setOrderId(orderId));
|
||||
if(null == existOrder) throw new CrmebException(Constants.RESULT_ORDER_NOTFOUND.replace("${orderCode}", orderId));
|
||||
return payOrderOffLine(existOrder.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 线下付款
|
||||
*
|
||||
* @param orderId 待付款订单id
|
||||
* @return 付款结果
|
||||
*/
|
||||
@Override
|
||||
public boolean payOrderOffLine(Integer orderId) {
|
||||
StoreOrder existOrder = getByEntityOne(new StoreOrder().setId(orderId));
|
||||
if(null == existOrder) throw new CrmebException(
|
||||
Constants.RESULT_ORDER_NOTFOUND_IN_ID.replace("${orderId}", orderId+""));
|
||||
if(existOrder.getPaid()) throw new CrmebException(Constants.RESULT_ORDER_PAYED.replace("${orderCode}",existOrder.getOrderId()));
|
||||
existOrder.setPaid(true);
|
||||
// 订单修改状态操作
|
||||
storeOrderStatusService.createLog(existOrder.getId(),Constants.ORDER_LOG_PAY_OFFLINE,
|
||||
Constants.RESULT_ORDER_PAY_OFFLINE.replace("${orderNo}",existOrder.getOrderId())
|
||||
.replace("${price}", existOrder.getPayPrice()+""));
|
||||
return updateById(existOrder);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据时间参数统计订单销售额
|
||||
*
|
||||
* @param dateLimit 时间区间
|
||||
* @param type 类型
|
||||
* @return 统计订单信息
|
||||
*/
|
||||
@Override
|
||||
public StoreOrderStatisticsResponse orderStatisticsByTime(String dateLimit,Integer type) {
|
||||
StoreOrderStatisticsResponse response = new StoreOrderStatisticsResponse();
|
||||
// 根据开始时间和结束时间获取时间差 再根据时间差获取上一个时间段 查询当前和上一个时间段的数据 进行比较且返回
|
||||
dateLimitUtilVo dateRange = DateUtil.getDateLimit(dateLimit);
|
||||
String dateStartD = dateRange.getStartTime();
|
||||
String dateEndD = dateRange.getEndTime();
|
||||
int days = DateUtil.daysBetween(
|
||||
DateUtil.strToDate(dateStartD,Constants.DATE_FORMAT),
|
||||
DateUtil.strToDate(dateEndD,Constants.DATE_FORMAT)
|
||||
);
|
||||
// 同时间区间的上一个时间起点
|
||||
String perDateStart = DateUtil.addDay(dateStartD, -days, Constants.DATE_FORMAT_START);
|
||||
// 当前时间区间
|
||||
String dateStart = DateUtil.dateToStr(
|
||||
DateUtil.strToDate(dateStartD,Constants.DATE_FORMAT),Constants.DATE_FORMAT_START);
|
||||
String dateEnd = DateUtil.dateToStr(
|
||||
DateUtil.strToDate(dateEndD,Constants.DATE_FORMAT),Constants.DATE_FORMAT_END);
|
||||
|
||||
// 上一个时间段查询
|
||||
List<StoreOrder> orderPerList = getOrderPayedByDateLimit(perDateStart,dateStart);
|
||||
|
||||
// 当前时间段
|
||||
List<StoreOrder> orderCurrentList = getOrderPayedByDateLimit(dateStart, dateEnd);
|
||||
double increasePrice = 0;
|
||||
if(type == 1){
|
||||
double perSumPrice = orderPerList.stream().mapToDouble(e -> e.getPayPrice().doubleValue()).sum();
|
||||
double currentSumPrice = orderCurrentList.stream().mapToDouble(e -> e.getPayPrice().doubleValue()).sum();
|
||||
|
||||
response.setChart(dao.getOrderStatisticsPriceDetail(new StoreDateRangeSqlPram(dateStart,dateEnd)));
|
||||
response.setTime(BigDecimal.valueOf(currentSumPrice).setScale(2,BigDecimal.ROUND_HALF_UP));
|
||||
// 当前营业额和上一个同比营业额增长区间
|
||||
increasePrice = currentSumPrice - perSumPrice;
|
||||
if(increasePrice <= 0) response.setGrowthRate(0);
|
||||
else if(perSumPrice == 0) response.setGrowthRate((int) increasePrice);
|
||||
else response.setGrowthRate((int)((increasePrice * perSumPrice) * 100));
|
||||
}else if(type ==2){
|
||||
response.setChart(dao.getOrderStatisticsOrderCountDetail(new StoreDateRangeSqlPram(dateStart,dateEnd)));
|
||||
response.setTime(BigDecimal.valueOf(orderCurrentList.size()));
|
||||
increasePrice = orderCurrentList.size() - orderPerList.size();
|
||||
if(increasePrice <= 0) response.setGrowthRate(0);
|
||||
else if(orderPerList.size() == 0) response.setGrowthRate((int) increasePrice);
|
||||
else response.setGrowthRate((int)((increasePrice * orderPerList.size()) * 100));
|
||||
}
|
||||
response.setIncreaseTime(increasePrice+"");
|
||||
response.setIncreaseTimeStatus(increasePrice >= 0 ? 1:2);
|
||||
return response;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////// 以下为自定义方法
|
||||
|
||||
/**
|
||||
* 根据时间参数获取有效订单
|
||||
* @return 有效订单列表
|
||||
*/
|
||||
private List<StoreOrder> getOrderPayedByDateLimit(String startTime, String endTime){
|
||||
LambdaQueryWrapper<StoreOrder> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StoreOrder::getIsDel, false).eq(StoreOrder::getPaid, true).eq(StoreOrder::getRefundStatus,0)
|
||||
.between(StoreOrder::getCreateTime, startTime, endTime);
|
||||
return dao.selectList(lqw);
|
||||
}
|
||||
|
||||
/** 退款扣除积分/余额
|
||||
* @param request StoreOrderRefundRequest 退款参数
|
||||
* @author Mr.Zhang
|
||||
@@ -1275,54 +1444,6 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* h5 订单查询 where status 封装
|
||||
* @param queryWrapper 查询条件
|
||||
* @param status 状态
|
||||
*/
|
||||
public void statusApiByWhere(LambdaQueryWrapper<StoreOrder> queryWrapper, int status){
|
||||
switch (status){
|
||||
case Constants.ORDER_STATUS_H5_UNPAID: // 未支付
|
||||
queryWrapper.eq(StoreOrder::getPaid, false);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_NOT_SHIPPED: // 待发货
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_SPIKE: // 待收货
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 1);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_BARGAIN: // 待评价
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 2);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_COMPLETE: // 已完成
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 3);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_REFUNDING: // 退款中
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 1);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_REFUNDED: // 已退款
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 2);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_REFUND: // 退款
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.in(StoreOrder::getRefundStatus, "1,2"); //大于0
|
||||
break;
|
||||
}
|
||||
queryWrapper.eq(StoreOrder::getIsDel, false);
|
||||
queryWrapper.eq(StoreOrder::getIsSystemDel, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据订单状态获取where条件
|
||||
@@ -1447,7 +1568,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
if(null == storeOrder){
|
||||
return map;
|
||||
}
|
||||
|
||||
// 未支付
|
||||
if(!storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 0
|
||||
&& storeOrder.getRefundStatus() == 0
|
||||
@@ -1457,7 +1578,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
map.put("value", Constants.ORDER_STATUS_STR_UNPAID);
|
||||
return map;
|
||||
}
|
||||
|
||||
// 未发货
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 0
|
||||
&& storeOrder.getRefundStatus() == 0
|
||||
@@ -1468,27 +1589,28 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
map.put("value", Constants.ORDER_STATUS_STR_NOT_SHIPPED);
|
||||
return map;
|
||||
}
|
||||
|
||||
// 待收货
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 1
|
||||
&& storeOrder.getRefundStatus() == 0
|
||||
&& storeOrder.getShippingType() == 1
|
||||
&& !storeOrder.getIsDel()
|
||||
&& !storeOrder.getIsSystemDel()){
|
||||
map.put("key", Constants.ORDER_STATUS_SPIKE);
|
||||
map.put("value", Constants.ORDER_STATUS_STR_SPIKE);
|
||||
return map;
|
||||
}
|
||||
|
||||
// 待评价
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 1
|
||||
&& storeOrder.getRefundStatus() == 2
|
||||
&& storeOrder.getStatus() == 2
|
||||
&& storeOrder.getRefundStatus() == 0
|
||||
&& !storeOrder.getIsDel()
|
||||
&& !storeOrder.getIsSystemDel()){
|
||||
map.put("key", Constants.ORDER_STATUS_BARGAIN);
|
||||
map.put("value", Constants.ORDER_STATUS_STR_BARGAIN);
|
||||
return map;
|
||||
}
|
||||
|
||||
// 交易完成
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 3
|
||||
&& storeOrder.getRefundStatus() == 0
|
||||
@@ -1498,7 +1620,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
map.put("value", Constants.ORDER_STATUS_STR_COMPLETE);
|
||||
return map;
|
||||
}
|
||||
|
||||
// 待核销
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 0
|
||||
&& storeOrder.getRefundStatus() == 0
|
||||
@@ -1510,7 +1632,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
return map;
|
||||
}
|
||||
|
||||
//此处前端需要判断
|
||||
//退款中
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getRefundStatus() == 1
|
||||
&& !storeOrder.getIsDel()
|
||||
@@ -1520,6 +1642,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
return map;
|
||||
}
|
||||
|
||||
//已退款
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getRefundStatus() == 2
|
||||
&& !storeOrder.getIsDel()
|
||||
@@ -1528,6 +1651,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
map.put("value", Constants.ORDER_STATUS_STR_REFUNDED);
|
||||
}
|
||||
|
||||
//未发货
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 0
|
||||
&& !storeOrder.getIsDel()
|
||||
@@ -1536,6 +1660,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
map.put("value", Constants.ORDER_STATUS_STR_NOT_SHIPPED);
|
||||
}
|
||||
|
||||
//待收货
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 1
|
||||
&& !storeOrder.getIsDel()
|
||||
@@ -1543,6 +1668,8 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
map.put("key", Constants.ORDER_STATUS_SPIKE);
|
||||
map.put("value", Constants.ORDER_STATUS_STR_SPIKE);
|
||||
}
|
||||
|
||||
//用户已收货
|
||||
if(storeOrder.getPaid()
|
||||
&& storeOrder.getStatus() == 2
|
||||
&& !storeOrder.getIsDel()
|
||||
@@ -1552,7 +1679,7 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderDao, StoreOrder
|
||||
}
|
||||
|
||||
|
||||
|
||||
//已删除
|
||||
if(storeOrder.getIsDel() || storeOrder.getIsSystemDel()){
|
||||
map.put("key", Constants.ORDER_STATUS_DELETED);
|
||||
map.put("value", Constants.ORDER_STATUS_STR_DELETED);
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
package com.zbkj.crmeb.store.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.common.PageParamRequest;
|
||||
import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.utils.DateUtil;
|
||||
import com.utils.vo.dateLimitUtilVo;
|
||||
import com.zbkj.crmeb.store.dao.StoreOrderDao;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.model.StoreOrderInfo;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderStaticsticsRequest;
|
||||
import com.zbkj.crmeb.store.response.StoreOrderVerificationConfirmResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffDetail;
|
||||
import com.zbkj.crmeb.store.response.StoreStaffTopDetail;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderInfoService;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderService;
|
||||
import com.zbkj.crmeb.store.service.StoreOrderVerification;
|
||||
import com.zbkj.crmeb.store.utilService.OrderUtils;
|
||||
import com.zbkj.crmeb.system.model.SystemAdmin;
|
||||
import com.zbkj.crmeb.system.model.SystemStoreStaff;
|
||||
import com.zbkj.crmeb.system.service.SystemAdminService;
|
||||
import com.zbkj.crmeb.system.service.SystemStoreService;
|
||||
import com.zbkj.crmeb.system.service.SystemStoreStaffService;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForVerSuccess;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import javax.xml.ws.ServiceMode;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Classname StoreOrderVerificationImpl
|
||||
* @Description 核销订单
|
||||
* @Date 9/1/20 10:28 上午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Service
|
||||
public class StoreOrderVerificationImpl implements StoreOrderVerification {
|
||||
|
||||
@Resource
|
||||
private StoreOrderDao dao;
|
||||
|
||||
@Autowired
|
||||
private OrderUtils orderUtils;
|
||||
|
||||
@Autowired
|
||||
private StoreOrderService storeOrderService;
|
||||
|
||||
@Autowired
|
||||
private StoreOrderInfoService storeOrderInfoService;
|
||||
|
||||
@Autowired
|
||||
private SystemAdminService systemAdminService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
@Autowired
|
||||
private SystemStoreStaffService systemStoreStaffService;
|
||||
|
||||
/**
|
||||
* 获取订单核销数据
|
||||
*/
|
||||
@Override
|
||||
public StoreStaffTopDetail getOrderVerificationData() {
|
||||
StoreStaffTopDetail storeStaffTopDetail = new StoreStaffTopDetail();
|
||||
//订单支付没有退款 数量-
|
||||
LambdaQueryWrapper<StoreOrder> lqwOrderCount = Wrappers.lambdaQuery();
|
||||
lqwOrderCount.eq(StoreOrder::getIsDel,false).eq(StoreOrder::getPaid,true).eq(StoreOrder::getRefundStatus,0);
|
||||
storeStaffTopDetail.setOrderCount(dao.selectCount(lqwOrderCount));
|
||||
//订单支付没有退款 支付总金额
|
||||
LambdaQueryWrapper<StoreOrder> lqwSumPrice = Wrappers.lambdaQuery();
|
||||
lqwSumPrice.eq(StoreOrder::getIsDel,false).eq(StoreOrder::getPaid,true).eq(StoreOrder::getRefundStatus,0);
|
||||
List<StoreOrder> storeOrdersSumPrice = dao.selectList(lqwSumPrice);
|
||||
Double sumPrice = storeOrdersSumPrice.stream().mapToDouble(e->e.getPayPrice().doubleValue()).sum();
|
||||
storeStaffTopDetail.setSumPrice(BigDecimal.valueOf(sumPrice).setScale(2,BigDecimal.ROUND_HALF_UP));
|
||||
//订单待支付 数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwUnPaidCount = Wrappers.lambdaQuery();
|
||||
orderUtils.statusApiByWhere(lqwUnPaidCount,0);
|
||||
storeStaffTopDetail.setUnpaidCount(dao.selectCount(lqwUnPaidCount));
|
||||
//订单待发货 数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwUnShippedCount = Wrappers.lambdaQuery();
|
||||
orderUtils.statusApiByWhere(lqwUnShippedCount,1);
|
||||
storeStaffTopDetail.setUnshippedCount(dao.selectCount(lqwUnShippedCount));
|
||||
//订单待收货 数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwReceivedCount = Wrappers.lambdaQuery();
|
||||
orderUtils.statusApiByWhere(lqwReceivedCount,2);
|
||||
storeStaffTopDetail.setReceivedCount(dao.selectCount(lqwReceivedCount));
|
||||
//订单待评价 数量 verificationCount
|
||||
// LambdaQueryWrapper<StoreOrder> lqwEvaluatedCount = Wrappers.lambdaQuery();
|
||||
// orderUtils.statusApiByWhere(lqwEvaluatedCount,3);
|
||||
// storeStaffTopDetail.setEvaluatedCount(dao.selectCount(lqwEvaluatedCount));
|
||||
// 订单待核销数量
|
||||
LambdaQueryWrapper<StoreOrder> verificationCount = Wrappers.lambdaQuery();
|
||||
orderUtils.statusApiByWhere(verificationCount,3);
|
||||
storeStaffTopDetail.setVerificationCount(dao.selectCount(verificationCount));
|
||||
//订单已完成 数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwCompleteCount = Wrappers.lambdaQuery();
|
||||
orderUtils.statusApiByWhere(lqwCompleteCount,4);
|
||||
storeStaffTopDetail.setCompleteCount(dao.selectCount(lqwCompleteCount));
|
||||
//订单退款 数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwRefundCount = Wrappers.lambdaQuery();
|
||||
orderUtils.statusApiByWhere(lqwRefundCount,-3);
|
||||
storeStaffTopDetail.setRefundCount(dao.selectCount(lqwRefundCount));
|
||||
|
||||
// 获取今日,昨日,本月,订单金额
|
||||
String dayStart = DateUtil.nowDateTime(Constants.DATE_FORMAT_START);
|
||||
String dayEnd = DateUtil.nowDateTime(Constants.DATE_FORMAT_END);
|
||||
String monthStart = DateUtil.nowDateTime(Constants.DATE_FORMAT_MONTH_START);
|
||||
String monthEnd = DateUtil.getMonthEndDay();
|
||||
|
||||
// 今日订单数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwTodayCount = Wrappers.lambdaQuery();
|
||||
lqwTodayCount.eq(StoreOrder::getIsDel,false).between(StoreOrder::getPayTime,dayStart,dayEnd)
|
||||
.eq(StoreOrder::getPaid,1).eq(StoreOrder::getRefundStatus,0);
|
||||
List<StoreOrder> storeOrdersTodayCount = dao.selectList(lqwTodayCount);
|
||||
if(null == storeOrdersTodayCount) storeOrdersTodayCount = new ArrayList<>();
|
||||
storeStaffTopDetail.setTodayCount(storeOrdersTodayCount.size());
|
||||
|
||||
// 今日成交额
|
||||
double todayPrice = storeOrdersTodayCount.stream().mapToDouble(e->e.getPayPrice().doubleValue()).sum();
|
||||
storeStaffTopDetail.setTodayPrice(BigDecimal.valueOf(todayPrice).setScale(2,BigDecimal.ROUND_HALF_UP));
|
||||
|
||||
// 昨日订单数
|
||||
LambdaQueryWrapper<StoreOrder> lqwPro = Wrappers.lambdaQuery();
|
||||
lqwPro.eq(StoreOrder::getIsDel,false).between(StoreOrder::getPayTime,dayStart,dayEnd)
|
||||
.eq(StoreOrder::getPaid, true).eq(StoreOrder::getRefundStatus,0);
|
||||
List<StoreOrder> storeOrdersPro = dao.selectList(lqwPro);
|
||||
if(null == storeOrdersPro) storeOrdersPro = new ArrayList<>();
|
||||
storeStaffTopDetail.setProCount(storeOrdersPro.size());
|
||||
|
||||
// 昨日成交额
|
||||
double proPrice = storeOrdersPro.stream().mapToDouble(e->e.getPayPrice().doubleValue()).sum();
|
||||
storeStaffTopDetail.setProPrice(BigDecimal.valueOf(proPrice).setScale(2,BigDecimal.ROUND_HALF_UP));
|
||||
|
||||
// 本月成交订单数量
|
||||
LambdaQueryWrapper<StoreOrder> lqwMonth = Wrappers.lambdaQuery();
|
||||
lqwMonth.eq(StoreOrder::getIsDel,false).between(StoreOrder::getPayTime,monthStart, monthEnd)
|
||||
.eq(StoreOrder::getPaid,true).eq(StoreOrder::getRefundStatus,0);
|
||||
List<StoreOrder> storeOrdersMonth = dao.selectList(lqwMonth);
|
||||
if(null == storeOrdersMonth) storeOrdersMonth = new ArrayList<>();
|
||||
storeStaffTopDetail.setMonthCount(storeOrdersMonth.size());
|
||||
|
||||
// 本月成交额
|
||||
double monthTotalPrice = storeOrdersMonth.stream().mapToDouble(e -> e.getPayPrice().doubleValue()).sum();
|
||||
storeStaffTopDetail.setMonthPrice(BigDecimal.valueOf(monthTotalPrice).setScale(2,BigDecimal.ROUND_HALF_UP));
|
||||
|
||||
return storeStaffTopDetail;
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销月详情
|
||||
* @return 月详情
|
||||
*/
|
||||
@Override
|
||||
public List<StoreStaffDetail> getOrderVerificationDetail(StoreOrderStaticsticsRequest request) {
|
||||
request.setPage((request.getPage() - 1) * request.getLimit());
|
||||
dateLimitUtilVo dateLimit = DateUtil.getDateLimit(request.getDateLimit());
|
||||
request.setStartTime(dateLimit.getStartTime());
|
||||
request.setEndTime(dateLimit.getEndTime());
|
||||
return dao.getOrderVerificationDetail(request);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据核销码核销订单
|
||||
*
|
||||
* @param vCode 核销码
|
||||
* @return 核销结果
|
||||
*/
|
||||
@Override
|
||||
public boolean verificationOrderByCode(String vCode) {
|
||||
StoreOrderVerificationConfirmResponse existOrder = getVerificationOrderByCode(vCode);
|
||||
if(existOrder.getCombinationId() >0 && existOrder.getPinkId() > 0){
|
||||
// todo 营销业务待处理
|
||||
}
|
||||
// 判断当前用户是否有权限核销
|
||||
SystemAdmin currentAdmin = systemAdminService.getInfo();
|
||||
List<Integer> currentIds = new ArrayList<>();
|
||||
currentIds.add(currentAdmin.getId());
|
||||
List<SystemStoreStaff> currentStaffs = systemStoreStaffService.getByAdminUserIds(currentIds);
|
||||
if(currentStaffs.size() == 0) throw new CrmebException(Constants.RESULT_VERIFICATION_NOTAUTH);
|
||||
// 添加核销人员后执行核销操作
|
||||
StoreOrder storeOrder = new StoreOrder();
|
||||
BeanUtils.copyProperties(existOrder,storeOrder);
|
||||
storeOrder.setStatus(Constants.ORDER_STATUS_INT_BARGAIN);
|
||||
storeOrder.setClerkId(currentStaffs.get(0).getId());
|
||||
storeOrder.setStoreId(currentStaffs.get(0).getStoreId());
|
||||
boolean saveStatus = dao.updateById(storeOrder) > 0;
|
||||
|
||||
// 小程序订阅消息发送
|
||||
if(saveStatus){
|
||||
WechatSendMessageForVerSuccess ver = new WechatSendMessageForVerSuccess(
|
||||
"CRMEB",orderUtils.getStoreNameAndCarNumString(storeOrder.getId()),storeOrder.getOrderId(),
|
||||
DateUtil.nowDateTimeStr(),storeOrder.getPayPrice()+"","暂无","CRMEB"
|
||||
);
|
||||
wechatSendMessageForMinService.sendVerSuccessMessage(ver,currentAdmin.getId());
|
||||
}
|
||||
return saveStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据核销码查询待核销订单
|
||||
*
|
||||
* @param vCode 核销码
|
||||
* @return 待核销订单详情
|
||||
*/
|
||||
@Override
|
||||
public StoreOrderVerificationConfirmResponse getVerificationOrderByCode(String vCode) {
|
||||
StoreOrderVerificationConfirmResponse response = new StoreOrderVerificationConfirmResponse();
|
||||
StoreOrder storeOrderPram = new StoreOrder().setVerifyCode(vCode).setPaid(true).setRefundStatus(0);
|
||||
StoreOrder existOrder = storeOrderService.getByEntityOne(storeOrderPram);
|
||||
if(null == existOrder) throw new CrmebException(Constants.RESULT_VERIFICATION_ORDER_NOT_FUND.replace("${vCode}",vCode));
|
||||
if(existOrder.getStatus() > 0) throw new CrmebException(Constants.RESULT_VERIFICATION_ORDER_VED.replace("${vCode}",vCode));
|
||||
BeanUtils.copyProperties(existOrder, response);
|
||||
response.setStoreOrderInfoVos(storeOrderInfoService.getOrderListByOrderId(existOrder.getId()));
|
||||
return response;
|
||||
}
|
||||
}
|
||||
@@ -344,7 +344,6 @@ public class StoreProductServiceImpl extends ServiceImpl<StoreProductDao, StoreP
|
||||
for(Map.Entry<String,String> vo: attrValuesRequest.getAttrValue().entrySet()){
|
||||
skuList.add(vo.getValue());
|
||||
spav.setSuk(String.join(",",skuList));
|
||||
// HashMap<String, Object> attrValues = setAttrValueByRequest(storeProductRequest);
|
||||
}
|
||||
spav.setImage(systemAttachmentService.clearPrefix(spav.getImage()));
|
||||
spav.setAttrValue(JSON.toJSONString(attrValuesRequest.getAttrValue()));
|
||||
@@ -1156,15 +1155,15 @@ public class StoreProductServiceImpl extends ServiceImpl<StoreProductDao, StoreP
|
||||
String rightEndUrl = "&itemid=";
|
||||
switch (tag){ // 导入平台1=淘宝,2=京东,3=苏宁,4=拼多多, 5=天猫
|
||||
case 1:
|
||||
baseUrl = systemConfigService.getValueByKey("inportProductTB");
|
||||
baseUrl = systemConfigService.getValueByKey("importProductTB");
|
||||
rightEndUrl += UrlUtil.getParamsByKey(url, "id");
|
||||
break;
|
||||
case 2:
|
||||
baseUrl = systemConfigService.getValueByKey("inportProductJD");
|
||||
baseUrl = systemConfigService.getValueByKey("importProductJD");
|
||||
rightEndUrl += url.substring(url.lastIndexOf("/")+1).replace(".html","");
|
||||
break;
|
||||
case 3:
|
||||
baseUrl = systemConfigService.getValueByKey("inportProductSN");
|
||||
baseUrl = systemConfigService.getValueByKey("importProductSN");
|
||||
int start = url.indexOf(".com/") + 5;
|
||||
int end = url.indexOf(".html");
|
||||
String sp = url.substring(start,end);
|
||||
@@ -1173,11 +1172,11 @@ public class StoreProductServiceImpl extends ServiceImpl<StoreProductDao, StoreP
|
||||
break;
|
||||
case 4:
|
||||
rightEndUrl += UrlUtil.getParamsByKey(url, "goods_id");
|
||||
baseUrl = systemConfigService.getValueByKey("inportProductPDD");
|
||||
baseUrl = systemConfigService.getValueByKey("importProductPDD");
|
||||
break;
|
||||
case 5:
|
||||
rightEndUrl += UrlUtil.getParamsByKey(url, "id");
|
||||
baseUrl = systemConfigService.getValueByKey("inportProductTM");
|
||||
baseUrl = systemConfigService.getValueByKey("importProductTM");
|
||||
break;
|
||||
}
|
||||
String token = systemConfigService.getValueByKey("importProductToken");
|
||||
@@ -1260,21 +1259,28 @@ public class StoreProductServiceImpl extends ServiceImpl<StoreProductDao, StoreP
|
||||
* @param storeProduct 当前操作的产品
|
||||
*/
|
||||
private void calcPriceForAttrValues(StoreProductRequest storeProductRequest, StoreProduct storeProduct) {
|
||||
// 设置商品成本价和市场价,成本价=sku配置的最低价,商品价格=sku配置的最高价格
|
||||
// 设置商品成本价和市场价,2020-8-28日更 商品本身价钱取sku列表中最低的价格
|
||||
// BigDecimal costPrice = storeProductRequest.getAttrValue()
|
||||
// .stream().map(e->e.getCost()).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
int costPrice = storeProductRequest.getAttrValue()
|
||||
.stream().mapToInt(e->e.getCost().intValue()).max().getAsInt();
|
||||
// BigDecimal sellPrice = storeProductRequest.getAttrValue()
|
||||
// .stream().map(e->e.getOtPrice()).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
int sellPrice = storeProductRequest.getAttrValue()
|
||||
.stream().mapToInt(e->e.getOtPrice().intValue()).min().getAsInt();
|
||||
List<StoreProductAttrValueRequest> attrValuesSortAsc = storeProductRequest.getAttrValue().stream()
|
||||
.sorted(Comparator.comparing(StoreProductAttrValueRequest::getPrice))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
int stock = storeProductRequest.getAttrValue()
|
||||
.stream().mapToInt(e->e.getStock()).sum();
|
||||
storeProduct.setPrice(BigDecimal.valueOf(costPrice));
|
||||
storeProduct.setOtPrice(BigDecimal.valueOf(sellPrice));
|
||||
storeProduct.setStock(stock);
|
||||
// int costPrice = storeProductRequest.getAttrValue()
|
||||
// .stream().mapToInt(e->e.getCost().intValue()).min().getAsInt();
|
||||
//// BigDecimal sellPrice = storeProductRequest.getAttrValue()
|
||||
//// .stream().map(e->e.getOtPrice()).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
// int sellPrice = storeProductRequest.getAttrValue()
|
||||
// .stream().mapToInt(e->e.getOtPrice().intValue()).min().getAsInt();
|
||||
|
||||
// int stock = storeProductRequest.getAttrValue()
|
||||
// .stream().mapToInt(e->e.getStock()).sum();
|
||||
if(attrValuesSortAsc.size() == 0){
|
||||
return;
|
||||
}
|
||||
storeProduct.setPrice(attrValuesSortAsc.get(0).getPrice());
|
||||
storeProduct.setOtPrice(attrValuesSortAsc.get(0).getOtPrice());
|
||||
storeProduct.setStock(attrValuesSortAsc.get(0).getStock());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,18 +2,24 @@ package com.zbkj.crmeb.store.utilService;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.common.PageParamRequest;
|
||||
import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.utils.CrmebUtil;
|
||||
import com.utils.DateUtil;
|
||||
import com.utils.RedisUtil;
|
||||
import com.utils.ValidateFormUtil;
|
||||
import com.utils.vo.dateLimitUtilVo;
|
||||
import com.zbkj.crmeb.express.model.Express;
|
||||
import com.zbkj.crmeb.express.model.ShippingTemplates;
|
||||
import com.zbkj.crmeb.express.model.ShippingTemplatesFree;
|
||||
import com.zbkj.crmeb.express.model.ShippingTemplatesRegion;
|
||||
import com.zbkj.crmeb.express.service.ShippingTemplatesFreeService;
|
||||
import com.zbkj.crmeb.express.service.ShippingTemplatesRegionService;
|
||||
import com.zbkj.crmeb.express.service.ShippingTemplatesService;
|
||||
import com.zbkj.crmeb.finance.request.FundsMonitorSearchRequest;
|
||||
import com.zbkj.crmeb.front.request.OrderCreateRequest;
|
||||
import com.zbkj.crmeb.front.response.ComputeOrderResponse;
|
||||
import com.zbkj.crmeb.front.response.ConfirmOrderResponse;
|
||||
@@ -30,7 +36,9 @@ import com.zbkj.crmeb.marketing.service.StoreCouponUserService;
|
||||
import com.zbkj.crmeb.store.model.StoreOrder;
|
||||
import com.zbkj.crmeb.store.model.StoreOrderInfo;
|
||||
import com.zbkj.crmeb.store.model.StoreOrderStatus;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderRefundRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSearchRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreOrderSendRequest;
|
||||
import com.zbkj.crmeb.store.request.StoreProductRequest;
|
||||
import com.zbkj.crmeb.store.response.StoreCartResponse;
|
||||
import com.zbkj.crmeb.store.response.StoreProductCartProductInfoResponse;
|
||||
@@ -45,14 +53,20 @@ import com.zbkj.crmeb.system.service.SystemStoreService;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
import com.zbkj.crmeb.user.model.UserAddress;
|
||||
import com.zbkj.crmeb.user.model.UserBill;
|
||||
import com.zbkj.crmeb.user.request.UserOperateFundsRequest;
|
||||
import com.zbkj.crmeb.user.service.UserAddressService;
|
||||
import com.zbkj.crmeb.user.service.UserBillService;
|
||||
import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForDistrbution;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForPackage;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForPaySuccess;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.StringEscapeUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
@@ -119,6 +133,9 @@ public class OrderUtils {
|
||||
@Autowired
|
||||
private SystemGroupDataService systemGroupDataService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
// 组装数据给前端使用
|
||||
public OrderAgainVo tidyOrder(StoreOrder storeOrder, boolean detail, boolean isPic){
|
||||
OrderAgainVo orderAgainVoResult = new OrderAgainVo();
|
||||
@@ -293,7 +310,7 @@ public class OrderUtils {
|
||||
//此处拿到所有的商品id
|
||||
primaryKey = cor.getCartInfo().stream().map(StoreCartResponse::getProductId).distinct().collect(Collectors.toList());
|
||||
}
|
||||
boolean couponUseResult = storeCouponUserService.use(couponId, primaryKey, payPrice);
|
||||
boolean couponUseResult = storeCouponUserService.canUse(couponId, primaryKey, payPrice);
|
||||
if(!couponUseResult) throw new CrmebException("使用优惠券失败");
|
||||
|
||||
// 减去优惠券金额 后使用优惠券
|
||||
@@ -382,28 +399,28 @@ public class OrderUtils {
|
||||
* @param orderId 订单id
|
||||
* @return 订单信息
|
||||
*/
|
||||
@Transactional(rollbackFor = {RuntimeException.class, Error.class, CrmebException.class})
|
||||
public StoreOrder createOrder(OrderCreateRequest request,ConfirmOrderResponse cor, Integer isChannel,Integer orderId, String orderKey){
|
||||
UserAddress currentUserAddress = new UserAddress();
|
||||
List<Integer> cartIds = new ArrayList<>();
|
||||
Integer totalNum = 0;
|
||||
Integer gainIntegral = 0;
|
||||
|
||||
// todo 开启事务
|
||||
|
||||
if(request.getShippingType() == 1){ // 是否包邮
|
||||
if(request.getAddressId() <= 0) throw new CrmebException("请选择收货地址");
|
||||
UserAddress userAddress = new UserAddress();
|
||||
userAddress.setId(request.getAddressId());
|
||||
userAddress.setIsDel(false);
|
||||
if(null == userAddressService.getUserAddress(userAddress)){
|
||||
currentUserAddress = userAddressService.getUserAddress(userAddress);
|
||||
if(null == currentUserAddress){
|
||||
throw new CrmebException("收货地址有误");
|
||||
}
|
||||
}else{ // 到店自提
|
||||
if(StringUtils.isBlank(cor.getAddressInfo().getRealName()) || StringUtils.isBlank(cor.getAddressInfo().getRealName()))
|
||||
}else if(request.getShippingType() == 2){ // 到店自提
|
||||
if(StringUtils.isBlank(request.getRealName()) || StringUtils.isBlank(request.getPhone()))
|
||||
throw new CrmebException("请填写姓名和电话");
|
||||
|
||||
currentUserAddress.setRealName(cor.getAddressInfo().getRealName());
|
||||
currentUserAddress.setPhone(cor.getAddressInfo().getRealName());
|
||||
currentUserAddress.setRealName(request.getRealName());
|
||||
currentUserAddress.setPhone(request.getPhone());
|
||||
}
|
||||
for (StoreCartResponse cartResponse : cor.getCartInfo()) {
|
||||
cartIds.add(cartResponse.getSeckillId());
|
||||
@@ -419,7 +436,7 @@ public class OrderUtils {
|
||||
// todo 检测营销产品状态
|
||||
// 发快递还是门店自提
|
||||
String storeSelfMention = systemConfigService.getValueByKey("store_self_mention");
|
||||
if(Boolean.valueOf(storeSelfMention)) request.setShippingType(1);
|
||||
if(!Boolean.valueOf(storeSelfMention)) request.setShippingType(1);
|
||||
|
||||
StoreOrder storeOrder = new StoreOrder();
|
||||
storeOrder.setUid(cor.getUserInfo().getUid());
|
||||
@@ -431,8 +448,8 @@ public class OrderUtils {
|
||||
cor.setAddressInfo(selectUserAddress);
|
||||
}
|
||||
|
||||
storeOrder.setRealName(cor.getAddressInfo().getRealName());
|
||||
storeOrder.setUserPhone(cor.getAddressInfo().getPhone());
|
||||
storeOrder.setRealName(currentUserAddress.getRealName());
|
||||
storeOrder.setUserPhone(currentUserAddress.getPhone());
|
||||
storeOrder.setUserAddress(cor.getAddressInfo().getProvince()
|
||||
+ cor.getAddressInfo().getCity()
|
||||
+ cor.getAddressInfo().getDistrict()
|
||||
@@ -801,9 +818,12 @@ public class OrderUtils {
|
||||
public void checkDeleteStatus(String orderStatus) {
|
||||
//退款状态,持可以添加
|
||||
|
||||
// String [] deleteStatusList = {
|
||||
// Constants.ORDER_STATUS_UNPAID,
|
||||
// Constants.ORDER_STATUS_REFUNDED
|
||||
// };
|
||||
String [] deleteStatusList = {
|
||||
Constants.ORDER_STATUS_UNPAID,
|
||||
Constants.ORDER_STATUS_REFUNDED
|
||||
Constants.ORDER_STATUS_COMPLETE
|
||||
};
|
||||
|
||||
if(!Arrays.asList(deleteStatusList).contains(orderStatus)){
|
||||
@@ -858,4 +878,117 @@ public class OrderUtils {
|
||||
return payTypeStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* h5 订单查询 where status 封装
|
||||
* @param queryWrapper 查询条件
|
||||
* @param status 状态
|
||||
*/
|
||||
public void statusApiByWhere(LambdaQueryWrapper<StoreOrder> queryWrapper, int status){
|
||||
switch (status){
|
||||
case Constants.ORDER_STATUS_H5_UNPAID: // 未支付
|
||||
queryWrapper.eq(StoreOrder::getPaid, false);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_NOT_SHIPPED: // 待发货
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getShippingType, 1);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_SPIKE: // 待收货
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 1);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_VERF: // 待核销
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
queryWrapper.eq(StoreOrder::getShippingType, 2);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_COMPLETE: // 已完成
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 3);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 0);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_REFUNDING: // 退款中
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getRefundStatus, 1);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_REFUNDED: // 已退款
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.eq(StoreOrder::getStatus, 2);
|
||||
break;
|
||||
case Constants.ORDER_STATUS_H5_REFUND: // 退款
|
||||
queryWrapper.eq(StoreOrder::getPaid, true);
|
||||
queryWrapper.in(StoreOrder::getRefundStatus, "1,2"); //大于0
|
||||
break;
|
||||
}
|
||||
queryWrapper.eq(StoreOrder::getIsDel, false);
|
||||
queryWrapper.eq(StoreOrder::getIsSystemDel, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据订单id获取订单中商品和名称和购买数量字符串
|
||||
* @param orderId 订单id
|
||||
* @return 商品名称*购买数量
|
||||
*/
|
||||
public String getStoreNameAndCarNumString(int orderId){
|
||||
List<StoreOrderInfoVo> currentOrderInfo = storeOrderInfoService.getOrderListByOrderId(orderId);
|
||||
if(currentOrderInfo.size() > 0) {
|
||||
StringBuilder sbOrderProduct = new StringBuilder();
|
||||
for (StoreOrderInfoVo storeOrderInfoVo : currentOrderInfo) {
|
||||
sbOrderProduct.append(storeOrderInfoVo.getInfo().getProductInfo().getStoreName() + "*"
|
||||
+ storeOrderInfoVo.getInfo().getCartNum());
|
||||
}
|
||||
return sbOrderProduct.toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据订单对象获取订单配送中文
|
||||
* @param order 订单对象
|
||||
* @return 配送方式中文字符串
|
||||
*/
|
||||
public String getPayTypeStrByOrder(StoreOrder order){
|
||||
return order.getShippingType() == 1 ? "快递":"自提";
|
||||
}
|
||||
|
||||
/** 这里的方法完全是为了订单中调用而封装 订单支付成功有余额支付和微信支付成功回调中
|
||||
* 微信小程序发送付款成功订阅消息
|
||||
* @param paySuccess 付款成功订阅消息
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
public void sendWeiChatMiniMessageForPaySuccess(WechatSendMessageForPaySuccess paySuccess, int userId){
|
||||
wechatSendMessageForMinService.sendPaySuccessMessage(paySuccess,userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序发送发货快递通知订阅消息
|
||||
* @param storeOrder 发送快递
|
||||
* @param userId 接收消息的用户id
|
||||
*/
|
||||
public void sendWeiChatMiniMessageForPackageExpress(StoreOrder storeOrder, int userId){
|
||||
WechatSendMessageForPackage toPackage = new WechatSendMessageForPackage(
|
||||
getOrderPayTypeStr(storeOrder.getPayType()),storeOrder.getOrderId(),storeOrder.getUserAddress(),
|
||||
storeOrder.getUserPhone(),storeOrder.getRealName()
|
||||
);
|
||||
wechatSendMessageForMinService.sendRePackageMessage(toPackage,userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序发送 配送通知订阅消息
|
||||
* @param storeOrder 配送订单信息
|
||||
* @param userId 接收消息的用户id
|
||||
*/
|
||||
public void senWeiChatMiniMessageForDeliver(StoreOrder storeOrder, int userId){
|
||||
WechatSendMessageForDistrbution distrbution = new WechatSendMessageForDistrbution(
|
||||
storeOrder.getId()+"",storeOrder.getDeliveryName(),storeOrder.getDeliveryId()+"",
|
||||
"商家已经开始配送", "暂无",getStoreNameAndCarNumString(storeOrder.getId()),"暂无"
|
||||
);
|
||||
wechatSendMessageForMinService.sendDistrbutionMessage(distrbution,userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,25 +1,19 @@
|
||||
package com.zbkj.crmeb.system.controller;
|
||||
|
||||
import com.common.CommonPage;
|
||||
import com.common.CommonResult;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.category.vo.CategoryTreeVo;
|
||||
import com.zbkj.crmeb.system.model.SystemCity;
|
||||
import com.zbkj.crmeb.system.request.SystemCityRequest;
|
||||
import com.zbkj.crmeb.system.request.SystemCitySearchRequest;
|
||||
import com.zbkj.crmeb.system.vo.SystemCityTreeVo;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import com.zbkj.crmeb.system.service.SystemCityService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import com.zbkj.crmeb.system.service.SystemCityService;
|
||||
import com.zbkj.crmeb.system.model.SystemCity;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
/**
|
||||
@@ -107,7 +101,7 @@ public class SystemCityController {
|
||||
*/
|
||||
@ApiOperation(value = "修改状态")
|
||||
@RequestMapping(value = "/update/status", method = RequestMethod.POST)
|
||||
public CommonResult<String> update(@RequestParam Integer id, @RequestParam Boolean status){
|
||||
public CommonResult<String> updateStatus(@RequestParam Integer id, @RequestParam Boolean status){
|
||||
if(systemCityService.updateStatus(id, status)){
|
||||
return CommonResult.success();
|
||||
}else{
|
||||
|
||||
@@ -38,7 +38,8 @@ public class SystemStoreStaffController {
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
public CommonResult<CommonPage<SystemStoreStaffResponse>> getList(@RequestParam(name = "storeId", required = false, defaultValue = "0") Integer storeId,
|
||||
@ModelAttribute PageParamRequest pageParamRequest){
|
||||
CommonPage<SystemStoreStaffResponse> systemStoreStaffCommonPage = CommonPage.restPage(systemStoreStaffService.getList(storeId, pageParamRequest));
|
||||
CommonPage<SystemStoreStaffResponse> systemStoreStaffCommonPage =
|
||||
CommonPage.restPage(systemStoreStaffService.getList(storeId, pageParamRequest));
|
||||
return CommonResult.success(systemStoreStaffCommonPage);
|
||||
}
|
||||
|
||||
@@ -51,10 +52,7 @@ public class SystemStoreStaffController {
|
||||
@ApiOperation(value = "新增")
|
||||
@RequestMapping(value = "/save", method = RequestMethod.POST)
|
||||
public CommonResult<String> save(@RequestBody @ModelAttribute SystemStoreStaffRequest systemStoreStaffRequest){
|
||||
SystemStoreStaff systemStoreStaff = new SystemStoreStaff();
|
||||
BeanUtils.copyProperties(systemStoreStaffRequest, systemStoreStaff);
|
||||
|
||||
if(systemStoreStaffService.save(systemStoreStaff)){
|
||||
if(systemStoreStaffService.saveUnique(systemStoreStaffRequest)){
|
||||
return CommonResult.success();
|
||||
}else{
|
||||
return CommonResult.failed();
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.zbkj.crmeb.system.request;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
/**
|
||||
@@ -30,4 +29,7 @@ public class SystemAdminLoginRequest {
|
||||
@ApiModelProperty(value = "code", required = true)
|
||||
@NotEmpty(message = "验证码 不能为空")
|
||||
private String code;
|
||||
|
||||
@ApiModelProperty(value = "微信授权code")
|
||||
private String wxCode;
|
||||
}
|
||||
|
||||
@@ -29,18 +29,18 @@ public class SystemStoreStaffRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@ApiModelProperty(value = "微信用户id")
|
||||
@Min(value = 1, message = "请选择用户")
|
||||
@ApiModelProperty(value = "管理员 id")
|
||||
@Min(value = 1, message = "请选择管理员")
|
||||
private Integer uid;
|
||||
|
||||
@ApiModelProperty(value = "店员头像")
|
||||
@ApiModelProperty(value = "管理员头像")
|
||||
private String avatar;
|
||||
|
||||
@ApiModelProperty(value = "提货点id")
|
||||
@Min(value = 1, message = "请选择提货点")
|
||||
private Integer storeId;
|
||||
|
||||
@ApiModelProperty(value = "店员名称")
|
||||
@ApiModelProperty(value = "核销员 名称 [昵称]")
|
||||
private String staffName;
|
||||
|
||||
@ApiModelProperty(value = "手机号码")
|
||||
|
||||
@@ -27,7 +27,7 @@ public class SystemWriteOffOrderSearchRequest implements Serializable {
|
||||
private Integer storeId;
|
||||
|
||||
@ApiModelProperty(value = "时间")
|
||||
private String data;
|
||||
private String dateLimit;
|
||||
|
||||
@ApiModelProperty(value = "关键字")
|
||||
private String keywords;
|
||||
|
||||
@@ -69,7 +69,7 @@ public class StoreOrderItemResponse implements Serializable {
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "订单状态(-1 : 申请退款 -2 : 退货成功 0:待发货;1:待收货;2:已收货;3:待评价;-1:已退款)")
|
||||
private Boolean status;
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "门店名称")
|
||||
private String storeName;
|
||||
@@ -131,6 +131,18 @@ public class StoreOrderItemResponse implements Serializable {
|
||||
@ApiModelProperty(value = "退款金额")
|
||||
private BigDecimal refundPrice;
|
||||
|
||||
@ApiModelProperty(value = "0 未退款 1 申请中 2 已退款")
|
||||
private Integer refundStatus;
|
||||
|
||||
@ApiModelProperty(value = "订单商品总数")
|
||||
private Integer totalNum;
|
||||
|
||||
@ApiModelProperty(value = "配送方式 1=快递 ,2=门店自提")
|
||||
private Integer shippingType;
|
||||
|
||||
@ApiModelProperty(value = "核销码")
|
||||
private String verifyCode;
|
||||
|
||||
@ApiModelProperty(value = "推广人信息")
|
||||
private StoreOrderSpreadInfoResponse spreadInfo = new StoreOrderSpreadInfoResponse();
|
||||
}
|
||||
|
||||
@@ -60,4 +60,10 @@ public interface SystemAdminService extends IService<SystemAdmin> {
|
||||
SystemAdmin getInfo(Integer adminId);
|
||||
|
||||
SystemAdmin getInfo();
|
||||
|
||||
SystemAdminResponse weChatAuthorizeLogin(String code, String ip);
|
||||
|
||||
Boolean unBind();
|
||||
|
||||
void bind(String wxCode, Integer adminId);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
|
||||
import com.zbkj.crmeb.system.model.SystemStoreStaff;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zbkj.crmeb.system.model.SystemStoreStaffResponse;
|
||||
import com.zbkj.crmeb.system.request.SystemStoreStaffRequest;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -19,4 +20,18 @@ public interface SystemStoreStaffService extends IService<SystemStoreStaff> {
|
||||
PageInfo<SystemStoreStaffResponse> getList(Integer storeId, PageParamRequest pageParamRequest);
|
||||
|
||||
HashMap<Integer, SystemStoreStaff> getMapInId(List<Integer> clerkIdList);
|
||||
|
||||
/**
|
||||
* 根据用户id获取核销信息
|
||||
* @param userIds 用户id集合
|
||||
* @return 核销信息
|
||||
*/
|
||||
List<SystemStoreStaff> getByAdminUserIds(List<Integer> userIds);
|
||||
|
||||
/**
|
||||
* 添加核销员 唯一验证
|
||||
* @param request 当前添加参数
|
||||
* @return 添加结果
|
||||
*/
|
||||
boolean saveUnique(SystemStoreStaffRequest request);
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.common.PageParamRequest;
|
||||
import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.utils.CrmebUtil;
|
||||
@@ -18,6 +19,10 @@ import com.zbkj.crmeb.system.request.SystemRoleSearchRequest;
|
||||
import com.zbkj.crmeb.system.response.SystemAdminResponse;
|
||||
import com.zbkj.crmeb.system.service.SystemAdminService;
|
||||
import com.zbkj.crmeb.system.service.SystemRoleService;
|
||||
import com.zbkj.crmeb.user.model.UserToken;
|
||||
import com.zbkj.crmeb.user.service.UserTokenService;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -45,6 +50,12 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
|
||||
@Resource
|
||||
private TokenManager tokenManager;
|
||||
|
||||
@Autowired
|
||||
private UserTokenService userTokenService;
|
||||
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
|
||||
@Override
|
||||
public List<SystemAdminResponse> getList(SystemAdminRequest request, PageParamRequest pageParamRequest){
|
||||
@@ -277,5 +288,78 @@ public class SystemAdminServiceImpl extends ServiceImpl<SystemAdminDao, SystemAd
|
||||
public SystemAdmin getInfo(Integer adminId) {
|
||||
return getById(adminId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信扫码登录
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-28
|
||||
* @return SystemAdmin
|
||||
*/
|
||||
@Override
|
||||
public SystemAdminResponse weChatAuthorizeLogin(String code, String ip) {
|
||||
//通过code获取用户信息
|
||||
WeChatAuthorizeLoginGetOpenIdResponse response = weChatService.authorizeLogin(code);
|
||||
UserToken userToken = userTokenService.getUserIdByOpenId(response.getOpenId(), Constants.THIRD_ADMIN_LOGIN_TOKEN_TYPE_PUBLIC);
|
||||
if(null == userToken){
|
||||
throw new CrmebException("当前微信账号没有绑定后台账户,请用账号密码登录之后在个人中心扫码绑定");
|
||||
}
|
||||
|
||||
SystemAdmin systemAdmin = getInfo(userToken.getUid());
|
||||
|
||||
if(null == systemAdmin){
|
||||
throw new CrmebException("用户不存在");
|
||||
}
|
||||
|
||||
if(!systemAdmin.getStatus()){
|
||||
throw new CrmebException("用户已经被禁用");
|
||||
}
|
||||
|
||||
if(systemAdmin.getIsDel()){
|
||||
throw new CrmebException("用户已经被删除");
|
||||
}
|
||||
|
||||
TokenModel tokenModel = tokenManager.createToken(systemAdmin.getAccount(), systemAdmin.getId().toString(), TokenModel.TOKEN_REDIS);
|
||||
SystemAdminResponse systemAdminResponse = new SystemAdminResponse();
|
||||
systemAdminResponse.setToken(tokenModel.getToken());
|
||||
BeanUtils.copyProperties(systemAdmin, systemAdminResponse);
|
||||
|
||||
//更新最后登录信息
|
||||
systemAdmin.setLoginCount(systemAdmin.getLoginCount() + 1);
|
||||
systemAdmin.setLastIp(ip);
|
||||
updateById(systemAdmin);
|
||||
|
||||
return systemAdminResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定微信
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-28
|
||||
* @return SystemAdmin
|
||||
*/
|
||||
public void bind(String code, Integer adminId) {
|
||||
try{
|
||||
//通过code获取用户信息
|
||||
WeChatAuthorizeLoginGetOpenIdResponse response = weChatService.authorizeLogin(code);
|
||||
UserToken userToken = userTokenService.checkToken(response.getOpenId(), Constants.THIRD_ADMIN_LOGIN_TOKEN_TYPE_PUBLIC);
|
||||
if(null == userToken){
|
||||
userTokenService.bind(response.getOpenId(), Constants.THIRD_ADMIN_LOGIN_TOKEN_TYPE_PUBLIC, adminId);
|
||||
}
|
||||
}catch (Exception e){
|
||||
throw new CrmebException("绑定失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解绑微信
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-28
|
||||
* @return Boolean
|
||||
*/
|
||||
@Override
|
||||
public Boolean unBind() {
|
||||
return userTokenService.unBind(Constants.THIRD_ADMIN_LOGIN_TOKEN_TYPE_PUBLIC, tokenManager.getLocalUserId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param pageParamRequest PageParamRequest 分页参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return String
|
||||
* @return List<SystemConfig>
|
||||
*/
|
||||
@Override
|
||||
public List<SystemConfig> getList(PageParamRequest pageParamRequest) {
|
||||
@@ -89,7 +89,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
/**
|
||||
* 同时获取多个配置
|
||||
* @param keys 多个配置key
|
||||
* @return 查询到的数据集合
|
||||
* @return List<String>
|
||||
*/
|
||||
@Override
|
||||
public List<String> getValuesByKes(List<String> keys) {
|
||||
@@ -122,7 +122,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param systemFormCheckRequest SystemFormCheckRequest 数据保存
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-13
|
||||
* @return bool
|
||||
* @return boolean
|
||||
*/
|
||||
@Override
|
||||
public boolean saveForm(SystemFormCheckRequest systemFormCheckRequest) {
|
||||
@@ -202,7 +202,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* 保存或更新配置数据
|
||||
* @param name 菜单名称
|
||||
* @param value 菜单值
|
||||
* @return 更新或者保存的状态
|
||||
* @return boolean
|
||||
*/
|
||||
@Override
|
||||
public boolean updateOrSaveValueByName(String name, String value) {
|
||||
@@ -231,7 +231,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param formId Integer id
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
* @return HashMap<String, String>
|
||||
*/
|
||||
@Override
|
||||
public HashMap<String, String> info(Integer formId){
|
||||
@@ -255,7 +255,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param name name
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
* @return boolean
|
||||
*/
|
||||
@Override
|
||||
public boolean checkName(String name){
|
||||
@@ -270,7 +270,6 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param name name
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
*/
|
||||
private void asyncRedis(String name){
|
||||
LambdaQueryWrapper<SystemConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -290,7 +289,6 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param systemConfigList List<SystemConfig> 需要同步的数据
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
*/
|
||||
private void async(List<SystemConfig> systemConfigList){
|
||||
if (!asyncConfig) {
|
||||
@@ -313,7 +311,6 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param name String
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
*/
|
||||
private void deleteRedis(String name){
|
||||
if (!asyncConfig) {
|
||||
@@ -328,7 +325,7 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* @param name String
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
* @return String
|
||||
*/
|
||||
private String get(String name){
|
||||
if (!asyncConfig) {
|
||||
@@ -358,7 +355,6 @@ public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigDao, System
|
||||
* 把数据同步到redis, 此方法适用于redis为空的时候进行一次批量输入
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-16
|
||||
* @return JSONObject
|
||||
*/
|
||||
private void setRedisByVoList(){
|
||||
//检测redis是否为空
|
||||
|
||||
@@ -194,7 +194,7 @@ public class SystemStoreServiceImpl extends ServiceImpl<SystemStoreDao, SystemSt
|
||||
if(StringUtils.isNotBlank(request.getLatitude()) && StringUtils.isNotBlank(request.getLongitude())){
|
||||
storeNearVoArrayList = dao.getNearList(request);
|
||||
}else{
|
||||
List<SystemStore> list = getList(null, 2, pageParamRequest);
|
||||
List<SystemStore> list = getList(null, 1, pageParamRequest);
|
||||
for (SystemStore systemStore : list) {
|
||||
SystemStoreNearVo systemStoreNearVo = new SystemStoreNearVo();
|
||||
BeanUtils.copyProperties(systemStore, systemStoreNearVo);
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package com.zbkj.crmeb.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.common.CommonPage;
|
||||
import com.common.PageParamRequest;
|
||||
import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
@@ -11,6 +14,7 @@ import com.zbkj.crmeb.system.dao.SystemStoreStaffDao;
|
||||
import com.zbkj.crmeb.system.model.SystemStore;
|
||||
import com.zbkj.crmeb.system.model.SystemStoreStaff;
|
||||
import com.zbkj.crmeb.system.model.SystemStoreStaffResponse;
|
||||
import com.zbkj.crmeb.system.request.SystemStoreStaffRequest;
|
||||
import com.zbkj.crmeb.system.service.SystemStoreService;
|
||||
import com.zbkj.crmeb.system.service.SystemStoreStaffService;
|
||||
import com.zbkj.crmeb.user.model.User;
|
||||
@@ -67,14 +71,14 @@ public class SystemStoreStaffServiceImpl extends ServiceImpl<SystemStoreStaffDao
|
||||
//用户信息
|
||||
List<Integer> userIdList = systemStoreStaffList.stream().map(SystemStoreStaff::getUid).collect(Collectors.toList());
|
||||
HashMap<Integer, User> userList = null;
|
||||
if(userIdList.size() > 1){
|
||||
if(userIdList.size() >= 1){
|
||||
userList = userService.getMapListInUid(userIdList);
|
||||
}
|
||||
|
||||
//门店信息
|
||||
List<Integer> storeIdList = systemStoreStaffList.stream().map(SystemStoreStaff::getStoreId).collect(Collectors.toList());
|
||||
HashMap<Integer, SystemStore> storeList = null;
|
||||
if(storeIdList.size() > 1){
|
||||
if(storeIdList.size() >= 1){
|
||||
storeList = systemStoreService.getMapInId(storeIdList);
|
||||
}
|
||||
|
||||
@@ -109,7 +113,7 @@ public class SystemStoreStaffServiceImpl extends ServiceImpl<SystemStoreStaffDao
|
||||
if(clerkIdList.size() < 1){
|
||||
return map;
|
||||
}
|
||||
LambdaQueryWrapper<SystemStoreStaff> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
LambdaQueryWrapper<SystemStoreStaff> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
||||
lambdaQueryWrapper.in(SystemStoreStaff::getId, clerkIdList);
|
||||
List<SystemStoreStaff> systemStoreStaffList = dao.selectList(lambdaQueryWrapper);
|
||||
if(systemStoreStaffList.size() < 1){
|
||||
@@ -121,5 +125,35 @@ public class SystemStoreStaffServiceImpl extends ServiceImpl<SystemStoreStaffDao
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户id获取核销信息
|
||||
*
|
||||
* @param userIds 用户id集合
|
||||
* @return 核销人员id集合
|
||||
*/
|
||||
@Override
|
||||
public List<SystemStoreStaff> getByAdminUserIds(List<Integer> userIds) {
|
||||
LambdaQueryWrapper<SystemStoreStaff> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
||||
lambdaQueryWrapper.in(SystemStoreStaff::getUid, userIds);
|
||||
List<SystemStoreStaff> existStaffs = dao.selectList(lambdaQueryWrapper);
|
||||
return existStaffs.stream().distinct().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加核销员 唯一验证
|
||||
*
|
||||
* @param request 当前添加参数
|
||||
* @return 添加结果
|
||||
*/
|
||||
@Override
|
||||
public boolean saveUnique(SystemStoreStaffRequest request) {
|
||||
List<Integer> userIds = new ArrayList<>();
|
||||
userIds.add(request.getUid());
|
||||
List<SystemStoreStaff> existStaffs = getByAdminUserIds(userIds);
|
||||
if(null != existStaffs && existStaffs.size() > 0) throw new CrmebException(Constants.RESULT_VERIFICATION_USER_EXIST);
|
||||
SystemStoreStaff systemStoreStaff = new SystemStoreStaff();
|
||||
BeanUtils.copyProperties(request, systemStoreStaff);
|
||||
return dao.insert(systemStoreStaff) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
package com.zbkj.crmeb.task.sms;
|
||||
|
||||
import com.utils.DateUtil;
|
||||
import com.zbkj.crmeb.sms.model.SmsRecord;
|
||||
import com.zbkj.crmeb.sms.service.SmsRecordService;
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.zbkj.crmeb.task.wechat;
|
||||
|
||||
import com.utils.DateUtil;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramPublicTempService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
//小程序公共模板库
|
||||
@Component
|
||||
@Configuration //读取配置
|
||||
@EnableScheduling // 2.开启定时任务
|
||||
public class AsyncWeChatProgramTempList {
|
||||
//日志
|
||||
private static final Logger logger = LoggerFactory.getLogger(AsyncWeChatProgramTempList.class);
|
||||
|
||||
@Autowired
|
||||
private WechatProgramPublicTempService wechatProgramPublicTempService;
|
||||
|
||||
@Value("${server.asyncWeChatProgramTempList}")
|
||||
private Boolean asyncWeChatProgramTempList;
|
||||
|
||||
@Scheduled(fixedDelay = 1000L * 60 * 60 * 24) //1天同步一次数据
|
||||
public void init(){
|
||||
logger.info("---AsyncWeChatProgramTempList task------produce Data with fixed rate task: Execution Time - {}", DateUtil.nowDate());
|
||||
try {
|
||||
if(asyncWeChatProgramTempList){
|
||||
wechatProgramPublicTempService.async();
|
||||
}
|
||||
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
logger.error("AsyncWeChatProgramTempList.task" + " | msg : " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,9 @@ public interface UserTokenService extends IService<UserToken> {
|
||||
|
||||
UserToken checkToken(String token, int type);
|
||||
|
||||
void bind(String openId, int thirdLoginTokenTypeUnionId, Integer uid);
|
||||
void bind(String openId, int type, Integer uid);
|
||||
|
||||
Boolean unBind(int type, Integer uid);
|
||||
|
||||
UserToken getTokenByUserId(Integer userId, int type);
|
||||
|
||||
@@ -22,5 +24,5 @@ public interface UserTokenService extends IService<UserToken> {
|
||||
|
||||
List<UserToken> getList(List<Integer> userIdList);
|
||||
|
||||
UserToken getUserIdByOpenId(String openid);
|
||||
UserToken getUserIdByOpenId(String openid, int type);
|
||||
}
|
||||
@@ -203,7 +203,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
|
||||
}
|
||||
|
||||
//获取推广人信息
|
||||
if(user.getSpreadUid() == 0){
|
||||
if(null == user.getSpreadUid() || user.getSpreadUid() == 0){
|
||||
userResponse.setSpreadNickname("无");
|
||||
}else{
|
||||
userResponse.setSpreadNickname(userDao.selectById(user.getSpreadUid()).getNickname());
|
||||
@@ -1268,9 +1268,10 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
|
||||
return user;
|
||||
}
|
||||
|
||||
/** 根据用户id集合获取对应用户集合
|
||||
* @param userIds 用户id集合
|
||||
* @return 用户集合
|
||||
/**
|
||||
* 根据用户id集合获取对应用户集合
|
||||
* @param userIds 用户id集合
|
||||
* @return 用户集合
|
||||
*/
|
||||
@Override
|
||||
public List<User> getSpreadPeopleList(List<Integer> userIds) {
|
||||
@@ -1541,7 +1542,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
|
||||
if(null == spreadUid || spreadUid == 0){
|
||||
return;
|
||||
}
|
||||
//如果当前用户没有绑定,并且后台配置人人分销,那么需要邦迪
|
||||
//如果当前用户没有绑定,并且后台配置人人分销,那么需要绑定
|
||||
if(user.getSpreadUid() > 0){
|
||||
return;
|
||||
}
|
||||
@@ -1549,7 +1550,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserS
|
||||
String distribution = systemConfigService.getValueByKey(Constants.CONFIG_KEY_DISTRIBUTION_TYPE);
|
||||
|
||||
//人人分销 + 当前已绑定的id和推广人id不一样
|
||||
if(distribution.equals("0") && !user.getSpreadUid().equals(spreadUid)){
|
||||
if(StringUtils.isNotBlank(distribution) && distribution.equals("0") && !user.getSpreadUid().equals(spreadUid)){
|
||||
user.setSpreadUid(spreadUid);
|
||||
user.setSpreadTime(DateUtil.nowDateTime());
|
||||
}
|
||||
|
||||
@@ -20,6 +20,9 @@ import com.zbkj.crmeb.user.service.UserService;
|
||||
import com.zbkj.crmeb.user.service.UserSignService;
|
||||
import com.zbkj.crmeb.user.vo.UserSignMonthVo;
|
||||
import com.zbkj.crmeb.user.vo.UserSignVo;
|
||||
import com.zbkj.crmeb.wechat.service.impl.WechatSendMessageForMinService;
|
||||
import com.zbkj.crmeb.wechat.vo.WechatSendMessageForIntegral;
|
||||
import io.swagger.models.auth.In;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -51,6 +54,8 @@ public class UserSignServiceImpl extends ServiceImpl<UserSignDao, UserSign> impl
|
||||
@Autowired
|
||||
private UserBillService userBillService;
|
||||
|
||||
@Autowired
|
||||
private WechatSendMessageForMinService wechatSendMessageForMinService;
|
||||
|
||||
/**
|
||||
* 列表
|
||||
@@ -114,6 +119,14 @@ public class UserSignServiceImpl extends ServiceImpl<UserSignDao, UserSign> impl
|
||||
userOperateFundsRequest.setValue(new BigDecimal(configVo.getIntegral()));
|
||||
userService.updateFounds(userOperateFundsRequest, true);
|
||||
|
||||
// 小程序消息积分变动通知
|
||||
WechatSendMessageForIntegral integralPram = new WechatSendMessageForIntegral(
|
||||
"您的积分变动如下","签到获得积分","签到","0",configVo.getIntegral()+"",
|
||||
(user.getIntegral().add(BigDecimal.valueOf(configVo.getIntegral())))+"",
|
||||
DateUtil.nowDateTimeStr(),"暂无","暂无","签到赠送积分"
|
||||
);
|
||||
wechatSendMessageForMinService.sendIntegralMessage(integralPram,user.getUid());
|
||||
|
||||
//更新用户经验信息
|
||||
userOperateFundsRequest.setUid(user.getUid());
|
||||
userOperateFundsRequest.setFoundsCategory(Constants.USER_BILL_CATEGORY_EXPERIENCE);
|
||||
|
||||
@@ -60,6 +60,24 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenDao, UserToken> i
|
||||
save(userToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解绑微信
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-28
|
||||
* @return Boolean
|
||||
*/
|
||||
@Override
|
||||
public Boolean unBind(int type, Integer uid) {
|
||||
try{
|
||||
LambdaQueryWrapper<UserToken> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(UserToken::getUid, uid).eq(UserToken::getType, type);
|
||||
dao.delete(lambdaQueryWrapper);
|
||||
return true;
|
||||
}catch (Exception e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserToken getTokenByUserId(Integer userId, int type) {
|
||||
LambdaQueryWrapper<UserToken> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -91,9 +109,10 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenDao, UserToken> i
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserToken getUserIdByOpenId(String openid) {
|
||||
public UserToken getUserIdByOpenId(String openid, int type) {
|
||||
LambdaQueryWrapper<UserToken> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(UserToken::getToken, openid);
|
||||
lambdaQueryWrapper.eq(UserToken::getType, type);
|
||||
return dao.selectOne(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.zbkj.crmeb.wechat.controller;
|
||||
|
||||
import com.common.CommonResult;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.vo.ProgramCategoryVo;
|
||||
import com.zbkj.crmeb.wechat.vo.ProgramTempKeywordsVo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 微信缓存表 前端控制器
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("api/admin/wechat/program")
|
||||
@Api(tags = "微信开放平台 -- 小程序")
|
||||
public class ProgramController {
|
||||
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
|
||||
/**
|
||||
* 小程序行业信息
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-03
|
||||
*/
|
||||
@ApiOperation(value = "小程序行业信息")
|
||||
@RequestMapping(value = "/category", method = RequestMethod.GET)
|
||||
public CommonResult<List<ProgramCategoryVo>> getCategory(){
|
||||
return CommonResult.success(weChatService.getProgramCategory());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 通过微信公共模板tid获取关键字列表
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-03
|
||||
*/
|
||||
@ApiOperation(value = "通过微信模板tid获取关键字列表")
|
||||
@RequestMapping(value = "/getWeChatKeywordsByTid", method = RequestMethod.GET)
|
||||
public CommonResult<List<ProgramTempKeywordsVo>> getWeChatKeywordsByTid(@RequestParam(value = "tid") Integer tid){
|
||||
return CommonResult.success(weChatService.getWeChatKeywordsByTid(tid));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,19 +3,17 @@ package com.zbkj.crmeb.wechat.controller;
|
||||
import com.common.CommonPage;
|
||||
import com.common.CommonResult;
|
||||
import com.common.PageParamRequest;
|
||||
import com.utils.DateUtil;
|
||||
import com.zbkj.crmeb.wechat.model.TemplateMessage;
|
||||
import com.zbkj.crmeb.wechat.request.TemplateMessageRequest;
|
||||
import com.zbkj.crmeb.wechat.request.TemplateMessageSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.TemplateMessageService;
|
||||
import com.zbkj.crmeb.wechat.vo.TemplateMessageIndustryVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.unit.DataUnit;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.zbkj.crmeb.wechat.controller;
|
||||
|
||||
import com.common.CommonResult;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @Classname WeChatAdminController
|
||||
* @Description TODO
|
||||
* @Date 9/4/20 2:22 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController("WeChatAdminController")
|
||||
@RequestMapping("api/admin/wechat")
|
||||
@Api(tags = "微信 -- 开放平台 admin")
|
||||
public class WeChatAdminController {
|
||||
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
/**
|
||||
* 获取微信公众号js配置
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-05-25
|
||||
*/
|
||||
@ApiOperation(value = "获取微信公众号js配置")
|
||||
@RequestMapping(value = "/config", method = RequestMethod.GET)
|
||||
@ApiImplicitParam(name = "url", value = "页面地址url")
|
||||
public CommonResult<Object> configJs(@RequestParam(value = "url") String url){
|
||||
return CommonResult.success(weChatService.getJsSdkConfig(url));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
package com.zbkj.crmeb.wechat.controller;
|
||||
|
||||
import com.common.CommonPage;
|
||||
import com.common.CommonResult;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramMyTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempRequest;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramMyTempService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 小程序我的模板 前端控制器
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("api/admin/wechat/program/my/temp")
|
||||
@Api(tags = "微信开放平台 -- 小程序 -- 我的模板") //配合swagger使用
|
||||
|
||||
public class WechatProgramMyTempController {
|
||||
|
||||
@Autowired
|
||||
private WechatProgramMyTempService wechatProgramMyTempService;
|
||||
|
||||
/**
|
||||
* 分页显示小程序我的模板
|
||||
* @param request 搜索条件
|
||||
* @param pageParamRequest 分页参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "分页列表") //配合swagger使用
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
public CommonResult<CommonPage<WechatProgramMyTemp>> getList(@Validated WechatProgramMyTempSearchRequest request, @Validated PageParamRequest pageParamRequest){
|
||||
CommonPage<WechatProgramMyTemp> wechatProgramMyTempCommonPage = CommonPage.restPage(wechatProgramMyTempService.getList(request, pageParamRequest));
|
||||
return CommonResult.success(wechatProgramMyTempCommonPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增小程序我的模板
|
||||
* @param wechatProgramMyTempRequest 新增参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "新增")
|
||||
@RequestMapping(value = "/save", method = RequestMethod.POST)
|
||||
public CommonResult<String> save(@RequestBody @Validated WechatProgramMyTempRequest wechatProgramMyTempRequest){
|
||||
if(wechatProgramMyTempService.create(wechatProgramMyTempRequest)){
|
||||
return CommonResult.success();
|
||||
}else{
|
||||
return CommonResult.failed();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用/禁用小程序我的模板
|
||||
* @param id Integer
|
||||
* @param status boolean
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "禁用/禁用")
|
||||
@RequestMapping(value = "update/status", method = RequestMethod.GET)
|
||||
public CommonResult<String> delete(@RequestParam(value = "id") Integer id, @RequestParam(value = "status") boolean status){
|
||||
if(wechatProgramMyTempService.updateStatus(id, status)){
|
||||
return CommonResult.success();
|
||||
}else{
|
||||
return CommonResult.failed();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新应用场景
|
||||
* @param id Integer
|
||||
* @param type String
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "禁用/禁用")
|
||||
@RequestMapping(value = "update/type", method = RequestMethod.GET)
|
||||
public CommonResult<String> updateType(@RequestParam(value = "id") Integer id, @RequestParam(value = "type") String type){
|
||||
if(wechatProgramMyTempService.updateType(id, type)){
|
||||
return CommonResult.success();
|
||||
}else{
|
||||
return CommonResult.failed();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改小程序我的模板
|
||||
* @param id integer id
|
||||
* @param wechatProgramMyTempRequest 修改参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "修改")
|
||||
@RequestMapping(value = "/update", method = RequestMethod.POST)
|
||||
public CommonResult<String> update(@RequestParam Integer id, @RequestBody @Validated WechatProgramMyTempRequest wechatProgramMyTempRequest){
|
||||
if(wechatProgramMyTempService.update(id, wechatProgramMyTempRequest)){
|
||||
return CommonResult.success();
|
||||
}else{
|
||||
return CommonResult.failed();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询小程序我的模板信息
|
||||
* @param id Integer
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "详情")
|
||||
@RequestMapping(value = "/info", method = RequestMethod.GET)
|
||||
public CommonResult<WechatProgramMyTemp> info(@RequestParam(value = "id") Integer id){
|
||||
WechatProgramMyTemp wechatProgramMyTemp = wechatProgramMyTempService.info(id);
|
||||
return CommonResult.success(wechatProgramMyTemp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步到小程序
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@ApiOperation(value = "同步到小程序")
|
||||
@RequestMapping(value = "/async", method = RequestMethod.GET)
|
||||
public CommonResult<WechatProgramMyTemp> async(){
|
||||
//查询模板信息
|
||||
List<WechatProgramMyTemp> list = wechatProgramMyTempService.getAll();
|
||||
if(null != list && list.size() > 0){
|
||||
for (WechatProgramMyTemp wechatProgramMyTemp : list) {
|
||||
wechatProgramMyTempService.async(wechatProgramMyTemp);
|
||||
}
|
||||
}
|
||||
return CommonResult.success();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.zbkj.crmeb.wechat.controller;
|
||||
|
||||
import com.common.CommonPage;
|
||||
import com.common.CommonResult;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramPublicTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramPublicTempSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramPublicTempService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
/**
|
||||
* 微信公共模板库
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("api/admin/wechat/program/public/temp")
|
||||
@Api(tags = "微信开放平台 -- 小程序 -- 微信公共模板库") //配合swagger使用
|
||||
|
||||
public class WechatProgramPublicTempController {
|
||||
|
||||
@Autowired
|
||||
private WechatProgramPublicTempService wechatProgramPublicTempService;
|
||||
|
||||
/**
|
||||
* 分页显示
|
||||
* @param request 搜索条件
|
||||
* @param pageParamRequest 分页参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
@ApiOperation(value = "分页列表") //配合swagger使用
|
||||
@RequestMapping(value = "/list", method = RequestMethod.GET)
|
||||
public CommonResult<CommonPage<WechatProgramPublicTemp>> getList(@Validated WechatProgramPublicTempSearchRequest request, @Validated PageParamRequest pageParamRequest){
|
||||
CommonPage<WechatProgramPublicTemp> wechatProgramPublicTempCommonPage = CommonPage.restPage(wechatProgramPublicTempService.getList(request, pageParamRequest));
|
||||
return CommonResult.success(wechatProgramPublicTempCommonPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询信息
|
||||
* @param id Integer
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
@ApiOperation(value = "详情")
|
||||
@RequestMapping(value = "/info", method = RequestMethod.GET)
|
||||
public CommonResult<WechatProgramPublicTemp> info(@RequestParam(value = "id") Integer id){
|
||||
WechatProgramPublicTemp wechatProgramPublicTemp = wechatProgramPublicTempService.getById(id);
|
||||
return CommonResult.success(wechatProgramPublicTemp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.zbkj.crmeb.wechat.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramMyTemp;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小程序我的模板 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
public interface WechatProgramMyTempDao extends BaseMapper<WechatProgramMyTemp> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.zbkj.crmeb.wechat.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramPublicTemp;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
public interface WechatProgramPublicTempDao extends BaseMapper<WechatProgramPublicTemp> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.zbkj.crmeb.wechat.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小程序我的模板
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("eb_wechat_program_my_temp")
|
||||
@ApiModel(value="WechatProgramMyTemp对象", description="小程序我的模板")
|
||||
public class WechatProgramMyTemp implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "微信模板id")
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "模版标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "模板关键字id,多个逗号分割")
|
||||
private String kid;
|
||||
|
||||
@ApiModelProperty(value = "场景描述")
|
||||
private String sceneDesc;
|
||||
|
||||
@ApiModelProperty(value = "微信模板id")
|
||||
private String tempId;
|
||||
|
||||
@ApiModelProperty(value = "扩展字段")
|
||||
private String extra;
|
||||
|
||||
@ApiModelProperty(value = "状态 0,禁用,1启用")
|
||||
private Boolean status;
|
||||
|
||||
@ApiModelProperty(value = "应用场景")
|
||||
private String type;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.zbkj.crmeb.wechat.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("eb_wechat_program_public_temp")
|
||||
@ApiModel(value="WechatProgramPublicTemp对象", description="")
|
||||
public class WechatProgramPublicTemp implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "微信模板id")
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "模版标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "模版类型,2 为一次性订阅,3 为长期订阅")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(value = "模版所属类目 id")
|
||||
private Integer categoryId;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "修改时间")
|
||||
private Date updateTime;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.zbkj.crmeb.wechat.request;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小程序我的模板
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="WechatProgramMyTempRequest对象", description="小程序我的模板")
|
||||
public class WechatProgramMyTempRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@ApiModelProperty(value = "微信模板id")
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "模版标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "模板关键字id,多个逗号分割")
|
||||
private String kid;
|
||||
|
||||
@ApiModelProperty(value = "场景描述")
|
||||
private String sceneDesc;
|
||||
|
||||
@ApiModelProperty(value = "扩展字段")
|
||||
private String extra;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.zbkj.crmeb.wechat.request;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 小程序我的模板
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="WechatProgramMyTempSearchRequest对象", description="小程序我的模板")
|
||||
public class WechatProgramMyTempSearchRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@ApiModelProperty(value = "模版标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "我的模板id")
|
||||
private String tempId;
|
||||
|
||||
@ApiModelProperty(value = "状态 0,禁用,1启用")
|
||||
private Boolean status;
|
||||
|
||||
@ApiModelProperty(value = "应用场景")
|
||||
private String type;
|
||||
|
||||
private Integer id;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.zbkj.crmeb.wechat.request;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("eb_wechat_program_public_temp")
|
||||
@ApiModel(value="WechatProgramPublicTemp对象", description="")
|
||||
public class WechatProgramPublicTempRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "微信模板id")
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "模版标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "模版类型,2 为一次性订阅,3 为长期订阅")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(value = "模版所属类目 id")
|
||||
private Integer categoryId;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.zbkj.crmeb.wechat.request;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p>
|
||||
*
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("eb_wechat_program_public_temp")
|
||||
@ApiModel(value="WechatProgramPublicTemp对象", description="")
|
||||
public class WechatProgramPublicTempSearchRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "微信模板id")
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "模版标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "模版类型,2 为一次性订阅,3 为长期订阅")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(value = "模版所属类目 id")
|
||||
private Integer categoryId;
|
||||
|
||||
|
||||
}
|
||||
@@ -6,9 +6,10 @@ import com.zbkj.crmeb.payment.vo.wechat.CreateOrderResponseVo;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginUserInfoResponse;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatProgramAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.vo.TemplateMessageVo;
|
||||
import com.zbkj.crmeb.wechat.vo.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Mr.Zhang
|
||||
@@ -74,4 +75,14 @@ public interface WeChatService {
|
||||
String qrCode(String page, String uri);
|
||||
|
||||
UserRechargePaymentResponse response(CreateOrderResponseVo responseVo);
|
||||
|
||||
List<ProgramCategoryVo> getProgramCategory();
|
||||
|
||||
List<ProgramTempVo> getProgramPublicTempList(int page);
|
||||
|
||||
List<ProgramTempKeywordsVo> getWeChatKeywordsByTid(Integer tid);
|
||||
|
||||
String programAddMyTemp(ProgramAddMyTempVo programAddMyTempVo);
|
||||
|
||||
void programDeleteMyTemp(String myTempId);
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.zbkj.crmeb.wechat.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramMyTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempRequest;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempSearchRequest;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Mr.Zhang
|
||||
* @description WechatProgramMyTempService 接口
|
||||
* @date 2020-08-28
|
||||
*/
|
||||
public interface WechatProgramMyTempService extends IService<WechatProgramMyTemp> {
|
||||
|
||||
List<WechatProgramMyTemp> getList(WechatProgramMyTempSearchRequest request, PageParamRequest pageParamRequest);
|
||||
|
||||
WechatProgramMyTemp info(Integer id);
|
||||
|
||||
boolean updateStatus(Integer id, boolean status);
|
||||
|
||||
boolean create(WechatProgramMyTempRequest wechatProgramMyTempRequest);
|
||||
|
||||
boolean update(Integer id, WechatProgramMyTempRequest wechatProgramMyTempRequest);
|
||||
|
||||
void push(int myTempId, HashMap<String, String> map, Integer userId);
|
||||
|
||||
void async(WechatProgramMyTemp wechatProgramMyTemp);
|
||||
|
||||
List<WechatProgramMyTemp> getAll();
|
||||
|
||||
boolean updateType(Integer id, String type);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.zbkj.crmeb.wechat.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.common.PageParamRequest;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramPublicTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramPublicTempSearchRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Mr.Zhang
|
||||
* @description WechatProgramPublicTempService 接口
|
||||
* @date 2020-08-27
|
||||
*/
|
||||
public interface WechatProgramPublicTempService extends IService<WechatProgramPublicTemp> {
|
||||
|
||||
List<WechatProgramPublicTemp> getList(WechatProgramPublicTempSearchRequest request, PageParamRequest pageParamRequest);
|
||||
|
||||
void async();
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.zbkj.crmeb.wechat.service;
|
||||
|
||||
import com.zbkj.crmeb.wechat.vo.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @Classname WechatSendMessageForMinService
|
||||
* @Description 根据已申请的模版发送小程序消息
|
||||
* @Date 9/10/20 10:17 上午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
public interface WechatSendMessageForMinService {
|
||||
/**
|
||||
* 发送积分到账消息
|
||||
* @param integral 待发送积分参数
|
||||
* @param userId 接收用户id
|
||||
*/
|
||||
void sendIntegralMessage(WechatSendMessageForIntegral integral, Integer userId);
|
||||
|
||||
/**
|
||||
* 退款申请通知
|
||||
* @param reFundNotify 退款申请参数
|
||||
* @param userId 接收者用户Id
|
||||
*/
|
||||
void sendReFundNotifyMessage(WechatSendMessageForReFundNotify reFundNotify, Integer userId);
|
||||
|
||||
/**
|
||||
* 退款通知
|
||||
* @param reFundEd 退款参数
|
||||
* @param userId 接收者用户Id
|
||||
*/
|
||||
void sendReFundEdMessage(WechatSendMessageForReFundEd reFundEd, Integer userId);
|
||||
|
||||
/**
|
||||
* 付款成功通知
|
||||
* @param paySuccess 付款成功参数
|
||||
* @param userId 接受者用户Id
|
||||
*/
|
||||
void sendPaySuccessMessage(WechatSendMessageForPaySuccess paySuccess, Integer userId);
|
||||
|
||||
/**
|
||||
* 充值成功过通知
|
||||
* @param topped 充值成功通知
|
||||
* @param userId 接收者Id
|
||||
*/
|
||||
void sendToppedMessage(WechatSendMessageForTopped topped, Integer userId);
|
||||
|
||||
/**
|
||||
* 配送通知
|
||||
* @param distrbution 配送参数
|
||||
* @param userId 接收者Id
|
||||
*/
|
||||
void sendDistrbutionMessage(WechatSendMessageForDistrbution distrbution, Integer userId);
|
||||
|
||||
/**
|
||||
* 提现通知
|
||||
* @param cash 提现参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
void sendCashMessage(WechatSendMessageForCash cash, Integer userId);
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
* @param cateOrder 创建订单参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
void sendCreateOrderMessage(WechatSendMessageForCreateOrder cateOrder, Integer userId);
|
||||
|
||||
/**
|
||||
* 收货通知
|
||||
* @param getPackage 收货参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
void sendGetPackageMessage(WechatSendMessageForGetPackage getPackage, Integer userId);
|
||||
|
||||
/**
|
||||
* 取消订单
|
||||
* @param orderCancel 取消订单参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
void sendOrderCancelMessage(WechatSendMessageForOrderCancel orderCancel, Integer userId);
|
||||
|
||||
/**
|
||||
* 发货通知
|
||||
* @param toPackage 发货通知
|
||||
* @param userId 用户id
|
||||
*/
|
||||
void sendRePackageMessage(WechatSendMessageForPackage toPackage, Integer userId);
|
||||
|
||||
/**
|
||||
* 核销通知
|
||||
* @param ver 核销参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
void sendVerSuccessMessage(WechatSendMessageForVerSuccess ver, Integer userId);
|
||||
|
||||
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import com.zbkj.crmeb.wechat.model.TemplateMessage;
|
||||
import com.zbkj.crmeb.wechat.request.TemplateMessageSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.TemplateMessageService;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramMyTempService;
|
||||
import com.zbkj.crmeb.wechat.vo.SendTemplateMessageItemVo;
|
||||
import com.zbkj.crmeb.wechat.vo.TemplateMessageIndustryVo;
|
||||
import com.zbkj.crmeb.wechat.vo.TemplateMessageVo;
|
||||
@@ -50,6 +51,9 @@ public class TemplateMessageServiceImpl extends ServiceImpl<TemplateMessageDao,
|
||||
@Autowired
|
||||
private UserTokenService userTokenService;
|
||||
|
||||
@Autowired
|
||||
private WechatProgramMyTempService wechatProgramMyTempService;
|
||||
|
||||
|
||||
/**
|
||||
* 列表
|
||||
@@ -97,6 +101,29 @@ public class TemplateMessageServiceImpl extends ServiceImpl<TemplateMessageDao,
|
||||
* @since 2020-06-03
|
||||
*/
|
||||
public void push(String tempKey, HashMap<String, String> map, Integer userId, String type){
|
||||
|
||||
switch (type){
|
||||
case Constants.PAY_TYPE_WE_CHAT_FROM_PUBLIC:
|
||||
pushPublicTempMessage(tempKey, map, userId, type);
|
||||
break;
|
||||
case Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM:
|
||||
wechatProgramMyTempService.push(Integer.parseInt(tempKey), map, userId);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送给微信消息进入队列
|
||||
* @param tempKey String 模板消息key
|
||||
* @param map 需要替换的数据
|
||||
* @param userId Integer 用户id
|
||||
* @param type String 类型, public 公众号;program 小程序
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-03
|
||||
*/
|
||||
public void pushPublicTempMessage(String tempKey, HashMap<String, String> map, Integer userId, String type){
|
||||
TemplateMessageVo templateMessageVo = new TemplateMessageVo();
|
||||
|
||||
TemplateMessage templateMessage = getInfoByTempKey(tempKey);
|
||||
@@ -109,24 +136,23 @@ public class TemplateMessageServiceImpl extends ServiceImpl<TemplateMessageDao,
|
||||
for (Map.Entry<String, String> entry : map.entrySet()){
|
||||
hashMap.put(entry.getKey(), new SendTemplateMessageItemVo(entry.getValue()));
|
||||
}
|
||||
//用户信息 TODO 公众号和小程序取的OPENID 不一样, 从token表取,需要重新处理
|
||||
//token 类型
|
||||
int openIdType = Constants.THIRD_LOGIN_TOKEN_TYPE_PUBLIC;
|
||||
templateMessageVo.setData(hashMap);
|
||||
String redisKey = Constants.WE_CHAT_MESSAGE_KEY_PUBLIC;
|
||||
if(Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM.equals(type)){
|
||||
redisKey = Constants.WE_CHAT_MESSAGE_KEY_PROGRAM;
|
||||
openIdType = Constants.THIRD_LOGIN_TOKEN_TYPE_PROGRAM;
|
||||
if(Constants.ADMIN_LOGIN_TYPE_WE_CHAT_FROM_PUBLIC.equals(type)){
|
||||
openIdType = Constants.THIRD_ADMIN_LOGIN_TOKEN_TYPE_PUBLIC;
|
||||
|
||||
}
|
||||
|
||||
//拿到三方登录绑定的token
|
||||
UserToken UserToken = userTokenService.getTokenByUserId(userId, openIdType);
|
||||
|
||||
if(null == UserToken || StringUtils.isBlank(UserToken.getToken())){
|
||||
return;
|
||||
}
|
||||
|
||||
templateMessageVo.setData(hashMap);
|
||||
templateMessageVo.setTouser(UserToken.getToken());
|
||||
|
||||
redisUtil.lPush(redisKey, JSONObject.toJSONString(templateMessageVo));
|
||||
redisUtil.lPush(Constants.WE_CHAT_MESSAGE_KEY_PUBLIC, JSONObject.toJSONString(templateMessageVo));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.zbkj.crmeb.wechat.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.constants.Constants;
|
||||
import com.constants.WeChatConstants;
|
||||
@@ -15,10 +16,11 @@ import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatAuthorizeLoginUserInfoResponse;
|
||||
import com.zbkj.crmeb.wechat.response.WeChatProgramAuthorizeLoginGetOpenIdResponse;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.vo.MediaCountVo;
|
||||
import com.zbkj.crmeb.wechat.vo.TemplateMessageVo;
|
||||
import com.zbkj.crmeb.wechat.vo.*;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
@@ -32,16 +34,18 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* @author Mr.Zhang
|
||||
* @Description WeChatPublicServiceImpl 接口实现
|
||||
* @since 2020-04-22
|
||||
*/
|
||||
* @author Mr.Zhang
|
||||
* @Description WeChatPublicServiceImpl 接口实现
|
||||
* @since 2020-04-22
|
||||
*/
|
||||
@Service
|
||||
public class WeChatServiceImpl implements WeChatService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(WeChatServiceImpl.class);
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@@ -146,9 +150,7 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
//不存在, 去获取
|
||||
getToken();
|
||||
//存入redis
|
||||
if(StringUtils.isBlank(weChartApiUrl)){
|
||||
redisUtil.set(WeChatConstants.REDIS_TOKEN_KEY, this.token, this.expires - 100, TimeUnit.SECONDS);
|
||||
}
|
||||
redisUtil.set(WeChatConstants.REDIS_TOKEN_KEY, this.token, this.expires - 100, TimeUnit.SECONDS);
|
||||
}else{
|
||||
this.token = token;
|
||||
}
|
||||
@@ -156,10 +158,10 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
|
||||
|
||||
/**
|
||||
* 获取token
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-22
|
||||
*/
|
||||
* 获取token
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-04-22
|
||||
*/
|
||||
private void getToken(){
|
||||
getAppInfo();
|
||||
String url = getUrl() + WeChatConstants.API_TOKEN_URI + "&appid=" + this.appId + "&secret=" + this.secret;
|
||||
@@ -184,9 +186,7 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
//不存在, 去获取
|
||||
getProgramToken();
|
||||
//存入redis
|
||||
if(StringUtils.isBlank(weChartApiUrl)){
|
||||
redisUtil.set(WeChatConstants.REDIS_PROGRAM_TOKEN_KEY, this.programToken, this.programExpires - 100, TimeUnit.SECONDS);
|
||||
}
|
||||
redisUtil.set(WeChatConstants.REDIS_PROGRAM_TOKEN_KEY, this.programToken, this.programExpires - 100, TimeUnit.SECONDS);
|
||||
}else{
|
||||
this.programToken = token;
|
||||
}
|
||||
@@ -290,8 +290,10 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
* @return JSONObject
|
||||
*/
|
||||
private JSONObject post(String url, String data){
|
||||
logger.info("WeChatServiceImpl.post | url:" + url + " | data:" +data);
|
||||
JSONObject jsonData = JSONObject.parseObject(data);
|
||||
String result = restTemplateUtil.postJsonData(url, jsonData);
|
||||
logger.info("微信消息发送结果:" + result);
|
||||
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||
return checkResult(jsonObject);
|
||||
}
|
||||
@@ -679,6 +681,98 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序行业信息
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-03
|
||||
*/
|
||||
@Override
|
||||
public List<ProgramCategoryVo> getProgramCategory() {
|
||||
setProgramUrl(WeChatConstants.PUBLIC_API_PROGRAM_CATEGORY);
|
||||
JSONObject jsonObject = get(this.url);
|
||||
JSONArray data = jsonObject.getJSONArray("data");
|
||||
if(null == data || data.size() < 1){
|
||||
throw new CrmebException("请先设置小程序行业信息");
|
||||
}
|
||||
|
||||
return CrmebUtil.jsonToListClass(data.toJSONString(), ProgramCategoryVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序公共模板库
|
||||
* @param page int 页码
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return List<ProgramTempVo>
|
||||
*/
|
||||
@Override
|
||||
public List<ProgramTempVo> getProgramPublicTempList(int page) {
|
||||
|
||||
List<ProgramCategoryVo> programCategory = getProgramCategory();
|
||||
String ids = programCategory.stream().map(s -> s.getId().toString()).distinct().collect(Collectors.joining(","));
|
||||
setProgramUrl(WeChatConstants.PUBLIC_API_PROGRAM_PUBLIC_TEMP);
|
||||
int limit = 30;
|
||||
int start = (page - Constants.NUM_ONE) * limit;
|
||||
JSONObject jsonObject = get(this.url + "&ids=" + ids + "&start=" + start + "&limit=" + limit);
|
||||
JSONArray data = jsonObject.getJSONArray("data");
|
||||
if(null == data || data.size() < Constants.NUM_ONE){
|
||||
return null;
|
||||
}
|
||||
|
||||
return CrmebUtil.jsonToListClass(data.toJSONString(), ProgramTempVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序公共模板关键词库
|
||||
* @param tid 公共模板id
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return List<ProgramTempVo>
|
||||
*/
|
||||
@Override
|
||||
public List<ProgramTempKeywordsVo> getWeChatKeywordsByTid(Integer tid) {
|
||||
setProgramUrl(WeChatConstants.PUBLIC_API_PROGRAM_PUBLIC_TEMP_KEYWORDS);
|
||||
JSONObject jsonObject = get(this.url + "&tid=" + tid);
|
||||
JSONArray data = jsonObject.getJSONArray("data");
|
||||
if(null == data || data.size() < 1){
|
||||
throw new CrmebException("微信没有返回关键词数据");
|
||||
}
|
||||
|
||||
return CrmebUtil.jsonToListClass(data.toJSONString(), ProgramTempKeywordsVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序我的模板添加
|
||||
* @param programAddMyTempVo ProgramAddMyTempVo 添加我的模板参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return String 添加至帐号下的模板id,发送小程序订阅消息时所需
|
||||
*/
|
||||
@Override
|
||||
public String programAddMyTemp(ProgramAddMyTempVo programAddMyTempVo) {
|
||||
setProgramUrl(WeChatConstants.PUBLIC_API_ADD_PROGRAM_TEMPLATE);
|
||||
JSONObject data = post(this.url, JSONObject.toJSONString(programAddMyTempVo));
|
||||
if(StringUtils.isBlank(data.getString("priTmplId"))){
|
||||
throw new CrmebException("微信没有返回模板id");
|
||||
}
|
||||
|
||||
return data.getString("priTmplId");
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序我的模板删除
|
||||
* @param myTempId String 我的模板id
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
*/
|
||||
@Override
|
||||
public void programDeleteMyTemp(String myTempId) {
|
||||
setProgramUrl(WeChatConstants.PUBLIC_API_DELETE_PROGRAM_TEMPLATE);
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("priTmplId", myTempId);
|
||||
post(this.url, map);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取微信用户个人信息
|
||||
@@ -724,6 +818,7 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
map.put("jsApiList", getJsApiList());
|
||||
map.put("debug", debug);
|
||||
map.put("beta", beta);
|
||||
map.put("yzfUrl", systemConfigService.getValueByKey(Constants.CONFIG_KEY_YZF_H5_URL));
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -796,7 +891,7 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
*/
|
||||
public boolean sendPublicTempMessage(TemplateMessageVo templateMessageVo) {
|
||||
try{
|
||||
setUrl(WeChatConstants.PUBLIC_API__PUBLIC_TEMPLATE_MESSAGE_SEND);
|
||||
setUrl(WeChatConstants.PUBLIC_API_PUBLIC_TEMPLATE_MESSAGE_SEND);
|
||||
post(this.url, JSONObject.toJSONString(templateMessageVo));
|
||||
return true;
|
||||
}catch (Exception e){
|
||||
@@ -805,14 +900,14 @@ public class WeChatServiceImpl implements WeChatService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 模板消息发送
|
||||
* 订阅消息发送
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-03
|
||||
* @return List<String>
|
||||
*/
|
||||
public boolean sendProgramTempMessage(TemplateMessageVo templateMessageVo) {
|
||||
try{
|
||||
setUrl(WeChatConstants.PUBLIC_API__PROGRAM_TEMPLATE_MESSAGE_SEND);
|
||||
setProgramUrl(WeChatConstants.PUBLIC_API_PROGRAM_TEMPLATE_MESSAGE_SEND);
|
||||
post(this.url, JSONObject.toJSONString(templateMessageVo));
|
||||
return true;
|
||||
}catch (Exception e){
|
||||
|
||||
@@ -0,0 +1,327 @@
|
||||
package com.zbkj.crmeb.wechat.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.common.PageParamRequest;
|
||||
import com.constants.Constants;
|
||||
import com.exception.CrmebException;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.utils.CrmebUtil;
|
||||
import com.utils.PinYinUtil;
|
||||
import com.utils.RedisUtil;
|
||||
import com.zbkj.crmeb.user.model.UserToken;
|
||||
import com.zbkj.crmeb.user.service.UserTokenService;
|
||||
import com.zbkj.crmeb.wechat.dao.WechatProgramMyTempDao;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramMyTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempRequest;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramMyTempSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramMyTempService;
|
||||
import com.zbkj.crmeb.wechat.vo.ProgramAddMyTempVo;
|
||||
import com.zbkj.crmeb.wechat.vo.ProgramTempKeywordsVo;
|
||||
import com.zbkj.crmeb.wechat.vo.ProgramTemplateMessageVo;
|
||||
import com.zbkj.crmeb.wechat.vo.SendProgramTemplateMessageItemVo;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Mr.Zhang
|
||||
* @Description WechatProgramMyTempServiceImpl 接口实现
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@Service
|
||||
public class WechatProgramMyTempServiceImpl extends ServiceImpl<WechatProgramMyTempDao, WechatProgramMyTemp> implements WechatProgramMyTempService {
|
||||
|
||||
@Resource
|
||||
private WechatProgramMyTempDao dao;
|
||||
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
@Autowired
|
||||
private UserTokenService userTokenService;
|
||||
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
/**
|
||||
* 列表
|
||||
* @param request 请求参数
|
||||
* @param pageParamRequest 分页类参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
* @return List<WechatProgramMyTemp>
|
||||
*/
|
||||
@Override
|
||||
public List<WechatProgramMyTemp> getList(WechatProgramMyTempSearchRequest request, PageParamRequest pageParamRequest) {
|
||||
PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
|
||||
|
||||
//带 WechatProgramMyTemp 类的多条件查询
|
||||
LambdaQueryWrapper<WechatProgramMyTemp> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
||||
//模板标题模糊查询,其余精确查询
|
||||
if(StringUtils.isNotBlank(request.getTitle())){
|
||||
lambdaQueryWrapper.like(WechatProgramMyTemp::getTitle, request.getTitle());
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(request.getTempId())){
|
||||
lambdaQueryWrapper.eq(WechatProgramMyTemp::getTempId, request.getTempId());
|
||||
}
|
||||
|
||||
if(null != request.getStatus()){
|
||||
lambdaQueryWrapper.eq(WechatProgramMyTemp::getStatus, request.getStatus());
|
||||
}
|
||||
|
||||
if(StringUtils.isNotBlank(request.getType())){
|
||||
lambdaQueryWrapper.eq(WechatProgramMyTemp::getType, request.getType());
|
||||
}
|
||||
if(null != request.getId()){
|
||||
lambdaQueryWrapper.eq(WechatProgramMyTemp::getId, request.getId());
|
||||
}
|
||||
|
||||
lambdaQueryWrapper.orderByDesc(WechatProgramMyTemp::getUpdateTime);
|
||||
return dao.selectList(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询小程序我的模板信息
|
||||
* @param id Integer
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@Override
|
||||
public WechatProgramMyTemp info(Integer id) {
|
||||
WechatProgramMyTemp vo = getById(id);
|
||||
if(null == vo){
|
||||
throw new CrmebException("没有找到数据");
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 禁用/禁用小程序我的模板
|
||||
* @param id Integer
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
*/
|
||||
@Override
|
||||
public boolean updateStatus(Integer id, boolean status) {
|
||||
WechatProgramMyTemp vo = info(id);
|
||||
vo.setStatus(status);
|
||||
updateById(vo);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加我的模板
|
||||
* @param wechatProgramMyTempRequest WechatProgramMyTempRequest 添加我的模板参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return String 添加至帐号下的模板id,发送小程序订阅消息时所需
|
||||
*/
|
||||
@Override
|
||||
public boolean create(WechatProgramMyTempRequest wechatProgramMyTempRequest) {
|
||||
WechatProgramMyTemp wechatProgramMyTemp = new WechatProgramMyTemp();
|
||||
BeanUtils.copyProperties(wechatProgramMyTempRequest, wechatProgramMyTemp);
|
||||
|
||||
//数据提交到微信
|
||||
String myTempId = addMyTemp(wechatProgramMyTemp);
|
||||
wechatProgramMyTemp.setTempId(myTempId);
|
||||
formatExtra(wechatProgramMyTemp);
|
||||
return save(wechatProgramMyTemp);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新我的模板 由于微信无更新机制先删除,后添加
|
||||
* @param wechatProgramMyTempRequest WechatProgramMyTempRequest 添加我的模板参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return String 添加至帐号下的模板id,发送小程序订阅消息时所需
|
||||
*/
|
||||
@Override
|
||||
public boolean update(Integer id, WechatProgramMyTempRequest wechatProgramMyTempRequest) {
|
||||
WechatProgramMyTemp vo = getById(id);
|
||||
if(null == vo){
|
||||
throw new CrmebException("没有找到模板信息");
|
||||
}
|
||||
//删除微信已存在的数据
|
||||
deleteMyTemp(vo.getTempId());
|
||||
|
||||
//数据提交到微信
|
||||
WechatProgramMyTemp wechatProgramMyTemp = new WechatProgramMyTemp();
|
||||
BeanUtils.copyProperties(wechatProgramMyTempRequest, wechatProgramMyTemp);
|
||||
wechatProgramMyTemp.setId(id);
|
||||
|
||||
String myTempId = addMyTemp(wechatProgramMyTemp);
|
||||
wechatProgramMyTemp.setTempId(myTempId);
|
||||
formatExtra(wechatProgramMyTemp);
|
||||
|
||||
return updateById(wechatProgramMyTemp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void push(int myTempId, HashMap<String, String> map, Integer userId) {
|
||||
// 查询对应id并且状态启用的模版
|
||||
WechatProgramMyTempSearchRequest pram = new WechatProgramMyTempSearchRequest();
|
||||
// pram.setTempId(tempKey+"");
|
||||
pram.setId(myTempId);
|
||||
pram.setStatus(true);
|
||||
List<WechatProgramMyTemp> existMyTemps = getList(pram, new PageParamRequest());
|
||||
if(null == existMyTemps){
|
||||
return;
|
||||
}
|
||||
WechatProgramMyTemp wechatProgramMyTemp = null;
|
||||
if(existMyTemps.size() >= 1) wechatProgramMyTemp = existMyTemps.get(0);
|
||||
// WechatProgramMyTemp wechatProgramMyTemp = getById(tempKey);
|
||||
if(wechatProgramMyTemp == null || StringUtils.isBlank(wechatProgramMyTemp.getKid())){
|
||||
return;
|
||||
}
|
||||
|
||||
//拿到三方登录绑定的token
|
||||
UserToken UserToken = userTokenService.getTokenByUserId(userId, Constants.THIRD_LOGIN_TOKEN_TYPE_PROGRAM);
|
||||
|
||||
if(null == UserToken || StringUtils.isBlank(UserToken.getToken())){
|
||||
return;
|
||||
}
|
||||
|
||||
ProgramTemplateMessageVo programTemplateMessageVo = new ProgramTemplateMessageVo();
|
||||
programTemplateMessageVo.setTemplate_id(wechatProgramMyTemp.getTempId());
|
||||
|
||||
//组装关键字数据
|
||||
HashMap<String, SendProgramTemplateMessageItemVo> hashMap = new HashMap<>();
|
||||
List<ProgramTempKeywordsVo> programTempKeywordsVoList = JSONArray.parseArray(wechatProgramMyTemp.getExtra(), ProgramTempKeywordsVo.class);
|
||||
for (ProgramTempKeywordsVo programTempKeywordsVo : programTempKeywordsVoList) {
|
||||
if(StringUtils.isBlank(map.get(programTempKeywordsVo.getKey()))){
|
||||
continue;
|
||||
}
|
||||
hashMap.put(programTempKeywordsVo.getSendKey(), new SendProgramTemplateMessageItemVo(map.get(programTempKeywordsVo.getKey())));
|
||||
}
|
||||
|
||||
programTemplateMessageVo.setData(hashMap);
|
||||
programTemplateMessageVo.setTouser(UserToken.getToken());
|
||||
redisUtil.lPush(Constants.WE_CHAT_MESSAGE_KEY_PROGRAM, JSONObject.toJSONString(programTemplateMessageVo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步我的模板到小程序
|
||||
* @param wechatProgramMyTemp WechatProgramMyTemp 需要同步的数据
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return String 添加至帐号下的模板id,发送小程序订阅消息时所需
|
||||
*/
|
||||
@Override
|
||||
@Async
|
||||
public void async(WechatProgramMyTemp wechatProgramMyTemp) {
|
||||
try{
|
||||
//删除微信已存在的数据
|
||||
deleteMyTemp(wechatProgramMyTemp.getTempId());
|
||||
|
||||
//保存数据到微信
|
||||
String myTempId = addMyTemp(wechatProgramMyTemp);
|
||||
wechatProgramMyTemp.setTempId(myTempId);
|
||||
updateById(wechatProgramMyTemp);
|
||||
}catch (Exception e){
|
||||
//异常不处理
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询所有的模板数据
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return String 添加至帐号下的模板id,发送小程序订阅消息时所需
|
||||
*/
|
||||
@Override
|
||||
public List<WechatProgramMyTemp> getAll() {
|
||||
PageParamRequest pageParamRequest = new PageParamRequest();
|
||||
pageParamRequest.setLimit(Constants.EXPORT_MAX_LIMIT);
|
||||
WechatProgramMyTempSearchRequest wechatProgramMyTempSearchRequest = new WechatProgramMyTempSearchRequest();
|
||||
wechatProgramMyTempSearchRequest.setStatus(true);
|
||||
return getList(wechatProgramMyTempSearchRequest, pageParamRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新应用场景
|
||||
* @param id Integer
|
||||
* @param type String
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-28
|
||||
* @return true
|
||||
*/
|
||||
@Override
|
||||
public boolean updateType(Integer id, String type) {
|
||||
WechatProgramMyTemp vo = info(id);
|
||||
vo.setType(type);
|
||||
updateById(vo);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序我的模板添加
|
||||
* @param wechatProgramMyTemp WechatProgramMyTemp 添加我的模板参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
* @return String 添加至帐号下的模板id,发送小程序订阅消息时所需
|
||||
*/
|
||||
private String addMyTemp(WechatProgramMyTemp wechatProgramMyTemp) {
|
||||
ProgramAddMyTempVo programAddMyTempVo = new ProgramAddMyTempVo(
|
||||
wechatProgramMyTemp.getTid(),
|
||||
CrmebUtil.stringToArray(wechatProgramMyTemp.getKid()),
|
||||
wechatProgramMyTemp.getSceneDesc()
|
||||
);
|
||||
String myTempId = weChatService.programAddMyTemp(programAddMyTempVo);
|
||||
if(StringUtils.isBlank(myTempId)){
|
||||
throw new CrmebException("微信没有返回模板id");
|
||||
}
|
||||
|
||||
return myTempId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序我的模板删除
|
||||
* @param myTempId String 我的模板id
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
*/
|
||||
private void deleteMyTemp(String myTempId) {
|
||||
weChatService.programDeleteMyTemp(myTempId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 模板扩展字段 name转拼音,sendKey计算
|
||||
* @param wechatProgramMyTemp WechatProgramMyTemp 数据
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-06-01
|
||||
*/
|
||||
private void formatExtra(WechatProgramMyTemp wechatProgramMyTemp) {
|
||||
if(StringUtils.isBlank(wechatProgramMyTemp.getExtra())){
|
||||
throw new CrmebException("扩展字段必填");
|
||||
}
|
||||
|
||||
HashMap<String, Integer> map = new HashMap<>();
|
||||
List<ProgramTempKeywordsVo> programTempKeywordsVoList = JSONArray.parseArray(wechatProgramMyTemp.getExtra(), ProgramTempKeywordsVo.class);
|
||||
if(programTempKeywordsVoList.size() < Constants.NUM_ONE){
|
||||
throw new CrmebException("扩展字段格式错误");
|
||||
}
|
||||
|
||||
for (ProgramTempKeywordsVo programTempKeywordsVo : programTempKeywordsVoList) {
|
||||
programTempKeywordsVo.setSendKey(programTempKeywordsVo.getRule()+programTempKeywordsVo.getKid());
|
||||
programTempKeywordsVo.setKey(PinYinUtil.toPinyin(programTempKeywordsVo.getName())); //在代码里组织模板数据的时候map填充的key
|
||||
}
|
||||
|
||||
wechatProgramMyTemp.setExtra(JSONObject.toJSONString(programTempKeywordsVoList));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.zbkj.crmeb.wechat.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.common.PageParamRequest;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.utils.DateUtil;
|
||||
import com.zbkj.crmeb.wechat.dao.WechatProgramPublicTempDao;
|
||||
import com.zbkj.crmeb.wechat.model.WechatProgramPublicTemp;
|
||||
import com.zbkj.crmeb.wechat.request.WechatProgramPublicTempSearchRequest;
|
||||
import com.zbkj.crmeb.wechat.service.WeChatService;
|
||||
import com.zbkj.crmeb.wechat.service.WechatProgramPublicTempService;
|
||||
import com.zbkj.crmeb.wechat.vo.ProgramTempVo;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Mr.Zhang
|
||||
* @Description WechatProgramPublicTempServiceImpl 接口实现
|
||||
* @since 2020-08-27
|
||||
*/
|
||||
@Service
|
||||
public class WechatProgramPublicTempServiceImpl extends ServiceImpl<WechatProgramPublicTempDao, WechatProgramPublicTemp> implements WechatProgramPublicTempService {
|
||||
|
||||
@Resource
|
||||
private WechatProgramPublicTempDao dao;
|
||||
|
||||
@Autowired
|
||||
private WeChatService weChatService;
|
||||
|
||||
/**
|
||||
* 列表
|
||||
* @param request 请求参数
|
||||
* @param pageParamRequest 分页类参数
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
* @return List<WechatProgramPublicTemp>
|
||||
*/
|
||||
@Override
|
||||
public List<WechatProgramPublicTemp> getList(WechatProgramPublicTempSearchRequest request, PageParamRequest pageParamRequest) {
|
||||
PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit());
|
||||
|
||||
//带 WechatProgramPublicTemp 类的多条件查询
|
||||
LambdaQueryWrapper<WechatProgramPublicTemp> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
WechatProgramPublicTemp model = new WechatProgramPublicTemp();
|
||||
String title = request.getTitle();
|
||||
request.setTitle(null);
|
||||
BeanUtils.copyProperties(request, model);
|
||||
lambdaQueryWrapper.setEntity(model);
|
||||
|
||||
//模板标题模糊查询,其余精确查询
|
||||
if(StringUtils.isNotBlank(title)){
|
||||
lambdaQueryWrapper.like(WechatProgramPublicTemp::getTitle, title);
|
||||
}
|
||||
lambdaQueryWrapper.orderByDesc(WechatProgramPublicTemp::getUpdateTime);
|
||||
return dao.selectList(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 把微信公众号模板同步到数据库
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
* @return List<WechatProgramPublicTemp>
|
||||
*/
|
||||
@Override
|
||||
public void async() {
|
||||
int page = 1;
|
||||
while (true){
|
||||
List<ProgramTempVo> programPublicTempList = weChatService.getProgramPublicTempList(page);
|
||||
if(null == programPublicTempList || programPublicTempList.size() < 1){
|
||||
return;
|
||||
}
|
||||
WechatProgramPublicTemp wechatProgramPublicTempVo = new WechatProgramPublicTemp();
|
||||
|
||||
for (ProgramTempVo vo : programPublicTempList) {
|
||||
WechatProgramPublicTemp wechatProgramPublicTemp = getVoByTid(vo.getTid());
|
||||
if(null == wechatProgramPublicTemp){
|
||||
BeanUtils.copyProperties(vo, wechatProgramPublicTempVo);
|
||||
save(wechatProgramPublicTempVo);
|
||||
continue;
|
||||
}
|
||||
BeanUtils.copyProperties(vo, wechatProgramPublicTemp);
|
||||
wechatProgramPublicTemp.setUpdateTime(DateUtil.nowDateTime());
|
||||
updateById(wechatProgramPublicTemp);
|
||||
}
|
||||
page++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过模板号查询模板
|
||||
* @param tid Integer 微信模板号
|
||||
* @author Mr.Zhang
|
||||
* @since 2020-08-27
|
||||
* @return WechatProgramPublicTemp
|
||||
*/
|
||||
private WechatProgramPublicTemp getVoByTid(Integer tid) {
|
||||
LambdaQueryWrapper<WechatProgramPublicTemp> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(WechatProgramPublicTemp::getTid, tid);
|
||||
return dao.selectOne(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,280 @@
|
||||
package com.zbkj.crmeb.wechat.service.impl;
|
||||
|
||||
import com.constants.Constants;
|
||||
import com.zbkj.crmeb.wechat.service.TemplateMessageService;
|
||||
import com.zbkj.crmeb.wechat.vo.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @Classname WechatSendMessageForMinService
|
||||
* @Description 根据已申请的模版发送小程序消息
|
||||
* @Date 9/10/20 10:22 上午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Service
|
||||
public class WechatSendMessageForMinService implements com.zbkj.crmeb.wechat.service.WechatSendMessageForMinService {
|
||||
|
||||
@Autowired
|
||||
private TemplateMessageService templateMessageService;
|
||||
|
||||
/**
|
||||
* 发送积分到账消息
|
||||
* @param integral 待发送积分参数
|
||||
* @param userId 接收用户id
|
||||
*/
|
||||
@Override
|
||||
public void sendIntegralMessage(WechatSendMessageForIntegral integral, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("shuoming", integral.getShangPinMingCheng());
|
||||
mapPram.put("dingdanbianhao", integral.getDingDanBianHao());
|
||||
mapPram.put("shangpinmingcheng", integral.getShangPinMingCheng());
|
||||
mapPram.put("zhifujine", integral.getZhiFuJinE());
|
||||
mapPram.put("huodejifen", integral.getHuoDeJiFen());
|
||||
mapPram.put("leijijifen", integral.getLeiJiJiFen());
|
||||
mapPram.put("jiaoyishijian", integral.getJiaoYiShiJian());
|
||||
mapPram.put("beizhu", integral.getBeiZhu());
|
||||
mapPram.put("mendian", integral.getMenDian());
|
||||
mapPram.put("daozhangyuanyin", integral.getDaoZhangYuanYin());
|
||||
templateMessageService.push(4+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款申请通知
|
||||
*
|
||||
* @param reFundNotify 退款申请参数
|
||||
* @param userId 接收者用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendReFundNotifyMessage(WechatSendMessageForReFundNotify reFundNotify, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("dingdanshangpin", reFundNotify.getDingDanShangPin());
|
||||
mapPram.put("dingdanjine", reFundNotify.getDingDanJinE());
|
||||
mapPram.put("xiadanshijian", reFundNotify.getXiaDanShiJian());
|
||||
mapPram.put("dingdanbianhao", reFundNotify.getDingDanBianHao());
|
||||
mapPram.put("shenqingshijian", reFundNotify.getShenQingShiJian());
|
||||
mapPram.put("shangjiamingcheng", reFundNotify.getShangJiaMingCheng());
|
||||
mapPram.put("tuikuanzhuangtai", reFundNotify.getTuiKuanZhuangTai());
|
||||
mapPram.put("beizhu", reFundNotify.getBeiZhu());
|
||||
mapPram.put("tuikuanjine", reFundNotify.getTuiKuanJinE());
|
||||
mapPram.put("tuikuanyuanyin", reFundNotify.getTuiKuanYuanYin());
|
||||
mapPram.put("yonghudianhua", reFundNotify.getYongHuDianHua());
|
||||
mapPram.put("sheibeimingcheng", reFundNotify.getSheBeiMingCheng());
|
||||
templateMessageService.push(5+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款通知
|
||||
*
|
||||
* @param reFundEd 退款参数
|
||||
* @param userId 接收者用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendReFundEdMessage(WechatSendMessageForReFundEd reFundEd, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("tuikuanzhuangtai", reFundEd.getTuiKuanZhuangTai());
|
||||
mapPram.put("tuikuanshangpin", reFundEd.getTuiKuanShangPin());
|
||||
mapPram.put("tuikuanjine", reFundEd.getTuiKuanJinE());
|
||||
mapPram.put("chulishijian", reFundEd.getChuLiShiJian());
|
||||
mapPram.put("tuikuanshuoming", reFundEd.getTuiKuanShuoMing());
|
||||
mapPram.put("tuikuandanhao", reFundEd.getTuiKuaDanHao());
|
||||
mapPram.put("dingdanbianhao", reFundEd.getDingDanBianHao());
|
||||
mapPram.put("xiadanshijian", reFundEd.getXiaDanShiJian());
|
||||
mapPram.put("zhifujine", reFundEd.getZhiFuJinE());
|
||||
mapPram.put("shangpinmingcheng", reFundEd.getShangPinMingChneg());
|
||||
mapPram.put("tuikuanyuanyin", reFundEd.getTuiKuanYuanYin());
|
||||
mapPram.put("mendianmingcheng", reFundEd.getMenDianMingCheng());
|
||||
mapPram.put("beizhu", reFundEd.getBeiZhu());
|
||||
mapPram.put("shebeimingcheng", reFundEd.getSheBeiMingCheng());
|
||||
templateMessageService.push(8+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 付款成功通知
|
||||
*
|
||||
* @param paySuccess 付款成功参数
|
||||
* @param userId 接受者用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendPaySuccessMessage(WechatSendMessageForPaySuccess paySuccess, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("fukuandanhao", paySuccess.getFuKuanDanHao());
|
||||
mapPram.put("fukuanjine", paySuccess.getFuKuanJinE());
|
||||
mapPram.put("fukuanshijian", paySuccess.getFuKuanShiJian());
|
||||
mapPram.put("wenxintishi", paySuccess.getWenXinTiShi());
|
||||
mapPram.put("dingdanjine", paySuccess.getDingDanJinE());
|
||||
mapPram.put("shangpinqingdan", paySuccess.getShangPinQingDan());
|
||||
templateMessageService.push(6+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值成功过通知
|
||||
*
|
||||
* @param topped 充值成功通知
|
||||
* @param userId 接收者Id
|
||||
*/
|
||||
@Override
|
||||
public void sendToppedMessage(WechatSendMessageForTopped topped, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("jiaoyidanhao", topped.getJiaoYiDanHao());
|
||||
mapPram.put("chongzhikahao", topped.getChongZhiKaHao());
|
||||
mapPram.put("chongzhijine", topped.getChongZhiJinE());
|
||||
mapPram.put("zhanghuyue", topped.getZhangHuYuE());
|
||||
mapPram.put("chongzhishijian", topped.getChongZhiShiJian());
|
||||
mapPram.put("zengsongjine", topped.getZengSongJinE());
|
||||
mapPram.put("beizhu", topped.getBeiZhu());
|
||||
mapPram.put("shifujine", topped.getShiFuJinE());
|
||||
mapPram.put("shanghumingcheng", topped.getShangHuMingCheng());
|
||||
mapPram.put("zhifufangshi", topped.getZhiFuFangShi());
|
||||
templateMessageService.push(7+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 配送通知
|
||||
*
|
||||
* @param distrbution 配送参数
|
||||
* @param userId 接收者Id
|
||||
*/
|
||||
@Override
|
||||
public void sendDistrbutionMessage(WechatSendMessageForDistrbution distrbution, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("dingdanbianhao", distrbution.getDingDanBianHao());
|
||||
mapPram.put("peisongrenyuan", distrbution.getPeiSongRenYuan());
|
||||
mapPram.put("lianxidianhua", distrbution.getLianXiDianHua());
|
||||
mapPram.put("dingdanzhuangtai", distrbution.getDingDanZhuangTai());
|
||||
mapPram.put("yujisongdashijian", distrbution.getYuJiSongDaShiJian());
|
||||
mapPram.put("shangpinmingcheng", distrbution.getShangPinMingCheng());
|
||||
mapPram.put("peisongshijian", distrbution.getPeiSongShiJian());
|
||||
templateMessageService.push(15+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 提现通知
|
||||
*
|
||||
* @param cash 提现参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendCashMessage(WechatSendMessageForCash cash, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("tixianzhuangtai", cash.getTiXianZhuangTai());
|
||||
mapPram.put("tixianjine", cash.getTiXianJinE());
|
||||
mapPram.put("tixianzhanghao", cash.getTiXianZhangHao());
|
||||
mapPram.put("tixianshijian", cash.getTiXianShiJian());
|
||||
mapPram.put("tixianshuoming", cash.getTiXianShuoMing());
|
||||
mapPram.put("xingming", cash.getXingMing());
|
||||
mapPram.put("shouxufei", cash.getShouXuFei());
|
||||
mapPram.put("dakuanfangshi", cash.getDaKuanFangShi());
|
||||
mapPram.put("dakuanyuanyin", cash.getDaKuanYuanYin());
|
||||
mapPram.put("tixiandanhao", cash.getTiXianDanHao());
|
||||
mapPram.put("tixianfangshi", cash.getTiXianFangShi());
|
||||
mapPram.put("shibaiyuanyin", cash.getShiBaiYuanYin());
|
||||
mapPram.put("huiyuanmingcheng", cash.getHuiYuanMingCheng());
|
||||
templateMessageService.push(14+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单创建
|
||||
*
|
||||
* @param cateOrder 创建订单参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendCreateOrderMessage(WechatSendMessageForCreateOrder cateOrder, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("dingdanleixing", cateOrder.getDingDanLeiXing());
|
||||
mapPram.put("dingdanshangpin", cateOrder.getDingDanShangPin());
|
||||
mapPram.put("dingdanjine", cateOrder.getDingDanJinE());
|
||||
mapPram.put("dingdanbianhao", cateOrder.getDingDanBianHao());
|
||||
mapPram.put("maijiaxinxi", cateOrder.getMaiJiaXinXi());
|
||||
mapPram.put("dingdanshijian", cateOrder.getDingDanShiJian());
|
||||
mapPram.put("wenxintishi", cateOrder.getWenXinTiShi());
|
||||
mapPram.put("tihuodizhi", cateOrder.getTiHuoDiZhi());
|
||||
mapPram.put("zhifufangshi", cateOrder.getZhiFuFangShi());
|
||||
mapPram.put("shouhuodizhi", cateOrder.getShouHuoDiZHi());
|
||||
templateMessageService.push(9+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 收货通知
|
||||
*
|
||||
* @param getPackage 收货参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendGetPackageMessage(WechatSendMessageForGetPackage getPackage, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("dingdanleixing", getPackage.getDingDanLeiXing());
|
||||
mapPram.put("dingdanshangpin", getPackage.getDingDanShangPin());
|
||||
mapPram.put("maijiaxinxi", getPackage.getMaiJiaXinXi());
|
||||
mapPram.put("shouhuodizhi", getPackage.getShouHuoDiZhi());
|
||||
mapPram.put("shouhuoshijian", getPackage.getShouHuoShiJian());
|
||||
mapPram.put("dingdanbianhao", getPackage.getDingDanBianHao());
|
||||
templateMessageService.push(13+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消订单
|
||||
*
|
||||
* @param orderCancel 取消订单参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendOrderCancelMessage(WechatSendMessageForOrderCancel orderCancel, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("quxiaoyuanyin", orderCancel.getQuXiaoYuanYin());
|
||||
mapPram.put("quxiaoshijian", orderCancel.getQuXiaoShiJian());
|
||||
mapPram.put("mendianziti", orderCancel.getMenDianZiTi());
|
||||
mapPram.put("beizhu", orderCancel.getBeiZhu());
|
||||
mapPram.put("dingdanleixing", orderCancel.getDingDanLeiXing());
|
||||
mapPram.put("shangpinmingcheng", orderCancel.getShangPinMingCheng());
|
||||
mapPram.put("dingdanhao", orderCancel.getDingDanHao());
|
||||
mapPram.put("dingdanzhuangtai", orderCancel.getDingDanZhuangTai());
|
||||
mapPram.put("dingdanjine", orderCancel.getDingDanJinE());
|
||||
mapPram.put("xiadanshijian", orderCancel.getXiaDanShiJian());
|
||||
mapPram.put("shangchangmingcheng", orderCancel.getShangPinMingCheng());
|
||||
mapPram.put("kefudianhua", orderCancel.getKeFuDianHua());
|
||||
mapPram.put("dingdanbianhao", orderCancel.getDingDanBianHao());
|
||||
mapPram.put("mendianmingcheng", orderCancel.getMenDianMingCheng());
|
||||
mapPram.put("lianxifangshi", orderCancel.getLianXiFangShi());
|
||||
templateMessageService.push(12+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发货通知
|
||||
*
|
||||
* @param toPackage 发货通知
|
||||
* @param userId 用户id
|
||||
*/
|
||||
@Override
|
||||
public void sendRePackageMessage(WechatSendMessageForPackage toPackage, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("peisongfangshi", toPackage.getPeiSongFangShi());
|
||||
mapPram.put("dingdanhao", toPackage.getDingDanHao());
|
||||
mapPram.put("shouhuodizhi", toPackage.getShouHuoDiZhi());
|
||||
mapPram.put("kehudianhua", toPackage.getKeHuDianHua());
|
||||
mapPram.put("shouhuoren", toPackage.getShouHuoRen());
|
||||
templateMessageService.push(11+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
|
||||
/**
|
||||
* 核销通知
|
||||
*
|
||||
* @param ver 核销参数
|
||||
* @param userId 用户Id
|
||||
*/
|
||||
@Override
|
||||
public void sendVerSuccessMessage(WechatSendMessageForVerSuccess ver, Integer userId) {
|
||||
HashMap<String, String> mapPram = new HashMap<>();
|
||||
mapPram.put("huodongmingcheng", ver.getHuoDongMingCheng());
|
||||
mapPram.put("shangpinmingcheng", ver.getShangPinMingCheng());
|
||||
mapPram.put("dingdanhao", ver.getDingDanHao());
|
||||
mapPram.put("hexiaoshijian", ver.getHeXiaoShiJian());
|
||||
mapPram.put("hexiaozonge", ver.getHeXiaoZongE());
|
||||
mapPram.put("beizhu", ver.getBeiZhu());
|
||||
mapPram.put("mendian", ver.getMenDian());
|
||||
templateMessageService.push(10+"", mapPram, userId, Constants.PAY_TYPE_WE_CHAT_FROM_PROGRAM);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="ProgramAddMyTempVo对象", description="小程序订阅消息模板添加")
|
||||
public class ProgramAddMyTempVo {
|
||||
public ProgramAddMyTempVo() {
|
||||
}
|
||||
|
||||
public ProgramAddMyTempVo(Integer tid, List<Integer> kidList, String sceneDesc) {
|
||||
this.tid = tid;
|
||||
this.kidList = kidList;
|
||||
this.sceneDesc = sceneDesc;
|
||||
}
|
||||
|
||||
@ApiModelProperty(value = "模板id", required = true)
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "开发者自行组合好的模板关键词列表,关键词顺序可以自由搭配(例如 [3,5,4] 或 [4,5,3]),最多支持5个,最少2个关键词组合", required = true)
|
||||
private List<Integer> kidList;
|
||||
|
||||
@ApiModelProperty(value = "模版类型,2 为一次性订阅,3 为长期订阅")
|
||||
private String sceneDesc;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="ProgramCategoryVo对象", description="小程序行业信息")
|
||||
public class ProgramCategoryVo {
|
||||
@ApiModelProperty(value = "行业id")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "行业名称")
|
||||
private String name;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="ProgramTempKeywordsVo对象", description="小程序关键词")
|
||||
public class ProgramTempKeywordsVo {
|
||||
@ApiModelProperty(value = "关键词 id,选用模板时需要")
|
||||
private Integer kid;
|
||||
|
||||
@ApiModelProperty(value = "关键词内容")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "关键词内容对应的示例")
|
||||
private String example;
|
||||
|
||||
@ApiModelProperty(value = "参数类型")
|
||||
private String rule;
|
||||
|
||||
@ApiModelProperty(value = "代码里组装数据的时候,需要用到这个key")
|
||||
@JsonIgnore
|
||||
private String key;
|
||||
|
||||
@ApiModelProperty(value = "代码里组装数据的时候,需要用到这个key")
|
||||
@JsonIgnore
|
||||
private String sendKey;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="PProgramTempVo对象", description="小程序行业信息")
|
||||
public class ProgramTempVo {
|
||||
@ApiModelProperty(value = "模板id")
|
||||
private Integer tid;
|
||||
|
||||
@ApiModelProperty(value = "模板名称")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "模版类型,2 为一次性订阅,3 为长期订阅")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(value = "行业id")
|
||||
private Integer categoryId;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="SendTemplateMessageVo对象", description="微信模板发送类")
|
||||
public class ProgramTemplateMessageVo {
|
||||
@ApiModelProperty(value = "OPENID", required = true)
|
||||
private String touser;
|
||||
|
||||
@ApiModelProperty(value = "模板ID", required = true)
|
||||
private String template_id;
|
||||
|
||||
@ApiModelProperty(value = "模板跳转链接小程序地址")
|
||||
private String page;
|
||||
|
||||
@ApiModelProperty(value = "发送内容", required = true)
|
||||
private HashMap<String, SendProgramTemplateMessageItemVo> data;
|
||||
|
||||
@ApiModelProperty(value = "跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版")
|
||||
private String miniprogram_state = "formal";
|
||||
|
||||
@ApiModelProperty(value = "进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN\n")
|
||||
private String lang = "zh_CN";
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@ApiModel(value="SendTemplateMessageItemVo对象", description="微信模板发送数据类")
|
||||
public class SendProgramTemplateMessageItemVo {
|
||||
public SendProgramTemplateMessageItemVo() {}
|
||||
public SendProgramTemplateMessageItemVo(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@ApiModelProperty(value = "显示的文字内容", required = true)
|
||||
private String value;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname weChat
|
||||
* @Description 提现结果通知
|
||||
* @Date 9/10/20 2:09 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class WechatSendMessageForCash {
|
||||
public WechatSendMessageForCash(String tiXianZhuangTai, String tiXianJinE, String tiXianZhangHao, String tiXianShiJian, String tiXianShuoMing, String xingMing, String shouXuFei, String daKuanFangShi, String daKuanYuanYin, String tiXianDanHao, String tiXianFangShi, String shiBaiYuanYin, String huiYuanMingCheng) {
|
||||
TiXianZhuangTai = tiXianZhuangTai;
|
||||
TiXianJinE = tiXianJinE;
|
||||
TiXianZhangHao = tiXianZhangHao;
|
||||
TiXianShiJian = tiXianShiJian;
|
||||
TiXianShuoMing = tiXianShuoMing;
|
||||
XingMing = xingMing;
|
||||
ShouXuFei = shouXuFei;
|
||||
DaKuanFangShi = daKuanFangShi;
|
||||
DaKuanYuanYin = daKuanYuanYin;
|
||||
TiXianDanHao = tiXianDanHao;
|
||||
TiXianFangShi = tiXianFangShi;
|
||||
ShiBaiYuanYin = shiBaiYuanYin;
|
||||
HuiYuanMingCheng = huiYuanMingCheng;
|
||||
}
|
||||
|
||||
private String TiXianZhuangTai;
|
||||
private String TiXianJinE;
|
||||
private String TiXianZhangHao;
|
||||
private String TiXianShiJian;
|
||||
private String TiXianShuoMing;
|
||||
private String XingMing;
|
||||
private String ShouXuFei;
|
||||
private String DaKuanFangShi;
|
||||
private String DaKuanYuanYin;
|
||||
private String TiXianDanHao;
|
||||
private String TiXianFangShi;
|
||||
private String ShiBaiYuanYin;
|
||||
private String HuiYuanMingCheng;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname WechatSendMessageForCreateOrder
|
||||
* @Description 新订单提醒
|
||||
* @Date 9/10/20 12:24 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class WechatSendMessageForCreateOrder {
|
||||
public WechatSendMessageForCreateOrder(String dingDanLeiXing, String dingDanShangPin, String dingDanJinE, String dingDanBianHao, String maiJiaXinXi, String dingDanShiJian, String wenXinTiShi, String tiHuoDiZhi, String zhiFuFangShi, String shouHuoDiZHi) {
|
||||
DingDanLeiXing = dingDanLeiXing;
|
||||
DingDanShangPin = dingDanShangPin;
|
||||
DingDanJinE = dingDanJinE;
|
||||
DingDanBianHao = dingDanBianHao;
|
||||
MaiJiaXinXi = maiJiaXinXi;
|
||||
DingDanShiJian = dingDanShiJian;
|
||||
WenXinTiShi = wenXinTiShi;
|
||||
TiHuoDiZhi = tiHuoDiZhi;
|
||||
ZhiFuFangShi = zhiFuFangShi;
|
||||
ShouHuoDiZHi = shouHuoDiZHi;
|
||||
}
|
||||
|
||||
private String DingDanLeiXing;
|
||||
private String DingDanShangPin;
|
||||
private String DingDanJinE;
|
||||
private String DingDanBianHao;
|
||||
private String MaiJiaXinXi;
|
||||
private String DingDanShiJian;
|
||||
private String WenXinTiShi;
|
||||
private String TiHuoDiZhi;
|
||||
private String ZhiFuFangShi;
|
||||
private String ShouHuoDiZHi;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname WechatSendMessageForDistrbution
|
||||
* @Description 配送通知
|
||||
* @Date 9/10/20 2:21 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class WechatSendMessageForDistrbution {
|
||||
public WechatSendMessageForDistrbution(String dingDanBianHao, String peiSongRenYuan, String lianXiDianHua, String dingDanZhuangTai, String yuJiSongDaShiJian, String shangPinMingCheng, String peiSongShiJian) {
|
||||
DingDanBianHao = dingDanBianHao;
|
||||
PeiSongRenYuan = peiSongRenYuan;
|
||||
LianXiDianHua = lianXiDianHua;
|
||||
DingDanZhuangTai = dingDanZhuangTai;
|
||||
YuJiSongDaShiJian = yuJiSongDaShiJian;
|
||||
ShangPinMingCheng = shangPinMingCheng;
|
||||
PeiSongShiJian = peiSongShiJian;
|
||||
}
|
||||
|
||||
private String DingDanBianHao;
|
||||
private String PeiSongRenYuan;
|
||||
private String LianXiDianHua;
|
||||
private String DingDanZhuangTai;
|
||||
private String YuJiSongDaShiJian;
|
||||
private String ShangPinMingCheng;
|
||||
private String PeiSongShiJian;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.zbkj.crmeb.wechat.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Classname WechatSendMessageForGetPackage
|
||||
* @Description 收货通知
|
||||
* @Date 9/10/20 2:07 下午
|
||||
* @Created by stivepeim
|
||||
*/
|
||||
@Data
|
||||
public class WechatSendMessageForGetPackage {
|
||||
public WechatSendMessageForGetPackage(String dingDanLeiXing, String dingDanShangPin, String maiJiaXinXi, String shouHuoDiZhi, String shouHuoShiJian, String dingDanBianHao) {
|
||||
DingDanLeiXing = dingDanLeiXing;
|
||||
DingDanShangPin = dingDanShangPin;
|
||||
MaiJiaXinXi = maiJiaXinXi;
|
||||
ShouHuoDiZhi = shouHuoDiZhi;
|
||||
ShouHuoShiJian = shouHuoShiJian;
|
||||
DingDanBianHao = dingDanBianHao;
|
||||
}
|
||||
|
||||
private String DingDanLeiXing;
|
||||
private String DingDanShangPin;
|
||||
private String MaiJiaXinXi;
|
||||
private String ShouHuoDiZhi;
|
||||
private String ShouHuoShiJian;
|
||||
private String DingDanBianHao;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user