微信登录修复及品牌评测优化
This commit is contained in:
@@ -244,7 +244,7 @@ dubbo:
|
|||||||
bxg:
|
bxg:
|
||||||
shop:
|
shop:
|
||||||
# API_URL: http://192.168.10.113:48080/bxgApp
|
# API_URL: http://192.168.10.113:48080/bxgApp
|
||||||
API_URL: https://5361-27-19-79-51.jp.ngrok.io
|
API_URL: https://eeca-27-19-79-51.jp.ngrok.io
|
||||||
SITE_URL: http://192.168.10.113:48080/bxgApp
|
SITE_URL: http://192.168.10.113:48080/bxgApp
|
||||||
UNI_SITE_URL: http://192.168.10.113:48080/bxgApp
|
UNI_SITE_URL: http://192.168.10.113:48080/bxgApp
|
||||||
ADMIN_API_URL: http://192.168.10.113:48080/bxg
|
ADMIN_API_URL: http://192.168.10.113:48080/bxg
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public class PermissionInterceptor implements HandlerInterceptor {
|
|||||||
Map<String, Claim> map = optionalMap
|
Map<String, Claim> map = optionalMap
|
||||||
.orElseThrow(() -> new UnAuthenticatedException(ApiCode.UNAUTHORIZED));
|
.orElseThrow(() -> new UnAuthenticatedException(ApiCode.UNAUTHORIZED));
|
||||||
|
|
||||||
String uName = map.get("uName").asString();
|
// String uName = map.get("uName").asString();
|
||||||
|
|
||||||
|
|
||||||
boolean valid = this.hasPermission(authCheck.get(), map);
|
boolean valid = this.hasPermission(authCheck.get(), map);
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ import co.yixiang.app.modules.services.OrderSupplyService;
|
|||||||
import cn.iocoder.yudao.framework.security.core.annotations.AuthCheck;
|
import cn.iocoder.yudao.framework.security.core.annotations.AuthCheck;
|
||||||
import co.yixiang.enums.*;
|
import co.yixiang.enums.*;
|
||||||
import co.yixiang.logging.aop.log.AppLog;
|
import co.yixiang.logging.aop.log.AppLog;
|
||||||
import co.yixiang.modules.inform.service.SendMsgService;
|
import co.yixiang.modules.inform.SendMsgService;
|
||||||
import co.yixiang.modules.mp.domain.YxWechatTemplate;
|
import co.yixiang.modules.mp.domain.YxWechatTemplate;
|
||||||
import co.yixiang.modules.mp.service.WeixinPayService;
|
import co.yixiang.modules.mp.service.WeixinPayService;
|
||||||
import co.yixiang.modules.mp.service.YxWechatTemplateService;
|
import co.yixiang.modules.mp.service.YxWechatTemplateService;
|
||||||
|
|||||||
+12
@@ -3,6 +3,7 @@ package co.yixiang.app.modules.product.rest;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.ApiResult;
|
import cn.iocoder.yudao.framework.common.pojo.ApiResult;
|
||||||
import co.yixiang.annotation.AnonymousAccess;
|
import co.yixiang.annotation.AnonymousAccess;
|
||||||
import co.yixiang.modules.store.service.YxStoreBrandService;
|
import co.yixiang.modules.store.service.YxStoreBrandService;
|
||||||
|
import co.yixiang.modules.store.service.dto.YxStoreBrandNameDto;
|
||||||
import co.yixiang.utils.BrandDTO;
|
import co.yixiang.utils.BrandDTO;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.PathVariable;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -41,6 +43,16 @@ public class AppStoreBrandController {
|
|||||||
return ApiResult.ok(yxStoreBrandService.getList());
|
return ApiResult.ok(yxStoreBrandService.getList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品品牌列表按首字母分类
|
||||||
|
*/
|
||||||
|
@AnonymousAccess
|
||||||
|
@GetMapping("/brandByName")
|
||||||
|
@ApiOperation(value = "商品品牌列表",notes = "商品品牌列表")
|
||||||
|
public ApiResult<Map<String,List<YxStoreBrandNameDto>>> getListByName(){
|
||||||
|
return ApiResult.ok(yxStoreBrandService.getListByName());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品品牌列表
|
* 商品品牌列表
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -141,15 +141,23 @@ public class AppAuthService {
|
|||||||
log.info("appId:{},secret:{}",appId,secret);
|
log.info("appId:{},secret:{}",appId,secret);
|
||||||
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
|
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
|
||||||
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
|
WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
|
||||||
|
WxMaPhoneNumberInfo phoneNoInfo=new WxMaPhoneNumberInfo();
|
||||||
WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService()
|
//防止仅有code时候调用解密方法报错
|
||||||
|
if (StringUtils.isBlank(encryptedData)&StringUtils.isBlank(iv)){
|
||||||
|
}else {
|
||||||
|
phoneNoInfo= wxMaService.getUserService()
|
||||||
.getPhoneNoInfo(session.getSessionKey(), encryptedData, iv);
|
.getPhoneNoInfo(session.getSessionKey(), encryptedData, iv);
|
||||||
|
}
|
||||||
YxUser yxUser = this.userService.getOne(Wrappers.<YxUser>lambdaQuery()
|
YxUser yxUser ;
|
||||||
|
//手机号会员
|
||||||
|
yxUser=this.userService.getOne(Wrappers.<YxUser>lambdaQuery()
|
||||||
.eq(YxUser::getPhone,phoneNoInfo.getPhoneNumber()), false);
|
.eq(YxUser::getPhone,phoneNoInfo.getPhoneNumber()), false);
|
||||||
|
//openid会员
|
||||||
|
if (ObjectUtil.isNull(yxUser)){
|
||||||
|
yxUser = this.userService.getOne(Wrappers.<YxUser>lambdaQuery()
|
||||||
|
.eq(YxUser::getOpenId,session.getOpenid()),false);
|
||||||
|
}
|
||||||
if (ObjectUtil.isNull(yxUser)) {
|
if (ObjectUtil.isNull(yxUser)) {
|
||||||
|
|
||||||
//兼容旧系统
|
//兼容旧系统
|
||||||
yxUser = this.userService.getOne(Wrappers.<YxUser>lambdaQuery()
|
yxUser = this.userService.getOne(Wrappers.<YxUser>lambdaQuery()
|
||||||
.eq(YxUser::getUsername, session.getOpenid()), false);
|
.eq(YxUser::getUsername, session.getOpenid()), false);
|
||||||
@@ -161,6 +169,7 @@ public class AppAuthService {
|
|||||||
.username(phoneNoInfo.getPhoneNumber())
|
.username(phoneNoInfo.getPhoneNumber())
|
||||||
.phone(phoneNoInfo.getPhoneNumber())
|
.phone(phoneNoInfo.getPhoneNumber())
|
||||||
.addIp(ip)
|
.addIp(ip)
|
||||||
|
.openId(session.getOpenid())
|
||||||
.lastIp(ip)
|
.lastIp(ip)
|
||||||
.userType(AppFromEnum.ROUNTINE.getValue())
|
.userType(AppFromEnum.ROUNTINE.getValue())
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
+6
-2
@@ -9,6 +9,7 @@
|
|||||||
package co.yixiang.app.modules.wechat.rest.controller;
|
package co.yixiang.app.modules.wechat.rest.controller;
|
||||||
|
|
||||||
import cn.binarywang.wx.miniapp.api.WxMaService;
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||||
|
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||||||
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.ApiResult;
|
import cn.iocoder.yudao.framework.common.pojo.ApiResult;
|
||||||
@@ -94,10 +95,13 @@ public class WxMaUserController {
|
|||||||
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
|
WxMaService wxMaService = WxMaConfiguration.getWxMaService();
|
||||||
String phone = "";
|
String phone = "";
|
||||||
try {
|
try {
|
||||||
String sessionKey = systemConfigService.getData(ShopConstants.ZSW_MINI_SESSION_KET + user.getUid());
|
// String sessionKey = systemConfigService.getData(ShopConstants.ZSW_MINI_SESSION_KET + user.getUid());
|
||||||
|
WxMaJscode2SessionResult session = wxMaService.getUserService()
|
||||||
|
.getSessionInfo(param.getCode());
|
||||||
WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService()
|
WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService()
|
||||||
.getPhoneNoInfo(sessionKey, param.getEncryptedData(), param.getIv());
|
.getPhoneNoInfo(session.getSessionKey(), param.getEncryptedData(), param.getIv());
|
||||||
phone = phoneNoInfo.getPhoneNumber();
|
phone = phoneNoInfo.getPhoneNumber();
|
||||||
|
|
||||||
user.setPhone(phone);
|
user.setPhone(phone);
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ import javax.validation.constraints.NotBlank;
|
|||||||
@Setter
|
@Setter
|
||||||
public class WxPhoneParam {
|
public class WxPhoneParam {
|
||||||
|
|
||||||
|
@NotBlank(message = "code参数缺失")
|
||||||
|
@ApiModelProperty(value = "小程序登陆code")
|
||||||
|
private String code;
|
||||||
|
|
||||||
@ApiModelProperty(value = "小程序完整用户信息的加密数据")
|
@ApiModelProperty(value = "小程序完整用户信息的加密数据")
|
||||||
private String encryptedData;
|
private String encryptedData;
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -222,15 +222,15 @@ public class YxStoreCouponUserServiceImpl extends BaseServiceImpl<YxStoreCouponU
|
|||||||
// Date now = new Date();
|
// Date now = new Date();
|
||||||
// Date endTime = DateUtil.offsetDay(now,storeCoupon.getCouponTime());
|
// Date endTime = DateUtil.offsetDay(now,storeCoupon.getCouponTime());
|
||||||
|
|
||||||
DateTime endTime =new DateTime(storeCoupon.getUseEndTime());
|
// DateTime endTime =new DateTime(storeCoupon.getUseEndTime());
|
||||||
YxStoreCouponUser storeCouponUser = YxStoreCouponUser.builder()
|
YxStoreCouponUser storeCouponUser = YxStoreCouponUser.builder()
|
||||||
.cid(storeCoupon.getId())
|
.cid(storeCoupon.getId())
|
||||||
.uid(uid)
|
.uid(uid)
|
||||||
.couponPrice(storeCoupon.getCouponPrice())
|
.couponPrice(storeCoupon.getCouponPrice())
|
||||||
.couponTitle(storeCoupon.getTitle())
|
.couponTitle(storeCoupon.getTitle())
|
||||||
.useMinPrice(storeCoupon.getUseMinPrice())
|
.useMinPrice(storeCoupon.getUseMinPrice())
|
||||||
.useStartTime(new Date(storeCoupon.getUseStartTime()))
|
.useStartTime(new DateTime(storeCoupon.getUseStartTime()))
|
||||||
.useEndTime(new Date(storeCoupon.getUseEndTime()))
|
.useEndTime(new DateTime(storeCoupon.getUseEndTime()))
|
||||||
.type(CouponGetEnum.GET.getValue())
|
.type(CouponGetEnum.GET.getValue())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -25,7 +25,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
public interface YxStoreCouponIssueMapper extends CoreMapper<YxStoreCouponIssue> {
|
public interface YxStoreCouponIssueMapper extends CoreMapper<YxStoreCouponIssue> {
|
||||||
@Select("<script>select A.cid,A.use_end_time as endTime,A.start_time as startTime,A.cname,A.ctype," +
|
@Select("<script>select A.cid,A.end_time as endTime,A.start_time as startTime,A.cname,A.ctype," +
|
||||||
"A.is_permanent as isPermanent,A.remain_count as remainCount," +
|
"A.is_permanent as isPermanent,A.remain_count as remainCount," +
|
||||||
"A.total_count as totalCount,A.id,B.coupon_price as couponPrice," +
|
"A.total_count as totalCount,A.id,B.coupon_price as couponPrice," +
|
||||||
"B.use_min_price as useMinPrice" +
|
"B.use_min_price as useMinPrice" +
|
||||||
@@ -33,7 +33,7 @@ public interface YxStoreCouponIssueMapper extends CoreMapper<YxStoreCouponIssue>
|
|||||||
"on A.cid = B.id " +
|
"on A.cid = B.id " +
|
||||||
"where A.status =1 <if test='type == 1'> AND B.type = #{type} AND FIND_IN_SET(#{productId},product_id)</if> " +
|
"where A.status =1 <if test='type == 1'> AND B.type = #{type} AND FIND_IN_SET(#{productId},product_id)</if> " +
|
||||||
"<if test='type == 0'> AND B.type in (0,1)</if>" +
|
"<if test='type == 0'> AND B.type in (0,1)</if>" +
|
||||||
" AND ( A.start_time < now() AND A.use_end_time > now() ) " +
|
" AND ( A.start_time < now() AND A.end_time > now() ) " +
|
||||||
" AND A.is_del = 0 AND " +
|
" AND A.is_del = 0 AND " +
|
||||||
"( A.remain_count > 0 OR A.is_permanent = 1 ) ORDER BY B.sort DESC</script>")
|
"( A.remain_count > 0 OR A.is_permanent = 1 ) ORDER BY B.sort DESC</script>")
|
||||||
List<YxStoreCouponIssueQueryVo> selecCoupontList(Page page,@Param("type") Integer type,
|
List<YxStoreCouponIssueQueryVo> selecCoupontList(Page page,@Param("type") Integer type,
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package co.yixiang.modules.evaluation.domain;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class EditableTabs {
|
||||||
|
// {title: '初始栏',
|
||||||
|
// name: '0',
|
||||||
|
// content: '产品展示栏',
|
||||||
|
// configuration:'富文本框'
|
||||||
|
//}
|
||||||
|
private String title;
|
||||||
|
private String name;
|
||||||
|
private String content;
|
||||||
|
private String configuration;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import co.yixiang.modules.product.domain.YxStoreProduct;
|
|||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
@@ -18,13 +19,14 @@ import cn.hutool.core.bean.copier.CopyOptions;
|
|||||||
import javax.validation.constraints.*;
|
import javax.validation.constraints.*;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ssj
|
* @author ssj
|
||||||
* @date 2022-09-21
|
* @date 2022-09-21
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@TableName("yx_evaluation")
|
@TableName(value ="yx_evaluation", autoResultMap = true)
|
||||||
public class YxEvaluation implements Serializable {
|
public class YxEvaluation implements Serializable {
|
||||||
|
|
||||||
/** 评测ID */
|
/** 评测ID */
|
||||||
@@ -48,6 +50,9 @@ public class YxEvaluation implements Serializable {
|
|||||||
@NotNull
|
@NotNull
|
||||||
private String product;
|
private String product;
|
||||||
|
|
||||||
|
/** 图文配置*/
|
||||||
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
|
private ArrayList<EditableTabs> editableTabs;
|
||||||
|
|
||||||
/** 评测总结 */
|
/** 评测总结 */
|
||||||
private String summary;
|
private String summary;
|
||||||
|
|||||||
@@ -8,10 +8,12 @@
|
|||||||
*/
|
*/
|
||||||
package co.yixiang.modules.evaluation.service.dto;
|
package co.yixiang.modules.evaluation.service.dto;
|
||||||
|
|
||||||
|
import co.yixiang.modules.evaluation.domain.EditableTabs;
|
||||||
import co.yixiang.modules.product.domain.YxStoreProduct;
|
import co.yixiang.modules.product.domain.YxStoreProduct;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author hupeng
|
* @author hupeng
|
||||||
@@ -35,6 +37,8 @@ public class YxEvaluationDto implements Serializable {
|
|||||||
/** 关联商品信息*/
|
/** 关联商品信息*/
|
||||||
private String product;
|
private String product;
|
||||||
|
|
||||||
|
/** 图文配置*/
|
||||||
|
private ArrayList<EditableTabs> editableTabs;
|
||||||
|
|
||||||
/** 评测总结 */
|
/** 评测总结 */
|
||||||
private String summary;
|
private String summary;
|
||||||
|
|||||||
+30
-20
@@ -1,11 +1,10 @@
|
|||||||
package co.yixiang.modules.inform.service.impl;
|
package co.yixiang.modules.inform;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.iocoder.yudao.framework.common.exception.YshopException;
|
import cn.iocoder.yudao.framework.common.exception.YshopException;
|
||||||
import co.yixiang.constant.SystemConfigConstants;
|
import co.yixiang.constant.SystemConfigConstants;
|
||||||
import co.yixiang.modules.inform.domin.*;
|
import co.yixiang.modules.inform.domin.*;
|
||||||
import co.yixiang.modules.inform.service.SendMsgService;
|
|
||||||
import co.yixiang.modules.order.service.YxStoreOrderService;
|
import co.yixiang.modules.order.service.YxStoreOrderService;
|
||||||
import co.yixiang.modules.order.service.dto.YxStoreOrderDto;
|
import co.yixiang.modules.order.service.dto.YxStoreOrderDto;
|
||||||
import co.yixiang.modules.shop.service.YxSystemConfigService;
|
import co.yixiang.modules.shop.service.YxSystemConfigService;
|
||||||
@@ -20,7 +19,8 @@ import org.apache.http.impl.client.HttpClients;
|
|||||||
import org.apache.http.util.EntityUtils;
|
import org.apache.http.util.EntityUtils;
|
||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -28,21 +28,17 @@ import java.util.Map;
|
|||||||
|
|
||||||
import org.jsoup.Jsoup;
|
import org.jsoup.Jsoup;
|
||||||
import org.jsoup.nodes.Document;
|
import org.jsoup.nodes.Document;
|
||||||
import org.jsoup.nodes.Node;
|
|
||||||
import org.jsoup.nodes.TextNode;
|
@Component
|
||||||
@Service
|
public class SendMsgService {
|
||||||
public class SendMsgServiceImpl implements SendMsgService {
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private YxStoreOrderService yxStoreOrderService;
|
private YxStoreOrderService yxStoreOrderService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TemplateCard templateCard;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private YxSystemConfigService systemConfigService;
|
private YxSystemConfigService systemConfigService;
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
|
||||||
public String inform(long orderId, int type) {
|
public String inform(long orderId, int type) {
|
||||||
CloseableHttpClient httpClient = HttpClients.createDefault();//实例化对象
|
CloseableHttpClient httpClient = HttpClients.createDefault();//实例化对象
|
||||||
// String webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a2f0f8c9-e406-4f6b-86e4-d6ac9e4df88e";
|
// String webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a2f0f8c9-e406-4f6b-86e4-d6ac9e4df88e";
|
||||||
@@ -97,13 +93,16 @@ public class SendMsgServiceImpl implements SendMsgService {
|
|||||||
arrayList.add(new HorizontalContent().setKeyname("备注说明").setValue(list.get(1).text().substring(5).length() == 0 ? list.get(1).text().substring(5) : "本次退款无备注"));
|
arrayList.add(new HorizontalContent().setKeyname("备注说明").setValue(list.get(1).text().substring(5).length() == 0 ? list.get(1).text().substring(5) : "本次退款无备注"));
|
||||||
arrayList.add(new HorizontalContent().setKeyname("申请时间").setValue(list.get(2).text().substring(5)));
|
arrayList.add(new HorizontalContent().setKeyname("申请时间").setValue(list.get(2).text().substring(5)));
|
||||||
}
|
}
|
||||||
templateCard.setHorizontal_content_list(arrayList);
|
|
||||||
templateCard.setCard_type("text_notice");
|
// templateCard.setHorizontal_content_list(arrayList);
|
||||||
templateCard.setSource(new Souce().setDesc("眼界甄选").setIcon_url("https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0").setDesc_color(0));
|
// templateCard.setCard_type("text_notice");
|
||||||
templateCard.setMain_title(new MainTitle().setTitle(mainTitle).setDesc("订单号:"+orderId));
|
// templateCard.setSource(new Souce().setDesc("眼界甄选").setIcon_url("https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0").setDesc_color(0));
|
||||||
templateCard.setEmphasis_content(new EmphasisContent().setTitle(yxStoreOrderDto.getPayPrice().toString()).setDesc("订单总金额"));
|
// templateCard.setMain_title(new MainTitle().setTitle(mainTitle).setDesc("订单号:"+orderId));
|
||||||
// templateCard.setQuote_area(new QuoteArea().setType(0).setUrl("").setAppid("APPID").setTitle("订单详情").setQuote_text("眼镜*1 0.01"));
|
// templateCard.setEmphasis_content(new EmphasisContent().setTitle(yxStoreOrderDto.getPayPrice().toString()).setDesc("订单总金额"));
|
||||||
templateCard.setSub_title_text("订单类型:"+yxStoreOrderDto.getPinkName());//订单类型
|
//// templateCard.setQuote_area(new QuoteArea().setType(0).setUrl("").setAppid("APPID").setTitle("订单详情").setQuote_text("眼镜*1 0.01"));
|
||||||
|
// templateCard.setSub_title_text("订单类型:"+yxStoreOrderDto.getPinkName());//订单类型
|
||||||
|
// templateCard.setJump_list(arrayList1);
|
||||||
|
// templateCard.setCard_action(new CardAction().setType(1).setUrl(cardActionUrl));
|
||||||
ArrayList<Jump> arrayList1 = new ArrayList<>();
|
ArrayList<Jump> arrayList1 = new ArrayList<>();
|
||||||
//机器人消息跳转地址
|
//机器人消息跳转地址
|
||||||
String cardActionUrl = systemConfigService.getData(SystemConfigConstants.CARD_ACTION_URL);
|
String cardActionUrl = systemConfigService.getData(SystemConfigConstants.CARD_ACTION_URL);
|
||||||
@@ -112,9 +111,20 @@ public class SendMsgServiceImpl implements SendMsgService {
|
|||||||
cardActionUrl = "未配置跳转网址";
|
cardActionUrl = "未配置跳转网址";
|
||||||
}
|
}
|
||||||
arrayList1.add(new Jump().setType(1).setUrl(cardActionUrl).setTitle("前去处理订单"));
|
arrayList1.add(new Jump().setType(1).setUrl(cardActionUrl).setTitle("前去处理订单"));
|
||||||
templateCard.setJump_list(arrayList1);
|
|
||||||
templateCard.setCard_action(new CardAction().setType(1).setUrl(cardActionUrl));
|
return TemplateCard.builder()
|
||||||
return templateCard;
|
.horizontalContentList(arrayList).card_type("text_notice")
|
||||||
|
.source(Souce.builder()
|
||||||
|
.desc("眼界甄选")
|
||||||
|
.icon_url("https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0")
|
||||||
|
.desc_color(0)
|
||||||
|
.build())
|
||||||
|
.main_title(MainTitle.builder().title(mainTitle).desc("订单号:" + orderId).build())
|
||||||
|
.emphasis_content(EmphasisContent.builder().title(yxStoreOrderDto.getPayPrice().toString()).desc("订单总金额").build())
|
||||||
|
.sub_title_text("订单类型:" + yxStoreOrderDto.getPinkName())
|
||||||
|
.jump_list(arrayList1)
|
||||||
|
.card_action(CardAction.builder().type(1).url(cardActionUrl).build())
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,18 @@
|
|||||||
package co.yixiang.modules.inform.domin;
|
package co.yixiang.modules.inform.domin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
|
||||||
/****整体卡片的点击跳转事件,text_notice模版卡片中该字段为必填项
|
/****整体卡片的点击跳转事件,text_notice模版卡片中该字段为必填项
|
||||||
* 卡片跳转类型,1 代表跳转url,2 代表打开小程序。text_notice模版卡片中该字段取值范围为[1,2]
|
* 卡片跳转类型,1 代表跳转url,2 代表打开小程序。text_notice模版卡片中该字段取值范围为[1,2]
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public class CardAction {
|
public class CardAction {
|
||||||
|
|
||||||
/**代表跳转url,2 代表打开小程序*/
|
/**代表跳转url,2 代表打开小程序*/
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
package co.yixiang.modules.inform.domin;
|
package co.yixiang.modules.inform.domin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public class EmphasisContent {
|
public class EmphasisContent {
|
||||||
/** 关键数据样式 "title":"100",
|
/** 关键数据样式 "title":"100",
|
||||||
"desc":"数据含义"*/
|
"desc":"数据含义"*/
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
package co.yixiang.modules.inform.domin;
|
package co.yixiang.modules.inform.domin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public class MainTitle {
|
public class MainTitle {
|
||||||
/** 模版卡片的主要内容 title:一级标题、desc:标题辅助信息*/
|
/** 模版卡片的主要内容 title:一级标题、desc:标题辅助信息*/
|
||||||
private String title;
|
private String title;
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package co.yixiang.modules.inform.domin;
|
package co.yixiang.modules.inform.domin;
|
||||||
|
|
||||||
import io.swagger.models.auth.In;
|
import io.swagger.models.auth.In;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
public class Souce {
|
public class Souce {
|
||||||
/**卡片来源信息模板 icon_url:来源图片url、desc:描述、desc_color:颜色 0(默认) 灰色,1 黑色,2 红色,3 绿色 */
|
/**卡片来源信息模板 icon_url:来源图片url、desc:描述、desc_color:颜色 0(默认) 灰色,1 黑色,2 红色,3 绿色 */
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
package co.yixiang.modules.inform.domin;
|
package co.yixiang.modules.inform.domin;
|
||||||
|
|
||||||
import co.yixiang.modules.inform.domin.*;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@Data
|
@Data
|
||||||
@Service
|
@Builder
|
||||||
public class TemplateCard {
|
public class TemplateCard {
|
||||||
|
|
||||||
/** 模板卡片的模板类型*/
|
/** 模板卡片的模板类型*/
|
||||||
@@ -37,7 +36,7 @@ public class TemplateCard {
|
|||||||
/** 二级标题+文本列表 type:0或不填代表是普通文本,1 代表跳转url,2 代表下载附件,3 代表@员工
|
/** 二级标题+文本列表 type:0或不填代表是普通文本,1 代表跳转url,2 代表下载附件,3 代表@员工
|
||||||
keyname:二级标题、value:内容、url:链接
|
keyname:二级标题、value:内容、url:链接
|
||||||
* */
|
* */
|
||||||
private ArrayList<HorizontalContent> horizontal_content_list;
|
private ArrayList<HorizontalContent> horizontalContentList;
|
||||||
|
|
||||||
/** {
|
/** {
|
||||||
"type":1,
|
"type":1,
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
package co.yixiang.modules.inform.service;
|
|
||||||
|
|
||||||
public interface SendMsgService {
|
|
||||||
//type:0 支付 1:申请退款
|
|
||||||
String inform(long orderId,int type);
|
|
||||||
}
|
|
||||||
+3
-5
@@ -7,14 +7,15 @@
|
|||||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||||
*/
|
*/
|
||||||
package co.yixiang.modules.order.service.impl;
|
package co.yixiang.modules.order.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import co.yixiang.api.BusinessException;
|
|
||||||
import cn.iocoder.yudao.framework.common.exception.YshopException;
|
import cn.iocoder.yudao.framework.common.exception.YshopException;
|
||||||
|
import co.yixiang.api.BusinessException;
|
||||||
import co.yixiang.common.service.impl.BaseServiceImpl;
|
import co.yixiang.common.service.impl.BaseServiceImpl;
|
||||||
import co.yixiang.common.utils.QueryHelpPlus;
|
import co.yixiang.common.utils.QueryHelpPlus;
|
||||||
import co.yixiang.constant.ShopConstants;
|
import co.yixiang.constant.ShopConstants;
|
||||||
@@ -39,7 +40,7 @@ import co.yixiang.modules.cart.domain.YxStoreCart;
|
|||||||
import co.yixiang.modules.cart.service.YxStoreCartService;
|
import co.yixiang.modules.cart.service.YxStoreCartService;
|
||||||
import co.yixiang.modules.cart.service.mapper.StoreCartMapper;
|
import co.yixiang.modules.cart.service.mapper.StoreCartMapper;
|
||||||
import co.yixiang.modules.cart.vo.YxStoreCartQueryVo;
|
import co.yixiang.modules.cart.vo.YxStoreCartQueryVo;
|
||||||
import co.yixiang.modules.inform.service.SendMsgService;
|
import co.yixiang.modules.inform.SendMsgService;
|
||||||
import co.yixiang.modules.order.domain.YxExpress;
|
import co.yixiang.modules.order.domain.YxExpress;
|
||||||
import co.yixiang.modules.order.domain.YxStoreOrder;
|
import co.yixiang.modules.order.domain.YxStoreOrder;
|
||||||
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
|
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
|
||||||
@@ -85,7 +86,6 @@ import co.yixiang.utils.OrderUtil;
|
|||||||
import co.yixiang.utils.RedisUtils;
|
import co.yixiang.utils.RedisUtils;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
@@ -103,8 +103,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Array;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|||||||
+8
-3
@@ -119,6 +119,8 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
|||||||
@Autowired
|
@Autowired
|
||||||
private YxSystemConfigService systemConfigService;
|
private YxSystemConfigService systemConfigService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private YxStoreBrandMapper yxStoreBrandMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 增加库存 减少销量
|
* 增加库存 减少销量
|
||||||
@@ -250,12 +252,12 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
|||||||
}
|
}
|
||||||
//多字段模糊查询分类搜索
|
//多字段模糊查询分类搜索
|
||||||
if (StrUtil.isNotBlank(productQueryParam.getSid()) &&
|
if (StrUtil.isNotBlank(productQueryParam.getSid()) &&
|
||||||
!ShopConstants.ZSW_ZERO.equals(productQueryParam.getBid())) {
|
!ShopConstants.ZSW_ZERO.equals(productQueryParam.getSid())) {
|
||||||
wrapper.eq(YxStoreProduct::getCateId, productQueryParam.getSid());
|
wrapper.eq(YxStoreProduct::getCateId, productQueryParam.getSid());
|
||||||
}
|
}
|
||||||
//品牌搜索
|
//品牌搜索
|
||||||
if (StrUtil.isNotBlank(productQueryParam.getBid()) &&
|
if (StrUtil.isNotBlank(productQueryParam.getBid()) &&
|
||||||
!ShopConstants.ZSW_ZERO.equals(productQueryParam.getSid())) {
|
!ShopConstants.ZSW_ZERO.equals(productQueryParam.getBid())) {
|
||||||
wrapper.eq(YxStoreProduct::getBrandId, productQueryParam.getBid());
|
wrapper.eq(YxStoreProduct::getBrandId, productQueryParam.getBid());
|
||||||
}
|
}
|
||||||
//关键字搜索
|
//关键字搜索
|
||||||
@@ -300,7 +302,10 @@ public class YxStoreProductServiceImpl extends BaseServiceImpl<StoreProductMappe
|
|||||||
IPage<YxStoreProduct> pageList = storeProductMapper.selectPage(pageModel, wrapper);
|
IPage<YxStoreProduct> pageList = storeProductMapper.selectPage(pageModel, wrapper);
|
||||||
|
|
||||||
List<YxStoreProductQueryVo> list = generator.convert(pageList.getRecords(), YxStoreProductQueryVo.class);
|
List<YxStoreProductQueryVo> list = generator.convert(pageList.getRecords(), YxStoreProductQueryVo.class);
|
||||||
|
list.forEach(item->{
|
||||||
|
item.setBrandName(yxStoreBrandMapper.selectById(item.getBrandId()).getBrandName());
|
||||||
|
item.setPic(yxStoreBrandMapper.selectById(item.getBrandId()).getPic());
|
||||||
|
});
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -106,6 +106,8 @@ public interface StoreProductMapper extends CoreMapper<YxStoreProduct> {
|
|||||||
void deleteForwardImg(@Param("id") Long id,@Param("name") String name);
|
void deleteForwardImg(@Param("id") Long id,@Param("name") String name);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Select("SELECT id,spec_type,ot_price,mer_use,description,is_postage,is_sub,is_best,(sales+ficti) as sales,price,is_bargain,vip_price,store_name,stock,keyword,image,cost,is_good,unit_name,is_benefit,update_time,give_integral,is_new,sort,slider_image,is_show,bar_code,postage,code_path,create_time,cate_id,is_seckill,mer_id,temp_id,ficti,store_info,is_del,is_hot,is_integral,integral,browse FROM yx_store_product ${ew.customSqlSegment}")
|
@Select("SELECT id,spec_type,ot_price,mer_use,description,is_postage,is_sub,is_best,(sales+ficti) as sales,price,is_bargain,vip_price,store_name,stock," +
|
||||||
|
"keyword,image,cost,is_good,unit_name,is_benefit,update_time,give_integral,is_new,sort,slider_image,is_show,bar_code,postage,code_path,create_time," +
|
||||||
|
"cate_id,brand_id,is_seckill,mer_id,temp_id,ficti,store_info,is_del,is_hot,is_integral,integral,browse FROM yx_store_product ${ew.customSqlSegment}")
|
||||||
<E extends IPage<YxStoreProduct>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<YxStoreProduct> queryWrapper);
|
<E extends IPage<YxStoreProduct>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<YxStoreProduct> queryWrapper);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,12 @@ public class YxStoreProductQueryVo implements Serializable {
|
|||||||
@ApiModelProperty(value = "品牌id")
|
@ApiModelProperty(value = "品牌id")
|
||||||
private String brandId;
|
private String brandId;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "品牌名字")
|
||||||
|
private String brandName;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "品牌图标")
|
||||||
|
private String pic;
|
||||||
|
|
||||||
@ApiModelProperty(value = "商品价格")
|
@ApiModelProperty(value = "商品价格")
|
||||||
@JsonSerialize(using = BigDecimalSerializer.class)
|
@JsonSerialize(using = BigDecimalSerializer.class)
|
||||||
private BigDecimal price;
|
private BigDecimal price;
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import co.yixiang.enums.OrderInfoEnum;
|
|||||||
import co.yixiang.enums.ShopCommonEnum;
|
import co.yixiang.enums.ShopCommonEnum;
|
||||||
import co.yixiang.exception.ErrorRequestException;
|
import co.yixiang.exception.ErrorRequestException;
|
||||||
import co.yixiang.modules.cart.vo.YxStoreCartQueryVo;
|
import co.yixiang.modules.cart.vo.YxStoreCartQueryVo;
|
||||||
import co.yixiang.modules.inform.service.SendMsgService;
|
import co.yixiang.modules.inform.SendMsgService;
|
||||||
import co.yixiang.modules.order.domain.YxStoreOrder;
|
import co.yixiang.modules.order.domain.YxStoreOrder;
|
||||||
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
|
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
|
||||||
import co.yixiang.modules.order.service.mapper.StoreOrderCartInfoMapper;
|
import co.yixiang.modules.order.service.mapper.StoreOrderCartInfoMapper;
|
||||||
|
|||||||
@@ -11,12 +11,14 @@ import co.yixiang.common.service.BaseService;
|
|||||||
import co.yixiang.domain.PageResult;
|
import co.yixiang.domain.PageResult;
|
||||||
import co.yixiang.modules.store.domain.YxStoreBrand;
|
import co.yixiang.modules.store.domain.YxStoreBrand;
|
||||||
import co.yixiang.modules.store.service.dto.YxStoreBrandDto;
|
import co.yixiang.modules.store.service.dto.YxStoreBrandDto;
|
||||||
|
import co.yixiang.modules.store.service.dto.YxStoreBrandNameDto;
|
||||||
import co.yixiang.modules.store.service.dto.YxStoreBrandQueryCriteria;
|
import co.yixiang.modules.store.service.dto.YxStoreBrandQueryCriteria;
|
||||||
import co.yixiang.utils.BrandDTO;
|
import co.yixiang.utils.BrandDTO;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
/**
|
/**
|
||||||
* @author ssj
|
* @author ssj
|
||||||
@@ -26,7 +28,7 @@ public interface YxStoreBrandService extends BaseService<YxStoreBrand> {
|
|||||||
|
|
||||||
List<BrandDTO> getList();
|
List<BrandDTO> getList();
|
||||||
|
|
||||||
|
Map<String,List<YxStoreBrandNameDto>> getListByName();
|
||||||
/**
|
/**
|
||||||
* 查询数据分页
|
* 查询数据分页
|
||||||
* @param criteria 条件
|
* @param criteria 条件
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package co.yixiang.modules.store.service.dto;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ssj
|
||||||
|
* @date 2022-10-26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class YxStoreBrandNameDto {
|
||||||
|
// 商品品牌表ID
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
// 品牌名称
|
||||||
|
private String brandName;
|
||||||
|
|
||||||
|
// 品牌图标
|
||||||
|
private String pic;
|
||||||
|
}
|
||||||
+2
-3
@@ -6,7 +6,7 @@ import java.io.Serializable;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ssj
|
* @author ssj
|
||||||
* @date 2019-9-17
|
* @date 2022-9-17
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class YxStoreBrandSamllDto implements Serializable {
|
public class YxStoreBrandSamllDto implements Serializable {
|
||||||
@@ -14,8 +14,7 @@ public class YxStoreBrandSamllDto implements Serializable {
|
|||||||
// 商品品牌表ID
|
// 商品品牌表ID
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
|
// 品牌名称
|
||||||
// 分类名称
|
|
||||||
private String brandName;
|
private String brandName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,177 @@
|
|||||||
|
package co.yixiang.modules.store.service.impl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序算法
|
||||||
|
* @author sj
|
||||||
|
* @creation date 2022-10-26
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** 首字母排序分类 **/
|
||||||
|
public class Sort {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字母大小写标识 capital:大写
|
||||||
|
*/
|
||||||
|
private static final String Letter_flag_capital = "capital";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排序的方法
|
||||||
|
* @param list 需要排序的List集合
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Map<String, List<String>> sort(List<String> list){
|
||||||
|
Map<String,List<String>> map = new HashMap<String,List<String>>();
|
||||||
|
List<String> arraylist = new ArrayList<String>();
|
||||||
|
String[] alphatableb =
|
||||||
|
{
|
||||||
|
"A", "B", "C", "D", "E", "F", "G", "H", "I",
|
||||||
|
"J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
|
||||||
|
};
|
||||||
|
for(String a:alphatableb){
|
||||||
|
for(int i=0;i<list.size();i++){//为了排序都返回大写字母
|
||||||
|
if(a.equals(String2AlphaFirst(list.get(i).toString(),Letter_flag_capital))){
|
||||||
|
arraylist.add(list.get(i).toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
map.put(a,arraylist);
|
||||||
|
arraylist=new ArrayList<String>();
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
//字母Z使用了两个标签,这里有27个值
|
||||||
|
//i, u, v都不做声母, 跟随前面的字母
|
||||||
|
private char[] chartable =
|
||||||
|
{
|
||||||
|
'啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈',
|
||||||
|
'击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然',
|
||||||
|
'撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', '座'
|
||||||
|
};
|
||||||
|
|
||||||
|
// 大写字母匹配数组
|
||||||
|
private char[] alphatableb =
|
||||||
|
{
|
||||||
|
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
|
||||||
|
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
|
||||||
|
};
|
||||||
|
|
||||||
|
// 小写字母匹配数组
|
||||||
|
private char[] alphatables =
|
||||||
|
{
|
||||||
|
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
|
||||||
|
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
|
||||||
|
};
|
||||||
|
|
||||||
|
private int[] table = new int[27]; //初始化
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 27; ++i) {
|
||||||
|
table[i] = gbValue(chartable[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主函数,输入字符,得到他的声母,英文字母返回对应的大小写字母,英文字母返回对应的大小写字母
|
||||||
|
* @param ch 字符
|
||||||
|
* @param type 大小写类型标识
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public char Char2Alpha(char ch,String type) {
|
||||||
|
if (ch >= 'a' && ch <= 'z')
|
||||||
|
return (char) (ch - 'a' + 'A');//为了按字母排序先返回大写字母
|
||||||
|
|
||||||
|
if (ch >= 'A' && ch <= 'Z')
|
||||||
|
return ch;
|
||||||
|
int gb = gbValue(ch);
|
||||||
|
if (gb < table[0])
|
||||||
|
return '0';
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 26; ++i) {
|
||||||
|
if (match(i, gb))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i >= 26){
|
||||||
|
return '0';}
|
||||||
|
else{
|
||||||
|
if(Letter_flag_capital.equals(type)){//大写
|
||||||
|
return alphatableb[i];
|
||||||
|
}else{//小写
|
||||||
|
return alphatables[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串
|
||||||
|
* @param SourceStr 目标字符串
|
||||||
|
* @param type 大小写类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String String2Alpha(String SourceStr,String type) {
|
||||||
|
String Result = "";
|
||||||
|
int StrLength = SourceStr.length();
|
||||||
|
int i;
|
||||||
|
try {
|
||||||
|
for (i = 0; i < StrLength; i++) {
|
||||||
|
Result += Char2Alpha(SourceStr.charAt(i),type);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Result = "";
|
||||||
|
}
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据一个包含汉字的字符串返回第一个汉字拼音首字母的字符串
|
||||||
|
* @param SourceStr 目标字符串
|
||||||
|
* @param type 大小写类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String String2AlphaFirst(String SourceStr,String type) {
|
||||||
|
String Result = "";
|
||||||
|
try {
|
||||||
|
Result += Char2Alpha(SourceStr.charAt(0),type);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Result = "";
|
||||||
|
}
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
private boolean match(int i, int gb) {
|
||||||
|
if (gb < table[i])
|
||||||
|
return false;
|
||||||
|
int j = i + 1;
|
||||||
|
|
||||||
|
//字母Z使用了两个标签
|
||||||
|
while (j < 26 && (table[j] == table[i]))
|
||||||
|
++j;
|
||||||
|
if (j == 26)
|
||||||
|
return gb <= table[j];
|
||||||
|
else
|
||||||
|
return gb < table[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取出汉字的编码
|
||||||
|
* @param ch
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int gbValue(char ch) {
|
||||||
|
String str = new String();
|
||||||
|
str += ch;
|
||||||
|
try {
|
||||||
|
byte[] bytes = str.getBytes("GBK");
|
||||||
|
if (bytes.length < 2)
|
||||||
|
return 0;
|
||||||
|
return (bytes[0] << 8 & 0xff00) + (bytes[1] &
|
||||||
|
0xff);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+43
-5
@@ -15,6 +15,7 @@ import co.yixiang.domain.PageResult;
|
|||||||
import co.yixiang.dozer.service.IGenerator;
|
import co.yixiang.dozer.service.IGenerator;
|
||||||
import co.yixiang.enums.ShopCommonEnum;
|
import co.yixiang.enums.ShopCommonEnum;
|
||||||
import co.yixiang.modules.store.domain.YxStoreBrand;
|
import co.yixiang.modules.store.domain.YxStoreBrand;
|
||||||
|
import co.yixiang.modules.store.service.dto.YxStoreBrandNameDto;
|
||||||
import co.yixiang.utils.FileUtil;
|
import co.yixiang.utils.FileUtil;
|
||||||
import co.yixiang.utils.BrandDTO;
|
import co.yixiang.utils.BrandDTO;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@@ -33,12 +34,11 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
//import org.springframework.cache.annotation.CacheEvict;
|
//import org.springframework.cache.annotation.CacheEvict;
|
||||||
//import org.springframework.cache.annotation.Cacheable;
|
//import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
/**
|
/**
|
||||||
* @author ssj
|
* @author ssj
|
||||||
* @date 2022-09-15
|
* @date 2022-09-15
|
||||||
@@ -53,7 +53,7 @@ public class YxStoreBrandServiceImpl extends BaseServiceImpl<YxStoreBrandMapper,
|
|||||||
@Autowired
|
@Autowired
|
||||||
private YxStoreBrandMapper yxStoreBrandMapper;
|
private YxStoreBrandMapper yxStoreBrandMapper;
|
||||||
/**
|
/**
|
||||||
* 获取商家品牌树形列表
|
* 获取商家品牌并根据首字母排序
|
||||||
* @return List
|
* @return List
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@@ -66,6 +66,44 @@ public class YxStoreBrandServiceImpl extends BaseServiceImpl<YxStoreBrandMapper,
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String KEY_SPLIT = "!";
|
||||||
|
public Map<String,List<YxStoreBrandNameDto> > getListByName() {
|
||||||
|
ArrayList list=new ArrayList();
|
||||||
|
this.getList().forEach(item->{
|
||||||
|
list.add(item.getBrandName()+KEY_SPLIT+item.getId()+KEY_SPLIT+item.getPic());
|
||||||
|
});
|
||||||
|
Sort sort=new Sort();
|
||||||
|
Map<String,List<String>> map = sort.sort(list);
|
||||||
|
Map<String, List<YxStoreBrandNameDto>> resultMap = new HashMap<>();
|
||||||
|
// 遍历排序之后的集合
|
||||||
|
for (Map.Entry<String, List<String>> listEntry : map.entrySet()) {
|
||||||
|
for (String value : listEntry.getValue()) {
|
||||||
|
// map中的key是否包含品牌首字母,若存在则把数据处理之后存储到对象里面,然后添加到List里面,
|
||||||
|
// 否则新建key然后再把数据处理之后存储到对象里面,然后添加到List里面
|
||||||
|
if (resultMap.containsKey(listEntry.getKey())) {
|
||||||
|
YxStoreBrandNameDto brandNameDto = new YxStoreBrandNameDto();
|
||||||
|
String [] brandArray = value.split(KEY_SPLIT); // 按:把品牌信息分开
|
||||||
|
brandNameDto.setBrandName(brandArray[0]); // 品牌名称
|
||||||
|
brandNameDto.setId(Integer.valueOf(brandArray[1])); // 品牌id
|
||||||
|
brandNameDto.setPic(brandArray[2]); //品牌图标
|
||||||
|
// brandNameDto.setCarBrandFirstLetter(listEntry.getKey()); // 品牌名称首字母
|
||||||
|
resultMap.get(listEntry.getKey()).add(brandNameDto);
|
||||||
|
|
||||||
|
}else {
|
||||||
|
List<YxStoreBrandNameDto> list2 = new ArrayList<YxStoreBrandNameDto>();
|
||||||
|
YxStoreBrandNameDto brandNameDto = new YxStoreBrandNameDto();
|
||||||
|
String [] brandArray = value.split(KEY_SPLIT); // 按:把品牌名称和id分开
|
||||||
|
brandNameDto.setBrandName(brandArray[0]); // 品牌名称
|
||||||
|
brandNameDto.setId(Integer.valueOf(brandArray[1])); // 品牌id
|
||||||
|
brandNameDto.setPic(brandArray[2]); //品牌图标
|
||||||
|
// brandNameDto.setCarBrandFirstLetter(listEntry.getKey()); // 品牌名称首字母
|
||||||
|
list2.add(brandNameDto);
|
||||||
|
resultMap.put(listEntry.getKey(), list2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
//@Cacheable
|
//@Cacheable
|
||||||
public PageResult<YxStoreBrandDto> queryAll(YxStoreBrandQueryCriteria criteria, Pageable pageable) {
|
public PageResult<YxStoreBrandDto> queryAll(YxStoreBrandQueryCriteria criteria, Pageable pageable) {
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ public class YxUser extends BaseDomain {
|
|||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
|
|
||||||
|
/** 小程序微信openId */
|
||||||
|
private String openId;
|
||||||
|
|
||||||
|
|
||||||
/** 用户密码(跟pwd) */
|
/** 用户密码(跟pwd) */
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package co.yixiang.utils;
|
package co.yixiang.utils;
|
||||||
|
|
||||||
|
import co.yixiang.modules.evaluation.domain.EditableTabs;
|
||||||
import co.yixiang.modules.product.domain.YxStoreProduct;
|
import co.yixiang.modules.product.domain.YxStoreProduct;
|
||||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
@@ -37,6 +38,9 @@ public class EvaluationDTO implements Serializable {
|
|||||||
/** 在列表里面的首页图 */
|
/** 在列表里面的首页图 */
|
||||||
private String homeImage;
|
private String homeImage;
|
||||||
|
|
||||||
|
/**图文配置**/
|
||||||
|
private ArrayList<EditableTabs> editableTabs;
|
||||||
|
|
||||||
|
|
||||||
/** 评测介绍 */
|
/** 评测介绍 */
|
||||||
private String synopsis;
|
private String synopsis;
|
||||||
|
|||||||
Reference in New Issue
Block a user