From fad36483453b1588e69ebf6be87117b47809253d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=87=E8=88=AA?= <653809315@qq.com> Date: Fri, 13 Sep 2024 16:13:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E5=8F=B0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/service/impl/AlbumsServiceImpl.java | 3 +- .../service/impl/ExperimentServiceImpl.java | 20 +- .../validate/album/AlbumSearchValidate.java | 2 + .../com/wyh/common/entity/Experiment.java | 3 + .../java/com/wyh/common/enums/NoticeEnum.java | 5 +- .../plugin/notice/engine/SmsNoticeHandle.java | 177 ++++++++++++++++-- .../java/com/wyh/common/util/MapUtils.java | 59 +++++- .../validator/ExperimentSearchValidate.java | 2 + .../validator/ExperimentUpdateValidate.java | 4 + .../com/wyh/common/validator/SearchVO.java | 13 ++ .../validator/UserGoodsNumUpdateValidate.java | 26 +++ .../wyh/common/vo/OrderDetailResponseVo.java | 3 +- .../java/com/wyh/common/vo/OrderSnDto.java | 10 + .../wyh/common/vo/info/ClassInfoListedVo.java | 4 + .../wyh/front/controller/CartController.java | 19 ++ .../controller/ExperimentController.java | 9 + .../controller/ExperimentPcController.java | 59 ++++++ .../wyh/front/controller/LoginController.java | 13 +- .../wyh/front/controller/OrderController.java | 13 +- .../wyh/front/controller/PayController.java | 20 +- .../com/wyh/front/service/CartService.java | 5 + .../wyh/front/service/IClassInfoService.java | 1 + .../wyh/front/service/IExperimentService.java | 3 + .../com/wyh/front/service/IPayService.java | 2 + .../com/wyh/front/service/OrderService.java | 9 +- .../front/service/impl/CartServiceImpl.java | 33 +++- .../service/impl/ClassInfoServiceImpl.java | 34 ++++ .../service/impl/ExperimentServiceImpl.java | 32 ++++ .../front/service/impl/OrderServiceImpl.java | 71 ++++++- .../front/service/impl/PayServiceImpl.java | 59 +++++- .../front/service/impl/SignServiceImpl.java | 2 +- admin/components.d.ts | 10 - admin/src/views/basic/banner/edit.vue | 2 +- admin/src/views/basic/banner/index.vue | 2 +- admin/src/views/experiment/edit.vue | 112 +++++++---- admin/src/views/goods/edit.vue | 2 +- 36 files changed, 748 insertions(+), 95 deletions(-) create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/SearchVO.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsNumUpdateValidate.java create mode 100644 ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderSnDto.java create mode 100644 ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentPcController.java diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/AlbumsServiceImpl.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/AlbumsServiceImpl.java index bddd5d1..3d7c51c 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/AlbumsServiceImpl.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/AlbumsServiceImpl.java @@ -68,7 +68,8 @@ public class AlbumsServiceImpl implements IAlbumsService { albumMapper.setSearch(queryWrapper, searchValidate, new String[]{ "=:type:int", - "like:keyword@name:str" + "like:keyword@name:str", + "like:name@name:str" }); IPage iPage = albumMapper.selectPage(new Page<>(page, limit), queryWrapper); diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java index f4c227d..0a36d7c 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java @@ -152,6 +152,10 @@ public class ExperimentServiceImpl implements IExperimentService { model.setSort(createValidate.getSort()); model.setIsShow(createValidate.getIsShow()); model.setClassId(createValidate.getClassId()); + ClassInfo classInfo = classInfoMapper.selectById(createValidate.getClassId()); + if (classInfo!=null){ + model.setPid(classInfo.getPid()); + } model.setContent(createValidate.getContent()); int insert = experimentMapper.insert(model); if (insert>0) { @@ -179,9 +183,9 @@ public class ExperimentServiceImpl implements IExperimentService { public void edit(ExperimentUpdateValidate updateValidate) { Experiment model = experimentMapper.selectOne( new QueryWrapper() - .eq("id", updateValidate.getId()) - .eq("is_delete", 0) - .last("limit 1")); + .eq("id", updateValidate.getId()) + .eq("is_delete", 0) + .last("limit 1")); Assert.notNull(model, "数据不存在!"); @@ -195,6 +199,16 @@ public class ExperimentServiceImpl implements IExperimentService { model.setClassId(updateValidate.getClassId()); model.setContent(updateValidate.getContent()); experimentMapper.updateById(model); + if (updateValidate.getGoodsIds() != null) { + goodsExperimentMapper.delete(Wrappers.lambdaQuery().eq(GoodsExperiment:: + getExperimentId, model.getId())); + for (Integer goodsId : updateValidate.getGoodsIds()) { + GoodsExperiment goodsExperiment = new GoodsExperiment(); + goodsExperiment.setExperimentId(model.getId()); + goodsExperiment.setGoodsId(goodsId); + goodsExperimentMapper.insert(goodsExperiment); + } + } } /** diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/album/AlbumSearchValidate.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/album/AlbumSearchValidate.java index e60cccd..0686a86 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/album/AlbumSearchValidate.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/validate/album/AlbumSearchValidate.java @@ -20,5 +20,7 @@ public class AlbumSearchValidate implements Serializable { @ApiModelProperty(value = "关键词") private String keyword; + @ApiModelProperty(value = "文件名称") + private String name; } diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java index e78d772..a2ec5a1 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java @@ -51,4 +51,7 @@ public class Experiment implements Serializable { @ApiModelProperty(value = "实验内容") private String content; + @ApiModelProperty(value = "分类pid") + private Integer pid; + } \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/enums/NoticeEnum.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/enums/NoticeEnum.java index f888b34..5529aee 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/enums/NoticeEnum.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/enums/NoticeEnum.java @@ -21,7 +21,10 @@ public enum NoticeEnum { BIND_MOBILE_CODE(102, "绑定手机验证码"), CHANGE_MOBILE_CODE(103, "变更手机验证码"), FORGOT_PASSWORD_CODE(104, "找回登录密码验证码"), - REGISTER_CODE(105, "登录验证码"); + REGISTER_CODE(105, "注册验证码"), + + SALESMAN_CODE(106, "业务员通知"), + SEND_USER_CODE(107, "用户下单通知"); /** * 构造方法 diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/plugin/notice/engine/SmsNoticeHandle.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/plugin/notice/engine/SmsNoticeHandle.java index 0bdfb52..1f4d0e6 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/plugin/notice/engine/SmsNoticeHandle.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/plugin/notice/engine/SmsNoticeHandle.java @@ -1,13 +1,19 @@ package com.wyh.common.plugin.notice.engine; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.wyh.common.entity.notice.NoticeRecord; +import com.wyh.common.entity.notice.NoticeSetting; import com.wyh.common.enums.NoticeEnum; import com.wyh.common.exception.OperateException; import com.wyh.common.mapper.notice.NoticeRecordMapper; +import com.wyh.common.mapper.notice.NoticeSettingMapper; import com.wyh.common.plugin.notice.vo.NoticeSmsVo; import com.wyh.common.plugin.notice.template.SmsTemplate; import com.wyh.common.plugin.sms.SmsDriver; +import com.wyh.common.plugin.sms.engine.AliSms; import com.wyh.common.util.ConfigUtils; +import com.wyh.common.util.MapUtils; import com.wyh.common.util.SpringUtils; import com.wyh.common.util.StringUtils; @@ -21,9 +27,9 @@ public class SmsNoticeHandle { /** * 发送短信通知 * + * @param noticeSmsVo 基础配置 + * @param smsTemplate 短信模板 * @author wyh - * @param noticeSmsVo 基础配置 - * @param smsTemplate 短信模板 */ public void send(NoticeSmsVo noticeSmsVo, SmsTemplate smsTemplate) { // 基础参数 @@ -34,7 +40,7 @@ public class SmsNoticeHandle { Map params = new LinkedHashMap<>(); if (StringUtils.isNotNull(noticeSmsVo.getParams())) { for (String s : noticeSmsVo.getParams()) { - String[] arr = s.split(":"); + String[] arr = s.split(":"); String key = arr[0].trim(); String val = arr[1].trim(); params.put(key, val); @@ -84,10 +90,10 @@ public class SmsNoticeHandle { /** * 获取短信内容 * - * @author wyh - * @param params 短信参数 + * @param params 短信参数 * @param content 短信模板 * @return String 短信内容 + * @author wyh */ private String getContent(Map params, String content) { for (Map.Entry entry : params.entrySet()) { @@ -101,10 +107,10 @@ public class SmsNoticeHandle { /** * 腾讯云参数处理 * - * @author wyh - * @param params 短信参数 + * @param params 短信参数 * @param content 短信内容 * @return Map + * @author wyh */ private Map getSmsParams(Map params, String content) { String engine = ConfigUtils.get("sms", "default", ""); @@ -116,16 +122,16 @@ public class SmsNoticeHandle { List arr = new LinkedList<>(); for (Map.Entry entry : params.entrySet()) { String search = "\\$\\{" + entry.getKey() + "}"; - if (content.indexOf(search) != 1 && !arr.contains(entry.getKey())) { - arr.add(entry.getKey()); - } + if (content.indexOf(search) != 1 && !arr.contains(entry.getKey())) { + arr.add(entry.getKey()); + } } // 获取变量名称 List arrIndex = new LinkedList<>(); Map arr2 = new LinkedHashMap<>(); if (arr.size() > 0) { - for (String v: arr) { + for (String v : arr) { int k = content.indexOf(v); arrIndex.add(k); arr2.put(k, v); @@ -150,4 +156,153 @@ public class SmsNoticeHandle { return arr4; } + /** + * 发送短信通知(通知类型) + * + * @param mobile 发送人 + * @param name 名称 + * @param order 地址 + * @author wyh + */ + public void sendUserMessage( + String mobile, + String name, + String order + ) { + NoticeSmsVo params = new NoticeSmsVo() + .setScene(NoticeEnum.SALESMAN_CODE.getCode()) + .setMobile(mobile) + .setExpire(900) + .setParams(new String[]{ + "order:" + order, + "name:" + name + }); + NoticeSettingMapper noticeSettingMapper = SpringUtils.getBean(NoticeSettingMapper.class); + NoticeSetting noticeSetting = noticeSettingMapper.selectOne( + new QueryWrapper() + .eq("scene", NoticeEnum.SEND_USER_CODE.getCode()) + .eq("is_delete", 0) + .last("limit 1")); + + if (StringUtils.isNull(noticeSetting)) { + throw new OperateException("消息场景不存在!"); + } + SmsTemplate smsTemplate = new SmsTemplate(); + smsTemplate.setName(noticeSetting.getName()); + smsTemplate.setType(noticeSetting.getType()); + smsTemplate.setParams(noticeSetting.getSmsNotice()); + if (StringUtils.isNotNull(smsTemplate.getStatus()) && smsTemplate.getStatus().equals(1)) { + (new SmsNoticeHandle()).send(params, smsTemplate); + + Map sendParams = new LinkedHashMap<>(); + if (StringUtils.isNotNull(params.getParams())) { + for (String s : params.getParams()) { + String[] arr = s.split(":"); + String key = arr[0].trim(); + String val = arr[1].trim(); + sendParams.put(key, val); + } + } + Map sendConfig = new HashMap<>(); + sendConfig.put("secretKey", "cY7fbU0hvGvUl16ywGn4RUAoiu4zNO"); + sendConfig.put("name", "阿里云短信"); + sendConfig.put("sign", "上海中将科教设备"); + sendConfig.put("alias", "aliyun"); + sendConfig.put("appKey", "LTAI5tAxZbqdxWnf15651D4C"); + Integer sendResult = 0; + String results = ""; + String templateParam = JSON.toJSONString(MapUtils.getSmsParams(sendParams, smsTemplate.getContent())); + + AliSms aliSms = new AliSms(sendConfig); + results = aliSms.setMobile(mobile) + .setTemplateId("SMS_473495009") + .setTemplateParams(templateParam) + .send(); + + sendResult = aliSms.getSendResult(); + + if (sendResult == 2) { + throw new OperateException(results); + } + + } + } + + + /** + * 发送短信通知(通知类型) + * + * @param mobile 发送人 + * @param name 名称 + * @param address 地址 + * @param phone 联系人电话 + * @author wyh + */ + public void sendMessage( + String mobile, + String name, + String address, + String phone + ) { + NoticeSmsVo params = new NoticeSmsVo() + .setScene(NoticeEnum.SALESMAN_CODE.getCode()) + .setMobile(mobile) + .setExpire(900) + .setParams(new String[]{ + "address:" + address, + "name:" + name, + "phone:" + phone + }); + NoticeSettingMapper noticeSettingMapper = SpringUtils.getBean(NoticeSettingMapper.class); + NoticeSetting noticeSetting = noticeSettingMapper.selectOne( + new QueryWrapper() + .eq("scene", NoticeEnum.SALESMAN_CODE.getCode()) + .eq("is_delete", 0) + .last("limit 1")); + + if (StringUtils.isNull(noticeSetting)) { + throw new OperateException("消息场景不存在!"); + } + SmsTemplate smsTemplate = new SmsTemplate(); + smsTemplate.setName(noticeSetting.getName()); + smsTemplate.setType(noticeSetting.getType()); + smsTemplate.setParams(noticeSetting.getSmsNotice()); + if (StringUtils.isNotNull(smsTemplate.getStatus()) && smsTemplate.getStatus().equals(1)) { + (new SmsNoticeHandle()).send(params, smsTemplate); + + Map sendParams = new LinkedHashMap<>(); + if (StringUtils.isNotNull(params.getParams())) { + for (String s : params.getParams()) { + String[] arr = s.split(":"); + String key = arr[0].trim(); + String val = arr[1].trim(); + sendParams.put(key, val); + } + } + Map sendConfig = new HashMap<>(); + sendConfig.put("secretKey", "cY7fbU0hvGvUl16ywGn4RUAoiu4zNO"); + sendConfig.put("name", "阿里云短信"); + sendConfig.put("sign", "上海中将科教设备"); + sendConfig.put("alias", "aliyun"); + sendConfig.put("appKey", "LTAI5tAxZbqdxWnf15651D4C"); + Integer sendResult = 0; + String results = ""; + String templateParam = JSON.toJSONString(MapUtils.getSmsParams(sendParams, smsTemplate.getContent())); + + AliSms aliSms = new AliSms(sendConfig); + results = aliSms.setMobile(mobile) + .setTemplateId("SMS_472995029") + .setTemplateParams(templateParam) + .send(); + + sendResult = aliSms.getSendResult(); + + if (sendResult == 2) { + throw new OperateException(results); + } + + } + } + + } diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/MapUtils.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/MapUtils.java index 60a6719..a3cc31f 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/MapUtils.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/MapUtils.java @@ -5,8 +5,7 @@ import com.alibaba.fastjson2.JSONObject; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * Map工具类 @@ -79,4 +78,60 @@ public class MapUtils { return map2; } + + public static Map getSmsParams(Map params, String content) { + String engine = ConfigUtils.get("sms", "default", ""); + if (!engine.equals("tencent")) { + return params; + } + + // 获取内容变量 + List arr = new LinkedList<>(); + for (Map.Entry entry : params.entrySet()) { + String search = "\\$\\{" + entry.getKey() + "}"; + if (content.indexOf(search) != 1 && !arr.contains(entry.getKey())) { + arr.add(entry.getKey()); + } + } + + // 获取变量名称 + List arrIndex = new LinkedList<>(); + Map arr2 = new LinkedHashMap<>(); + if (arr.size() > 0) { + for (String v: arr) { + int k = content.indexOf(v); + arrIndex.add(k); + arr2.put(k, v); + } + } + + // 从小到大排序 + List arr3 = new LinkedList<>(); + Collections.sort(arrIndex); + for (Integer i : arrIndex) { + arr3.add(arr2.get(i)); + } + + // 取变量对应值 + Map arr4 = new LinkedHashMap<>(); + for (String v : arr3) { + if (StringUtils.isNotNull(params.get(v))) { + arr4.put(params.get(v), ""); + } + } + + return arr4; + } + + public static String getContent(Map params, String content) { + for (Map.Entry entry : params.entrySet()) { + String searchReplace = "\\$\\{" + entry.getKey() + "}"; + content = content.replaceAll(searchReplace, entry.getValue()); + } + + return content; + } + + + } diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java index ec6825f..81889b7 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java @@ -28,6 +28,8 @@ public class ExperimentSearchValidate implements Serializable { @ApiModelProperty(value = "分类id") private Integer classId; + @ApiModelProperty(value = "分类pId") + private Integer pId; @ApiModelProperty(value = "实验内容") private String content; diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java index 04c7830..d3fefcf 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java @@ -7,6 +7,7 @@ import lombok.Data; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** * 实验信息参数 @@ -50,4 +51,7 @@ public class ExperimentUpdateValidate implements Serializable { @ApiModelProperty(value = "实验内容") private String content; + @ApiModelProperty(value = "分类ids") + private List goodsIds ; + } diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/SearchVO.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/SearchVO.java new file mode 100644 index 0000000..6c7be85 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/SearchVO.java @@ -0,0 +1,13 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel("搜索参数") +public class SearchVO { + + @ApiModelProperty("实验id") + private Integer id; +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsNumUpdateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsNumUpdateValidate.java new file mode 100644 index 0000000..a872392 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/UserGoodsNumUpdateValidate.java @@ -0,0 +1,26 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel("用户商品信息创建参数") +public class UserGoodsNumUpdateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "goodsId参数缺失") + @ApiModelProperty(value = "商品id") + private Integer goodsId; + + @NotNull(message = "num参数缺失") + @ApiModelProperty(value = "商品数量") + private Integer num; + + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderDetailResponseVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderDetailResponseVo.java index 27d6f89..02e10bf 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderDetailResponseVo.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderDetailResponseVo.java @@ -1,6 +1,7 @@ package com.wyh.common.vo; +import com.wyh.common.entity.user.UserAddress; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -16,7 +17,7 @@ public class OrderDetailResponseVo { @ApiModelProperty(value = "订单编号") private String sn; @ApiModelProperty(value = "收货地址") - private String address; + private UserAddress address; @ApiModelProperty(value = "创建时间") private String createTime; @ApiModelProperty(value = "用户id") diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderSnDto.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderSnDto.java new file mode 100644 index 0000000..82dfd8d --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/OrderSnDto.java @@ -0,0 +1,10 @@ +package com.wyh.common.vo; + +import lombok.Data; + +@Data +public class OrderSnDto { + + private String orderSn; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/info/ClassInfoListedVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/info/ClassInfoListedVo.java index 6bcbd40..f34581e 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/info/ClassInfoListedVo.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/info/ClassInfoListedVo.java @@ -1,10 +1,12 @@ package com.wyh.common.vo.info; +import com.wyh.common.entity.Experiment; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; +import java.util.List; @Data @ApiModel("班级信息列表Vo") @@ -30,5 +32,7 @@ public class ClassInfoListedVo implements Serializable { @ApiModelProperty(value = "排序编号") private Integer sort; + private List experimentList; + } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java index 294f460..6a707a5 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CartController.java @@ -2,6 +2,7 @@ package com.wyh.front.controller; import com.wyh.common.core.AjaxResult; import com.wyh.common.validator.UserGoodsCreateValidate; +import com.wyh.common.validator.UserGoodsNumUpdateValidate; import com.wyh.common.vo.CartVo; import com.wyh.front.ZJFrontThreadLocal; import com.wyh.front.service.CartService; @@ -54,4 +55,22 @@ public class CartController { } + @GetMapping("updateCheckOne") + @ApiOperation(value = "修改单个商品选中状态") + + public AjaxResult updateCheckOne(@RequestParam(name = "goodsId" ) @ApiParam(value = "商品id") Integer goodsId) { + Integer userId = ZJFrontThreadLocal.getUserId(); + CartVo cartVo = cartService.updateCheckOne(userId, goodsId); + return AjaxResult.success(cartVo); + } + + + @PostMapping("updateNum") + @ApiOperation(value = "修改购物车中商品数量") + public AjaxResult updateNum(@RequestBody @Validated UserGoodsNumUpdateValidate updateValidate) { + Integer userId = ZJFrontThreadLocal.getUserId(); + CartVo cartVo = cartService.updateNum(updateValidate , userId); + return AjaxResult.success(cartVo); + } + } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentController.java index c01a946..96b6456 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentController.java @@ -7,6 +7,7 @@ import com.wyh.common.validator.ExperimentSearchValidate; import com.wyh.common.validator.annotation.IDMust; import com.wyh.common.vo.ExperimentDetailVo; import com.wyh.common.vo.ExperimentListedVo; +import com.wyh.front.service.IClassInfoService; import com.wyh.front.service.IExperimentService; import com.wyh.front.validate.common.PageValidate; import io.swagger.annotations.Api; @@ -29,6 +30,9 @@ public class ExperimentController { + @Resource + IClassInfoService iClassInfoService; + @NotLogin @GetMapping("/list") @ApiOperation(value="实验信息列表") @@ -46,4 +50,9 @@ public class ExperimentController { return AjaxResult.success(detail); } + + + + + } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentPcController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentPcController.java new file mode 100644 index 0000000..f57d5b0 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/ExperimentPcController.java @@ -0,0 +1,59 @@ +package com.wyh.front.controller; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.wyh.common.core.AjaxResult; +import com.wyh.common.validator.SearchVO; +import com.wyh.common.validator.info.ClassInfoSearchValidate; +import com.wyh.front.service.IClassInfoService; +import com.wyh.front.service.IExperimentService; +import com.wyh.front.validate.common.PageValidate; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + + + + + +@RestController +@RequestMapping("front/") +@Api(tags = "(PC端)实验信息") +public class ExperimentPcController { + + + @Resource + IExperimentService iExperimentService; + + + @Resource + IClassInfoService iClassInfoService; + + + @GetMapping("experiment/pc/treeList") + @ApiOperation(value="(pc)实验树状列表") + public AjaxResult list(@Validated PageValidate pageValidate, + @Validated ClassInfoSearchValidate searchValidate) { + JSONArray list = iClassInfoService.listTree(pageValidate, searchValidate); + for (int i = 0; i < list.size(); i++) { + JSONObject obj = list.getJSONObject(i); + System.out.println("obj = " + obj); + } + return AjaxResult.success(list); + } + + @GetMapping("experiment/pc/getGoods") + @ApiOperation(value="(pc)点击获取实验商品") + public AjaxResult getGoods(@Validated PageValidate pageValidate, + @Validated SearchVO searchVO) { + return iExperimentService.getGoods(pageValidate,searchVO); + } + +} + + diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/LoginController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/LoginController.java index 0488e6c..89ac3dc 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/LoginController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/LoginController.java @@ -9,8 +9,8 @@ import com.wyh.common.enums.NoticeEnum; import com.wyh.common.exception.OperateException; import com.wyh.common.mapper.notice.NoticeRecordMapper; import com.wyh.common.plugin.notice.NoticeDriver; +import com.wyh.common.plugin.notice.engine.SmsNoticeHandle; import com.wyh.common.plugin.notice.vo.NoticeSmsVo; -import com.wyh.common.util.HttpUtils; import com.wyh.common.util.StringUtils; import com.wyh.common.util.ToolUtils; import com.wyh.front.ZJFrontThreadLocal; @@ -187,11 +187,14 @@ public class LoginController { return AjaxResult.success(); } - public static void main(String[] args) { - ZJFrontThreadLocal.getUserId(); - String s = HttpUtils.sendGet("https://github.com/modood/Administrative-divisions-of-China/blob/master/dist/pca-code.json"); - System.out.println(s); + @NotLogin + @GetMapping("/putsms") + @ApiOperation(value="ceshi") + public AjaxResult putsms() { + new SmsNoticeHandle().sendUserMessage("17647557909","张三","12345678901"); + + return AjaxResult.success(); } } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/OrderController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/OrderController.java index 60364b1..2381eeb 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/OrderController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/OrderController.java @@ -2,9 +2,13 @@ package com.wyh.front.controller; import com.wyh.common.core.AjaxResult; +import com.wyh.common.core.PageResult; +import com.wyh.common.entity.Order; import com.wyh.common.validator.OrderSearchValidate; +import com.wyh.common.vo.OrderResponseVo; import com.wyh.front.service.OrderService; import com.wyh.front.validate.OrderCreateDto; +import com.wyh.front.validate.common.PageValidate; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; @@ -25,15 +29,16 @@ public class OrderController { @PostMapping("add") @ApiOperation("添加订单") public AjaxResult add(@Validated @RequestBody OrderCreateDto orderCreateDto){ - orderService.add(orderCreateDto); - return AjaxResult.success(); + Order add = orderService.add(orderCreateDto); + return AjaxResult.success(add); } @GetMapping("get") @ApiOperation("获取订单") - public AjaxResult get(@Validated OrderSearchValidate validate){ - return AjaxResult.success(orderService.get(validate)); + public AjaxResult> get(@Validated PageValidate pageValidate, + @Validated OrderSearchValidate validate){ + return AjaxResult.success(orderService.get(pageValidate,validate)); } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/PayController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/PayController.java index 0dc57cf..a62136d 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/PayController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/PayController.java @@ -12,6 +12,7 @@ import com.wyh.common.enums.PaymentEnum; import com.wyh.common.exception.OperateException; import com.wyh.common.mapper.RechargeOrderMapper; import com.wyh.common.plugin.wechat.WxPayDriver; +import com.wyh.common.vo.OrderSnDto; import com.wyh.front.ZJFrontThreadLocal; import com.wyh.front.service.IPayService; import com.wyh.front.validate.PaymentValidate; @@ -30,8 +31,7 @@ import javax.validation.constraints.NotNull; @RestController @RequestMapping("/front/pay") -//@Api(tags = "支付管理") -@ApiIgnore +@Api(tags = "支付管理") public class PayController { @Resource @@ -41,6 +41,7 @@ public class PayController { IPayService iPayService; @GetMapping("/payWay") + @ApiIgnore @ApiOperation("支付方式") public AjaxResult payWay(@Validated @NotNull(message = "from参数丢失") @RequestParam String from, @Validated @NotNull(message = "orderId参数丢失") @RequestParam Integer orderId) { @@ -51,6 +52,7 @@ public class PayController { } @GetMapping("/payStatus") + @ApiIgnore @ApiOperation(("支付状态")) public AjaxResult payStatus(@Validated @NotNull(message = "from参数丢失") @RequestParam String from, @Validated @NotNull(message = "orderId参数丢失") @RequestParam Integer orderId) { @@ -59,6 +61,7 @@ public class PayController { } @PostMapping("/prepay") + @ApiIgnore @ApiOperation("发起支付") public AjaxResult prepay(@Validated @RequestBody PaymentValidate requestObj) { // 接收参数 @@ -102,6 +105,7 @@ public class PayController { @NotLogin @PostMapping("/notifyMnp") + @ApiIgnore @ApiOperation("微信支付回调") public AjaxResult notifyMnp(@RequestBody String jsonData, HttpServletRequest request) throws WxPayException { // 构建签名 @@ -125,4 +129,16 @@ public class PayController { return AjaxResult.success(); } + + + @PostMapping("/deductPoints") + @ApiOperation("扣除积分") + public AjaxResult deductPoints(@RequestBody OrderSnDto orderSnDto){ + Integer userId = ZJFrontThreadLocal.getUserId(); + + iPayService.deductPoints(orderSnDto,userId); + return AjaxResult.success(); + + } + } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java index 2d8100d..ea97c0e 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/CartService.java @@ -1,6 +1,7 @@ package com.wyh.front.service; import com.wyh.common.validator.UserGoodsCreateValidate; +import com.wyh.common.validator.UserGoodsNumUpdateValidate; import com.wyh.common.vo.CartVo; import java.util.List; @@ -15,4 +16,8 @@ public interface CartService { void remove(Integer[] ids); void remove(List ids); + + CartVo updateCheckOne(Integer userId, Integer goodsId); + + CartVo updateNum(UserGoodsNumUpdateValidate updateValidate , Integer userId); } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IClassInfoService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IClassInfoService.java index d14e76c..6698dfd 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IClassInfoService.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IClassInfoService.java @@ -56,4 +56,5 @@ public interface IClassInfoService { */ void del(Integer id); + JSONArray listTree(PageValidate pageValidate, ClassInfoSearchValidate searchValidate); } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java index 7611f31..2739837 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java @@ -1,9 +1,11 @@ package com.wyh.front.service; +import com.wyh.common.core.AjaxResult; import com.wyh.common.core.PageResult; import com.wyh.common.validator.ExperimentCreateValidate; import com.wyh.common.validator.ExperimentSearchValidate; import com.wyh.common.validator.ExperimentUpdateValidate; +import com.wyh.common.validator.SearchVO; import com.wyh.common.vo.ExperimentDetailVo; import com.wyh.common.vo.ExperimentListedVo; import com.wyh.front.validate.common.PageValidate; @@ -57,4 +59,5 @@ public interface IExperimentService { */ void del(Integer id); + AjaxResult getGoods(PageValidate pageValidate, SearchVO searchVO); } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IPayService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IPayService.java index ac82d58..c1c5449 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IPayService.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IPayService.java @@ -1,6 +1,7 @@ package com.wyh.front.service; import com.github.binarywang.wxpay.exception.WxPayException; +import com.wyh.common.vo.OrderSnDto; import com.wyh.front.validate.PaymentValidate; import com.wyh.front.vo.pay.PayStatusVo; import com.wyh.front.vo.pay.PayWayListVo; @@ -49,4 +50,5 @@ public interface IPayService { */ void handlePaidNotify(String attach, String outTradeNo, String transactionId) throws WxPayException; + void deductPoints(OrderSnDto orderSnDto, Integer userId); } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/OrderService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/OrderService.java index 2a2a8bd..995408f 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/OrderService.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/OrderService.java @@ -1,16 +1,17 @@ package com.wyh.front.service; +import com.wyh.common.core.PageResult; +import com.wyh.common.entity.Order; import com.wyh.common.validator.OrderSearchValidate; import com.wyh.common.vo.OrderDetailResponseVo; import com.wyh.common.vo.OrderResponseVo; import com.wyh.front.validate.OrderCreateDto; - -import java.util.List; +import com.wyh.front.validate.common.PageValidate; public interface OrderService { - void add(OrderCreateDto orderCreateDto); + Order add(OrderCreateDto orderCreateDto); - List get(OrderSearchValidate validate); + PageResult get(PageValidate pageValidate, OrderSearchValidate validate); OrderDetailResponseVo getDetail(OrderSearchValidate validate); } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java index 3f1263c..8e22938 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/CartServiceImpl.java @@ -6,6 +6,7 @@ import com.wyh.common.entity.goods.Goods; import com.wyh.common.mapper.UserGoodsMapper; import com.wyh.common.mapper.goods.GoodsMapper; import com.wyh.common.validator.UserGoodsCreateValidate; +import com.wyh.common.validator.UserGoodsNumUpdateValidate; import com.wyh.common.vo.CartVo; import com.wyh.common.vo.GoodsUserVo; import com.wyh.front.ZJFrontThreadLocal; @@ -33,11 +34,19 @@ public class CartServiceImpl implements CartService { @Override public void addCart( List cartCreateValited) { Integer userId = ZJFrontThreadLocal.getUserId(); + for (UserGoodsCreateValidate userGoodsCreateValidate : cartCreateValited) { Integer goodsId = userGoodsCreateValidate.getGoodsId(); Goods goods = goodsMapper.selectById(goodsId); + Integer num = userGoodsCreateValidate.getNum(); Integer isCheck = userGoodsCreateValidate.getIsCheck(); + UserGoods selectOne = userGoodsMapper.selectOne(Wrappers.lambdaQuery().eq(UserGoods::getUserId, userId).eq(UserGoods::getGoodsId, goodsId)); + if (selectOne != null) { + selectOne.setNum(selectOne.getNum() + num); + userGoodsMapper.updateById(selectOne); + continue; + } UserGoods userGoods = new UserGoods(); userGoods.setUserId(userId); userGoods.setGoodsId(goodsId); @@ -89,8 +98,7 @@ public class CartServiceImpl implements CartService { //获取选中商品数量 Integer checkNum = collect.stream() - .filter(obj -> obj.getIsCheck() == 1) - .map(UserGoods::getNum) + .map(UserGoods::getIsCheck) .reduce(Integer::sum) .orElse(0); int totalNum = userGoodsList.stream() @@ -128,6 +136,27 @@ public class CartServiceImpl implements CartService { userGoodsMapper.deleteBatchIds(ids); } + @Override + public CartVo updateCheckOne(Integer userId, Integer goodsId) { + + UserGoods userGoods = userGoodsMapper.selectOne(Wrappers.lambdaQuery().eq(UserGoods::getUserId, userId).eq(UserGoods::getGoodsId, goodsId)); + if (userGoods.getIsCheck().equals(1)) { + userGoods.setIsCheck(0); + } else { + userGoods.setIsCheck(1); + } + userGoodsMapper.updateById(userGoods); + return getCart(); + } + + @Override + public CartVo updateNum(UserGoodsNumUpdateValidate updateValidate, Integer userId) { + UserGoods userGoods = userGoodsMapper.selectOne(Wrappers.lambdaQuery().eq(UserGoods::getUserId, userId).eq(UserGoods::getGoodsId, updateValidate.getGoodsId())); + userGoods.setNum(updateValidate.getNum()); + userGoodsMapper.updateById(userGoods); + return getCart(); + } + private void updateCheckDown(Integer userId) { userGoodsMapper.update(null, Wrappers.lambdaUpdate() .set(UserGoods::getIsCheck, 0) diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ClassInfoServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ClassInfoServiceImpl.java index 6541cc5..fa6bd94 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ClassInfoServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ClassInfoServiceImpl.java @@ -2,8 +2,11 @@ package com.wyh.front.service.impl; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.query.MPJQueryWrapper; +import com.wyh.common.entity.Experiment; import com.wyh.common.entity.info.ClassInfo; +import com.wyh.common.mapper.ExperimentMapper; import com.wyh.common.mapper.info.ClassInfoMapper; import com.wyh.common.util.ListUtils; import com.wyh.common.util.TimeUtils; @@ -32,6 +35,9 @@ public class ClassInfoServiceImpl implements IClassInfoService { @Resource ClassInfoMapper classInfoMapper; + @Resource + ExperimentMapper experimentMapper; + /** * 班级信息列表 * @@ -150,4 +156,32 @@ public class ClassInfoServiceImpl implements IClassInfoService { classInfoMapper.updateById(model); } + @Override + public JSONArray listTree(PageValidate pageValidate, ClassInfoSearchValidate searchValidate) { + MPJQueryWrapper mpjQueryWrapper = new MPJQueryWrapper<>(); + mpjQueryWrapper.selectAll(ClassInfo.class); + mpjQueryWrapper.eq("is_delete", 0); + mpjQueryWrapper.orderByDesc(Arrays.asList("sort", "id")); + + classInfoMapper.setSearch(mpjQueryWrapper, searchValidate, new String[]{ + "like:name:str", + "=:pid:str", + "=:sort:str", + }); + + List array = classInfoMapper.selectJoinList( + ClassInfoListedVo.class, + mpjQueryWrapper); + + for (ClassInfoListedVo item : array) { + item.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + item.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + List experiments = experimentMapper.selectList(Wrappers.lambdaQuery().eq(Experiment::getClassId, item.getId()).eq(Experiment::getIsDelete, 0).eq(Experiment::getPid, item.getPid())); + item.setExperimentList(experiments); + + } + JSONArray jsonArray = JSONArray.parseArray(JSONArray.toJSONString(array)); + + return ListUtils.listToTree(jsonArray, "id", "pid", "children"); + } } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java index dac846d..7d630da 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java @@ -2,8 +2,10 @@ package com.wyh.front.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wyh.common.core.AjaxResult; import com.wyh.common.core.PageResult; import com.wyh.common.entity.Experiment; import com.wyh.common.entity.GoodsExperiment; @@ -17,6 +19,7 @@ import com.wyh.common.util.TimeUtils; import com.wyh.common.validator.ExperimentCreateValidate; import com.wyh.common.validator.ExperimentSearchValidate; import com.wyh.common.validator.ExperimentUpdateValidate; +import com.wyh.common.validator.SearchVO; import com.wyh.common.vo.ExperimentDetailVo; import com.wyh.common.vo.ExperimentListedVo; import com.wyh.common.vo.goods.GoodsListedVo; @@ -76,6 +79,7 @@ public class ExperimentServiceImpl implements IExperimentService { "=:sort:int", "=:isShow@is_show:int", "=:classId@class_id:int", + "=:PId@pid:int", "=:content:str", }); @@ -151,6 +155,10 @@ public class ExperimentServiceImpl implements IExperimentService { model.setExperimentVideo(createValidate.getExperimentVideo()); model.setSort(createValidate.getSort()); model.setIsShow(createValidate.getIsShow()); + ClassInfo classInfo = classInfoMapper.selectById(createValidate.getClassId()); + if (classInfo!=null){ + model.setPid(classInfo.getPid()); + } model.setClassId(createValidate.getClassId()); model.setContent(createValidate.getContent()); experimentMapper.insert(model); @@ -205,4 +213,28 @@ public class ExperimentServiceImpl implements IExperimentService { experimentMapper.updateById(model); } + @Override + public AjaxResult getGoods(PageValidate pageValidate, SearchVO searchVO) { + Integer page = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (searchVO.getId() != null) { + queryWrapper.like("id", searchVO.getId()); + } + List goodsExperiments = goodsExperimentMapper.selectList(queryWrapper); + if (CollectionUtils.isNotEmpty(goodsExperiments)) { + List collect = goodsExperiments.stream().map(GoodsExperiment::getGoodsId).collect(Collectors.toList()); + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.in("id", collect); + Page page1 = new Page<>(page, limit); + IPage iPage = goodsMapper.selectPage(page1, queryWrapper1); + return AjaxResult.success(iPage); + } +// goodsMapper.selectPage(new Page<>(page, limit), queryWrapper); + + + + return null; + } + } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/OrderServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/OrderServiceImpl.java index 021839f..fc40e2b 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/OrderServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/OrderServiceImpl.java @@ -1,17 +1,23 @@ package com.wyh.front.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wyh.common.core.PageResult; import com.wyh.common.entity.GoodsOrder; import com.wyh.common.entity.Order; +import com.wyh.common.entity.Salesman; import com.wyh.common.entity.goods.Goods; import com.wyh.common.entity.user.User; import com.wyh.common.entity.user.UserAddress; import com.wyh.common.mapper.GoodsOrderMapper; import com.wyh.common.mapper.OrderMapper; +import com.wyh.common.mapper.SalesmanMapper; import com.wyh.common.mapper.goods.GoodsMapper; import com.wyh.common.mapper.user.UserAddressMapper; import com.wyh.common.mapper.user.UserMapper; +import com.wyh.common.plugin.notice.engine.SmsNoticeHandle; import com.wyh.common.util.TimeUtils; import com.wyh.common.util.ToolUtils; import com.wyh.common.validator.OrderSearchValidate; @@ -22,6 +28,7 @@ import com.wyh.front.ZJFrontThreadLocal; import com.wyh.front.service.OrderService; import com.wyh.front.validate.OrderCreateDto; import com.wyh.front.validate.OrderGoodsDto; +import com.wyh.front.validate.common.PageValidate; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -52,8 +59,13 @@ public class OrderServiceImpl implements OrderService { @Resource private GoodsOrderMapper goodsOrderMapper; + + @Resource + private SalesmanMapper salesmanMapper; + + @Override - public void add(OrderCreateDto orderCreateDto) { + public Order add(OrderCreateDto orderCreateDto) { Integer userId = ZJFrontThreadLocal.getUserId(); Integer source = orderCreateDto.getSource(); String sn = "order" + ToolUtils.randomString(16); @@ -84,7 +96,7 @@ public class OrderServiceImpl implements OrderService { } User user = userMapper.selectById(userId); Assert.isTrue(user != null, "用户不存在"); - Assert.isTrue(user.getMoney().compareTo(totalPrice) >= 0, "余额不足"); +// Assert.isTrue(user.getMoney().compareTo(totalPrice) >= 0, "余额不足"); Order order = new Order(); order.setSn(sn); order.setUserId(userId); @@ -95,22 +107,65 @@ public class OrderServiceImpl implements OrderService { order.setTotalPrice(totalPrice); order.setAdId(orderCreateDto.getAdId()); - orderMapper.insert(order); + int insert = orderMapper.insert(order); + if (insert <= 0) { + throw new RuntimeException("创建订单失败"); + } + new SmsNoticeHandle().sendUserMessage(user.getMobile(),user.getNickname(),sn); + + Assert.isTrue(insert > 0, "创建订单失败"); + String mobile = ""; + String name = ""; + String address = ""; + List salesmen = salesmanMapper.selectList(null); + UserAddress userAddress = addressMapper.selectById(orderCreateDto.getAdId()); + for (Salesman salesman : salesmen) { + if(salesman.getAddress().contains(userAddress.getCity()) || salesman.getAddress().contains(userAddress.getProvince())) { + mobile = salesman.getMobile(); + name = salesman.getName(); + address = userAddress.getArea() + userAddress.getAddress(); + } + } + + // 发送短信给业务员 + new SmsNoticeHandle().sendMessage(mobile, name , address , user.getMobile()); + + +// NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper() +// .eq("account", smsValidate.getMobile()) +// .eq("scene", smsValidate.getScene()) +// .eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK)) +// .orderByDesc("id") +// .last("limit 1")); +// +// if (StringUtils.isNotNull(noticeRecord)) { +// if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){ +// throw new OperateException("操作频繁,请稍后再试!"); +// } +// } +// + return order; } @Override - public List get(OrderSearchValidate validate) { + public PageResult get(PageValidate pageValidate, OrderSearchValidate validate) { + Integer pageNo = pageValidate.getPageNo(); + Integer pageSize = pageValidate.getPageSize(); + LambdaQueryWrapper orderLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (validate.getStatus() != null && validate.getStatus() != 0) { orderLambdaQueryWrapper.eq(Order::getStatus, validate.getStatus()); } Integer userId = ZJFrontThreadLocal.getUserId(); orderLambdaQueryWrapper.eq(Order::getUserId, userId); - List orders = orderMapper.selectList(orderLambdaQueryWrapper); + orderLambdaQueryWrapper.orderByDesc(Order::getCreateTime); + IPage iPage = orderMapper.selectPage( new Page<>(pageNo, pageSize), orderLambdaQueryWrapper); + + List orders = iPage.getRecords(); List orderResponseVos = new ArrayList<>(); if (CollectionUtils.isEmpty(orders)) { - return orderResponseVos; + return new PageResult<>(); } List orderSns = orders.stream().map(Order::getSn).collect(Collectors.toList()); List goodsOrders = goodsOrderMapper.selectList(Wrappers.lambdaQuery().in(GoodsOrder::getOrderSn, orderSns)); @@ -134,7 +189,7 @@ public class OrderServiceImpl implements OrderService { } orderResponseVos.add(orderResponseVo) ; } - return orderResponseVos; + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), orderResponseVos); } @Override @@ -154,7 +209,7 @@ public class OrderServiceImpl implements OrderService { orderDetailResponseVo.setStatus(order.getStatus()); orderDetailResponseVo.setUserId(order.getUserId()); orderDetailResponseVo.setCreateTime(TimeUtils.timestampToDate(order.getCreateTime())); - orderDetailResponseVo.setAddress(userAddresses.getAddress()); + orderDetailResponseVo.setAddress(userAddresses); orderDetailResponseVo.setMobile(user.getMobile()); orderDetailResponseVo.setNickName(user.getNickname()); diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/PayServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/PayServiceImpl.java index 7cdc884..de6ba5f 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/PayServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/PayServiceImpl.java @@ -1,7 +1,11 @@ package com.wyh.front.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.wyh.common.entity.GoodsOrder; +import com.wyh.common.entity.Order; import com.wyh.common.entity.RechargeOrder; +import com.wyh.common.entity.UserGoods; import com.wyh.common.entity.setting.DevPayConfig; import com.wyh.common.entity.setting.DevPayWay; import com.wyh.common.entity.user.User; @@ -11,34 +15,49 @@ import com.wyh.common.enums.LogMoneyEnum; import com.wyh.common.enums.PaymentEnum; import com.wyh.common.exception.OperateException; import com.wyh.common.exception.PaymentException; -import com.wyh.common.mapper.log.LogMoneyMapper; +import com.wyh.common.mapper.GoodsOrderMapper; +import com.wyh.common.mapper.OrderMapper; import com.wyh.common.mapper.RechargeOrderMapper; +import com.wyh.common.mapper.UserGoodsMapper; +import com.wyh.common.mapper.log.LogMoneyMapper; import com.wyh.common.mapper.setting.DevPayConfigMapper; import com.wyh.common.mapper.setting.DevPayWayMapper; import com.wyh.common.mapper.user.UserAuthMapper; import com.wyh.common.mapper.user.UserMapper; import com.wyh.common.plugin.wechat.WxPayDriver; import com.wyh.common.plugin.wechat.request.PaymentRequestV3; +import com.wyh.common.util.StringUtils; +import com.wyh.common.util.TimeUtils; +import com.wyh.common.util.UrlUtils; +import com.wyh.common.vo.OrderSnDto; import com.wyh.front.service.IPayService; import com.wyh.front.validate.PaymentValidate; import com.wyh.front.vo.pay.PayStatusVo; import com.wyh.front.vo.pay.PayWayInfoVo; import com.wyh.front.vo.pay.PayWayListVo; -import com.wyh.common.util.StringUtils; -import com.wyh.common.util.TimeUtils; -import com.wyh.common.util.UrlUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; @Slf4j @Service public class PayServiceImpl implements IPayService { + + @Resource + OrderMapper orderMapper; + + @Resource + GoodsOrderMapper goodsOrderMapper; + + @Resource + UserGoodsMapper userGoodsMapper; + @Resource UserMapper userMapper; @@ -206,6 +225,31 @@ public class PayServiceImpl implements IPayService { } } + @Override + public void deductPoints(OrderSnDto orderSnDto, Integer userId) { + Order order = orderMapper.selectOne(new QueryWrapper().eq("sn", orderSnDto.getOrderSn()).eq("user_id", userId)); + Assert.notNull(order, "订单不存在"); + User user = userMapper.selectById(userId); + Assert.notNull(user, "用户不存在"); + + BigDecimal money = user.getMoney(); + Assert.isTrue(money.compareTo(order.getTotalPrice()) >= 0, "余额不足"); + + + user.setMoney(money.subtract(order.getTotalPrice())); + + userMapper.updateById(user); + + List goodsOrders = goodsOrderMapper.selectList(Wrappers.lambdaQuery().eq(GoodsOrder::getOrderSn, order.getSn())); + for (GoodsOrder goodsOrder : goodsOrders) { + userGoodsMapper.delete(Wrappers.lambdaQuery().eq(UserGoods::getUserId, userId).eq(UserGoods::getGoodsId, goodsOrder.getGoodsId())); + } + + + //Todo:修改订单支付状态 + + } + /** * 余额充值回调 * @@ -250,4 +294,11 @@ public class PayServiceImpl implements IPayService { } } + public static void main(String[] args) { + + BigDecimal totalScope = new BigDecimal("1000"); + Assert.isTrue(totalScope.compareTo(new BigDecimal("1001")) >= 0, "余额不足"); + } + + } diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/SignServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/SignServiceImpl.java index ea70c19..d8a8553 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/SignServiceImpl.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/SignServiceImpl.java @@ -116,7 +116,7 @@ public class SignServiceImpl implements SignService { } result.sort((a, b) -> a.getDate().compareTo(b.getDate())); signLogVo.setSignDateList(result); - int asInt = signLogs.stream().mapToInt(SignLog::getContinueNums).max().getAsInt(); + int asInt = signLogs.stream().mapToInt(SignLog::getContinueNums).max() .orElse(0); signLogVo.setContinuousDays(asInt); return signLogVo; } diff --git a/admin/components.d.ts b/admin/components.d.ts index 1610e57..c3e7bba 100644 --- a/admin/components.d.ts +++ b/admin/components.d.ts @@ -7,14 +7,11 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { AppLink: typeof import('./src/components/app-link/index.vue')['default'] ColorPicker: typeof import('./src/components/color-picker/index.vue')['default'] - CustomLink: typeof import('./src/components/link/custom-link.vue')['default'] DaterangePicker: typeof import('./src/components/daterange-picker/index.vue')['default'] DelWrap: typeof import('./src/components/del-wrap/index.vue')['default'] DictValue: typeof import('./src/components/dict-value/index.vue')['default'] Editor: typeof import('./src/components/editor/index.vue')['default'] ElAlert: typeof import('element-plus/es')['ElAlert'] - ElAmap: typeof import('element-plus/es')['ElAmap'] - ElAmapMarker: typeof import('element-plus/es')['ElAmapMarker'] ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete'] ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] @@ -52,7 +49,6 @@ declare module '@vue/runtime-core' { ElRow: typeof import('element-plus/es')['ElRow'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElSelect: typeof import('element-plus/es')['ElSelect'] - ElStatistic: typeof import('element-plus/es')['ElStatistic'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTable: typeof import('element-plus/es')['ElTable'] @@ -64,7 +60,6 @@ declare module '@vue/runtime-core' { ElTree: typeof import('element-plus/es')['ElTree'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElUpload: typeof import('element-plus/es')['ElUpload'] - File: typeof import('./src/components/material/file.vue')['default'] FooterBtns: typeof import('./src/components/footer-btns/index.vue')['default'] Icon: typeof import('./src/components/icon/index.vue')['default'] IconPicker: typeof import('./src/components/icon/picker.vue')['default'] @@ -75,7 +70,6 @@ declare module '@vue/runtime-core' { LinkPicker: typeof import('./src/components/link/picker.vue')['default'] LinkShopPages: typeof import('./src/components/link/shop-pages.vue')['default'] Loading: typeof import('element-plus/es')['ElLoadingDirective'] - MapContainer: typeof import('./src/components/map/MapContainer.vue')['default'] MapMapContainer: typeof import('./src/components/map/MapContainer.vue')['default'] Material: typeof import('./src/components/material/index.vue')['default'] MaterialFile: typeof import('./src/components/material/file.vue')['default'] @@ -83,14 +77,10 @@ declare module '@vue/runtime-core' { MaterialPreview: typeof import('./src/components/material/preview.vue')['default'] OverflowTooltip: typeof import('./src/components/overflow-tooltip/index.vue')['default'] Pagination: typeof import('./src/components/pagination/index.vue')['default'] - Picker: typeof import('./src/components/icon/picker.vue')['default'] PopoverInput: typeof import('./src/components/popover-input/index.vue')['default'] Popup: typeof import('./src/components/popup/index.vue')['default'] - Preview: typeof import('./src/components/material/preview.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] - ShopPages: typeof import('./src/components/link/shop-pages.vue')['default'] - SvgIcon: typeof import('./src/components/icon/svg-icon.vue')['default'] Upload: typeof import('./src/components/upload/index.vue')['default'] VideoPlayer: typeof import('./src/components/video-player/index.vue')['default'] } diff --git a/admin/src/views/basic/banner/edit.vue b/admin/src/views/basic/banner/edit.vue index 1357c75..f905695 100644 --- a/admin/src/views/basic/banner/edit.vue +++ b/admin/src/views/basic/banner/edit.vue @@ -20,7 +20,7 @@ - +
diff --git a/admin/src/views/basic/banner/index.vue b/admin/src/views/basic/banner/index.vue index 3950bd9..452b796 100644 --- a/admin/src/views/basic/banner/index.vue +++ b/admin/src/views/basic/banner/index.vue @@ -53,7 +53,7 @@ diff --git a/admin/src/views/experiment/edit.vue b/admin/src/views/experiment/edit.vue index d879c22..0584798 100644 --- a/admin/src/views/experiment/edit.vue +++ b/admin/src/views/experiment/edit.vue @@ -11,17 +11,17 @@ > - + - + - +
- +
数值越大越排前
@@ -29,68 +29,83 @@ + - + - - + + :default-expand-all="true" + placeholder="请选择产品分类" + check-strictly + /> - +