From 57d65f3fd98e908509defa9fd0fc965a55a8811b Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sun, 16 May 2021 23:41:33 +0800 Subject: [PATCH 01/68] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=AD=89=E7=BA=A7V0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/MemberExperienceExecute.java | 50 +++++++++++++ .../lili/event/impl/MemberPointExecute.java | 4 +- .../java/cn/lili/common/enums/ResultCode.java | 3 +- .../modules/member/entity/dos/Member.java | 8 +++ .../member/entity/dos/MemberGrade.java | 40 +++++++++++ .../member/mapper/MemberGradeMapper.java | 14 ++++ .../member/service/MemberGradeService.java | 15 ++++ .../modules/member/service/MemberService.java | 11 +++ .../serviceimpl/MemberGradeServiceImpl.java | 18 +++++ .../member/serviceimpl/MemberServiceImpl.java | 18 +++++ .../order/service/OrderPriceService.java | 8 +-- .../serviceimpl/OrderPriceServiceImpl.java | 8 +-- .../system/entity/dto/ExperienceSetting.java | 33 +++++++++ .../system/entity/enums/SettingEnum.java | 2 + .../member/MemberGradeManagerController.java | 70 +++++++++++++++++++ 15 files changed, 290 insertions(+), 12 deletions(-) create mode 100644 consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java create mode 100644 framework/src/main/java/cn/lili/modules/member/entity/dos/MemberGrade.java create mode 100644 framework/src/main/java/cn/lili/modules/member/mapper/MemberGradeMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/member/service/MemberGradeService.java create mode 100644 framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberGradeServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/system/entity/dto/ExperienceSetting.java create mode 100644 manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java new file mode 100644 index 00000000..d60c58b0 --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java @@ -0,0 +1,50 @@ +package cn.lili.event.impl; + + +import cn.lili.event.GoodsCommentCompleteEvent; +import cn.lili.event.MemberRegisterEvent; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.entity.dos.MemberEvaluation; +import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.ExperienceSetting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; +import com.google.gson.Gson; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 会员经验值 + * + * @author Bulbasaur + * @date: 2021/5/16 11:16 下午 + */ +@Service +public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent { + + //配置 + @Autowired + private SettingService settingService; + //会员 + @Autowired + private MemberService memberService; + + @Override + public void memberRegister(Member member) { + //获取经验值设置 + Setting setting = settingService.get(SettingEnum.EXPERIENCE_SETTING.name()); + ExperienceSetting experienceSetting = new Gson().fromJson(setting.getSettingValue(), ExperienceSetting.class); + //赠送会员经验值 + memberService.updateMemberPoint(Long.valueOf(experienceSetting.getRegister().longValue()), 1, member.getId(), "会员注册,赠送经验值" + experienceSetting.getRegister()); + } + + @Override + public void goodsComment(MemberEvaluation memberEvaluation) { + //获取签到经验值设置 + Setting setting = settingService.get(SettingEnum.EXPERIENCE_SETTING.name()); + ExperienceSetting experienceSetting = new Gson().fromJson(setting.getSettingValue(), ExperienceSetting.class); + //赠送会员经验值 + memberService.updateMemberPoint(Long.valueOf(experienceSetting.getComment().longValue()), 1, memberEvaluation.getMemberId(), "会员评价,赠送经验值" + experienceSetting.getComment()); + } +} diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index 237c3339..4a424a04 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -6,13 +6,11 @@ import cn.lili.event.MemberRegisterEvent; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.member.service.MemberWalletService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.PointSetting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import com.google.gson.Gson; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -35,7 +33,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp @Override public void memberRegister(Member member) { - //获取签到积分赠送设置 + //获取积分设置 Setting setting = settingService.get(SettingEnum.POINT_SETTING.name()); PointSetting pointSetting = new Gson().fromJson(setting.getSettingValue(), PointSetting.class); //赠送会员积分 diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 84fa0e38..b3e8c06a 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -89,7 +89,8 @@ public enum ResultCode { USER_RECEIPT_NOT_EXIST(20014,"会员发票信息不存在"), USER_EDIT_ERROR(20015,"用户修改失败"), USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"), - USER_COLLECTION_EXIST(2001,"无法重复收藏"), + USER_COLLECTION_EXIST(20017,"无法重复收藏"), + USER_GRADE_IS_DEFAULT(20018,"会员等级为默认会员等级"), /** * 权限 diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java index ea2aaa44..dab8b591 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java @@ -85,6 +85,14 @@ public class Member extends BaseEntity { @ApiModelProperty(value = "最后一次登录时间") private Date lastLoginDate; + @ApiModelProperty(value = "会员等级ID") + private String gradeId; + + @Min(message = "必须为数字", value = 0) + @ApiModelProperty(value = "经验值数量") + private Long experience; + + public Member(String username, String password, String mobile) { this.username = username; this.password = password; diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberGrade.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberGrade.java new file mode 100644 index 00000000..e65abef7 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberGrade.java @@ -0,0 +1,40 @@ +package cn.lili.modules.member.entity.dos; + +import cn.lili.base.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +/** + * 会员等级 + * + * @author Bulbasaur + * @date 2021/5/14 5:43 下午 + */ +@Data +@Entity +@Table(name = "li_member_grade") +@TableName("li_member_grade") +@ApiModel(value = "会员等级") +public class MemberGrade extends BaseEntity { + + @NotNull + @ApiModelProperty(value = "等级名称") + private String gradeName; + + @NotNull + @ApiModelProperty(value = "等级图片") + private String gradeImage; + + @NotNull + @ApiModelProperty(value = "所需经验值") + private Integer experienceValue; + + @ApiModelProperty(value = "是否为默认等级") + private Boolean isDefault; +} diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberGradeMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/MemberGradeMapper.java new file mode 100644 index 00000000..64073199 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/member/mapper/MemberGradeMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.member.mapper; + +import cn.lili.modules.member.entity.dos.MemberGrade; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 会员等级数据层 + * + * @author Bulbasaur + * @date: 2021/5/14 5:57 下午 + */ +public interface MemberGradeMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberGradeService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberGradeService.java new file mode 100644 index 00000000..44002848 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberGradeService.java @@ -0,0 +1,15 @@ +package cn.lili.modules.member.service; + +import cn.lili.modules.member.entity.dos.MemberGrade; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 会员等级业务层 + * @author Bulbasaur + * @date: 2021/5/14 5:57 下午 + * + */ +public interface MemberGradeService extends IService { + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java index 7395dc04..ff903447 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java @@ -183,6 +183,17 @@ public interface MemberService extends IService { */ Boolean updateMemberPoint(Long point, Integer type, String memberId, String content); + /** + * 会员积分变动 + * + * @param experience 变动经验值 + * @param type 变动类型 1为增加 0为消费 + * @param memberId 会员id + * @param content 变动详细 + * @return 操作结果 + */ + Boolean updateMemberExperience(Long experience, Integer type, String memberId, String content); + /** * 修改会员状态 * diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberGradeServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberGradeServiceImpl.java new file mode 100644 index 00000000..0152e4da --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberGradeServiceImpl.java @@ -0,0 +1,18 @@ +package cn.lili.modules.member.serviceimpl; + +import cn.lili.modules.member.entity.dos.MemberGrade; +import cn.lili.modules.member.mapper.MemberGradeMapper; +import cn.lili.modules.member.service.MemberGradeService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 会员等级业务层实现 + * + * @author Bulbasaur + * @date: 2021/5/14 5:58 下午 + */ +@Service +public class MemberGradeServiceImpl extends ServiceImpl implements MemberGradeService { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index fe464474..145883da 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -383,6 +383,24 @@ public class MemberServiceImpl extends ServiceImpl impleme throw new ServiceException(ResultCode.USER_NOT_EXIST); } + @Override + public Boolean updateMemberExperience(Long experience, Integer type, String memberId, String content) { + //获取当前会员信息 + Member member = this.getById(memberId); + if (member != null) { + //积分变动后的会员积分 + long currentExperience; + if (type == 1) { + currentExperience = CurrencyUtil.add(member.getPoint(), experience).longValue(); + } else { + currentExperience = CurrencyUtil.sub(member.getPoint(), experience) < 0 ? 0 : new Double(CurrencyUtil.sub(member.getExperience(), experience)).longValue(); + } + member.setExperience(currentExperience); + return this.updateById(member); + } + throw new ServiceException(ResultCode.USER_NOT_EXIST); + } + @Override public Boolean updateMemberStatus(List memberIds, Boolean status) { diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderPriceService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderPriceService.java index baa70f7e..3d1a00d6 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderPriceService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderPriceService.java @@ -3,10 +3,10 @@ package cn.lili.modules.order.order.service; import cn.lili.modules.order.order.entity.dos.Order; /** - * @author liushuai(liushuai711 @ gmail.com) - * @version v4.1 - * @Description: - * @since 2021/4/28 3:47 下午 + * 订单价格 + * + * @author Chopper + * @date 2020/11/17 7:36 下午 */ public interface OrderPriceService { diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java index 2bd6c150..8fafc13d 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderPriceServiceImpl.java @@ -28,10 +28,10 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; /** - * @author liushuai(liushuai711 @ gmail.com) - * @version v4.1 - * @Description: - * @since 2021/4/28 3:48 下午 + * 订单价格业务层实现 + * + * @author Chopper + * @date 2020/11/17 7:36 下午 */ @Service @Transactional(rollbackFor = Exception.class) diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/ExperienceSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/ExperienceSetting.java new file mode 100644 index 00000000..be6d0a72 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/ExperienceSetting.java @@ -0,0 +1,33 @@ +package cn.lili.modules.system.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 经验值设置 + * + * @author Bulbasaur + * @date: 2021/5/16 11:10 下午 + */ +@Data +public class ExperienceSetting implements Serializable { + + private static final long serialVersionUID = -4261856614779031745L; + @ApiModelProperty(value = "注册") + private Integer register; + + @ApiModelProperty(value = "每日签到经验值") + private Integer signIn; + + @ApiModelProperty(value = "订单评价赠送经验值") + private Integer comment; + + @ApiModelProperty(value = "分享获取经验值") + private Integer share; + + @ApiModelProperty(value = "购物获取经验值,一元*经验值") + private Integer money; + +} diff --git a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java index bffbae87..dd16dd13 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java @@ -27,6 +27,8 @@ public enum SettingEnum { SMS_SETTING, //积分设置 POINT_SETTING, + //经验值设置 + EXPERIENCE_SETTING, //微信 联合登陆设置 WECHAT_CONNECT, diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java new file mode 100644 index 00000000..c1498263 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java @@ -0,0 +1,70 @@ +package cn.lili.controller.member; + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.utils.ResultUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.member.entity.dos.MemberGrade; +import cn.lili.modules.member.service.MemberGradeService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 管理端,会员等级接口 + * + * @author Bulbasaur + * @date: 2021/5/16 11:29 下午 + */ +@RestController +@Api(tags = "管理端,会员等级接口") +@RequestMapping("/manager/memberGrade") +public class MemberGradeManagerController { + + @Autowired + private MemberGradeService memberGradeService; + + @ApiOperation(value = "通过id获取会员等级") + @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, dataType = "String", paramType = "path") + @GetMapping(value = "/get/{id}") + public ResultMessage get(@PathVariable String id) { + + return ResultUtil.data(memberGradeService.getById(id)); + } + + @ApiOperation(value = "获取会员等级分页") + @GetMapping(value = "/getByPage") + public ResultMessage> getByPage(PageVO page) { + + return ResultUtil.data(memberGradeService.page(PageUtil.initPage(page))); + } + + @ApiOperation(value = "修改会员等级") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, paramType = "path") + }) + @GetMapping(value = "/update/{id}") + public ResultMessage update(@PathVariable String id,MemberGrade memberGrade) { + if (memberGradeService.updateById(memberGrade)) { + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } + + @ApiOperation(value = "删除会员等级") + @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, dataType = "String", paramType = "path") + @PutMapping(value = "/delete/{id}") + public ResultMessage> delete(@PathVariable String id) { + if(memberGradeService.getById(id).getIsDefault()){ + return ResultUtil.error(ResultCode.USER_GRADE_IS_DEFAULT); + }else if(memberGradeService.removeById(id)){ + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } +} From c8a43573fdd7c2121ec20bbb4b90d823291ad5e1 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 17 May 2021 09:04:10 +0800 Subject: [PATCH 02/68] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=EF=BC=8C=E4=BC=9A=E5=91=98=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E8=B5=A0=E9=80=81=E7=A7=AF=E5=88=86=EF=BC=88=E9=9D=9E=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E8=AE=A2=E5=8D=95=EF=BC=89=EF=BC=8C=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=94=AE=E5=90=8E=E6=89=A3=E9=99=A4=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/event/impl/MemberPointExecute.java | 83 +++++++++++++++++-- .../cn/lili/common/utils/CurrencyUtil.java | 18 ++++ .../modules/order/order/entity/dos/Order.java | 21 +++-- .../order/entity/enums/OrderTypeEnum.java | 6 +- .../system/entity/dto/PointSetting.java | 2 +- 5 files changed, 115 insertions(+), 15 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index 4a424a04..7ec637ab 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -1,11 +1,21 @@ package cn.lili.event.impl; +import cn.lili.common.utils.CurrencyUtil; +import cn.lili.event.AfterSaleStatusChangeEvent; import cn.lili.event.GoodsCommentCompleteEvent; import cn.lili.event.MemberRegisterEvent; +import cn.lili.event.OrderStatusChangeEvent; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.order.order.entity.dos.AfterSale; +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderMessage; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; +import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.PointSetting; import cn.lili.modules.system.entity.enums.SettingEnum; @@ -17,12 +27,11 @@ import org.springframework.stereotype.Service; /** * 会员积分 * - * @author Chopper + * @author Bulbasaur * @date 2020-07-03 11:20 */ @Service - -public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent { +public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent, AfterSaleStatusChangeEvent { //配置 @Autowired @@ -30,22 +39,80 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //会员 @Autowired private MemberService memberService; + //订单 + @Autowired + private OrderService orderService; + /** + * 会员注册赠送积分 + * @param member 会员 + */ @Override public void memberRegister(Member member) { //获取积分设置 - Setting setting = settingService.get(SettingEnum.POINT_SETTING.name()); - PointSetting pointSetting = new Gson().fromJson(setting.getSettingValue(), PointSetting.class); + PointSetting pointSetting=getPointSetting(); //赠送会员积分 memberService.updateMemberPoint(Long.valueOf(pointSetting.getRegister().longValue()), 1, member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分"); } + /** + * 会员评价赠送积分 + * @param memberEvaluation 会员评价 + */ @Override public void goodsComment(MemberEvaluation memberEvaluation) { - //获取签到积分赠送设置 - Setting setting = settingService.get(SettingEnum.POINT_SETTING.name()); - PointSetting pointSetting = new Gson().fromJson(setting.getSettingValue(), PointSetting.class); + //获取积分设置 + PointSetting pointSetting=getPointSetting(); //赠送会员积分 memberService.updateMemberPoint(Long.valueOf(pointSetting.getComment().longValue()), 1, memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分"); } + + /** + * 非积分订单订单完成后赠送积分 + * @param orderMessage 订单消息 + */ + @Override + public void orderChange(OrderMessage orderMessage) { + + if(orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)){ + //根据订单编号获取订单数据,如果为积分订单则跳回 + Order order = orderService.getBySn(orderMessage.getOrderSn()); + if(order.getOrderType().equals(OrderTypeEnum.POINT)){ + return; + } + //获取积分设置 + PointSetting pointSetting=getPointSetting(); + //计算赠送积分数量 + Double point=CurrencyUtil.mul(pointSetting.getMoney(),order.getFlowPrice(),0); + //赠送会员积分 + memberService.updateMemberPoint(point.longValue(), 1, order.getMemberId(), "会员下单,赠送积分" + point + "分"); + + } + } + + /** + * 提交售后后扣除积分 + * @param afterSale 售后 + */ + @Override + public void afterSaleStatusChange(AfterSale afterSale) { + if (afterSale.getServiceStatus().equals(AfterSaleStatusEnum.COMPLETE.name())) { + //获取积分设置 + PointSetting pointSetting=getPointSetting(); + //计算扣除积分数量 + Double point=CurrencyUtil.mul(pointSetting.getMoney(), afterSale.getActualRefundPrice(),0); + //扣除会员积分 + memberService.updateMemberPoint(point.longValue(), 1, afterSale.getMemberId(), "会员退款,扣除积分" + point + "分"); + + } + } + + /** + * 获取积分设置 + * @return 积分设置 + */ + private PointSetting getPointSetting(){ + Setting setting = settingService.get(SettingEnum.POINT_SETTING.name()); + return new Gson().fromJson(setting.getSettingValue(), PointSetting.class); + } } diff --git a/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java b/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java index d2e21cb5..290ba1b4 100644 --- a/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java +++ b/framework/src/main/java/cn/lili/common/utils/CurrencyUtil.java @@ -56,6 +56,24 @@ public final class CurrencyUtil { return b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } + /** + * 提供精确的乘法运算。 + * + * @param v1 被乘数 + * @param v2 乘数 + * @param scale 表示表示需要精确到小数点以后几位。 + * @return 两个参数的积 + */ + public static Double mul(double v1, double v2, int scale) { + if (scale < 0) { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + /** * 提供(相对)精确的除法运算,当发生除不尽的情况时, 精确到小数点以后10位,以后的数字四舍五入。 * diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index e3dbb029..db18e6f8 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -201,35 +201,46 @@ public class Order extends BaseEntity { public Order(CartVO cartVO, TradeDTO tradeDTO) { String oldId = this.getId(); - if (tradeDTO.getMemberAddress() != null) { - BeanUtil.copyProperties(tradeDTO.getMemberAddress(), this); - } BeanUtil.copyProperties(tradeDTO, this); BeanUtil.copyProperties(cartVO.getPriceDetailDTO(), this); BeanUtil.copyProperties(cartVO, this); this.setId(oldId); - this.setOrderType(OrderTypeEnum.NORMAL.name()); + //循环购物车列表判断是否为促销订单 if (cartVO.getSkuList().get(0).getPromotions() != null) { + //判断是否为拼团订单 Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); if (pintuanId.isPresent()) { - promotionId = pintuanId.get(); this.setOrderType(OrderTypeEnum.PINTUAN.name()); if (tradeDTO.getParentOrderSn() == null) { this.setParentOrderSn(""); } } + //判断是否为积分订单 + Optional pointGoodsId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.POINTS_GOODS.name())).map(PromotionGoods::getPromotionId).findFirst(); + if (pointGoodsId.isPresent()) { + this.setOrderType(OrderTypeEnum.POINT.name()); + if (tradeDTO.getParentOrderSn() == null) { + this.setParentOrderSn(""); + } + } + }else{ + this.setOrderType(OrderTypeEnum.NORMAL.name()); } + //设定订单默认状态 this.setOrderStatus(OrderStatusEnum.UNPAID.name()); this.setPayStatus(PayStatusEnum.UNPAID.name()); this.setDeliverStatus(DeliverStatusEnum.UNDELIVERED.name()); + //填充订单收件人信息 this.setConsigneeAddressIdPath(tradeDTO.getMemberAddress().getConsigneeAddressIdPath()); this.setConsigneeAddressPath(tradeDTO.getMemberAddress().getConsigneeAddressPath()); this.setConsigneeDetail(tradeDTO.getMemberAddress().getDetail()); this.setConsigneeMobile(tradeDTO.getMemberAddress().getMobile()); this.setConsigneeName(tradeDTO.getMemberAddress().getName()); + //判断是否使用平台优惠券 if (tradeDTO.getPlatformCoupon() != null) { this.setUsePlatformMemberCouponId(tradeDTO.getPlatformCoupon().getMemberCoupon().getId()); } + //判断是否使用店铺优惠券 if (tradeDTO.getStoreCoupons() != null && !tradeDTO.getStoreCoupons().isEmpty()) { StringBuilder storeCouponIds = new StringBuilder(); for (String s : tradeDTO.getStoreCoupons().keySet()) { diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java index 78a3b610..8b9d6e6b 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java @@ -25,6 +25,10 @@ public enum OrderTypeEnum { /** * 拼团订单 */ - PINTUAN + PINTUAN, + /** + * 积分订单 + */ + POINT } diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/PointSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/PointSetting.java index 0e5d29dd..15d4c46b 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/dto/PointSetting.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/PointSetting.java @@ -20,7 +20,7 @@ public class PointSetting implements Serializable { @ApiModelProperty(value = "注册") private Integer register; - @ApiModelProperty(value = "1积分等于多少元") + @ApiModelProperty(value = "1元等级*积分") private Integer money; @ApiModelProperty(value = "每日签到积分") From 591ce04e42a9ff1936f30cef3c827a73096b98e8 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 17 May 2021 09:24:58 +0800 Subject: [PATCH 03/68] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=BB=8F=E9=AA=8C?= =?UTF-8?q?=E5=80=BC=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buyer-api/src/main/resources/application.yml | 3 - buyer-api/src/test/resources/application.yml | 3 - common-api/src/main/resources/application.yml | 3 - config/application.yml | 5 +- .../event/impl/MemberExperienceExecute.java | 59 ++++++++++++++++--- .../lili/event/impl/MemberPointExecute.java | 8 +-- consumer/src/main/resources/application.yml | 3 - .../member/entity/dto/MemberPointMessage.java | 4 +- .../modules/member/service/MemberService.java | 8 +-- .../member/serviceimpl/MemberServiceImpl.java | 8 +-- .../serviceimpl/MemberSignServiceImpl.java | 3 +- .../order/serviceimpl/TradeServiceImpl.java | 2 +- .../src/main/resources/application.yml | 3 - seller-api/src/main/resources/application.yml | 3 - socket-api/src/main/resources/application.yml | 3 - 15 files changed, 68 insertions(+), 50 deletions(-) diff --git a/buyer-api/src/main/resources/application.yml b/buyer-api/src/main/resources/application.yml index 2350e434..28176198 100644 --- a/buyer-api/src/main/resources/application.yml +++ b/buyer-api/src/main/resources/application.yml @@ -4,9 +4,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: diff --git a/buyer-api/src/test/resources/application.yml b/buyer-api/src/test/resources/application.yml index dd015575..39fb0557 100644 --- a/buyer-api/src/test/resources/application.yml +++ b/buyer-api/src/test/resources/application.yml @@ -2,9 +2,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: diff --git a/common-api/src/main/resources/application.yml b/common-api/src/main/resources/application.yml index 50b9a813..4d8b1716 100644 --- a/common-api/src/main/resources/application.yml +++ b/common-api/src/main/resources/application.yml @@ -4,9 +4,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: diff --git a/config/application.yml b/config/application.yml index d11ce90c..e7a7c185 100644 --- a/config/application.yml +++ b/config/application.yml @@ -2,9 +2,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: @@ -80,7 +77,7 @@ spring: default-datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.0.116:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://192.168.0.116:3306/Bulbasaur?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: lilishop maxActive: 20 diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java index d60c58b0..8337db25 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java @@ -1,11 +1,17 @@ package cn.lili.event.impl; +import cn.lili.common.utils.CurrencyUtil; import cn.lili.event.GoodsCommentCompleteEvent; import cn.lili.event.MemberRegisterEvent; +import cn.lili.event.OrderStatusChangeEvent; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderMessage; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.dto.ExperienceSetting; import cn.lili.modules.system.entity.enums.SettingEnum; @@ -21,7 +27,7 @@ import org.springframework.stereotype.Service; * @date: 2021/5/16 11:16 下午 */ @Service -public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent { +public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent { //配置 @Autowired @@ -29,22 +35,59 @@ public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommen //会员 @Autowired private MemberService memberService; + //订单 + @Autowired + private OrderService orderService; + /** + * 会员注册赠送经验值 + * @param member 会员 + */ @Override public void memberRegister(Member member) { //获取经验值设置 - Setting setting = settingService.get(SettingEnum.EXPERIENCE_SETTING.name()); - ExperienceSetting experienceSetting = new Gson().fromJson(setting.getSettingValue(), ExperienceSetting.class); + ExperienceSetting experienceSetting = getExperienceSetting(); //赠送会员经验值 - memberService.updateMemberPoint(Long.valueOf(experienceSetting.getRegister().longValue()), 1, member.getId(), "会员注册,赠送经验值" + experienceSetting.getRegister()); + memberService.updateMemberExperience(Long.valueOf(experienceSetting.getRegister().longValue()), true, member.getId(), "会员注册,赠送经验值" + experienceSetting.getRegister()); } + /** + * 商品评价赠送经验值 + * @param memberEvaluation 会员评价 + */ @Override public void goodsComment(MemberEvaluation memberEvaluation) { - //获取签到经验值设置 - Setting setting = settingService.get(SettingEnum.EXPERIENCE_SETTING.name()); - ExperienceSetting experienceSetting = new Gson().fromJson(setting.getSettingValue(), ExperienceSetting.class); + //获取经验值设置 + ExperienceSetting experienceSetting = getExperienceSetting(); //赠送会员经验值 - memberService.updateMemberPoint(Long.valueOf(experienceSetting.getComment().longValue()), 1, memberEvaluation.getMemberId(), "会员评价,赠送经验值" + experienceSetting.getComment()); + memberService.updateMemberExperience(Long.valueOf(experienceSetting.getComment().longValue()), true, memberEvaluation.getMemberId(), "会员评价,赠送经验值" + experienceSetting.getComment()); + } + + /** + * 完成订单赠送经验值 + * @param orderMessage 订单消息 + */ + @Override + public void orderChange(OrderMessage orderMessage) { + if(orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)){ + //获取经验值设置 + ExperienceSetting experienceSetting = getExperienceSetting(); + //获取订单信息 + Order order = orderService.getBySn(orderMessage.getOrderSn()); + //计算赠送经验值数量 + Double point= CurrencyUtil.mul(experienceSetting.getMoney(),order.getFlowPrice(),0); + //赠送会员经验值 + memberService.updateMemberExperience(point.longValue(), true, order.getMemberId(), "会员下单,赠送经验值" + point + "分"); + + } + } + + /** + * 获取经验值设置 + * @return 经验值设置 + */ + private ExperienceSetting getExperienceSetting(){ + Setting setting = settingService.get(SettingEnum.EXPERIENCE_SETTING.name()); + return new Gson().fromJson(setting.getSettingValue(), ExperienceSetting.class); } } diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index 7ec637ab..b0d454d4 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -52,7 +52,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //获取积分设置 PointSetting pointSetting=getPointSetting(); //赠送会员积分 - memberService.updateMemberPoint(Long.valueOf(pointSetting.getRegister().longValue()), 1, member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分"); + memberService.updateMemberPoint(Long.valueOf(pointSetting.getRegister().longValue()), true, member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分"); } /** @@ -64,7 +64,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //获取积分设置 PointSetting pointSetting=getPointSetting(); //赠送会员积分 - memberService.updateMemberPoint(Long.valueOf(pointSetting.getComment().longValue()), 1, memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分"); + memberService.updateMemberPoint(Long.valueOf(pointSetting.getComment().longValue()), true, memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分"); } /** @@ -85,7 +85,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //计算赠送积分数量 Double point=CurrencyUtil.mul(pointSetting.getMoney(),order.getFlowPrice(),0); //赠送会员积分 - memberService.updateMemberPoint(point.longValue(), 1, order.getMemberId(), "会员下单,赠送积分" + point + "分"); + memberService.updateMemberPoint(point.longValue(), true, order.getMemberId(), "会员下单,赠送积分" + point + "分"); } } @@ -102,7 +102,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //计算扣除积分数量 Double point=CurrencyUtil.mul(pointSetting.getMoney(), afterSale.getActualRefundPrice(),0); //扣除会员积分 - memberService.updateMemberPoint(point.longValue(), 1, afterSale.getMemberId(), "会员退款,扣除积分" + point + "分"); + memberService.updateMemberPoint(point.longValue(), false, afterSale.getMemberId(), "会员退款,扣除积分" + point + "分"); } } diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml index df974ce6..f808afe7 100644 --- a/consumer/src/main/resources/application.yml +++ b/consumer/src/main/resources/application.yml @@ -4,9 +4,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberPointMessage.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberPointMessage.java index a1eddc2a..439bff9f 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberPointMessage.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/MemberPointMessage.java @@ -15,8 +15,8 @@ public class MemberPointMessage { @ApiModelProperty(value = "积分") private Long point; - @ApiModelProperty(value = "类型 1为增加") - private Integer type; + @ApiModelProperty(value = "是否增加积分") + private Boolean type; @ApiModelProperty(value = "会员id") private String memberId; diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java index ff903447..f7fb42bc 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberService.java @@ -176,23 +176,23 @@ public interface MemberService extends IService { * 会员积分变动 * * @param point 变动积分 - * @param type 变动类型 1为增加 0为消费 + * @param type 是否增加积分 * @param memberId 会员id * @param content 变动详细 * @return 操作结果 */ - Boolean updateMemberPoint(Long point, Integer type, String memberId, String content); + Boolean updateMemberPoint(Long point, Boolean type, String memberId, String content); /** * 会员积分变动 * * @param experience 变动经验值 - * @param type 变动类型 1为增加 0为消费 + * @param type 是否增加经验值 * @param memberId 会员id * @param content 变动详细 * @return 操作结果 */ - Boolean updateMemberExperience(Long experience, Integer type, String memberId, String content); + Boolean updateMemberExperience(Long experience, Boolean type, String memberId, String content); /** * 修改会员状态 diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index 145883da..01ca9b1f 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -354,13 +354,13 @@ public class MemberServiceImpl extends ServiceImpl impleme @Override @PointLogPoint - public Boolean updateMemberPoint(Long point, Integer type, String memberId, String content) { + public Boolean updateMemberPoint(Long point, Boolean type, String memberId, String content) { //获取当前会员信息 Member member = this.getById(memberId); if (member != null) { //积分变动后的会员积分 long currentPoint; - if (type == 1) { + if (type) { currentPoint = CurrencyUtil.add(member.getPoint(), point).longValue(); } else { currentPoint = CurrencyUtil.sub(member.getPoint(), point) < 0 ? 0 : new Double(CurrencyUtil.sub(member.getPoint(), point)).longValue(); @@ -384,13 +384,13 @@ public class MemberServiceImpl extends ServiceImpl impleme } @Override - public Boolean updateMemberExperience(Long experience, Integer type, String memberId, String content) { + public Boolean updateMemberExperience(Long experience, Boolean type, String memberId, String content) { //获取当前会员信息 Member member = this.getById(memberId); if (member != null) { //积分变动后的会员积分 long currentExperience; - if (type == 1) { + if (type) { currentExperience = CurrencyUtil.add(member.getPoint(), experience).longValue(); } else { currentExperience = CurrencyUtil.sub(member.getPoint(), experience) < 0 ? 0 : new Double(CurrencyUtil.sub(member.getExperience(), experience)).longValue(); diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java index cf863383..1fb34be9 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java @@ -21,7 +21,6 @@ import cn.lili.modules.system.service.SettingService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.Gson; -import lombok.RequiredArgsConstructor; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -137,7 +136,7 @@ public class MemberSignServiceImpl extends ServiceImpl implements throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO(). - getPayPoint().longValue(), 0, tradeDTO.getMemberId(), + getPayPoint().longValue(), false, tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { diff --git a/manager-api/src/main/resources/application.yml b/manager-api/src/main/resources/application.yml index b04e7d93..ea7d0fc5 100644 --- a/manager-api/src/main/resources/application.yml +++ b/manager-api/src/main/resources/application.yml @@ -4,9 +4,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: diff --git a/seller-api/src/main/resources/application.yml b/seller-api/src/main/resources/application.yml index b6854c83..18f63912 100644 --- a/seller-api/src/main/resources/application.yml +++ b/seller-api/src/main/resources/application.yml @@ -4,9 +4,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: diff --git a/socket-api/src/main/resources/application.yml b/socket-api/src/main/resources/application.yml index c10a84e8..4b502b6e 100644 --- a/socket-api/src/main/resources/application.yml +++ b/socket-api/src/main/resources/application.yml @@ -3,9 +3,6 @@ server: servlet: context-path: / - # 正式部署时候,解开此处配置,防止文件夹被清除导致的文件上传失败问题 - # multipart: - # location: /Users/lifenlong/Desktop/ceshi tomcat: uri-encoding: UTF-8 threads: From b0f46a78a6db33c7be1bc8bb88233b766b89c1f2 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 17 May 2021 12:00:45 +0800 Subject: [PATCH 04/68] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=9B=B4=E6=92=AD=E9=97=B4=E5=88=9B=E5=BB=BA=E3=80=81?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E5=95=86=E5=93=81=E6=B7=BB=E5=8A=A0=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E3=80=81=E6=9F=A5=E8=AF=A2=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broadcast/entity/dos/Commodity.java | 63 +++++ .../modules/broadcast/entity/dos/Studio.java | 85 +++++++ .../entity/dto/CommodityAuditStatusEnum.java | 38 +++ .../broadcast/entity/dto/GoodsInfo.java | 43 ++++ .../broadcast/mapper/CommodityMapper.java | 20 ++ .../broadcast/mapper/StudioMapper.java | 14 ++ .../broadcast/service/CommodityService.java | 30 +++ .../broadcast/service/StudioService.java | 30 +++ .../serviceimpl/CommodityServiceImpl.java | 61 +++++ .../serviceimpl/StudioServiceImpl.java | 49 ++++ .../broadcast/util/WechatLivePlayerUtil.java | 152 ++++++++++++ .../lili/modules/system/utils/HttpUtils.java | 220 ++++-------------- 12 files changed, 633 insertions(+), 172 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dto/GoodsInfo.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java new file mode 100644 index 00000000..dee3c17a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java @@ -0,0 +1,63 @@ +package cn.lili.modules.broadcast.entity.dos; + +import cn.lili.base.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; + +/** + * 小程序直播商品 + * @author Bulbasaur + * @date: 2021/5/17 9:34 上午 + * + */ +@Data +@Entity +@ApiModel(value = "直播商品") +@TableName("li_commodity") +@Table(name = "li_commodity") +public class Commodity extends BaseEntity { + + @ApiModelProperty(value = "图片mediaID") + private String coverImgUrl; + + @ApiModelProperty(value = "商品名称") + private String name; + + //1:一口价(只需要传入price,price2不传) + // 2:价格区间(price字段为左边界,price2字段为右边界,price和price2必传) + // 3:显示折扣价(price字段为原价,price2字段为现价, price和price2必传 + @ApiModelProperty(value = "价格类型") + private Integer priceType; + + @ApiModelProperty(value = "价格") + private Double price; + + @ApiModelProperty(value = "价格2") + private Double price2; + + @ApiModelProperty(value = "商品详情页的小程序路径") + private String url; + + @ApiModelProperty(value = "微信程序直播商品ID") + private String liveGoodsId; + + @ApiModelProperty(value = "审核单ID") + private String auditId; + + @ApiModelProperty(value = "审核状态") + private String auditStatus; + + @ApiModelProperty(value = "店铺ID") + private String storeId; + + @ApiModelProperty(value = "商品ID") + private String goodsId; + + @ApiModelProperty(value = "规格ID") + private String skuId; +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java new file mode 100644 index 00000000..b33d72d2 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java @@ -0,0 +1,85 @@ +package cn.lili.modules.broadcast.entity.dos; + +import cn.lili.base.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; + +/** + * 小程序直播间 + * + * @author Bulbasaur + * @date: 2021/5/17 9:47 上午 + */ +@Data +@Entity +@ApiModel(value = "直播间") +@TableName("li_studio") +@Table(name = "li_studio") +public class Studio extends BaseEntity { + + /** + * 直播间名字,最短3个汉字,最长17个汉字,1个汉字相当于2个字符 + */ + @ApiModelProperty(value = "直播间名字") + private String name; + + /** + * 背景图,填入mediaID(mediaID获取后,三天内有效);图片mediaID的获取,请参考以下文档: https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html;直播间背景图,图片规则:建议像素1080*1920,大小不超过2M + */ + @ApiModelProperty(value = "背景图") + private String coverImg; + + /** + * 直播计划开始时间(开播时间需要在当前时间的10分钟后 并且 开始时间不能在 6 个月后) + */ + @ApiModelProperty(value = "开始时间") + private String startTime; + + /** + * 直播计划结束时间(开播时间和结束时间间隔不得短于30分钟,不得超过24小时) + */ + @ApiModelProperty(value = "结束时间") + private String endTime; + + /** + * 主播昵称,最短2个汉字,最长15个汉字,1个汉字相当于2个字符 + */ + @ApiModelProperty(value = "主播昵称") + private String anchorName; + + /** + * 主播微信号,如果未实名认证,需要先前往“小程序直播”小程序进行实名验证, 小程序二维码链接:https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh + */ + @ApiModelProperty(value = "主播微信号") + private String anchorWechat; + + /** + * 分享图,填入mediaID(mediaID获取后,三天内有效);图片mediaID的获取,请参考以下文档: https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html;直播间分享图,图片规则:建议像素800*640,大小不超过1M; + */ + @ApiModelProperty(value = "分享图") + private String shareImg; + + /** + * 购物直播频道封面图,填入mediaID(mediaID获取后,三天内有效);图片mediaID的获取,请参考以下文档: https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html; 购物直播频道封面图,图片规则:建议像素800*800,大小不超过100KB; + */ + @ApiModelProperty(value = "封面图") + private String feedsImg; + + /** + * 回放视频链接 + */ + @ApiModelProperty(value = "回放视频链接") + private String mediaUrl; + + + @ApiModelProperty(value = "房间ID") + private String roomId; + + @ApiModelProperty(value = "店铺ID") + private String storeId; +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java new file mode 100644 index 00000000..6971af01 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java @@ -0,0 +1,38 @@ +package cn.lili.modules.broadcast.entity.dto; + +/** + * @author liushuai(liushuai711 @ gmail.com) + * @version v4.1 + * @Description: + * @since 2021/5/17 11:34 上午 + */ +public enum CommodityAuditStatusEnum { + + /** + * 未审核 + */ + WAIT_AUDIT("0"), + /** + * 审核中 + */ + AUDITING("1"), + /** + * 审核通过 + */ + AUDIT_PASS("2"), + /** + * 审核失败 + */ + AUDIT_REJECTION("3"); + + private final String status; + + CommodityAuditStatusEnum(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/GoodsInfo.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/GoodsInfo.java new file mode 100644 index 00000000..f0e8ae93 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/GoodsInfo.java @@ -0,0 +1,43 @@ +package cn.lili.modules.broadcast.entity.dto; + +import cn.lili.common.utils.BeanUtil; +import cn.lili.modules.broadcast.entity.dos.Commodity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 微信小程序直播商品DTO + * @author Bulbasaur + * @date: 2021/5/17 11:03 上午 + * + */ +@Data +@NoArgsConstructor +public class GoodsInfo { + + @ApiModelProperty(value = "图片mediaID") + private String coverImgUrl; + + @ApiModelProperty(value = "商品名称") + private String name; + + //1:一口价(只需要传入price,price2不传) + // 2:价格区间(price字段为左边界,price2字段为右边界,price和price2必传) + // 3:显示折扣价(price字段为原价,price2字段为现价, price和price2必传 + @ApiModelProperty(value = "价格类型") + private Integer priceType; + + @ApiModelProperty(value = "价格") + private Double price; + + @ApiModelProperty(value = "价格2") + private Double price2; + + @ApiModelProperty(value = "商品详情页的小程序路径") + private String url; + + public GoodsInfo(Commodity commodity){ + BeanUtil.copyProperties(commodity, this); + } +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java new file mode 100644 index 00000000..7578eb2e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java @@ -0,0 +1,20 @@ +package cn.lili.modules.broadcast.mapper; + +import cn.lili.modules.broadcast.entity.dos.Commodity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * 直播商品数据层 + * + * @author Bulbasaur + * @date: 2021/5/17 9:56 上午 + */ +public interface CommodityMapper extends BaseMapper { + + @Select("SELECT live_goods_id FROM li_commodity WHERE audit_status='0' or audit_status='1'") + List getAuditCommodity(); + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioMapper.java new file mode 100644 index 00000000..37ed4740 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioMapper.java @@ -0,0 +1,14 @@ +package cn.lili.modules.broadcast.mapper; + +import cn.lili.modules.broadcast.entity.dos.Studio; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 直播间数据层 + * + * @author Bulbasaur + * @date: 2021/5/17 9:56 上午 + */ +public interface StudioMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java new file mode 100644 index 00000000..dadf2bab --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java @@ -0,0 +1,30 @@ +package cn.lili.modules.broadcast.service; + +import cn.lili.modules.broadcast.entity.dos.Commodity; + +/** + * 直播商品业务层 + * + * @author Bulbasaur + * @date: 2021/5/17 10:39 上午 + */ +public interface CommodityService { + + /** + * 添加直播商品 + * @return 添加结果 + */ + boolean addCommodity(Commodity commodity); + + /** + * 删除直播商品 + * @param goodsId 直播商品ID + * @return 删除结果 + */ + boolean deleteCommodity(String goodsId); + + /** + * 查询微信小程序直播商品审核状态 + */ + void getGoodsWarehouse(); +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java new file mode 100644 index 00000000..4f733125 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java @@ -0,0 +1,30 @@ +package cn.lili.modules.broadcast.service; + +import cn.lili.modules.broadcast.entity.dos.Studio; + +/** + * 直播间业务层 + * + * @author Bulbasaur + * @date: 2021/5/17 10:02 上午 + */ +public interface StudioService { + + /** + * 创建直播间 + * 直播间默认手机直播 + * 默认开启:点赞、商品货架、评论、回放 + * @param studio 直播间 + * @return 开启状态 + */ + Boolean create(Studio studio); + + /** + * 获取直播间回放 + * @param roomId 房间ID + * @return 直播间回放地址 + */ + String getLiveInfo(String roomId); + + +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java new file mode 100644 index 00000000..8f79b1ff --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -0,0 +1,61 @@ +package cn.lili.modules.broadcast.serviceimpl; + +import cn.hutool.json.JSONObject; +import cn.lili.common.security.context.UserContext; +import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.mapper.CommodityMapper; +import cn.lili.modules.broadcast.service.CommodityService; +import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.Map; + +/** + * 直播商品业务层实现 + * + * @author Bulbasaur + * @date: 2021/5/17 11:16 上午 + */ +public class CommodityServiceImpl extends ServiceImpl implements CommodityService { + + @Autowired + private WechatLivePlayerUtil wechatLivePlayerUtil; + + @Override + public boolean addCommodity(Commodity commodity) { + JSONObject json =wechatLivePlayerUtil.addGoods(commodity); + commodity.setLiveGoodsId(json.getStr("goodsId")); + commodity.setAuditId(json.getStr("auditId")); + commodity.setStoreId(UserContext.getCurrentUser().getStoreId()); + return this.save(commodity); + } + + @Override + public boolean deleteCommodity(String goodsId) { + JSONObject json =wechatLivePlayerUtil.deleteGoods(goodsId); + if(json.getStr("errcode").equals("0")){ + return this.remove(this.lambdaQuery().eq(Commodity::getLiveGoodsId,goodsId)); + } + return false; + } + + @Override + public void getGoodsWarehouse() { + //查询审核中的商品 + List goodsIdList=this.baseMapper.getAuditCommodity(); + //同步状态 + JSONObject json =wechatLivePlayerUtil.deleteGoods(goodsIdList); + //修改状态 + List> list=(List)json.get("goods"); + for (Map map:list){ + //修改审核状态 + this.update(this.lambdaUpdate() + .eq(Commodity::getLiveGoodsId,map.get("goods_id")) + .set(Commodity::getAuditStatus,map.get("audit_status"))); + } + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java new file mode 100644 index 00000000..9fc53fd4 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -0,0 +1,49 @@ +package cn.lili.modules.broadcast.serviceimpl; + +import cn.lili.common.security.context.UserContext; +import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.mapper.StudioMapper; +import cn.lili.modules.broadcast.service.StudioService; +import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 小程序直播间业务层实现 + * + * @author Bulbasaur + * @date: 2021/5/17 10:04 上午 + */ +public class StudioServiceImpl extends ServiceImpl implements StudioService { + + @Autowired + private WechatLivePlayerUtil wechatLivePlayerUtil; + + @Override + public Boolean create(Studio studio) { + + //创建小程序直播 + String roomId=wechatLivePlayerUtil.create(studio); + studio.setRoomId(roomId); + studio.setStoreId(UserContext.getCurrentUser().getStoreId()); + return this.save(studio); + } + + @Override + public String getLiveInfo(String roomId) { + Studio studio=this.getByRoomId(roomId); + //获取直播间并判断回放内容是否为空,如果为空则获取直播间回放并保存 + if(studio.getMediaUrl()!=null){ + return studio.getMediaUrl(); + }else{ + String mediaUrl= wechatLivePlayerUtil.getLiveInfo(roomId); + studio.setMediaUrl(mediaUrl); + this.save(studio); + return mediaUrl; + } + } + + private Studio getByRoomId(String roomId){ + return this.getOne(this.lambdaQuery().eq(Studio::getRoomId,roomId)) ; + } +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java new file mode 100644 index 00000000..a41dc0c0 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -0,0 +1,152 @@ +package cn.lili.modules.broadcast.util; + +import cn.hutool.json.JSONObject; +import cn.lili.modules.base.entity.enums.ClientTypeEnum; +import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.entity.dto.GoodsInfo; +import cn.lili.modules.message.util.WechatAccessTokenUtil; +import cn.lili.modules.system.utils.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 微信小程序直播工具类 + * @author Bulbasaur + * @date: 2021/5/17 10:16 上午 + * + */ +@Slf4j +@Component +public class WechatLivePlayerUtil { + + @Autowired + private WechatAccessTokenUtil wechatAccessTokenUtil; + + /** + * 创建小程序直播间 + * @param studio 小程序直播 + * @return 房间ID + */ + public String create(Studio studio){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + //发送url + String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token="+ token; + Map map = new HashMap<>(); + + // 直播间名字 + map.put("name", studio.getName()); + // 背景图 + map.put("coverImg", studio.getCoverImg()); + // 直播计划开始时间 + map.put("startTime", studio.getStartTime()); + // 直播计划结束时间 + map.put("endTime", studio.getEndTime()); + // 主播昵称 + map.put("anchorName", studio.getAnchorName()); + // 主播微信号 + map.put("anchorWechat", studio.getAnchorWechat()); + // 分享图 + map.put("shareImg", studio.getShareImg()); + // 购物直播频道封面图 + map.put("feedsImg", studio.getFeedsImg()); + // 直播间类型 + map.put("type", "0"); + // 是否关闭点赞 + map.put("closeLike", "0"); + // 是否关闭货架 + map.put("closeGoods", "0"); + // 是否关闭评论 + map.put("closeComment","0"); + // 直播间名字 + map.put("closeReplay", "0"); + + String content = HttpUtils.doPostWithJson(url, map); + JSONObject json = new JSONObject(content); + log.info("微信小程序直播间创建结果:" + content); + return json.getStr("roomId"); + } + + /** + * 获取直播间回放 + * @param roomId 房间ID + * @return 回放地址 + */ + public String getLiveInfo(String roomId){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + //发送url + String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+ token; + Map map = new HashMap<>(); + // 获取回放 + map.put("action", "get_replay"); + // 直播间ID + map.put("room_id", roomId); + // 起始拉取视频,0表示从第一个视频片段开始拉取 + map.put("start", "0"); + // 每次拉取的数量,建议100以内 + map.put("limit", "1"); + + String content = HttpUtils.doPostWithJson(url, map); + JSONObject json = new JSONObject(content); + log.info("微信小程序获取信息:" + content); + //TODO get media_url + return json.getStr("live_replay"); + } + + /** + * 添加直播商品 + * @param commodity 直播商品 + * @return 添加结果 + */ + public JSONObject addGoods(Commodity commodity){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + //发送url + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token="+ token; + GoodsInfo goodsInfo=new GoodsInfo(commodity); + String content = HttpUtils.doPostWithJson(url, goodsInfo); + JSONObject json = new JSONObject(content); + log.info("微信小程序添加直播商品结果:" + content); + return json; + } + + /** + * 删除直播商品 + * @param goodsId 商品ID + * @return 删除结果 + */ + public JSONObject deleteGoods(String goodsId){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + //发送url + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token="+ token; + String content = HttpUtils.doPostWithJson(url, goodsId); + JSONObject json = new JSONObject(content); + log.info("微信小程序删除直播商品结果:" + content); + return json; + } + + /** + * 查询直播商品状态 + * @param goodsIdList 商品ID列表 + * @return 删除结果 + */ + public JSONObject deleteGoods(List goodsIdList){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + //发送url + String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token="+ token; + String content = HttpUtils.doPostWithJson(url, goodsIdList); + JSONObject json = new JSONObject(content); + log.info("微信小程序查询直播商品结果:" + content); + return json; + + } +} diff --git a/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java b/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java index 43d8ce41..e1adc587 100644 --- a/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java +++ b/framework/src/main/java/cn/lili/modules/system/utils/HttpUtils.java @@ -1,21 +1,14 @@ package cn.lili.modules.system.utils; import com.alibaba.fastjson.JSONObject; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.message.BasicHeader; -import org.apache.http.protocol.HTTP; import java.io.*; -import java.net.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.Map; -import java.util.Map.Entry; /** * Http工具 @@ -28,14 +21,6 @@ public final class HttpUtils { public static final int HTTP_CONN_TIMEOUT = 100000; public static final int HTTP_SOCKET_TIMEOUT = 100000; - public static String doPost(String reqUrl, Map parameters) { - return doPost(reqUrl, parameters, "UTF-8", HTTP_CONN_TIMEOUT, HTTP_SOCKET_TIMEOUT); - } - - public static String doPost(String reqUrl, Map parameters, String encoding) { - return doPost(reqUrl, parameters, encoding, HTTP_CONN_TIMEOUT, HTTP_SOCKET_TIMEOUT); - } - public static String doPost(String reqUrl, Map parameters, String encoding, int connectTimeout, int readTimeout) { HttpURLConnection urlConn = null; @@ -54,8 +39,8 @@ public final class HttpUtils { /** * post携带json请求 * - * @param reqUrl - * @param jsonParameters + * @param reqUrl 请求地址 + * @param jsonParameters 参数 * @return */ public static String doPostWithJson(String reqUrl, Map jsonParameters) { @@ -94,6 +79,49 @@ public final class HttpUtils { } + /** + * post携带json请求 + * + * @param reqUrl 请求地址 + * @param object 对象 + * @return + */ + public static String doPostWithJson(String reqUrl, Object object) { + + BufferedReader reader = null; + try { + URL url = new URL(reqUrl);// 创建连接 + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setInstanceFollowRedirects(true); + connection.setRequestMethod("POST"); // 设置请求方式 + // connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式 + connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式 + connection.connect(); + //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的 + OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8); // utf-8编码 + out.append(JSONObject.toJSONString(object)); + out.flush(); + out.close(); + // 读取响应 + reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); + String line; + String res = ""; + while ((line = reader.readLine()) != null) { + res += line; + } + reader.close(); + + return res; + } catch (IOException e) { + e.printStackTrace(); + } + return "error"; // 自定义错误信息 + + } + private static HttpURLConnection sendPost(String reqUrl, Map parameters, String encoding, int connectTimeout, int readTimeout) { HttpURLConnection urlConn = null; @@ -178,16 +206,6 @@ public final class HttpUtils { } } - /** - * UTF-8编码 - * - * @param link - * @return - */ - public static String doGet(String link) { - return doGet(link, "UTF-8", HTTP_CONN_TIMEOUT, HTTP_SOCKET_TIMEOUT); - } - /** * 将parameters中数据转换成用"&"链接的http请求参数形式 * @@ -217,146 +235,4 @@ public final class HttpUtils { } return params.toString(); } - - /** - * post请求封装 参数为{"a":1,"b":2,"c":3} - * - * @param path 接口地址 - * @param Info 参数 - * @return - * @throws IOException - */ - public static String postResponse(String path, JSONObject Info) { - HttpClient client = new DefaultHttpClient(); - HttpPost post = new HttpPost(path); - - post.setHeader("Content-Type", "application/json"); - post.addHeader("Authorization", "Basic YWRtaW46"); - String result = ""; - - try { - StringEntity s = new StringEntity(Info.toString(), "utf-8"); - System.out.println("<-------------------->"); - System.out.println(s); - System.out.println("<-------------------->"); - s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); - post.setEntity(s); - // 发送请求 - HttpResponse httpResponse = client.execute(post); - - // 获取响应输入流 - InputStream inStream = httpResponse.getEntity().getContent(); - BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, StandardCharsets.UTF_8)); - StringBuilder strber = new StringBuilder(); - String line = null; - while ((line = reader.readLine()) != null) { - strber.append(line + "\n"); - } - inStream.close(); - - result = strber.toString(); - System.out.println(result); - - if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { - System.out.println("请求服务器成功,做相应处理"); - } else { - System.out.println("请求服务端失败"); - } - - } catch (Exception e) { - System.out.println("请求异常"); - throw new RuntimeException(e); - } - - return result; - } - - public static String http(String url, String proxyUrl, int proxyPort, Map params, String chartSet) - throws Exception { - URL u = null; - HttpURLConnection con = null; - // 构建请求参数 - StringBuffer sb = new StringBuffer(); - OutputStreamWriter osw = null; - BufferedReader br = null; - if (params != null) { - int i = 0; - for (Entry e : params.entrySet()) { - if (i != 0) { - sb.append("&"); - } else { - i++; - } - sb.append(e.getKey()); - if (e.getValue() != null && !e.getValue().equals("")) { - sb.append("="); - sb.append(e.getValue());///URLEncoder.encode(sign, "UTF-8") - } - } - } - System.out.println("连接:" + url); - System.out.println("发送:" + sb.toString()); - try { - u = new URL(url); - if (null != proxyUrl && !proxyUrl.equals("")) { - System.out.println("代理的IP是:" + proxyUrl + ",代理端口:" + proxyPort); - Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyUrl, proxyPort)); - con = (HttpURLConnection) u.openConnection(proxy); - } else { - con = (HttpURLConnection) u.openConnection(); - } - con.setConnectTimeout(30000); - con.setReadTimeout(700000); - con.setRequestMethod("POST"); - con.setDoOutput(true); - con.setDoInput(true); - con.setUseCaches(false); - con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - con.setRequestProperty("Charset", "UTF-8"); - osw = new OutputStreamWriter(con.getOutputStream(), StandardCharsets.UTF_8); - osw.write(sb.toString()); - osw.flush(); - } catch (SocketTimeoutException e) { - throw new Exception(); - } catch (Exception e) { - throw new Exception(); - } finally { - try { - osw.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - StringBuffer buffer = new StringBuffer(); - try { - br = new BufferedReader(new InputStreamReader(con.getInputStream(), - StandardCharsets.UTF_8)); - String temp; - while ((temp = br.readLine()) != null) { - buffer.append(temp); - buffer.append("\n"); - } - } catch (SocketTimeoutException e) { - throw new Exception(); - } catch (FileNotFoundException e) { - throw new Exception(); - } catch (Exception e) { - throw new Exception(); - } finally { - try { - if (osw != null) { - osw.close(); - } - if (br != null) { - br.close(); - } - if (con != null) { - con.disconnect(); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - return buffer.toString(); - } } \ No newline at end of file From c049552fc7b85b976cadf949ddc73995016a426d Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 17 May 2021 12:55:40 +0800 Subject: [PATCH 05/68] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/ConnectConfigServiceImpl.java | 4 --- .../DistributionGoodsServiceImpl.java | 11 +++----- .../serviceimpl/DistributionServiceImpl.java | 6 +---- .../serviceimpl/CategoryBrandServiceImpl.java | 8 ++---- .../serviceimpl/CategoryServiceImpl.java | 7 ++---- .../CategorySpecificationServiceImpl.java | 6 ++--- .../serviceimpl/GoodsGalleryServiceImpl.java | 11 +++----- .../goods/serviceimpl/GoodsServiceImpl.java | 5 +--- .../serviceimpl/FootprintServiceImpl.java | 8 ++---- .../GoodsCollectionServiceImpl.java | 6 +---- .../MemberEvaluationServiceImpl.java | 9 +++---- .../MemberPointsHistoryServiceImpl.java | 10 +++----- .../member/serviceimpl/MemberServiceImpl.java | 13 ++++------ .../serviceimpl/MemberSignServiceImpl.java | 11 +++----- .../serviceimpl/MemberWalletServiceImpl.java | 25 ++++++++----------- .../MemberWithdrawApplyServiceImpl.java | 12 ++++----- .../StoreCollectionServiceImpl.java | 6 +---- .../serviceimpl/StoreMessageServiceImpl.java | 11 +++----- .../WechatMPMessageServiceImpl.java | 4 +-- .../serviceimpl/WechatMessageServiceImpl.java | 6 ++--- .../serviceimpl/OrderItemServiceImpl.java | 7 +----- .../order/serviceimpl/OrderServiceImpl.java | 5 +--- .../order/serviceimpl/ReceiptServiceImpl.java | 11 +------- .../serviceimpl/RechargeServiceImpl.java | 14 ++++------- .../serviceimpl/WalletLogServiceImpl.java | 6 +---- .../page/serviceimpl/ArticleServiceImpl.java | 4 --- .../page/serviceimpl/PageDataServiceImpl.java | 12 +++------ .../page/serviceimpl/SpecialServiceImpl.java | 3 --- .../DepartmentRoleServiceImpl.java | 11 +++----- .../serviceimpl/MenuServiceImpl.java | 13 +++------- .../serviceimpl/RoleMenuServiceImpl.java | 10 +++----- .../serviceimpl/UserRoleServiceImpl.java | 6 ++--- .../serviceimpl/FullDiscountServiceImpl.java | 6 +---- .../PurchaseQuotedServiceImpl.java | 2 -- .../serviceimpl/CustomWordsServiceImpl.java | 1 - .../GoodsStatisticsDataServiceImpl.java | 10 ++------ .../MemberStatisticsDataServiceImpl.java | 17 ++++--------- .../OrderStatisticsDataServiceImpl.java | 6 +---- .../PlatformViewDataServiceImpl.java | 6 +---- .../RefundOrderStatisticsServiceImpl.java | 8 +----- .../store/serviceimpl/BillServiceImpl.java | 9 +++---- .../FreightTemplateServiceChildImpl.java | 8 +----- .../FreightTemplateServiceImpl.java | 19 +++++--------- .../serviceimpl/StoreAddressServiceImpl.java | 18 ++++--------- .../serviceimpl/StoreDetailServiceImpl.java | 14 ++++------- .../StoreGoodsLabelServiceImpl.java | 13 +++------- .../store/serviceimpl/StoreServiceImpl.java | 12 +++------ .../StoreLogisticsServiceImpl.java | 8 ++---- 48 files changed, 125 insertions(+), 313 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectConfigServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectConfigServiceImpl.java index 15a4e232..8fbd22d3 100644 --- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectConfigServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectConfigServiceImpl.java @@ -7,8 +7,6 @@ import cn.lili.modules.connect.mapper.ConnectConfigMapper; import cn.lili.modules.connect.service.ConnectConfigService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,8 +21,6 @@ import java.util.List; @Service @Transactional(rollbackFor = Exception.class) public class ConnectConfigServiceImpl extends ServiceImpl implements ConnectConfigService { - @Autowired - private ConnectConfigMapper connectConfigMapper; @Override public List listForms() { diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionGoodsServiceImpl.java index b3cacfc7..8ca801d8 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionGoodsServiceImpl.java @@ -34,9 +34,6 @@ import org.springframework.transaction.annotation.Transactional; @Transactional public class DistributionGoodsServiceImpl extends ServiceImpl implements DistributionGoodsService { - //分销商品 - @Autowired - private DistributionGoodsMapper distributionGoodsMapper; //分销员 @Autowired private DistributionService distributionService; @@ -48,22 +45,22 @@ public class DistributionGoodsServiceImpl extends ServiceImpl goodsPage(DistributionGoodsSearchParams searchParams) { //获取商家的分销商品列表 if (UserContext.getCurrentUser().getRole().equals(UserEnums.STORE)) { - return distributionGoodsMapper.getDistributionGoodsVO(PageUtil.initPage(searchParams), searchParams.storeQueryWrapper()); + return this.baseMapper.getDistributionGoodsVO(PageUtil.initPage(searchParams), searchParams.storeQueryWrapper()); } else if (UserContext.getCurrentUser().getRole().equals(UserEnums.MEMBER)) { //判断当前登录用户是否为分销员 Distribution distribution = distributionService.getDistribution(); if (distribution != null) { //判断查看已选择的分销商品列表 if (searchParams.isChecked()) { - return distributionGoodsMapper.selectGoods(PageUtil.initPage(searchParams), searchParams.distributionQueryWrapper(), distribution.getId()); + return this.baseMapper.selectGoods(PageUtil.initPage(searchParams), searchParams.distributionQueryWrapper(), distribution.getId()); } else { - return distributionGoodsMapper.notSelectGoods(PageUtil.initPage(searchParams), searchParams.distributionQueryWrapper(), distribution.getId()); + return this.baseMapper.notSelectGoods(PageUtil.initPage(searchParams), searchParams.distributionQueryWrapper(), distribution.getId()); } } throw new ServiceException(ResultCode.DISTRIBUTION_NOT_EXIST); } //如果是平台则直接进行查询 - return distributionGoodsMapper.getDistributionGoodsVO(PageUtil.initPage(searchParams), searchParams.distributionQueryWrapper()); + return this.baseMapper.getDistributionGoodsVO(PageUtil.initPage(searchParams), searchParams.distributionQueryWrapper()); } @Override diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java index 170d1f62..dc476792 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java @@ -43,10 +43,6 @@ public class DistributionServiceImpl extends ServiceImpl implements CategoryBrandService { - //分类品牌绑定 - @Autowired - private CategoryBrandMapper categoryBrandMapper; - @Override public List getCategoryBrandList(String categoryId) { - return categoryBrandMapper.getCategoryBrandList(categoryId); + return this.baseMapper.getCategoryBrandList(categoryId); } @Override public void deleteByCategoryId(String categoryId) { - categoryBrandMapper.delete(new LambdaUpdateWrapper().eq(CategoryBrand::getCategoryId, categoryId)); + this.baseMapper.delete(new LambdaUpdateWrapper().eq(CategoryBrand::getCategoryId, categoryId)); } @Override diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java index b4207081..1d26a5d2 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java @@ -40,9 +40,6 @@ public class CategoryServiceImpl extends ServiceImpl i //缓存 @Autowired private Cache cache; - //分类 - @Autowired - private CategoryMapper categoryMapper; @Override public List dbList(String parentId) { @@ -159,7 +156,7 @@ public class CategoryServiceImpl extends ServiceImpl i .ne(category.getId() != null, "id", category.getId()) .eq(DELETE_FLAG_COLUMN, false) .orderByAsc("sort_order"); - return this.categoryMapper.selectList(queryWrapper); + return this.baseMapper.selectList(queryWrapper); } @Override @@ -187,7 +184,7 @@ public class CategoryServiceImpl extends ServiceImpl i .set("sort_order", category.getSortOrder()) .set(DELETE_FLAG_COLUMN, category.getDeleteFlag()) .set("commission_rate", category.getCommissionRate()); - categoryMapper.update(category, updateWrapper); + this.baseMapper.update(category, updateWrapper); removeCache(); } diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategorySpecificationServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategorySpecificationServiceImpl.java index 9b308210..60405e67 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategorySpecificationServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategorySpecificationServiceImpl.java @@ -23,12 +23,10 @@ import java.util.List; @Service @Transactional public class CategorySpecificationServiceImpl extends ServiceImpl implements CategorySpecificationService { - @Autowired - private CategorySpecificationMapper categorySpecificationMapper; @Override public List getCategorySpecList(String categoryId) { - return categorySpecificationMapper.getCategorySpecList(categoryId); + return this.baseMapper.getCategorySpecList(categoryId); } @Override @@ -38,6 +36,6 @@ public class CategorySpecificationServiceImpl extends ServiceImpl().eq(CategorySpecification::getCategoryId,categoryId)); + this.baseMapper.delete(new LambdaQueryWrapper().eq(CategorySpecification::getCategoryId,categoryId)); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsGalleryServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsGalleryServiceImpl.java index d211d078..6cd18533 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsGalleryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsGalleryServiceImpl.java @@ -12,7 +12,6 @@ import cn.lili.modules.system.service.SettingService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,9 +32,7 @@ public class GoodsGalleryServiceImpl extends ServiceImpl goodsGalleryList, String goodsId) { //删除原来商品相册信息 - this.goodsGalleryMapper.delete(new UpdateWrapper().eq("goods_id", goodsId)); + this.baseMapper.delete(new UpdateWrapper().eq("goods_id", goodsId)); //确定好图片选择器后进行处理 int i = 0; for (String origin : goodsGalleryList) { @@ -54,7 +51,7 @@ public class GoodsGalleryServiceImpl extends ServiceImpl goodsGalleryList(String goodsId) { //根据商品id查询商品相册 - return goodsGalleryMapper.selectList(new QueryWrapper().eq("goods_id", goodsId)); + return this.baseMapper.selectList(new QueryWrapper().eq("goods_id", goodsId)); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index eaa70349..f717e3d3 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -55,9 +55,6 @@ import java.util.List; @Transactional public class GoodsServiceImpl extends ServiceImpl implements GoodsService { - //商品 - @Autowired - private GoodsMapper goodsMapper; //商品属性 @Autowired private GoodsParamsService goodsParamsService; @@ -85,7 +82,7 @@ public class GoodsServiceImpl extends ServiceImpl implements @Override public void underStoreGoods(String storeId) { - this.goodsMapper.underStoreGoods(storeId); + this.baseMapper.underStoreGoods(storeId); } @Override diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java index 89d28398..c66cf5ab 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java @@ -11,7 +11,6 @@ import cn.lili.modules.search.service.EsGoodsSearchService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,9 +29,6 @@ import java.util.Objects; @Transactional public class FootprintServiceImpl extends ServiceImpl implements FootprintService { - //足迹数据层 - @Autowired - private FootprintMapper footprintMapper; //es商品业务层 @Autowired private EsGoodsSearchService esGoodsSearchService; @@ -54,7 +50,7 @@ public class FootprintServiceImpl extends ServiceImpl skuIdList = footprintMapper.footprintSkuIdList(PageUtil.initPage(pageVO), lambdaQueryWrapper); + List skuIdList = this.baseMapper.footprintSkuIdList(PageUtil.initPage(pageVO), lambdaQueryWrapper); if (skuIdList.size() > 0) { List list = esGoodsSearchService.getEsGoodsBySkuIds(skuIdList); //去除为空的商品数据 diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java index 11d26725..b4bd13d0 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/GoodsCollectionServiceImpl.java @@ -17,7 +17,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,9 +36,6 @@ import java.util.Optional; public class GoodsCollectionServiceImpl extends ServiceImpl implements GoodsCollectionService { - //商品收藏 - @Autowired - private GoodsCollectionMapper goodsCollectionMapper; //rocketMq @Autowired private RocketMQTemplate rocketMQTemplate; @@ -53,7 +49,7 @@ public class GoodsCollectionServiceImpl extends ServiceImpl implements MemberEvaluationService { - //会员评价数据层 - @Autowired - private MemberEvaluationMapper memberEvaluationMapper; //订单 @Autowired private OrderService orderService; @@ -91,12 +88,12 @@ public class MemberEvaluationServiceImpl extends ServiceImpl queryByParams(StoreEvaluationQueryParams storeEvaluationQueryParams) { - return memberEvaluationMapper.getMemberEvaluationList(PageUtil.initPage(storeEvaluationQueryParams), storeEvaluationQueryParams.queryWrapper()); + return this.baseMapper.getMemberEvaluationList(PageUtil.initPage(storeEvaluationQueryParams), storeEvaluationQueryParams.queryWrapper()); } @Override public IPage queryPage(EvaluationQueryParams evaluationQueryParams, PageVO page) { - return memberEvaluationMapper.getMemberEvaluationList(PageUtil.initPage(page), evaluationQueryParams.queryWrapper()); + return this.baseMapper.getMemberEvaluationList(PageUtil.initPage(page), evaluationQueryParams.queryWrapper()); } @Override @@ -163,7 +160,7 @@ public class MemberEvaluationServiceImpl extends ServiceImpl> list = memberEvaluationMapper.getEvaluationNumber(goodsId); + List> list = this.baseMapper.getEvaluationNumber(goodsId); Integer good = 0; Integer moderate = 0; diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java index 8a493180..ef10a09b 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java @@ -22,8 +22,6 @@ import org.springframework.transaction.annotation.Transactional; @Transactional public class MemberPointsHistoryServiceImpl extends ServiceImpl implements MemberPointsHistoryService { - @Autowired - private MemberPointsHistoryMapper memberPointsHistoryMapper; @Override public MemberPointsHistoryVO getMemberPointsHistoryVO(String memberId) { @@ -32,12 +30,12 @@ public class MemberPointsHistoryServiceImpl extends ServiceImpl implements MemberService { - //会员数据处理层 - @Autowired - private MemberMapper memberMapper; //会员token @Autowired private MemberTokenGenerate memberTokenGenerate; @@ -90,7 +87,7 @@ public class MemberServiceImpl extends ServiceImpl impleme public Member findByUsername(String userName) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("username", userName); - return memberMapper.selectOne(queryWrapper); + return this.baseMapper.selectOne(queryWrapper); } @@ -107,7 +104,7 @@ public class MemberServiceImpl extends ServiceImpl impleme public boolean findByMobile(String uuid, String mobile) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("mobile", mobile); - Member member = memberMapper.selectOne(queryWrapper); + Member member = this.baseMapper.selectOne(queryWrapper); if (member == null) { throw new ServiceException(ResultCode.USER_NOT_PHONE); } @@ -204,7 +201,7 @@ public class MemberServiceImpl extends ServiceImpl impleme public Token mobilePhoneLogin(String mobilePhone) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("mobile", mobilePhone); - Member member = memberMapper.selectOne(queryWrapper); + Member member = this.baseMapper.selectOne(queryWrapper); //如果手机号不存在则自动注册用户 if (member == null) { member = new Member(mobilePhone, UuidUtils.getUUID(), mobilePhone); @@ -413,7 +410,7 @@ public class MemberServiceImpl extends ServiceImpl impleme @Override public List distribution() { - List memberDistributionVOS = memberMapper.distribution(); + List memberDistributionVOS = this.baseMapper.distribution(); return memberDistributionVOS; } @@ -426,7 +423,7 @@ public class MemberServiceImpl extends ServiceImpl impleme private Member findByPhone(String mobilePhone) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("mobile", mobilePhone); - return memberMapper.selectOne(queryWrapper); + return this.baseMapper.selectOne(queryWrapper); } /** diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java index 1fb34be9..42d864bf 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberSignServiceImpl.java @@ -40,9 +40,6 @@ import java.util.Map; @Transactional public class MemberSignServiceImpl extends ServiceImpl implements MemberSignService { - //会员签到 - @Autowired - private MemberSignMapper memberSignMapper; //RocketMQ @Autowired private RocketMQTemplate rocketMQTemplate; @@ -66,12 +63,12 @@ public class MemberSignServiceImpl extends ServiceImpl todaySigns = memberSignMapper.getTodayMemberSign(queryWrapper); + List todaySigns = this.baseMapper.getTodayMemberSign(queryWrapper); if (todaySigns.size() > 0) { throw new ServiceException(ResultCode.MEMBER_SIGN_REPEAT); } //当前签到天数的前一天日期 - List signs = memberSignMapper.getBeforeMemberSign(authUser.getId()); + List signs = this.baseMapper.getBeforeMemberSign(authUser.getId()); //构建参数 MemberSign memberSign = new MemberSign(); memberSign.setMemberId(authUser.getId()); @@ -84,7 +81,7 @@ public class MemberSignServiceImpl extends ServiceImpl 0) { String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_SING.name(); @@ -101,7 +98,7 @@ public class MemberSignServiceImpl extends ServiceImpl implements MemberWalletService { - //预存款数据层 - @Autowired - private MemberWalletMapper walletMapper; //预存款日志 @Autowired private WalletLogService walletLogService; @@ -67,7 +64,7 @@ public class MemberWalletServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id", memberId); //执行查询 - MemberWallet memberWallet = this.walletMapper.selectOne(queryWrapper); + MemberWallet memberWallet = this.baseMapper.selectOne(queryWrapper); //如果没有钱包,则创建钱包 if (memberWallet == null) { memberWallet = this.save(memberId, memberService.getById(memberId).getUsername()); @@ -83,7 +80,7 @@ public class MemberWalletServiceImpl extends ServiceImpl().eq("member_id", memberId)); + MemberWallet memberWallet = this.getOne(new QueryWrapper().eq("member_id", memberId)); //如果会员预存款信息不存在则同步重新建立预存款信息 if (memberWallet == null) { Member member = memberService.getById(memberId); @@ -184,11 +181,11 @@ public class MemberWalletServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id", member.getId()); - MemberWallet memberWallet = this.walletMapper.selectOne(queryWrapper); + MemberWallet memberWallet = this.getOne(queryWrapper); //如果 预存款信息不为空 执行设置密码 if (memberWallet != null) { memberWallet.setWalletPassword(pwd); - this.walletMapper.updateById(memberWallet); + this.updateById(memberWallet); } } @@ -200,7 +197,7 @@ public class MemberWalletServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id", authUser.getId()); - MemberWallet wallet = this.walletMapper.selectOne(queryWrapper); + MemberWallet wallet = this.getOne(queryWrapper); return wallet != null && !StringUtils.isEmpty(wallet.getWalletPassword()); } @@ -211,7 +208,7 @@ public class MemberWalletServiceImpl extends ServiceImpl implements MemberWithdrawApplyService { - //提现申请数据层 - @Autowired - private MemberWithdrawApplyMapper memberWithdrawApplyMapper; + //会员余额 @Autowired private MemberWalletService memberWalletService; @@ -43,7 +41,7 @@ public class MemberWithdrawApplyServiceImpl extends ServiceImpl implements StoreCollectionService { - @Autowired - private StoreCollectionMapper storeCollectionMapper; @Override public IPage storeCollection(PageVO pageVo) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("sc.member_id", UserContext.getCurrentUser().getId()); queryWrapper.orderByDesc("sc.create_time"); - return storeCollectionMapper.storeCollectionVOList(PageUtil.initPage(pageVo), queryWrapper); + return this.baseMapper.storeCollectionVOList(PageUtil.initPage(pageVo), queryWrapper); } @Override diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/StoreMessageServiceImpl.java b/framework/src/main/java/cn/lili/modules/message/serviceimpl/StoreMessageServiceImpl.java index c7fe0d3c..69d2246b 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/StoreMessageServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/message/serviceimpl/StoreMessageServiceImpl.java @@ -14,7 +14,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.elasticsearch.ResourceNotFoundException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,15 +28,12 @@ import java.util.List; @Service @Transactional public class StoreMessageServiceImpl extends ServiceImpl implements StoreMessageService { - @Autowired - private StoreMessageMapper storeMessageMapper; @Override public boolean deleteByMessageId(String messageId) { StoreMessage storeMessage = this.getById(messageId); if (storeMessage != null) { - int result = storeMessageMapper.deleteById(messageId); - return result > 0; + return this.removeById(messageId); } return false; @@ -60,7 +56,7 @@ public class StoreMessageServiceImpl extends ServiceImpl 0; + return this.updateById(storeMessage); } return false; } diff --git a/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java b/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java index 43328053..a6f8b107 100644 --- a/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/message/serviceimpl/WechatMPMessageServiceImpl.java @@ -36,8 +36,6 @@ import java.util.Map; @Transactional(rollbackFor = Exception.class) public class WechatMPMessageServiceImpl extends ServiceImpl implements WechatMPMessageService { - @Autowired - private WechatMPMessageMapper wechatMPMessageMapper; @Autowired private WechatAccessTokenUtil wechatAccessTokenUtil; @@ -53,7 +51,7 @@ public class WechatMPMessageServiceImpl extends ServiceImpl implements WechatMessageService { - @Autowired - private WechatMessageMapper wechatMessageMapper; + @Autowired private WechatAccessTokenUtil wechatAccessTokenUtil; @@ -50,7 +48,7 @@ public class WechatMessageServiceImpl extends ServiceImpl implements OrderItemService { - @Autowired - private OrderItemMapper orderItemMapper; - @Override public void updateCommentStatus(String orderItemSn, CommentStatusEnum commentStatusEnum) { LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); @@ -89,6 +84,6 @@ public class OrderItemServiceImpl extends ServiceImpl implements private static final String ORDER_SN_COLUMN = "order_sn"; - //订单数据层 - @Autowired - private OrderMapper orderMapper; //延时任务 @Autowired private TimeTrigger timeTrigger; @@ -479,7 +476,7 @@ public class OrderServiceImpl extends ServiceImpl implements queryWrapper.eq("o.delete_flag", false); queryWrapper.groupBy("o.id"); queryWrapper.orderByDesc("o.id"); - return orderMapper.queryByParams(PageUtil.initPage(pageVO), queryWrapper); + return this.baseMapper.queryByParams(PageUtil.initPage(pageVO), queryWrapper); } @Override diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java index ed967f1f..c5073fd2 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java @@ -2,21 +2,17 @@ package cn.lili.modules.order.order.serviceimpl; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.order.order.entity.dos.Receipt; import cn.lili.modules.order.order.entity.dto.OrderReceiptDTO; import cn.lili.modules.order.order.entity.dto.ReceiptSearchParams; -import cn.lili.modules.order.order.mapper.OrderItemMapper; import cn.lili.modules.order.order.mapper.ReceiptMapper; import cn.lili.modules.order.order.service.ReceiptService; 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.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,14 +26,9 @@ import org.springframework.transaction.annotation.Transactional; @Transactional public class ReceiptServiceImpl extends ServiceImpl implements ReceiptService { - //发票mapper - @Autowired - private ReceiptMapper receiptMapper; - - @Override public IPage getReceiptData(ReceiptSearchParams searchParams, PageVO pageVO) { - return receiptMapper.getReceipt(PageUtil.initPage(pageVO), searchParams.wrapper()); + return this.baseMapper.getReceipt(PageUtil.initPage(pageVO), searchParams.wrapper()); } @Override diff --git a/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/RechargeServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/RechargeServiceImpl.java index 6114d3c7..c0b8684a 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/RechargeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/RechargeServiceImpl.java @@ -18,7 +18,6 @@ import cn.lili.modules.order.trade.service.RechargeService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -35,9 +34,6 @@ import java.util.Date; @Transactional public class RechargeServiceImpl extends ServiceImpl implements RechargeService { - //预存款 - @Autowired - private RechargeMapper rechargeMapper; //会员预存款 @Autowired private MemberWalletService memberWalletService; @@ -51,7 +47,7 @@ public class RechargeServiceImpl extends ServiceImpl i //整合充值订单数据 Recharge recharge = new Recharge(sn, authUser.getId(), authUser.getUsername(), price); //添加预存款充值账单 - this.rechargeMapper.insert(recharge); + this.save(recharge); //返回预存款 return recharge; } @@ -75,20 +71,20 @@ public class RechargeServiceImpl extends ServiceImpl i queryWrapper.between("pay_time", start, end); } //查询返回数据 - return this.rechargeMapper.selectPage(PageUtil.initPage(page), queryWrapper); + return this.page(PageUtil.initPage(page), queryWrapper); } @Override public void paySuccess(String sn, String receivableNo) { //根据sn获取支付账单 - Recharge recharge = this.rechargeMapper.selectOne(new QueryWrapper().eq("recharge_sn", sn)); + Recharge recharge = this.getOne(new QueryWrapper().eq("recharge_sn", sn)); //如果支付账单不为空则进行一下逻辑 if (recharge != null) { //将此账单支付状态更改为已支付 recharge.setPayStatus(PayStatusEnum.PAID.name()); recharge.setReceivableNo(receivableNo); //执行保存操作 - this.rechargeMapper.updateById(recharge); + this.updateById(recharge); //增加预存款余额 memberWalletService.increase(recharge.getRechargeMoney(), recharge.getMemberId(), "会员余额充值,充值单号为:" + recharge.getRechargeSn(), DepositServiceTypeEnum.WALLET_RECHARGE.name()); } @@ -96,7 +92,7 @@ public class RechargeServiceImpl extends ServiceImpl i @Override public Recharge getRecharge(String sn) { - Recharge recharge = this.rechargeMapper.selectOne(new QueryWrapper().eq("recharge_sn", sn)); + Recharge recharge = this.getOne(new QueryWrapper().eq("recharge_sn", sn)); if (recharge != null) { return recharge; } diff --git a/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java index a1b69f8e..9aa465c4 100644 --- a/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/trade/serviceimpl/WalletLogServiceImpl.java @@ -10,7 +10,6 @@ import cn.lili.modules.order.trade.service.WalletLogService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,9 +25,6 @@ import java.util.Date; @Transactional public class WalletLogServiceImpl extends ServiceImpl implements WalletLogService { - @Autowired - private WalletLogMapper walletLogMapper; - @Override public IPage depositLogPage(PageVO page, DepositQueryVO depositQueryVO) { //构建查询条件 @@ -44,6 +40,6 @@ public class WalletLogServiceImpl extends ServiceImpl implements ArticleService { - @Autowired - private ArticleMapper articleMapper; - @Override public IPage articlePage(ArticleSearchParams articleSearchParams) { articleSearchParams.setSort("a.sort"); diff --git a/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java index afe8386b..92165a49 100644 --- a/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java @@ -1,7 +1,7 @@ package cn.lili.modules.page.serviceimpl; -import cn.lili.common.enums.SwitchEnum; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.SwitchEnum; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; @@ -18,8 +18,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -30,8 +28,6 @@ import org.springframework.stereotype.Service; */ @Service public class PageDataServiceImpl extends ServiceImpl implements PageDataService { - @Autowired - private PageDataMapper pageDataMapper; @Override public void addStorePageData(String storeId) { @@ -116,7 +112,7 @@ public class PageDataServiceImpl extends ServiceImpl i queryWrapper.eq(pageData.getNum() != null, "num", pageData.getNum()); } //判断是否为唯一的页面 - if (pageDataMapper.getPageDataNum(queryWrapper) == 1) { + if (this.baseMapper.getPageDataNum(queryWrapper) == 1) { throw new ServiceException(ResultCode.PAGE_DELETE_ERROR); } return this.removeById(id); @@ -136,7 +132,7 @@ public class PageDataServiceImpl extends ServiceImpl i queryWrapper.eq("page_client_type", pageDataDTO.getPageClientType()); - return pageDataMapper.getPageData(queryWrapper); + return this.baseMapper.getPageData(queryWrapper); } @Override @@ -146,7 +142,7 @@ public class PageDataServiceImpl extends ServiceImpl i queryWrapper.eq(pageDataDTO.getNum() != null, "num", pageDataDTO.getNum()); queryWrapper.eq(pageDataDTO.getPageClientType() != null, "page_client_type", pageDataDTO.getPageClientType()); - return pageDataMapper.getPageDataList(PageUtil.initPage(pageVO), queryWrapper); + return this.baseMapper.getPageDataList(PageUtil.initPage(pageVO), queryWrapper); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/page/serviceimpl/SpecialServiceImpl.java b/framework/src/main/java/cn/lili/modules/page/serviceimpl/SpecialServiceImpl.java index 85a19ed7..09b6a4f8 100644 --- a/framework/src/main/java/cn/lili/modules/page/serviceimpl/SpecialServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/page/serviceimpl/SpecialServiceImpl.java @@ -18,9 +18,6 @@ import org.springframework.stereotype.Service; @Service public class SpecialServiceImpl extends ServiceImpl implements SpecialService { - //专题 - @Autowired - private SpecialMapper specialMapper; //页面数据 @Autowired private PageDataService pageDataService; diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/DepartmentRoleServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/DepartmentRoleServiceImpl.java index 3c577f45..255e0eaa 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/DepartmentRoleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/DepartmentRoleServiceImpl.java @@ -5,8 +5,6 @@ import cn.lili.modules.permission.mapper.DepartmentRoleMapper; import cn.lili.modules.permission.service.DepartmentRoleService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,21 +19,20 @@ import java.util.List; @Service @Transactional(rollbackFor = Exception.class) public class DepartmentRoleServiceImpl extends ServiceImpl implements DepartmentRoleService { - @Autowired - private DepartmentRoleMapper departmentRoleMapper; + @Override public List listByDepartmentId(String departmentId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("department_id", departmentId); - return departmentRoleMapper.selectList(queryWrapper); + return this.baseMapper.selectList(queryWrapper); } @Override public void updateByDepartmentId(String departmentId, List departmentRoles) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("department_id", departmentId); - departmentRoleMapper.delete(queryWrapper); + this.remove(queryWrapper); this.saveBatch(departmentRoles); } @@ -44,6 +41,6 @@ public class DepartmentRoleServiceImpl extends ServiceImpl ids) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("department_id", ids); - departmentRoleMapper.delete(queryWrapper); + this.remove(queryWrapper); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java index a463f6ee..900a24a1 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/MenuServiceImpl.java @@ -1,6 +1,5 @@ package cn.lili.modules.permission.serviceimpl; -import cn.lili.common.enums.MessageCode; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; @@ -8,16 +7,15 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.SearchVO; -import cn.lili.modules.permission.entity.dto.MenuSearchParams; import cn.lili.modules.permission.entity.dos.Menu; import cn.lili.modules.permission.entity.dos.RoleMenu; +import cn.lili.modules.permission.entity.dto.MenuSearchParams; import cn.lili.modules.permission.entity.vo.MenuVO; import cn.lili.modules.permission.mapper.MenuMapper; import cn.lili.modules.permission.service.MenuService; import cn.lili.modules.permission.service.RoleMenuService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -35,9 +33,6 @@ import java.util.List; @Service @Transactional public class MenuServiceImpl extends ServiceImpl implements MenuService { - //菜单 - @Autowired - private MenuMapper menuMapper; //菜单角色 @Autowired private RoleMenuService roleMenuService; @@ -62,13 +57,13 @@ public class MenuServiceImpl extends ServiceImpl implements Me if (authUser.getIsSuper()) { return this.tree(); } - List userMenus = menuMapper.findByUserId(authUser.getId()); + List userMenus = this.baseMapper.findByUserId(authUser.getId()); return this.tree(userMenus); } @Override public List findUserList(String userId) { - return menuMapper.findByUserId(userId); + return this.baseMapper.findByUserId(userId); } @Override @@ -91,7 +86,7 @@ public class MenuServiceImpl extends ServiceImpl implements Me queryWrapper.like("title", title); } queryWrapper.orderByDesc("sort_order"); - return menuMapper.selectList(queryWrapper); + return this.baseMapper.selectList(queryWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java index 5e28fc3b..e582a873 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/RoleMenuServiceImpl.java @@ -7,7 +7,6 @@ import cn.lili.modules.permission.mapper.RoleMenuMapper; import cn.lili.modules.permission.service.RoleMenuService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,15 +26,12 @@ public class RoleMenuServiceImpl extends ServiceImpl i //菜单 @Autowired private MenuMapper menuMapper; - //角色菜单 - @Autowired - private RoleMenuMapper roleMenuMapper; @Override public List findByRoleId(String roleId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("role_id", roleId); - return roleMenuMapper.selectList(queryWrapper); + return this.baseMapper.selectList(queryWrapper); } @Override @@ -61,13 +57,13 @@ public class RoleMenuServiceImpl extends ServiceImpl i //删除 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("role_id", roleId); - roleMenuMapper.delete(queryWrapper); + this.remove(queryWrapper); } @Override public void deleteRoleMenu(List roleId) { //删除 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("role_id", roleId); - roleMenuMapper.delete(queryWrapper); + this.remove(queryWrapper); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/UserRoleServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/UserRoleServiceImpl.java index 434b387e..8046084b 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/UserRoleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/UserRoleServiceImpl.java @@ -22,14 +22,12 @@ import java.util.List; @Service @Transactional public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { - @Autowired - private UserRoleMapper userRoleMapper; @Override public List listByUserId(String userId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", userId); - return userRoleMapper.selectList(queryWrapper); + return this.baseMapper.selectList(queryWrapper); } @Override @@ -46,7 +44,7 @@ public class UserRoleServiceImpl extends ServiceImpl i //删除 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", userId); - userRoleMapper.delete(queryWrapper); + this.remove(queryWrapper); //保存 this.saveBatch(userRoles); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java index c97a7495..06e9081c 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java @@ -27,7 +27,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -57,9 +56,6 @@ public class FullDiscountServiceImpl extends ServiceImpl queryWrapper = PromotionTools.checkActiveTime(statTime, endTime, PromotionTypeEnum.FULL_DISCOUNT, storeId, id); - Integer sameNum = this.fullDiscountMapper.selectCount(queryWrapper); + Integer sameNum = this.count(queryWrapper); if (sameNum > 0) { throw new ServiceException("当前时间内已存在同类活动"); } diff --git a/framework/src/main/java/cn/lili/modules/purchase/serviceimpl/PurchaseQuotedServiceImpl.java b/framework/src/main/java/cn/lili/modules/purchase/serviceimpl/PurchaseQuotedServiceImpl.java index 8dbdd847..cb7d3833 100644 --- a/framework/src/main/java/cn/lili/modules/purchase/serviceimpl/PurchaseQuotedServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/purchase/serviceimpl/PurchaseQuotedServiceImpl.java @@ -25,8 +25,6 @@ import java.util.List; @Service @Transactional public class PurchaseQuotedServiceImpl extends ServiceImpl implements PurchaseQuotedService { - @Autowired - private PurchaseQuotedMapper purchaseQuotedMapper; @Autowired private PurchaseQuotedItemService purchaseQuotedItemService; diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java index a4185096..b5514bcc 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/CustomWordsServiceImpl.java @@ -24,7 +24,6 @@ import java.util.List; @Service public class CustomWordsServiceImpl extends ServiceImpl implements CustomWordsService { - @Override public String deploy() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(CustomWords::getDisabled, 1); diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java index d8d65ddb..03aa6a91 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/GoodsStatisticsDataServiceImpl.java @@ -30,12 +30,6 @@ import java.util.List; @Service public class GoodsStatisticsDataServiceImpl extends ServiceImpl implements GoodsStatisticsDataService { - /** - * 商品统计 - */ - @Autowired - private GoodsStatisticsDataMapper goodsStatisticsDataMapper; - @Override public List getGoodsStatisticsData(GoodsStatisticsQueryParam goodsStatisticsQueryParam, Integer num) { //获取查询条件 @@ -47,7 +41,7 @@ public class GoodsStatisticsDataServiceImpl extends ServiceImpl(1, num); - return goodsStatisticsDataMapper.getGoodsStatisticsData(page, queryWrapper); + return this.baseMapper.getGoodsStatisticsData(page, queryWrapper); } @Override @@ -56,7 +50,7 @@ public class GoodsStatisticsDataServiceImpl extends ServiceImpl implements MemberStatisticsDataService { - /** - * 会员统计 - */ - @Autowired - private MemberStatisticsDataMapper memberStatisticsDataMapper; - @Override public Integer getMemberCount() { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("disabled", true); - return memberStatisticsDataMapper.customSqlQuery(queryWrapper); + return this.baseMapper.customSqlQuery(queryWrapper); } @Override public Integer todayMemberNum() { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.gt("create_time", DateUtil.beginOfDay(new Date())); - return memberStatisticsDataMapper.customSqlQuery(queryWrapper); + return this.baseMapper.customSqlQuery(queryWrapper); } @Override public Integer memberCount(Date endTime) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.lt("create_time", endTime); - return memberStatisticsDataMapper.customSqlQuery(queryWrapper); + return this.baseMapper.customSqlQuery(queryWrapper); } @Override @@ -56,14 +49,14 @@ public class MemberStatisticsDataServiceImpl extends ServiceImpl implements OrderStatisticsDataService { - - //订单统计 - @Autowired - private OrderStatisticsDataMapper orderStatisticsDataMapper; //平台PV统计 @Autowired private PlatformViewDataService platformViewDataService; @@ -215,7 +211,7 @@ public class OrderStatisticsDataServiceImpl extends ServiceImpl orderStatisticsDataVOS = orderStatisticsDataMapper.getOrderStatisticsData(queryWrapper); + List orderStatisticsDataVOS = this.baseMapper.getOrderStatisticsData(queryWrapper); Calendar calendar = Calendar.getInstance(); calendar.setTime(dates[0]); diff --git a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java index 723faf2e..836ecc1f 100644 --- a/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/statistics/serviceimpl/PlatformViewDataServiceImpl.java @@ -21,7 +21,6 @@ import cn.lili.modules.statistics.util.StatisticsSuffix; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -49,9 +48,6 @@ public class PlatformViewDataServiceImpl extends ServiceImpl implements RefundOrderStatisticsService { - //退款统计 - @Autowired - private RefundOrderStatisticsDataMapper refundOrderStatisticsDataMapper; - @Override public IPage getRefundOrderStatisticsData(PageVO pageVO, StatisticsQueryParam statisticsQueryParam) { QueryWrapper queryWrapper = getQueryWrapper(statisticsQueryParam); - return refundOrderStatisticsDataMapper.getRefundStatisticsData(PageUtil.initPage(pageVO), queryWrapper); + return this.baseMapper.getRefundStatisticsData(PageUtil.initPage(pageVO), queryWrapper); } @Override diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index 248e7c07..36a2f95c 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -49,9 +49,6 @@ public class BillServiceImpl extends ServiceImpl implements Bi //商家流水 @Autowired private StoreFlowService storeFlowService; - //结算单 - @Autowired - private BillMapper billMapper; @Override public void createBill(String storeId, Date startTime) { @@ -77,7 +74,7 @@ public class BillServiceImpl extends ServiceImpl implements Bi bill.setSn(SnowFlake.createStr("B")); //入账结算信息 - Bill orderBill = billMapper.getOrderBill(storeId, FlowTypeEnum.PAY.name()); + Bill orderBill = this.baseMapper.getOrderBill(storeId, FlowTypeEnum.PAY.name()); Double orderPrice = 0D; if (orderBill != null) { bill.setOrderPrice(orderBill.getOrderPrice()); @@ -89,7 +86,7 @@ public class BillServiceImpl extends ServiceImpl implements Bi //退款结算信息 - Bill refundBill = billMapper.getRefundBill(storeId, FlowTypeEnum.REFUND.name()); + Bill refundBill = this.baseMapper.getRefundBill(storeId, FlowTypeEnum.REFUND.name()); Double refundPrice = 0D; if(refundBill!=null){ bill.setRefundPrice(refundBill.getRefundPrice()); @@ -152,7 +149,7 @@ public class BillServiceImpl extends ServiceImpl implements Bi @Override public IPage billPage(BillSearchParams billSearchParams) { QueryWrapper queryWrapper = billSearchParams.queryWrapper(); - return billMapper.queryBillPage(PageUtil.initPage(billSearchParams), queryWrapper); + return this.baseMapper.queryBillPage(PageUtil.initPage(billSearchParams), queryWrapper); } @Override diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceChildImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceChildImpl.java index 764f34ec..46224790 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceChildImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceChildImpl.java @@ -6,8 +6,6 @@ import cn.lili.modules.store.service.FreightTemplateChildService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,15 +21,11 @@ import java.util.List; @Transactional(rollbackFor = Exception.class) public class FreightTemplateServiceChildImpl extends ServiceImpl implements FreightTemplateChildService { - //配送子模板数据层 - @Autowired - private FreightTemplateChildMapper freightTemplateChildMapper; - @Override public List getFreightTemplateChild(String freightTemplateId) { LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(FreightTemplateChild::getFreightTemplateId, freightTemplateId); - return freightTemplateChildMapper.selectList(lambdaQueryWrapper); + return this.baseMapper.selectList(lambdaQueryWrapper); } @Override diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java index 40771f63..11e1b0bc 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java @@ -19,7 +19,6 @@ 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.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,10 +36,6 @@ import java.util.List; @Service @Transactional(rollbackFor = Exception.class) public class FreightTemplateServiceImpl extends ServiceImpl implements FreightTemplateService { - - //配送模板 - @Autowired - private FreightTemplateMapper freightTemplateMapper; //配送子模板 @Autowired private FreightTemplateChildService freightTemplateChildService; @@ -60,7 +55,7 @@ public class FreightTemplateServiceImpl extends ServiceImpl lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(FreightTemplate::getStoreId, UserContext.getCurrentUser().getId()); - List freightTemplates = freightTemplateMapper.selectList(lambdaQueryWrapper); + List freightTemplates = this.baseMapper.selectList(lambdaQueryWrapper); if (!freightTemplates.isEmpty()) { //如果模板不为空则查询子模板信息 for (FreightTemplate freightTemplate : freightTemplates) { @@ -80,18 +75,16 @@ public class FreightTemplateServiceImpl extends ServiceImpl getFreightTemplate(PageVO pageVo) { - //获取当前登录商家账号 - AuthUser tokenUser = UserContext.getCurrentUser(); LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(FreightTemplate::getStoreId, UserContext.getCurrentUser().getId()); - return freightTemplateMapper.selectPage(PageUtil.initPage(pageVo), lambdaQueryWrapper); + lambdaQueryWrapper.eq(FreightTemplate::getStoreId, UserContext.getCurrentUser().getStoreId()); + return this.baseMapper.selectPage(PageUtil.initPage(pageVo), lambdaQueryWrapper); } @Override public FreightTemplateVO getFreightTemplate(String id) { FreightTemplateVO freightTemplateVO = new FreightTemplateVO(); //获取运费模板 - FreightTemplate freightTemplate = freightTemplateMapper.selectById(id); + FreightTemplate freightTemplate = this.getById(id); if (freightTemplate != null) { //复制属性 BeanUtils.copyProperties(freightTemplate, freightTemplateVO); @@ -112,7 +105,7 @@ public class FreightTemplateServiceImpl extends ServiceImpl list = new ArrayList<>(); for (FreightTemplateChild freightTemplateChild : freightTemplateVO.getFreightTemplateChildList()) { @@ -138,7 +131,7 @@ public class FreightTemplateServiceImpl extends ServiceImpl implements StoreAddressService { - @Autowired - private StoreAddressMapper storeAddressMapper; - @Override public IPage getStoreAddress(PageVO pageVo) { //获取当前登录商家账号 - AuthUser tokenUser = UserContext.getCurrentUser(); LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreAddress::getStoreId, UserContext.getCurrentUser().getStoreId()); - return storeAddressMapper.selectPage(PageUtil.initPage(pageVo), lambdaQueryWrapper); + return this.page(PageUtil.initPage(pageVo), lambdaQueryWrapper); } @Override public StoreAddress addStoreAddress(StoreAddress storeAddress) { //获取当前登录商家账号 - AuthUser tokenUser = UserContext.getCurrentUser(); - storeAddress.setStoreId(tokenUser.getId()); + storeAddress.setStoreId(UserContext.getCurrentUser().getStoreId()); //添加自提点 - storeAddressMapper.insert(storeAddress); + this.save(storeAddress); return storeAddress; } @@ -54,13 +47,12 @@ public class StoreAddressServiceImpl extends ServiceImpl implements StoreDetailService { - //店铺详情数据层 - @Autowired - private StoreDetailMapper storeDetailMapper; //店铺 @Autowired private StoreService storeService; @@ -49,12 +45,12 @@ public class StoreDetailServiceImpl extends ServiceImpl implements StoreGoodsLabelService { - @Autowired - private StoreGoodsLabelMapper storeGoodsLabelMapper; - @Override public List listByStoreId(String storeId) { //TODO 从缓存获取店铺商品分类列表 @@ -68,7 +63,7 @@ public class StoreGoodsLabelServiceImpl extends ServiceImpl list(String storeId) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(StoreGoodsLabel::getStoreId, storeId); - return storeGoodsLabelMapper.selectList(queryWrapper); + return this.baseMapper.selectList(queryWrapper); } @Override @@ -76,7 +71,7 @@ public class StoreGoodsLabelServiceImpl extends ServiceImpl lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.eq(StoreGoodsLabel::getStoreId, tokenUser.getStoreId()); lambdaUpdateWrapper.eq(StoreGoodsLabel::getId, storeGoodsLabel.getId()); - storeGoodsLabelMapper.update(storeGoodsLabel, lambdaUpdateWrapper); + this.update(storeGoodsLabel, lambdaUpdateWrapper); return storeGoodsLabel; } @Override public void removeStoreGoodsLabel(String storeLabelId) { - storeGoodsLabelMapper.deleteById(storeLabelId); + this.removeById(storeLabelId); } } diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java index 3f5ba6b2..aab4878d 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java @@ -2,8 +2,8 @@ package cn.lili.modules.store.serviceimpl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; -import cn.lili.common.enums.SwitchEnum; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.SwitchEnum; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; @@ -35,7 +35,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -52,9 +51,6 @@ import java.util.Optional; @Transactional(rollbackFor = Exception.class) public class StoreServiceImpl extends ServiceImpl implements StoreService { - //店铺 - @Autowired - private StoreMapper storeMapper; //会员 @Autowired private MemberService memberService; @@ -76,12 +72,12 @@ public class StoreServiceImpl extends ServiceImpl implements @Override public IPage findByConditionPage(StoreSearchParams storeSearchParams, PageVO page) { - return storeMapper.getStoreList(PageUtil.initPage(page), storeSearchParams.queryWrapper()); + return this.baseMapper.getStoreList(PageUtil.initPage(page), storeSearchParams.queryWrapper()); } @Override public StoreVO getStoreDetail() { - StoreVO storeVO = storeMapper.getStoreDetail(UserContext.getCurrentUser().getStoreId()); + StoreVO storeVO = this.baseMapper.getStoreDetail(UserContext.getCurrentUser().getStoreId()); storeVO.setNickName(UserContext.getCurrentUser().getNickName()); return storeVO; } @@ -169,7 +165,7 @@ public class StoreServiceImpl extends ServiceImpl implements @Override public boolean audit(String id, Integer passed) { - Store store = storeMapper.selectById(id); + Store store = this.getById(id); if (store == null) { throw new ServiceException(ResultCode.STORE_NOT_EXIST); } diff --git a/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java index 95678794..230296fc 100644 --- a/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java @@ -8,7 +8,6 @@ import cn.lili.modules.system.service.StoreLogisticsService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,17 +24,14 @@ import java.util.List; public class StoreLogisticsServiceImpl extends ServiceImpl implements StoreLogisticsService { - @Autowired - private StoreLogisticsMapper storeLogisticsMapper; - @Override public List getStoreLogistics() { - return storeLogisticsMapper.getStoreLogistics(UserContext.getCurrentUser().getStoreId()); + return this.baseMapper.getStoreLogistics(UserContext.getCurrentUser().getStoreId()); } @Override public List getStoreSelectedLogistics() { - return storeLogisticsMapper.getSelectedStoreLogistics(UserContext.getCurrentUser().getStoreId()); + return this.baseMapper.getSelectedStoreLogistics(UserContext.getCurrentUser().getStoreId()); } From 910b665d8ad45282dc3e134ac22a907329b0210f Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 17 May 2021 17:03:28 +0800 Subject: [PATCH 06/68] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=9B=B4=E6=92=ADV0.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broadcast/entity/dos/Commodity.java | 2 +- .../modules/broadcast/entity/dos/Studio.java | 2 +- .../broadcast/entity/dos/StudioCommodity.java | 48 ++++++++++ .../broadcast/entity/vos/StudioVO.java | 21 +++++ .../mapper/StudioCommodityMapper.java | 13 +++ .../broadcast/service/CommodityService.java | 3 +- .../service/StudioCommodityService.java | 13 +++ .../broadcast/service/StudioService.java | 17 +++- .../serviceimpl/CommodityServiceImpl.java | 5 +- .../StudioCommodityServiceImpl.java | 17 ++++ .../serviceimpl/StudioServiceImpl.java | 33 ++++++- .../broadcast/util/WechatLivePlayerUtil.java | 89 ++++++++++++++++--- .../order/serviceimpl/OrderServiceImpl.java | 3 +- .../{ => article}/ArticleStoreController.java | 2 +- .../other/broadcast/CommodityController.java | 54 +++++++++++ .../other/broadcast/StudioController.java | 81 +++++++++++++++++ 16 files changed, 381 insertions(+), 22 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioCommodityMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/service/StudioCommodityService.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioCommodityServiceImpl.java rename seller-api/src/main/java/cn/lili/controller/other/{ => article}/ArticleStoreController.java (97%) create mode 100644 seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java create mode 100644 seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java index dee3c17a..72fd6f94 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java @@ -44,7 +44,7 @@ public class Commodity extends BaseEntity { private String url; @ApiModelProperty(value = "微信程序直播商品ID") - private String liveGoodsId; + private Integer liveGoodsId; @ApiModelProperty(value = "审核单ID") private String auditId; diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java index b33d72d2..19ef6180 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java @@ -78,7 +78,7 @@ public class Studio extends BaseEntity { @ApiModelProperty(value = "房间ID") - private String roomId; + private Integer roomId; @ApiModelProperty(value = "店铺ID") private String storeId; diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java new file mode 100644 index 00000000..371eb184 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java @@ -0,0 +1,48 @@ +package cn.lili.modules.broadcast.entity.dos; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * @author liushuai(liushuai711 @ gmail.com) + * @version v4.1 + * @Description: + * @since 2021/5/17 3:10 下午 + */ +@Data +@Entity +@ApiModel(value = "直播商品") +@TableName("li_studio_commodity") +@Table(name = "li_studio_commodity") +@NoArgsConstructor +public class StudioCommodity { + + @Id + @TableId + @TableField + @Column(columnDefinition = "bigint(20)") + @ApiModelProperty(value = "唯一标识", hidden = true) + private String id; + + @ApiModelProperty(value = "房间ID") + private Integer roomId; + + @ApiModelProperty(value = "商品ID") + private Integer goodsId; + + public StudioCommodity(Integer roomId,Integer goodsId){ + this.roomId=roomId; + this.goodsId=goodsId; + } +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java new file mode 100644 index 00000000..c20b29d4 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java @@ -0,0 +1,21 @@ +package cn.lili.modules.broadcast.entity.vos; + +import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.entity.dos.Studio; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author liushuai(liushuai711 @ gmail.com) + * @version v4.1 + * @Description: + * @since 2021/5/17 3:04 下午 + */ +@Data +public class StudioVO extends Studio { + + @ApiModelProperty(value = "直播间商品列表") + private List CommodityList; +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioCommodityMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioCommodityMapper.java new file mode 100644 index 00000000..24f61928 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/StudioCommodityMapper.java @@ -0,0 +1,13 @@ +package cn.lili.modules.broadcast.mapper; + +import cn.lili.modules.broadcast.entity.dos.StudioCommodity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 直播间-商品关联持久层 + * @author Bulbasaur + * @date: 2021/5/17 3:14 下午 + * + */ +public interface StudioCommodityMapper extends BaseMapper { +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java index dadf2bab..b227be65 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java @@ -1,6 +1,7 @@ package cn.lili.modules.broadcast.service; import cn.lili.modules.broadcast.entity.dos.Commodity; +import com.baomidou.mybatisplus.extension.service.IService; /** * 直播商品业务层 @@ -8,7 +9,7 @@ import cn.lili.modules.broadcast.entity.dos.Commodity; * @author Bulbasaur * @date: 2021/5/17 10:39 上午 */ -public interface CommodityService { +public interface CommodityService extends IService { /** * 添加直播商品 diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioCommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioCommodityService.java new file mode 100644 index 00000000..27321937 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioCommodityService.java @@ -0,0 +1,13 @@ +package cn.lili.modules.broadcast.service; + +import cn.lili.modules.broadcast.entity.dos.StudioCommodity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 直播间-商品关联业务层 + * + * @author Bulbasaur + * @date: 2021/5/17 3:19 下午 + */ +public interface StudioCommodityService extends IService { +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java index 4f733125..1a476a67 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java @@ -1,6 +1,7 @@ package cn.lili.modules.broadcast.service; import cn.lili.modules.broadcast.entity.dos.Studio; +import com.baomidou.mybatisplus.extension.service.IService; /** * 直播间业务层 @@ -8,7 +9,7 @@ import cn.lili.modules.broadcast.entity.dos.Studio; * @author Bulbasaur * @date: 2021/5/17 10:02 上午 */ -public interface StudioService { +public interface StudioService extends IService { /** * 创建直播间 @@ -26,5 +27,19 @@ public interface StudioService { */ String getLiveInfo(String roomId); + /** + * 推送商品 + * @param roomId 店铺ID + * @param goodsId 商品ID + * @return 操作结果 + */ + Boolean push(Integer roomId,Integer goodsId); + /** + * 删除商品 + * @param roomId 店铺ID + * @param goodsId 商品ID + * @return 操作结果 + */ + Boolean goodsDeleteInRoom(Integer roomId,Integer goodsId); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index 8f79b1ff..23be52ca 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -1,5 +1,6 @@ package cn.lili.modules.broadcast.serviceimpl; +import cn.hutool.core.convert.Convert; import cn.hutool.json.JSONObject; import cn.lili.common.security.context.UserContext; import cn.lili.modules.broadcast.entity.dos.Commodity; @@ -8,6 +9,7 @@ import cn.lili.modules.broadcast.service.CommodityService; import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @@ -18,6 +20,7 @@ import java.util.Map; * @author Bulbasaur * @date: 2021/5/17 11:16 上午 */ +@Service public class CommodityServiceImpl extends ServiceImpl implements CommodityService { @Autowired @@ -26,7 +29,7 @@ public class CommodityServiceImpl extends ServiceImpl implements StudioCommodityService { +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 9fc53fd4..3b799bb9 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -2,11 +2,15 @@ package cn.lili.modules.broadcast.serviceimpl; import cn.lili.common.security.context.UserContext; import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.entity.dos.StudioCommodity; import cn.lili.modules.broadcast.mapper.StudioMapper; +import cn.lili.modules.broadcast.service.StudioCommodityService; import cn.lili.modules.broadcast.service.StudioService; import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; /** * 小程序直播间业务层实现 @@ -14,16 +18,18 @@ import org.springframework.beans.factory.annotation.Autowired; * @author Bulbasaur * @date: 2021/5/17 10:04 上午 */ +@Service public class StudioServiceImpl extends ServiceImpl implements StudioService { @Autowired private WechatLivePlayerUtil wechatLivePlayerUtil; + @Autowired + private StudioCommodityService studioCommodityService; @Override public Boolean create(Studio studio) { - //创建小程序直播 - String roomId=wechatLivePlayerUtil.create(studio); + Integer roomId=wechatLivePlayerUtil.create(studio); studio.setRoomId(roomId); studio.setStoreId(UserContext.getCurrentUser().getStoreId()); return this.save(studio); @@ -43,6 +49,29 @@ public class StudioServiceImpl extends ServiceImpl implem } } + @Override + public Boolean push(Integer roomId, Integer goodsId) { + //调用微信接口添加直播间商品并进行记录 + if(wechatLivePlayerUtil.pushGoods(roomId,goodsId)){ + return studioCommodityService.save(new StudioCommodity(roomId,goodsId)); + } + return false; + } + + @Override + public Boolean goodsDeleteInRoom(Integer roomId, Integer goodsId) { + //调用微信接口删除直播间商品并进行记录 + if(wechatLivePlayerUtil.goodsDeleteInRoom(roomId,goodsId)){ + return studioCommodityService.remove(new QueryWrapper().eq("room_id",roomId).eq("goods_id",goodsId)); + } + return false; + } + + /** + * 根据直播间ID获取直播间 + * @param roomId 直播间ID + * @return 直播间 + */ private Studio getByRoomId(String roomId){ return this.getOne(this.lambdaQuery().eq(Studio::getRoomId,roomId)) ; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index a41dc0c0..33148170 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -1,5 +1,9 @@ package cn.lili.modules.broadcast.util; +import cn.hutool.core.convert.Convert; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.Method; import cn.hutool.json.JSONObject; import cn.lili.modules.base.entity.enums.ClientTypeEnum; import cn.lili.modules.broadcast.entity.dos.Commodity; @@ -11,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,22 +33,40 @@ public class WechatLivePlayerUtil { @Autowired private WechatAccessTokenUtil wechatAccessTokenUtil; + private void test(Studio studio){ + HttpRequest httpRequest = new HttpRequest("https://api.weixin.qq.com/cgi-bin/media/upload"); + httpRequest.setMethod(Method.POST); + File logoFile = new File(studio.getMediaUrl()); + httpRequest.setConnectionTimeout(30000); + httpRequest.form("access_token",wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP)); + httpRequest.form("type", "image"); + httpRequest.form("media", logoFile); + HttpResponse reqResult = httpRequest.execute(); + System.out.println(reqResult.body()); + } + /** * 创建小程序直播间 * @param studio 小程序直播 * @return 房间ID */ - public String create(Studio studio){ + public Integer create(Studio studio){ + test(studio); //获取token - String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token="+ token; Map map = new HashMap<>(); - // 直播间名字 - map.put("name", studio.getName()); // 背景图 map.put("coverImg", studio.getCoverImg()); + // 分享图 + map.put("shareImg", studio.getShareImg()); + // 购物直播频道封面图 + map.put("feedsImg", studio.getFeedsImg()); + + // 直播间名字 + map.put("name", studio.getName()); // 直播计划开始时间 map.put("startTime", studio.getStartTime()); // 直播计划结束时间 @@ -52,10 +75,6 @@ public class WechatLivePlayerUtil { map.put("anchorName", studio.getAnchorName()); // 主播微信号 map.put("anchorWechat", studio.getAnchorWechat()); - // 分享图 - map.put("shareImg", studio.getShareImg()); - // 购物直播频道封面图 - map.put("feedsImg", studio.getFeedsImg()); // 直播间类型 map.put("type", "0"); // 是否关闭点赞 @@ -70,7 +89,7 @@ public class WechatLivePlayerUtil { String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序直播间创建结果:" + content); - return json.getStr("roomId"); + return Convert.toInt(json.getStr("roomId")); } /** @@ -80,7 +99,7 @@ public class WechatLivePlayerUtil { */ public String getLiveInfo(String roomId){ //获取token - String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+ token; Map map = new HashMap<>(); @@ -100,6 +119,50 @@ public class WechatLivePlayerUtil { return json.getStr("live_replay"); } + /** + * 推送直播间商品 + * @param roomId 房间ID + * @param goodsId 商品ID + * @return 操作结果 + */ + public Boolean pushGoods(Integer roomId,Integer goodsId){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); + //发送url + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/push?access_token="+ token; + Map map = new HashMap<>(); + // 直播间回放 + map.put("goodsId", goodsId); + // 商品ID + map.put("roomId", roomId); + String content = HttpUtils.doPostWithJson(url, map); + JSONObject json = new JSONObject(content); + log.info("微信小程序直播间推送商品:" + content); + return json.getStr("errcode").equals("0"); + } + + /** + * 删除直播间商品 + * @param roomId 房间ID + * @param goodsId 商品ID + * @return 操作结果 + */ + public Boolean goodsDeleteInRoom(Integer roomId,Integer goodsId){ + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); + //发送url + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/deleteInRoom?access_token="+ token; + Map map = new HashMap<>(); + // 直播间回放 + map.put("goodsId", goodsId); + // 商品ID + map.put("roomId", roomId); + String content = HttpUtils.doPostWithJson(url, map); + JSONObject json = new JSONObject(content); + log.info("微信小程序直播间删除商品:" + content); + return json.getStr("errcode").equals("0"); + } + /** * 添加直播商品 * @param commodity 直播商品 @@ -107,7 +170,7 @@ public class WechatLivePlayerUtil { */ public JSONObject addGoods(Commodity commodity){ //获取token - String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token="+ token; GoodsInfo goodsInfo=new GoodsInfo(commodity); @@ -124,7 +187,7 @@ public class WechatLivePlayerUtil { */ public JSONObject deleteGoods(String goodsId){ //获取token - String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token="+ token; String content = HttpUtils.doPostWithJson(url, goodsId); @@ -140,7 +203,7 @@ public class WechatLivePlayerUtil { */ public JSONObject deleteGoods(List goodsIdList){ //获取token - String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.H5); + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token="+ token; String content = HttpUtils.doPostWithJson(url, goodsIdList); diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 315d7f38..dc571905 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -65,6 +65,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -86,7 +87,7 @@ public class OrderServiceImpl extends ServiceImpl implements @Autowired private TimeTrigger timeTrigger; //订单货物数据层 - @Autowired + @Resource private OrderItemMapper orderItemMapper; //发票 @Autowired diff --git a/seller-api/src/main/java/cn/lili/controller/other/ArticleStoreController.java b/seller-api/src/main/java/cn/lili/controller/other/article/ArticleStoreController.java similarity index 97% rename from seller-api/src/main/java/cn/lili/controller/other/ArticleStoreController.java rename to seller-api/src/main/java/cn/lili/controller/other/article/ArticleStoreController.java index 3acd0f0c..86c41244 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/ArticleStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/article/ArticleStoreController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.other; +package cn.lili.controller.other.article; import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java new file mode 100644 index 00000000..3410dc0d --- /dev/null +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java @@ -0,0 +1,54 @@ +package cn.lili.controller.other.broadcast; + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.utils.ResultUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.service.CommodityService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 店铺端,直播商品接口 + * @author Bulbasaur + * @date: 2021/5/17 2:05 下午 + * + */ +@RestController +@Api(tags = "店铺端,直播商品接口") +@RequestMapping("/store/broadcast/commodity") +public class CommodityController { + + @Autowired + private CommodityService commodityService; + + @ApiOperation(value = "获取店铺直播商品列表") + @GetMapping + public ResultMessage> page(PageVO pageVO) { + return ResultUtil.data(commodityService.page(PageUtil.initPage(pageVO))); + } + + @ApiOperation(value = "添加店铺直播商品") + @PostMapping + public ResultMessage addCommodity(@Validated Commodity commodity) { + if(commodityService.addCommodity(commodity)){ + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } + + @ApiOperation(value = "删除店铺直播商品") + @DeleteMapping + public ResultMessage delete(String goodsId) { + if(commodityService.deleteCommodity(goodsId)){ + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } +} diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java new file mode 100644 index 00000000..a42fbc34 --- /dev/null +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -0,0 +1,81 @@ +package cn.lili.controller.other.broadcast; + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.utils.ResultUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.service.StudioService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.annotations.Delete; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 店铺端,直播间接口 + * @author Bulbasaur + * @date: 2021/5/17 2:05 下午 + * + */ +@RestController +@Api(tags = "店铺端,直播间接口") +@RequestMapping("/store/broadcast/studio") +public class StudioController { + + @Autowired + private StudioService studioService; + + @ApiOperation(value = "获取店铺直播间列表") + @GetMapping + public ResultMessage> page(PageVO pageVO) { + return ResultUtil.data(studioService.page(PageUtil.initPage(pageVO))); + } + + @ApiOperation(value = "获取店铺直播间详情") + @ApiImplicitParam(name = "studioId", value = "直播间ID", required = true, dataType = "String", paramType = "path") + @GetMapping("/studioInfo/{studioId}") + public ResultMessage studioInfo(@PathVariable String studioId) { + return ResultUtil.data(studioService.getById(studioId)); + } + + @ApiOperation(value = "添加直播间") + @PostMapping + public ResultMessage add(@Validated Studio studio) { + if(studioService.create(studio)){ + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } + + @ApiOperation(value = "店铺直播间添加商品") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roomId", value = "房间ID", required = true, dataType = "Integer", paramType = "path"), + @ApiImplicitParam(name = "liveGoodsId", value = "直播商品ID", required = true, dataType = "Integer", paramType = "path") + }) + @PutMapping(value = "/push/{roomId}/{liveGoodsId}") + public ResultMessage push(@PathVariable Integer roomId,@PathVariable Integer liveGoodsId) { + if(studioService.push(roomId,liveGoodsId)){ + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } + + @ApiOperation(value = "店铺直播间删除商品") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roomId", value = "房间ID", required = true, dataType = "Integer", paramType = "path"), + @ApiImplicitParam(name = "liveGoodsId", value = "直播商品ID", required = true, dataType = "Integer", paramType = "path") + }) + @Delete(value = "/deleteInRoom/{roomId}/{liveGoodsId}") + public ResultMessage deleteInRoom(@PathVariable Integer roomId,@PathVariable Integer liveGoodsId) { + if(studioService.goodsDeleteInRoom(roomId,liveGoodsId)){ + return ResultUtil.success(ResultCode.SUCCESS); + } + return ResultUtil.error(ResultCode.ERROR); + } +} From 02827a2f8b31b0dfeae3ec3219b5e6a053e85425 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 18 May 2021 23:34:05 +0800 Subject: [PATCH 07/68] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=9B=B4=E6=92=ADV0.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broadcast/entity/dos/StudioCommodity.java | 15 ++--- .../entity/dto/CommodityAuditStatusEnum.java | 38 ----------- .../broadcast/util/WechatLivePlayerUtil.java | 64 ++++++++----------- .../member/serviceimpl/MemberServiceImpl.java | 2 +- .../member/MemberGradeManagerController.java | 7 +- .../other/broadcast/CommodityController.java | 11 ++-- .../other/broadcast/StudioController.java | 33 ++++++---- 7 files changed, 67 insertions(+), 103 deletions(-) delete mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java index 371eb184..bc11e409 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/StudioCommodity.java @@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -15,10 +14,10 @@ import javax.persistence.Id; import javax.persistence.Table; /** - * @author liushuai(liushuai711 @ gmail.com) - * @version v4.1 - * @Description: - * @since 2021/5/17 3:10 下午 + * 直播商品 + * + * @author Bulbasaur + * @date: 2021/5/18 5:42 下午 */ @Data @Entity @@ -41,8 +40,8 @@ public class StudioCommodity { @ApiModelProperty(value = "商品ID") private Integer goodsId; - public StudioCommodity(Integer roomId,Integer goodsId){ - this.roomId=roomId; - this.goodsId=goodsId; + public StudioCommodity(Integer roomId, Integer goodsId) { + this.roomId = roomId; + this.goodsId = goodsId; } } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java deleted file mode 100644 index 6971af01..00000000 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityAuditStatusEnum.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.lili.modules.broadcast.entity.dto; - -/** - * @author liushuai(liushuai711 @ gmail.com) - * @version v4.1 - * @Description: - * @since 2021/5/17 11:34 上午 - */ -public enum CommodityAuditStatusEnum { - - /** - * 未审核 - */ - WAIT_AUDIT("0"), - /** - * 审核中 - */ - AUDITING("1"), - /** - * 审核通过 - */ - AUDIT_PASS("2"), - /** - * 审核失败 - */ - AUDIT_REJECTION("3"); - - private final String status; - - CommodityAuditStatusEnum(String status) { - this.status = status; - } - - public String getStatus() { - return status; - } - -} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index 33148170..a8aea9a8 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -1,9 +1,6 @@ package cn.lili.modules.broadcast.util; import cn.hutool.core.convert.Convert; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import cn.hutool.http.Method; import cn.hutool.json.JSONObject; import cn.lili.modules.base.entity.enums.ClientTypeEnum; import cn.lili.modules.broadcast.entity.dos.Commodity; @@ -15,16 +12,15 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 微信小程序直播工具类 + * * @author Bulbasaur * @date: 2021/5/17 10:16 上午 - * */ @Slf4j @Component @@ -33,31 +29,19 @@ public class WechatLivePlayerUtil { @Autowired private WechatAccessTokenUtil wechatAccessTokenUtil; - private void test(Studio studio){ - HttpRequest httpRequest = new HttpRequest("https://api.weixin.qq.com/cgi-bin/media/upload"); - httpRequest.setMethod(Method.POST); - File logoFile = new File(studio.getMediaUrl()); - httpRequest.setConnectionTimeout(30000); - httpRequest.form("access_token",wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP)); - httpRequest.form("type", "image"); - httpRequest.form("media", logoFile); - HttpResponse reqResult = httpRequest.execute(); - System.out.println(reqResult.body()); - } - /** * 创建小程序直播间 + * * @param studio 小程序直播 * @return 房间ID */ - public Integer create(Studio studio){ - test(studio); + public Integer create(Studio studio) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token="+ token; - Map map = new HashMap<>(); + String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=" + token; + Map map = new HashMap<>(); // 背景图 map.put("coverImg", studio.getCoverImg()); // 分享图 @@ -82,7 +66,7 @@ public class WechatLivePlayerUtil { // 是否关闭货架 map.put("closeGoods", "0"); // 是否关闭评论 - map.put("closeComment","0"); + map.put("closeComment", "0"); // 直播间名字 map.put("closeReplay", "0"); @@ -94,14 +78,15 @@ public class WechatLivePlayerUtil { /** * 获取直播间回放 + * * @param roomId 房间ID * @return 回放地址 */ - public String getLiveInfo(String roomId){ + public String getLiveInfo(String roomId) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token="+ token; + String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token=" + token; Map map = new HashMap<>(); // 获取回放 map.put("action", "get_replay"); @@ -121,15 +106,16 @@ public class WechatLivePlayerUtil { /** * 推送直播间商品 - * @param roomId 房间ID + * + * @param roomId 房间ID * @param goodsId 商品ID * @return 操作结果 */ - public Boolean pushGoods(Integer roomId,Integer goodsId){ + public Boolean pushGoods(Integer roomId, Integer goodsId) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/push?access_token="+ token; + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/push?access_token=" + token; Map map = new HashMap<>(); // 直播间回放 map.put("goodsId", goodsId); @@ -143,15 +129,16 @@ public class WechatLivePlayerUtil { /** * 删除直播间商品 - * @param roomId 房间ID + * + * @param roomId 房间ID * @param goodsId 商品ID * @return 操作结果 */ - public Boolean goodsDeleteInRoom(Integer roomId,Integer goodsId){ + public Boolean goodsDeleteInRoom(Integer roomId, Integer goodsId) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/deleteInRoom?access_token="+ token; + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/deleteInRoom?access_token=" + token; Map map = new HashMap<>(); // 直播间回放 map.put("goodsId", goodsId); @@ -165,15 +152,16 @@ public class WechatLivePlayerUtil { /** * 添加直播商品 + * * @param commodity 直播商品 * @return 添加结果 */ - public JSONObject addGoods(Commodity commodity){ + public JSONObject addGoods(Commodity commodity) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token="+ token; - GoodsInfo goodsInfo=new GoodsInfo(commodity); + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=" + token; + GoodsInfo goodsInfo = new GoodsInfo(commodity); String content = HttpUtils.doPostWithJson(url, goodsInfo); JSONObject json = new JSONObject(content); log.info("微信小程序添加直播商品结果:" + content); @@ -182,14 +170,15 @@ public class WechatLivePlayerUtil { /** * 删除直播商品 + * * @param goodsId 商品ID * @return 删除结果 */ - public JSONObject deleteGoods(String goodsId){ + public JSONObject deleteGoods(String goodsId) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token="+ token; + String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=" + token; String content = HttpUtils.doPostWithJson(url, goodsId); JSONObject json = new JSONObject(content); log.info("微信小程序删除直播商品结果:" + content); @@ -198,14 +187,15 @@ public class WechatLivePlayerUtil { /** * 查询直播商品状态 + * * @param goodsIdList 商品ID列表 * @return 删除结果 */ - public JSONObject deleteGoods(List goodsIdList){ + public JSONObject deleteGoods(List goodsIdList) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token="+ token; + String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=" + token; String content = HttpUtils.doPostWithJson(url, goodsIdList); JSONObject json = new JSONObject(content); log.info("微信小程序查询直播商品结果:" + content); diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index 04e62f16..06657387 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -162,7 +162,7 @@ public class MemberServiceImpl extends ServiceImpl impleme private Member findMember(String userName) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("username", userName).or().eq("mobile", userName); - return memberMapper.selectOne(queryWrapper); + return this.getOne(queryWrapper); } @Override diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java index c1498263..6ef3ea52 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java @@ -1,6 +1,7 @@ package cn.lili.controller.member; import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; @@ -53,7 +54,7 @@ public class MemberGradeManagerController { if (memberGradeService.updateById(memberGrade)) { return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); } @ApiOperation(value = "删除会员等级") @@ -61,10 +62,10 @@ public class MemberGradeManagerController { @PutMapping(value = "/delete/{id}") public ResultMessage> delete(@PathVariable String id) { if(memberGradeService.getById(id).getIsDefault()){ - return ResultUtil.error(ResultCode.USER_GRADE_IS_DEFAULT); + throw new ServiceException(ResultCode.USER_GRADE_IS_DEFAULT); }else if(memberGradeService.removeById(id)){ return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); } } diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java index 3410dc0d..1b9bf217 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java @@ -1,6 +1,7 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; @@ -16,9 +17,9 @@ import org.springframework.web.bind.annotation.*; /** * 店铺端,直播商品接口 + * * @author Bulbasaur * @date: 2021/5/17 2:05 下午 - * */ @RestController @Api(tags = "店铺端,直播商品接口") @@ -37,18 +38,18 @@ public class CommodityController { @ApiOperation(value = "添加店铺直播商品") @PostMapping public ResultMessage addCommodity(@Validated Commodity commodity) { - if(commodityService.addCommodity(commodity)){ + if (commodityService.addCommodity(commodity)) { return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); } @ApiOperation(value = "删除店铺直播商品") @DeleteMapping public ResultMessage delete(String goodsId) { - if(commodityService.deleteCommodity(goodsId)){ + if (commodityService.deleteCommodity(goodsId)) { return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); } } diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java index a42fbc34..fb3f2da3 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -1,12 +1,15 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.base.entity.enums.ClientTypeEnum; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.service.StudioService; +import cn.lili.modules.message.util.WechatAccessTokenUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -19,9 +22,9 @@ import org.springframework.web.bind.annotation.*; /** * 店铺端,直播间接口 + * * @author Bulbasaur * @date: 2021/5/17 2:05 下午 - * */ @RestController @Api(tags = "店铺端,直播间接口") @@ -30,6 +33,8 @@ public class StudioController { @Autowired private StudioService studioService; + @Autowired + private WechatAccessTokenUtil wechatAccessTokenUtil; @ApiOperation(value = "获取店铺直播间列表") @GetMapping @@ -47,10 +52,10 @@ public class StudioController { @ApiOperation(value = "添加直播间") @PostMapping public ResultMessage add(@Validated Studio studio) { - if(studioService.create(studio)){ + if (studioService.create(studio)) { return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); } @ApiOperation(value = "店铺直播间添加商品") @@ -59,23 +64,29 @@ public class StudioController { @ApiImplicitParam(name = "liveGoodsId", value = "直播商品ID", required = true, dataType = "Integer", paramType = "path") }) @PutMapping(value = "/push/{roomId}/{liveGoodsId}") - public ResultMessage push(@PathVariable Integer roomId,@PathVariable Integer liveGoodsId) { - if(studioService.push(roomId,liveGoodsId)){ + public ResultMessage push(@PathVariable Integer roomId, @PathVariable Integer liveGoodsId) { + if (studioService.push(roomId, liveGoodsId)) { return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); } @ApiOperation(value = "店铺直播间删除商品") @ApiImplicitParams({ - @ApiImplicitParam(name = "roomId", value = "房间ID", required = true, dataType = "Integer", paramType = "path"), - @ApiImplicitParam(name = "liveGoodsId", value = "直播商品ID", required = true, dataType = "Integer", paramType = "path") + @ApiImplicitParam(name = "roomId", value = "房间ID", required = true, dataType = "Integer", paramType = "path"), + @ApiImplicitParam(name = "liveGoodsId", value = "直播商品ID", required = true, dataType = "Integer", paramType = "path") }) @Delete(value = "/deleteInRoom/{roomId}/{liveGoodsId}") - public ResultMessage deleteInRoom(@PathVariable Integer roomId,@PathVariable Integer liveGoodsId) { - if(studioService.goodsDeleteInRoom(roomId,liveGoodsId)){ + public ResultMessage deleteInRoom(@PathVariable Integer roomId, @PathVariable Integer liveGoodsId) { + if (studioService.goodsDeleteInRoom(roomId, liveGoodsId)) { return ResultUtil.success(ResultCode.SUCCESS); } - return ResultUtil.error(ResultCode.ERROR); + throw new ServiceException(ResultCode.ERROR); + } + + @ApiOperation(value = "获取素材,调用接口凭证") + @PutMapping(value = "/getCgiAccessToken") + public ResultMessage getCgiAccessToken() { + return ResultUtil.data(wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP)); } } From 37a6455e56061282eefbe0a1240193ac82cc7400 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 19 May 2021 09:05:44 +0800 Subject: [PATCH 08/68] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/service/MemberPointsHistoryService.java | 11 +++++++++++ .../MemberPointsHistoryServiceImpl.java | 14 ++++++++++++-- .../MemberPointsHistoryManagerController.java | 10 +--------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/member/service/MemberPointsHistoryService.java b/framework/src/main/java/cn/lili/modules/member/service/MemberPointsHistoryService.java index 6f9e25a8..91bd73a0 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/MemberPointsHistoryService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/MemberPointsHistoryService.java @@ -1,7 +1,9 @@ package cn.lili.modules.member.service; +import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dos.MemberPointsHistory; import cn.lili.modules.member.entity.vo.MemberPointsHistoryVO; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -20,5 +22,14 @@ public interface MemberPointsHistoryService extends IService MemberPointsHistoryList(PageVO page, String memberId, String memberName); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java index ef10a09b..32ebd207 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberPointsHistoryServiceImpl.java @@ -1,14 +1,16 @@ package cn.lili.modules.member.serviceimpl; +import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.StringUtils; +import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dos.MemberPointsHistory; import cn.lili.modules.member.entity.vo.MemberPointsHistoryVO; import cn.lili.modules.member.mapper.MemberPointsHistoryMapper; import cn.lili.modules.member.service.MemberPointsHistoryService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -42,4 +44,12 @@ public class MemberPointsHistoryServiceImpl extends ServiceImpl MemberPointsHistoryList(PageVO page, String memberId, String memberName) { + LambdaQueryWrapper lambdaQueryWrapper=new LambdaQueryWrapper() + .eq(memberId != null, MemberPointsHistory::getMemberId, memberId) + .like(memberName != null, MemberPointsHistory::getMemberName, memberName); + return this.page(PageUtil.initPage(page), lambdaQueryWrapper); + } } \ No newline at end of file diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberPointsHistoryManagerController.java b/manager-api/src/main/java/cn/lili/controller/member/MemberPointsHistoryManagerController.java index 531d6ccb..403a3f10 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberPointsHistoryManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/member/MemberPointsHistoryManagerController.java @@ -1,19 +1,16 @@ package cn.lili.controller.member; -import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.MemberPointsHistory; import cn.lili.modules.member.entity.vo.MemberPointsHistoryVO; import cn.lili.modules.member.service.MemberPointsHistoryService; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -39,12 +36,7 @@ public class MemberPointsHistoryManagerController { }) @GetMapping(value = "/getByPage") public ResultMessage> getByPage(PageVO page, String memberId, String memberName) { - - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq(memberId != null, "member_id", memberId); - queryWrapper.like(memberName != null, "member_name", memberName); - - return ResultUtil.data(memberPointsHistoryService.page(PageUtil.initPage(page), queryWrapper)); + return ResultUtil.data(memberPointsHistoryService.MemberPointsHistoryList(page, memberId, memberName)); } @ApiOperation(value = "获取会员积分VO") From 273d0abbc7f91da9d7c905ce3f0bb30a33abc4dc Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 19 May 2021 19:38:17 +0800 Subject: [PATCH 09/68] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/common/enums/ResultCode.java | 4 ---- .../serviceimpl/DistributionServiceImpl.java | 5 ----- .../MemberWithdrawApplyServiceImpl.java | 15 --------------- .../modules/order/order/entity/dos/Order.java | 6 ------ .../order/serviceimpl/ReceiptServiceImpl.java | 4 ---- .../member/MemberGradeManagerController.java | 2 +- .../other/broadcast/CommodityController.java | 2 +- .../other/broadcast/StudioController.java | 2 +- 8 files changed, 3 insertions(+), 37 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 6a9772d8..ec33d98e 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -97,13 +97,9 @@ public enum ResultCode { USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"), USER_EDIT_ERROR(20015, "用户修改失败"), USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"), -<<<<<<< HEAD USER_COLLECTION_EXIST(20017,"无法重复收藏"), USER_GRADE_IS_DEFAULT(20018,"会员等级为默认会员等级"), -======= - USER_COLLECTION_EXIST(2001, "无法重复收藏"), DELETE_EXIST(2001, "无法重复收藏"), ->>>>>>> master /** * 权限 diff --git a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java index 7a9ef202..96cc6564 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/distribution/serviceimpl/DistributionServiceImpl.java @@ -171,10 +171,6 @@ public class DistributionServiceImpl extends ServiceImpl>>>>>> master } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWithdrawApplyServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWithdrawApplyServiceImpl.java index a92fef42..b6c5f74a 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWithdrawApplyServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberWithdrawApplyServiceImpl.java @@ -33,11 +33,8 @@ import java.util.Date; @Service @Transactional public class MemberWithdrawApplyServiceImpl extends ServiceImpl implements MemberWithdrawApplyService { -<<<<<<< HEAD -======= //提现申请数据层 ->>>>>>> master //会员余额 @Autowired private MemberWalletService memberWalletService; @@ -45,12 +42,8 @@ public class MemberWithdrawApplyServiceImpl extends ServiceImpl>>>>>> master if (memberWithdrawApply != null) { //写入备注 memberWithdrawApply.setInspectRemark(remark); @@ -63,11 +56,7 @@ public class MemberWithdrawApplyServiceImpl extends ServiceImpl>>>>>> master //提现,微信提现成功后扣减冻结金额 Boolean bool = memberWalletService.withdrawal(memberWithdrawApply); if (bool) { @@ -80,11 +69,7 @@ public class MemberWithdrawApplyServiceImpl extends ServiceImpl>>>>>> master //需要从冻结金额扣减到余额 memberWalletService.increaseWithdrawal(memberWithdrawApply.getApplyMoney(), memberWithdrawApply.getMemberId(), "审核拒绝,提现金额解冻到余额", DepositServiceTypeEnum.WALLET_WITHDRAWAL.name()); return true; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 6bcd2b58..9aa5d281 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -205,12 +205,9 @@ public class Order extends BaseEntity { BeanUtil.copyProperties(cartVO.getPriceDetailDTO(), this); BeanUtil.copyProperties(cartVO, this); this.setId(oldId); -<<<<<<< HEAD //循环购物车列表判断是否为促销订单 -======= this.setOrderType(OrderTypeEnum.NORMAL.name()); //促销信息填充 ->>>>>>> master if (cartVO.getSkuList().get(0).getPromotions() != null) { //判断是否为拼团订单 Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); @@ -235,7 +232,6 @@ public class Order extends BaseEntity { this.setOrderStatus(OrderStatusEnum.UNPAID.name()); this.setPayStatus(PayStatusEnum.UNPAID.name()); this.setDeliverStatus(DeliverStatusEnum.UNDELIVERED.name()); -<<<<<<< HEAD //填充订单收件人信息 this.setConsigneeAddressIdPath(tradeDTO.getMemberAddress().getConsigneeAddressIdPath()); this.setConsigneeAddressPath(tradeDTO.getMemberAddress().getConsigneeAddressPath()); @@ -247,7 +243,6 @@ public class Order extends BaseEntity { this.setUsePlatformMemberCouponId(tradeDTO.getPlatformCoupon().getMemberCoupon().getId()); } //判断是否使用店铺优惠券 -======= //如果有收货地址,才记录收货地址 if (tradeDTO.getMemberAddress() != null) { this.setConsigneeAddressIdPath(tradeDTO.getMemberAddress().getConsigneeAddressIdPath()); @@ -261,7 +256,6 @@ public class Order extends BaseEntity { this.setUsePlatformMemberCouponId(tradeDTO.getPlatformCoupon().getMemberCoupon().getId()); } //店铺优惠券判定 ->>>>>>> master if (tradeDTO.getStoreCoupons() != null && !tradeDTO.getStoreCoupons().isEmpty()) { StringBuilder storeCouponIds = new StringBuilder(); for (String s : tradeDTO.getStoreCoupons().keySet()) { diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java index f8219f4b..087264ec 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/ReceiptServiceImpl.java @@ -13,10 +13,6 @@ 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.service.impl.ServiceImpl; -<<<<<<< HEAD -======= -import org.springframework.beans.factory.annotation.Autowired; ->>>>>>> master import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java index 6ef3ea52..39b02b70 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java @@ -1,9 +1,9 @@ package cn.lili.controller.member; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; -import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.MemberGrade; diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java index 1b9bf217..cb8a9b39 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java @@ -1,9 +1,9 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; -import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Commodity; diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java index fb3f2da3..7d7937a6 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -1,9 +1,9 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; -import cn.lili.common.utils.ResultUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.base.entity.enums.ClientTypeEnum; From cd60eba7a480452beed17e18b624b980ec132e6c Mon Sep 17 00:00:00 2001 From: lifenlong Date: Thu, 20 May 2021 09:00:46 +0800 Subject: [PATCH 10/68] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=AA=92=E4=BD=93?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=EF=BC=88=E4=B8=B4=E6=97=B6=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E4=B8=8A=E4=BC=A0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/StudioServiceImpl.java | 18 ++- .../broadcast/util/WechatLivePlayerUtil.java | 11 +- .../broadcast/util/WechatMediaUtil.java | 123 ++++++++++++++++++ 3 files changed, 142 insertions(+), 10 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 3b799bb9..4a49cd13 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -1,5 +1,7 @@ package cn.lili.modules.broadcast.serviceimpl; +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.entity.dos.StudioCommodity; @@ -28,11 +30,17 @@ public class StudioServiceImpl extends ServiceImpl implem @Override public Boolean create(Studio studio) { - //创建小程序直播 - Integer roomId=wechatLivePlayerUtil.create(studio); - studio.setRoomId(roomId); - studio.setStoreId(UserContext.getCurrentUser().getStoreId()); - return this.save(studio); + try { + //创建小程序直播 + Integer roomId=wechatLivePlayerUtil.create(studio); + studio.setRoomId(roomId); + studio.setStoreId(UserContext.getCurrentUser().getStoreId()); + return this.save(studio); + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException(ResultCode.ERROR); + } + } @Override diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index a8aea9a8..717d9c6a 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -28,6 +28,8 @@ public class WechatLivePlayerUtil { @Autowired private WechatAccessTokenUtil wechatAccessTokenUtil; + @Autowired + private WechatMediaUtil wechatMediaUtil; /** * 创建小程序直播间 @@ -35,7 +37,7 @@ public class WechatLivePlayerUtil { * @param studio 小程序直播 * @return 房间ID */ - public Integer create(Studio studio) { + public Integer create(Studio studio) throws Exception{ //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url @@ -43,12 +45,11 @@ public class WechatLivePlayerUtil { Map map = new HashMap<>(); // 背景图 - map.put("coverImg", studio.getCoverImg()); + map.put("coverImg", wechatMediaUtil.uploadMedia(token,"image",studio.getCoverImg())); // 分享图 - map.put("shareImg", studio.getShareImg()); + map.put("shareImg", wechatMediaUtil.uploadMedia(token,"image",studio.getShareImg())); // 购物直播频道封面图 - map.put("feedsImg", studio.getFeedsImg()); - + map.put("feedsImg", wechatMediaUtil.uploadMedia(token,"image",studio.getFeedsImg())); // 直播间名字 map.put("name", studio.getName()); // 直播计划开始时间 diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java new file mode 100644 index 00000000..0cfb49fe --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java @@ -0,0 +1,123 @@ +package cn.lili.modules.broadcast.util; + +import cn.hutool.json.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Date; + +/** + * 微信媒体工具 + * + * @author Bulbasaur + * @date: 2021/5/19 8:02 下午 + */ +@Slf4j +@Component +public class WechatMediaUtil { + + /** + * 上传多媒体数据到微信服务器 + * @param accessToken 从微信获取到的access_token + * @param mediaFileUrl 来自网络上面的媒体文件地址 + * @return + */ + public String uploadMedia(String accessToken, String type, String mediaFileUrl) { + /* + * 上传媒体文件到微信服务器需要请求的地址 + */ + String MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"; + + StringBuffer resultStr = null; + //拼装url地址 + String mediaStr = MEDIA_URL.replace("ACCESS_TOKEN", accessToken).replace("TYPE", type); + URL mediaUrl; + try { + String boundary = "----WebKitFormBoundaryOYXo8heIv9pgpGjT"; + URL url = new URL(mediaStr); + HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); + //让输入输出流开启 + urlConn.setDoInput(true); + urlConn.setDoOutput(true); + //使用post方式请求的时候必须关闭缓存 + urlConn.setUseCaches(false); + //设置请求头的Content-Type属性 + urlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary); + urlConn.setRequestMethod("POST"); + //获取输出流,使用输出流拼接请求体 + OutputStream out = urlConn.getOutputStream(); + + //读取文件的数据,构建一个GET请求,然后读取指定地址中的数据 + mediaUrl = new URL(mediaFileUrl); + HttpURLConnection mediaConn = (HttpURLConnection)mediaUrl.openConnection(); + //设置请求方式 + mediaConn.setRequestMethod("GET"); + //设置可以打开输入流 + mediaConn.setDoInput(true); + //获取传输的数据类型 + String contentType = mediaConn.getHeaderField("Content-Type"); + //将获取大到的类型转换成扩展名 + String fileExt = judgeType(contentType); + //获取输入流,从mediaURL里面读取数据 + InputStream in = mediaConn.getInputStream(); + BufferedInputStream bufferedIn = new BufferedInputStream(in); + //数据读取到这个数组里面 + byte[] bytes = new byte[1024]; + int size = 0; + //使用outputStream流输出信息到请求体当中去 + out.write(("--"+boundary+"\r\n").getBytes()); + out.write(("Content-Disposition: form-data; name=\"media\";\r\n" + + "filename=\""+(new Date().getTime())+fileExt+"\"\r\n" + + "Content-Type: "+contentType+"\r\n\r\n").getBytes()); + while( (size = bufferedIn.read(bytes)) != -1) { + out.write(bytes, 0, size); + } + //切记,这里的换行符不能少,否则将会报41005错误 + out.write(("\r\n--"+boundary+"--\r\n").getBytes()); + + bufferedIn.close(); + in.close(); + mediaConn.disconnect(); + + InputStream resultIn = urlConn.getInputStream(); + InputStreamReader reader = new InputStreamReader(resultIn); + BufferedReader bufferedReader = new BufferedReader(reader); + String tempStr = null; + resultStr = new StringBuffer(); + while((tempStr = bufferedReader.readLine()) != null) { + resultStr.append(tempStr); + } + bufferedReader.close(); + reader.close(); + resultIn.close(); + urlConn.disconnect(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + JSONObject jsonObject=new JSONObject(resultStr.toString()); + return jsonObject.get("media_id").toString(); + } + /** + * 通过传过来的contentType判断是哪一种类型 + * @param contentType 获取来自连接的contentType + * @return + */ + public String judgeType(String contentType) { + String fileExt = ""; + switch (contentType){ + case "image/png": + fileExt = ".png"; + break; + case "image/jpeg": + fileExt = ".jpg"; + break; + } + return fileExt; + } +} From a8a65065162b2c9f6e7fd81515cd256f870bd79d Mon Sep 17 00:00:00 2001 From: lifenlong Date: Thu, 20 May 2021 14:56:15 +0800 Subject: [PATCH 11/68] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E3=80=81=E7=9B=B4=E6=92=AD=E9=97=B4=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=95=86=E5=93=81=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../other/broadcast/StudioController.java | 43 +++++++++++++ .../impl/broadcast/BroadcastExecute.java | 25 ++++++++ .../broadcast/entity/dos/Commodity.java | 4 +- .../modules/broadcast/entity/dos/Studio.java | 11 ++-- .../broadcast/entity/dto/SimpleCommodity.java | 18 ++++++ .../broadcast/entity/vos/StudioVO.java | 1 + .../broadcast/mapper/CommodityMapper.java | 11 +++- .../broadcast/service/CommodityService.java | 2 +- .../broadcast/service/StudioService.java | 10 ++- .../serviceimpl/CommodityServiceImpl.java | 22 +++---- .../serviceimpl/StudioServiceImpl.java | 63 ++++++++++++++----- .../broadcast/util/WechatLivePlayerUtil.java | 8 ++- .../other/broadcast/StudioController.java | 7 --- 13 files changed, 180 insertions(+), 45 deletions(-) create mode 100644 buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java create mode 100644 consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dto/SimpleCommodity.java diff --git a/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java new file mode 100644 index 00000000..83d96f3b --- /dev/null +++ b/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -0,0 +1,43 @@ +package cn.lili.controller.other.broadcast; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.service.StudioService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 买家端,直播间接口 + * + * @author Bulbasaur + * @date: 2021/5/20 12:03 下午 + */ +@RestController +@Api(tags = "买家端,直播间接口") +@RequestMapping("/buyer/broadcast/studio") +public class StudioController { + + @Autowired + private StudioService studioService; + + @ApiOperation(value = "获取店铺直播间列表") + @GetMapping + public ResultMessage> page(PageVO pageVO) { + return ResultUtil.data(studioService.page(PageUtil.initPage(pageVO))); + } + + @ApiOperation(value = "获取店铺直播间回放地址") + @GetMapping("/getLiveInfo/{roomId}") + public ResultMessage getLiveInfo(Integer roomId){ + return ResultUtil.data(studioService.getLiveInfo(roomId)); + } + +} diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java new file mode 100644 index 00000000..9982d57d --- /dev/null +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java @@ -0,0 +1,25 @@ +package cn.lili.timetask.handler.impl.broadcast; + +import cn.lili.modules.broadcast.service.CommodityService; +import cn.lili.timetask.handler.EveryHourExecute; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 小程序直播状态获取 + * + * @author Bulbasaur + * @date: 2021/5/20 2:52 下午 + */ +@Component +public class BroadcastExecute implements EveryHourExecute { + + @Autowired + private CommodityService commodityService; + + @Override + public void execute() { + //同步直播商品状态 + commodityService.getGoodsWareHouse(); + } +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java index 72fd6f94..da71b825 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java @@ -22,8 +22,8 @@ import javax.persistence.Table; @Table(name = "li_commodity") public class Commodity extends BaseEntity { - @ApiModelProperty(value = "图片mediaID") - private String coverImgUrl; + @ApiModelProperty(value = "图片") + private String goodsImage; @ApiModelProperty(value = "商品名称") private String name; diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java index 19ef6180..9f90bb4d 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java @@ -70,16 +70,19 @@ public class Studio extends BaseEntity { @ApiModelProperty(value = "封面图") private String feedsImg; - /** - * 回放视频链接 - */ + @ApiModelProperty(value = "回放视频链接") private String mediaUrl; - @ApiModelProperty(value = "房间ID") private Integer roomId; @ApiModelProperty(value = "店铺ID") private String storeId; + + @ApiModelProperty(value = "直播间商品数量") + private Integer roomGoodsNum; + + @ApiModelProperty(value = "直播间商品(最多展示两个商品:name/goodsImage)") + private String roomGoodsList; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/SimpleCommodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/SimpleCommodity.java new file mode 100644 index 00000000..0b24cc76 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/SimpleCommodity.java @@ -0,0 +1,18 @@ +package cn.lili.modules.broadcast.entity.dto; + +import io.swagger.annotations.ApiModelProperty; + +/** + * 用于直播间前台使用的直播间商品DTO + * + * @author Bulbasaur + * @date: 2021/5/20 2:34 下午 + */ +public class SimpleCommodity { + + @ApiModelProperty(value = "图片") + private String goodsImage; + + @ApiModelProperty(value = "商品名称") + private String name; +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java index c20b29d4..b058c6bb 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java @@ -18,4 +18,5 @@ public class StudioVO extends Studio { @ApiModelProperty(value = "直播间商品列表") private List CommodityList; + } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java index 7578eb2e..530d59d6 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java @@ -1,6 +1,7 @@ package cn.lili.modules.broadcast.mapper; import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.entity.dto.SimpleCommodity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Select; @@ -14,7 +15,13 @@ import java.util.List; */ public interface CommodityMapper extends BaseMapper { - @Select("SELECT live_goods_id FROM li_commodity WHERE audit_status='0' or audit_status='1'") - List getAuditCommodity(); + @Select("SELECT live_goods_id FROM li_commodity WHERE audit_status='0' or audit_status='1' AND store_id =#{storeId}") + List getAuditCommodity(String storeId); + + @Select("SELECT * FROM li_commodity c WINNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") + List getCommodityByRoomId(Integer roomId); + + @Select("SELECT name,goods_image FROM li_commodity c WINNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") + List getSimpleCommodityByRoomId(Integer roomId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java index b227be65..310687be 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java @@ -27,5 +27,5 @@ public interface CommodityService extends IService { /** * 查询微信小程序直播商品审核状态 */ - void getGoodsWarehouse(); + void getGoodsWareHouse(); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java index 1a476a67..b1eb0fc4 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java @@ -1,6 +1,7 @@ package cn.lili.modules.broadcast.service; import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.entity.vos.StudioVO; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -20,12 +21,19 @@ public interface StudioService extends IService { */ Boolean create(Studio studio); + /** + * 获取直播间信息 + * @param id 直播间ID + * @return 直播间VO + */ + StudioVO getStudioVO(String id); + /** * 获取直播间回放 * @param roomId 房间ID * @return 直播间回放地址 */ - String getLiveInfo(String roomId); + String getLiveInfo(Integer roomId); /** * 推送商品 diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index 23be52ca..1e524984 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -28,7 +28,7 @@ public class CommodityServiceImpl extends ServiceImpl goodsIdList=this.baseMapper.getAuditCommodity(); + List goodsIdList = this.baseMapper.getAuditCommodity(UserContext.getCurrentUser().getStoreId()); //同步状态 - JSONObject json =wechatLivePlayerUtil.deleteGoods(goodsIdList); + JSONObject json = wechatLivePlayerUtil.getGoodsWareHouse(goodsIdList); //修改状态 - List> list=(List)json.get("goods"); - for (Map map:list){ + List> list = (List) json.get("goods"); + for (Map map : list) { //修改审核状态 this.update(this.lambdaUpdate() - .eq(Commodity::getLiveGoodsId,map.get("goods_id")) - .set(Commodity::getAuditStatus,map.get("audit_status"))); + .eq(Commodity::getLiveGoodsId, map.get("goods_id")) + .set(Commodity::getAuditStatus, map.get("audit_status"))); } } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 4a49cd13..db466178 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -1,10 +1,14 @@ package cn.lili.modules.broadcast.serviceimpl; +import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; +import cn.lili.common.utils.BeanUtil; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.entity.dos.StudioCommodity; +import cn.lili.modules.broadcast.entity.vos.StudioVO; +import cn.lili.modules.broadcast.mapper.CommodityMapper; import cn.lili.modules.broadcast.mapper.StudioMapper; import cn.lili.modules.broadcast.service.StudioCommodityService; import cn.lili.modules.broadcast.service.StudioService; @@ -14,6 +18,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * 小程序直播间业务层实现 * @@ -21,22 +27,24 @@ import org.springframework.stereotype.Service; * @date: 2021/5/17 10:04 上午 */ @Service -public class StudioServiceImpl extends ServiceImpl implements StudioService { +public class StudioServiceImpl extends ServiceImpl implements StudioService { @Autowired private WechatLivePlayerUtil wechatLivePlayerUtil; @Autowired private StudioCommodityService studioCommodityService; + @Resource + private CommodityMapper commodityMapper; @Override public Boolean create(Studio studio) { try { //创建小程序直播 - Integer roomId=wechatLivePlayerUtil.create(studio); + Integer roomId = wechatLivePlayerUtil.create(studio); studio.setRoomId(roomId); studio.setStoreId(UserContext.getCurrentUser().getStoreId()); return this.save(studio); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); throw new ServiceException(ResultCode.ERROR); } @@ -44,13 +52,23 @@ public class StudioServiceImpl extends ServiceImpl implem } @Override - public String getLiveInfo(String roomId) { - Studio studio=this.getByRoomId(roomId); + public StudioVO getStudioVO(String id) { + StudioVO studioVO = new StudioVO(); + //获取直播间信息 + BeanUtil.copyProperties(this.getById(id), studioVO); + //获取直播间商品信息 + studioVO.setCommodityList(commodityMapper.getCommodityByRoomId(studioVO.getRoomId())); + return studioVO; + } + + @Override + public String getLiveInfo(Integer roomId) { + Studio studio = this.getByRoomId(roomId); //获取直播间并判断回放内容是否为空,如果为空则获取直播间回放并保存 - if(studio.getMediaUrl()!=null){ + if (studio.getMediaUrl() != null) { return studio.getMediaUrl(); - }else{ - String mediaUrl= wechatLivePlayerUtil.getLiveInfo(roomId); + } else { + String mediaUrl = wechatLivePlayerUtil.getLiveInfo(roomId); studio.setMediaUrl(mediaUrl); this.save(studio); return mediaUrl; @@ -60,8 +78,16 @@ public class StudioServiceImpl extends ServiceImpl implem @Override public Boolean push(Integer roomId, Integer goodsId) { //调用微信接口添加直播间商品并进行记录 - if(wechatLivePlayerUtil.pushGoods(roomId,goodsId)){ - return studioCommodityService.save(new StudioCommodity(roomId,goodsId)); + if (wechatLivePlayerUtil.pushGoods(roomId, goodsId)) { + studioCommodityService.save(new StudioCommodity(roomId, goodsId)); + //添加直播间商品数量 + Studio studio = this.getByRoomId(roomId); + studio.setRoomGoodsNum(studio.getRoomGoodsNum() != null ? studio.getRoomGoodsNum() + 1 : 1); + //设置直播间默认的商品(前台展示)只展示两个 + if(studio.getRoomGoodsNum()<3){ + studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId)));; + } + return this.updateById(studio); } return false; } @@ -69,18 +95,27 @@ public class StudioServiceImpl extends ServiceImpl implem @Override public Boolean goodsDeleteInRoom(Integer roomId, Integer goodsId) { //调用微信接口删除直播间商品并进行记录 - if(wechatLivePlayerUtil.goodsDeleteInRoom(roomId,goodsId)){ - return studioCommodityService.remove(new QueryWrapper().eq("room_id",roomId).eq("goods_id",goodsId)); + if (wechatLivePlayerUtil.goodsDeleteInRoom(roomId, goodsId)) { + studioCommodityService.remove(new QueryWrapper().eq("room_id", roomId).eq("goods_id", goodsId)); + //减少直播间商品数量 + Studio studio = this.getByRoomId(roomId); + studio.setRoomGoodsNum(studio.getRoomGoodsNum() - 1); + //设置直播间默认的商品(前台展示)只展示两个 + if(studio.getRoomGoodsNum()<3){ + studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId)));; + } + return this.updateById(studio); } return false; } /** * 根据直播间ID获取直播间 + * * @param roomId 直播间ID * @return 直播间 */ - private Studio getByRoomId(String roomId){ - return this.getOne(this.lambdaQuery().eq(Studio::getRoomId,roomId)) ; + private Studio getByRoomId(Integer roomId) { + return this.getOne(this.lambdaQuery().eq(Studio::getRoomId, roomId)); } } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index 717d9c6a..4852a419 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -83,12 +83,12 @@ public class WechatLivePlayerUtil { * @param roomId 房间ID * @return 回放地址 */ - public String getLiveInfo(String roomId) { + public String getLiveInfo(Integer roomId) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxa/business/getliveinfo?access_token=" + token; - Map map = new HashMap<>(); + Map map = new HashMap<>(); // 获取回放 map.put("action", "get_replay"); // 直播间ID @@ -162,7 +162,9 @@ public class WechatLivePlayerUtil { String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=" + token; + //新建微信商品DTO GoodsInfo goodsInfo = new GoodsInfo(commodity); + goodsInfo.setCoverImgUrl(wechatMediaUtil.uploadMedia(token,"image",commodity.getGoodsImage())); String content = HttpUtils.doPostWithJson(url, goodsInfo); JSONObject json = new JSONObject(content); log.info("微信小程序添加直播商品结果:" + content); @@ -192,7 +194,7 @@ public class WechatLivePlayerUtil { * @param goodsIdList 商品ID列表 * @return 删除结果 */ - public JSONObject deleteGoods(List goodsIdList) { + public JSONObject getGoodsWareHouse(List goodsIdList) { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java index 7d7937a6..ff3d0a57 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -6,7 +6,6 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.base.entity.enums.ClientTypeEnum; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.service.StudioService; import cn.lili.modules.message.util.WechatAccessTokenUtil; @@ -83,10 +82,4 @@ public class StudioController { } throw new ServiceException(ResultCode.ERROR); } - - @ApiOperation(value = "获取素材,调用接口凭证") - @PutMapping(value = "/getCgiAccessToken") - public ResultMessage getCgiAccessToken() { - return ResultUtil.data(wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP)); - } } From fa59c9ca730d3b2e3c372ae29e016b51a1a19519 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 21 May 2021 09:11:40 +0800 Subject: [PATCH 12/68] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/MemberExperienceExecute.java | 1 - .../member/serviceimpl/MemberServiceImpl.java | 1 + .../modules/promotion/entity/dos/Coupon.java | 4 +-- .../promotion/entity/dos/CouponActivity.java | 34 ++++++++++++++++++ .../entity/dos/CouponActivityItem.java | 35 +++++++++++++++++++ .../entity/enums/ActivityRangeEnum.java | 23 ++++++++++++ .../entity/enums/CouponActivityTypeEnum.java | 23 ++++++++++++ .../mapper/CouponActivityItemMapper.java | 15 ++++++++ .../mapper/CouponActivityMapper.java | 15 ++++++++ .../service/CouponActivityItemService.java | 13 +++++++ .../service/CouponActivityService.java | 27 ++++++++++++++ .../CouponActivityServiceImpl.java | 15 ++++++++ .../serviceimpl/CouponServiceImpl.java | 1 - 13 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivityTypeEnum.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java index 8337db25..7c514764 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberExperienceExecute.java @@ -78,7 +78,6 @@ public class MemberExperienceExecute implements MemberRegisterEvent, GoodsCommen Double point= CurrencyUtil.mul(experienceSetting.getMoney(),order.getFlowPrice(),0); //赠送会员经验值 memberService.updateMemberExperience(point.longValue(), true, order.getMemberId(), "会员下单,赠送经验值" + point + "分"); - } } diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java index 25330b74..c5ad83f6 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java @@ -401,6 +401,7 @@ public class MemberServiceImpl extends ServiceImpl impleme currentExperience = CurrencyUtil.sub(member.getPoint(), experience) < 0 ? 0 : new Double(CurrencyUtil.sub(member.getExperience(), experience)).longValue(); } member.setExperience(currentExperience); + return this.updateById(member); } throw new ServiceException(ResultCode.USER_NOT_EXIST); diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java index ae410350..f26919dc 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java @@ -20,7 +20,7 @@ import javax.persistence.Table; @Entity @Table(name = "li_coupon") @TableName("li_coupon") -@ApiModel(value = "优惠券活动实体类") +@ApiModel(value = "优惠券实体类") public class Coupon extends BasePromotion { @@ -35,7 +35,7 @@ public class Coupon extends BasePromotion { * * @see cn.lili.modules.promotion.entity.enums.CouponTypeEnum */ - @ApiModelProperty(value = "活动类型") + @ApiModelProperty(value = "优惠券类型") private String couponType; /** diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java new file mode 100644 index 00000000..122d8249 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -0,0 +1,34 @@ +package cn.lili.modules.promotion.entity.dos; + +import cn.lili.modules.promotion.entity.dto.BasePromotion; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; + +/** + * 优惠券活动实体类 + * + * @author Chopper + * @date 2020-03-19 10:44 上午 + */ +@Data +@Entity +@Table(name = "li_coupon_activity") +@TableName("li_coupon_activity") +@ApiModel(value = "优惠券活动实体类") +public class CouponActivity extends BasePromotion { + + @ApiModelProperty(value = "优惠券活动类型") + private String couponActivityType; + + @ApiModelProperty(value = "活动范围", allowableValues = "ALL:全部会员,DESIGNATED:指定会员") + private String activityScope; + + @ApiModelProperty(value = "活动范围") + private String activityScopeInfo; + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java new file mode 100644 index 00000000..c2cede81 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java @@ -0,0 +1,35 @@ +package cn.lili.modules.promotion.entity.dos; + +import cn.lili.base.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; + +/** + * 优惠券活动实体类 + * + * @author Chopper + * @date 2020-03-19 10:44 上午 + */ +@Data +@Entity +@Table(name = "li_coupon_activity_item") +@TableName("li_coupon_activity_item") +@ApiModel(value = "优惠券活动-优惠券关联实体类") +public class CouponActivityItem extends BaseEntity { + + @ApiModelProperty(value = "优惠券活动ID") + private String activityId; + + @ApiModelProperty(value = "优惠券ID") + private String couponId; + + @ApiModelProperty(value = "优惠券数量") + private Integer num; + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java new file mode 100644 index 00000000..33c16f07 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java @@ -0,0 +1,23 @@ +package cn.lili.modules.promotion.entity.enums; + +/** + * 优惠券活动范围枚举 + * + * @author Bulbasaur + * @date: 2021/5/20 6:05 下午 + */ +public enum ActivityRangeEnum { + + ALL("新人赠券"), + DESIGNATED("精确发券"); + + private final String description; + + ActivityRangeEnum(String str) { + this.description = str; + } + + public String description() { + return description; + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivityTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivityTypeEnum.java new file mode 100644 index 00000000..323d38f7 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivityTypeEnum.java @@ -0,0 +1,23 @@ +package cn.lili.modules.promotion.entity.enums; + +/** + * 优惠券活动类型枚举 + * + * @author Bulbasaur + * @date: 2021/5/20 5:47 下午 + */ +public enum CouponActivityTypeEnum { + + REGISTERED("新人赠券"), + SPECIFY("精确发券"); + + private final String description; + + CouponActivityTypeEnum(String str) { + this.description = str; + } + + public String description() { + return description; + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java new file mode 100644 index 00000000..9a42d55a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java @@ -0,0 +1,15 @@ +package cn.lili.modules.promotion.mapper; + +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 优惠券活动 + * @author Bulbasaur + * @date: 2021/5/20 6:11 下午 + * + */ +public interface CouponActivityItemMapper extends BaseMapper { + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityMapper.java new file mode 100644 index 00000000..256e78e4 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityMapper.java @@ -0,0 +1,15 @@ +package cn.lili.modules.promotion.mapper; + +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 优惠券活动 + * @author Bulbasaur + * @date: 2021/5/20 6:11 下午 + * + */ +public interface CouponActivityMapper extends BaseMapper { + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java new file mode 100644 index 00000000..337e0488 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java @@ -0,0 +1,13 @@ +package cn.lili.modules.promotion.service; + +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 优惠券活动-优惠券业务层 + * + * @author Bulbasaur + * @date: 2021/5/20 6:10 下午 + */ +public interface CouponActivityItemService extends IService { +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java new file mode 100644 index 00000000..91e3d0e2 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java @@ -0,0 +1,27 @@ +package cn.lili.modules.promotion.service; + +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 优惠券活动业务层 + * + * @author Bulbasaur + * @date: 2021/5/20 6:10 下午 + */ +public interface CouponActivityService extends IService { + + //创建优惠券活动--精准发券、新人赠券、会员等级赠券 + + //编辑优惠券活动 + + //删除优惠券活动 + + //关闭优惠券活动 + + //开启优惠券活动 + + //查看优惠券活动 + + //查看优惠券活动 +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java new file mode 100644 index 00000000..cc75a1ad --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -0,0 +1,15 @@ +package cn.lili.modules.promotion.serviceimpl; + +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.mapper.CouponActivityMapper; +import cn.lili.modules.promotion.service.CouponActivityService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * 优惠券活动业务层实现 + * + * @author Bulbasaur + * @date: 2021/5/20 6:10 下午 + */ +public class CouponActivityServiceImpl extends ServiceImpl implements CouponActivityService { +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 09b7672d..da679bce 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -53,7 +53,6 @@ import java.util.stream.Collectors; */ @Service @Transactional(rollbackFor = Exception.class) - public class CouponServiceImpl extends ServiceImpl implements CouponService { //延时任务 From 89249815566033862e3ce8ec8aa0e7d3839ede52 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 21 May 2021 19:54:25 +0800 Subject: [PATCH 13/68] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/entity/dos/CouponActivity.java | 7 +- .../entity/dos/CouponActivityItem.java | 2 +- .../entity/dto/CouponActivityDTO.java | 21 ++ .../entity/enums/ActivityRangeEnum.java | 23 --- .../entity/vos/CouponActivityVO.java | 29 +++ .../mapper/CouponActivityItemMapper.java | 4 +- .../service/CouponActivityItemService.java | 10 + .../service/CouponActivityService.java | 40 +++- .../CouponActivityItemServiceImpl.java | 23 +++ .../CouponActivityServiceImpl.java | 184 ++++++++++++++++++ .../CouponActivityManagerController.java | 51 +++++ 11 files changed, 365 insertions(+), 29 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java delete mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java create mode 100644 manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 122d8249..00be19bc 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -8,11 +8,12 @@ import lombok.Data; import javax.persistence.Entity; import javax.persistence.Table; +import javax.validation.constraints.NotNull; /** * 优惠券活动实体类 * - * @author Chopper + * @author Bulbasaur * @date 2020-03-19 10:44 上午 */ @Data @@ -22,13 +23,15 @@ import javax.persistence.Table; @ApiModel(value = "优惠券活动实体类") public class CouponActivity extends BasePromotion { + @NotNull(message = "优惠券活动类型不能为空") @ApiModelProperty(value = "优惠券活动类型") private String couponActivityType; + @NotNull(message = "请选择活动范围") @ApiModelProperty(value = "活动范围", allowableValues = "ALL:全部会员,DESIGNATED:指定会员") private String activityScope; - @ApiModelProperty(value = "活动范围") + @ApiModelProperty(value = "活动范围详情") private String activityScopeInfo; } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java index c2cede81..0bb06e67 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivityItem.java @@ -12,7 +12,7 @@ import javax.persistence.Table; /** * 优惠券活动实体类 * - * @author Chopper + * @author Bulbasaur * @date 2020-03-19 10:44 上午 */ @Data diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java new file mode 100644 index 00000000..0e997819 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java @@ -0,0 +1,21 @@ +package cn.lili.modules.promotion.entity.dto; + +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 优惠券活动DTO + * + * @author Bulbasaur + * @date: 2021/5/21 7:16 下午 + */ +@Data +public class CouponActivityDTO extends CouponActivity { + + @ApiModelProperty(value = "优惠券列表") + private List couponActivityItems; +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java deleted file mode 100644 index 33c16f07..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/ActivityRangeEnum.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.lili.modules.promotion.entity.enums; - -/** - * 优惠券活动范围枚举 - * - * @author Bulbasaur - * @date: 2021/5/20 6:05 下午 - */ -public enum ActivityRangeEnum { - - ALL("新人赠券"), - DESIGNATED("精确发券"); - - private final String description; - - ActivityRangeEnum(String str) { - this.description = str; - } - - public String description() { - return description; - } -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java new file mode 100644 index 00000000..956c9f8c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java @@ -0,0 +1,29 @@ +package cn.lili.modules.promotion.entity.vos; + +import cn.lili.common.utils.BeanUtil; +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 优惠券活动VO + * + * @author Bulbasaur + * @date: 2021/5/21 7:01 下午 + */ +@Data +@NoArgsConstructor +public class CouponActivityVO extends CouponActivity { + + @ApiModelProperty(value = "优惠券活动下的优惠券列表") + private List couponActivityItems; + + public CouponActivityVO(CouponActivity couponActivity, List couponActivityItems) { + BeanUtil.copyProperties(couponActivity, this); + this.couponActivityItems = couponActivityItems; + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java index 9a42d55a..000d8b5c 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java @@ -1,6 +1,6 @@ package cn.lili.modules.promotion.mapper; -import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @date: 2021/5/20 6:11 下午 * */ -public interface CouponActivityItemMapper extends BaseMapper { +public interface CouponActivityItemMapper extends BaseMapper { } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java index 337e0488..5616b7c8 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java @@ -3,6 +3,8 @@ package cn.lili.modules.promotion.service; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 优惠券活动-优惠券业务层 * @@ -10,4 +12,12 @@ import com.baomidou.mybatisplus.extension.service.IService; * @date: 2021/5/20 6:10 下午 */ public interface CouponActivityItemService extends IService { + + /** + * 获取优惠券活动关联优惠券列表 + * + * @param activityId 优惠券活动ID + * @return 优惠券关联优惠券列表 + */ + List getCouponActivityList(String activityId); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java index 91e3d0e2..f178b21d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java @@ -1,8 +1,12 @@ package cn.lili.modules.promotion.service; import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 优惠券活动业务层 * @@ -11,7 +15,41 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface CouponActivityService extends IService { - //创建优惠券活动--精准发券、新人赠券、会员等级赠券 + /** + * 创建优惠券活动--精准发券、新人赠券 + * @param couponActivityDTO 优惠券活动DTO + */ + CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO); + + /** + * 修改优惠券活动--精准发券、新人赠券 + * @param couponActivityDTO 优惠券活动DTO + */ + CouponActivityDTO updateCouponActivity(CouponActivityDTO couponActivityDTO); + + /** + * 获取优惠券活动VO + * 包含优惠券活动信息以及优惠券关联优惠券列表 + * + * @param couponActivityId 优惠券活动ID + * @return 优惠券VO + */ + CouponActivityVO getCouponActivityVO(String couponActivityId); + + /** + * 精准发券 + * + * @param couponActivityId 优惠券活动ID + */ + void specify(String couponActivityId); + + /** + * 注册赠券 + * + * @param couponActivityIds 优惠券活动ID + * @param memberId + */ + void registered(List couponActivityIds, String memberId); //编辑优惠券活动 diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java new file mode 100644 index 00000000..b5993abc --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java @@ -0,0 +1,23 @@ +package cn.lili.modules.promotion.serviceimpl; + +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import cn.lili.modules.promotion.mapper.CouponActivityItemMapper; +import cn.lili.modules.promotion.service.CouponActivityItemService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 优惠券活动关联优惠券业务层实现 + * + * @author Bulbasaur + * @date: 2021/5/21 6:42 下午 + */ +@Service +public class CouponActivityItemServiceImpl extends ServiceImpl implements CouponActivityItemService { + @Override + public List getCouponActivityList(String activityId) { + return this.list(this.lambdaQuery().eq(CouponActivityItem::getActivityId, activityId)); + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index cc75a1ad..4ae3801b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -1,9 +1,30 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.utils.DateUtil; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.mapper.CouponActivityMapper; +import cn.lili.modules.promotion.service.CouponActivityItemService; import cn.lili.modules.promotion.service.CouponActivityService; +import cn.lili.modules.promotion.service.CouponService; +import cn.lili.modules.promotion.service.MemberCouponService; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import groovy.util.logging.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; /** * 优惠券活动业务层实现 @@ -11,5 +32,168 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; * @author Bulbasaur * @date: 2021/5/20 6:10 下午 */ +@Slf4j +@Service public class CouponActivityServiceImpl extends ServiceImpl implements CouponActivityService { + + @Autowired + private CouponService couponService; + @Autowired + private MemberCouponService memberCouponService; + @Autowired + private CouponActivityItemService couponActivityItemService; + @Autowired + private MemberService memberService; + + @Override + public CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO) { + //检测优惠券活动是否可以添加 + this.checkParam(couponActivityDTO); + //添加优惠券活动 + this.save(couponActivityDTO); + //添加优惠券活动优惠券 + this.addCouponActivityItems(couponActivityDTO); + //发送促销活动开始的延时任务 + return couponActivityDTO; + } + + @Override + public CouponActivityDTO updateCouponActivity(CouponActivityDTO couponActivityDTO) { + //检测优惠券活动是否可以修改 + this.checkParam(couponActivityDTO); + //修改优惠券活动 + this.updateById(couponActivityDTO); + //删除优惠券活动关联的优惠券 + couponActivityItemService.remove(new LambdaQueryWrapper() + .eq(CouponActivityItem::getActivityId,couponActivityDTO.getId())); + //重新添加优惠券活动关联优惠券 + this.addCouponActivityItems(couponActivityDTO); + //更新促销活动的延时任务 + return couponActivityDTO; + } + + @Override + public CouponActivityVO getCouponActivityVO(String couponActivityId) { + CouponActivity couponActivity = this.getById(couponActivityId); + CouponActivityVO couponActivityVO = new CouponActivityVO(couponActivity, couponActivityItemService.getCouponActivityList(couponActivityId)); + return couponActivityVO; + } + + @Override + public void specify(String couponActivityId) { + //获取优惠券 + CouponActivity couponActivity = this.getById(couponActivityId); + //获取活动优惠券发送范围 + List> memberList = this.getMemberList(couponActivity); + //优惠优惠券活动的优惠券列表 + List couponActivityItems = couponActivityItemService.getCouponActivityList(couponActivity.getId()); + //发送优惠券 + sendCoupon(memberList, couponActivityItems); + } + + @Override + public void registered(List couponActivityIds, String memberId) { + for (String couponActivityId : couponActivityIds) { + //获取优惠券 + CouponActivity couponActivity = this.getById(couponActivityId); + //获取会员信息 + List> memberList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("id", memberId); + map.put("nick_name", memberService.getById(memberId).getNickName()); + memberList.add(map); + + //优惠优惠券活动的优惠券列表 + List couponActivityItems = couponActivityItemService.getCouponActivityList(couponActivity.getId()); + + //发送优惠券 + sendCoupon(memberList, couponActivityItems); + } + } + + /** + * 发送优惠券 + * + * @param memberList 用户列表 + * @param couponActivityItems 优惠券列表 + */ + private void sendCoupon(List> memberList, List couponActivityItems) { + + for (CouponActivityItem couponActivityItem : couponActivityItems) { + //获取优惠券 + Coupon coupon = couponService.getCouponDetailFromMongo(couponActivityItem.getCouponId()); + //判断优惠券是否存在 + if (coupon != null) { + List memberCouponList = new LinkedList<>(); + //循环会员列表,添加优惠券 + for (Map map : memberList) { + MemberCoupon memberCoupon = new MemberCoupon(coupon); + memberCoupon.setMemberId(map.get("id").toString()); + memberCoupon.setMemberName(map.get("nick_name").toString()); + memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); + memberCoupon.setIsPlatform(coupon.getStoreId().equals("platform")); + //循环优惠券的领取数量 + for (int i = 1; i <= couponActivityItem.getNum(); i++) { + memberCouponList.add(memberCoupon); + } + } + //批量添加优惠券 + memberCouponService.saveBatch(memberCouponList); + //添加优惠券已领取数量 + couponService.receiveCoupon(couponActivityItem.getCouponId(), memberCouponList.size() * couponActivityItem.getNum()); + } else { + log.error("赠送优惠券失败,当前优惠券不存在:" + couponActivityItem.getCouponId()); + } + } + + } + + /** + * 检测优惠券活动参数 + * + * @param couponActivity 优惠券活动 + */ + private void checkParam(CouponActivity couponActivity) { + + //检测活动时间超过当前时间不能进行操作 + long nowTime = DateUtil.getDateline() * 1000; + if (couponActivity.getStartTime().getTime() < nowTime && couponActivity.getEndTime().getTime() > nowTime) { + throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); + } + //活动时间需超过当前时间 + PromotionTools.checkPromotionTime(couponActivity.getStartTime().getTime(), couponActivity.getEndTime().getTime()); + } + + /** + * 获取优惠券的范围范围 + * 此方法用于精准发券 + * + * @param couponActivity 优惠券活动 + * @return 获取优惠券的会员列表 + */ + private List> getMemberList(CouponActivity couponActivity) { + //判断优惠券的发送范围,获取会员列表 + if (couponActivity.getActivityScope().equals("ALL")) { + return memberService.listMaps(new QueryWrapper() + .select("id") + .select("nick_name")); + } else { + return memberService.listMaps(new QueryWrapper() + .select("id") + .select("nick_name") + .in("id", couponActivity.getActivityScopeInfo())); + } + } + + /** + * 添加优惠券活动关联优惠券 + * @param couponActivityDTO 优惠券活动DTO + */ + private void addCouponActivityItems(CouponActivityDTO couponActivityDTO){ + //创建优惠券活动子列表 + for(CouponActivityItem couponActivityItem:couponActivityDTO.getCouponActivityItems()){ + couponActivityItem.setActivityId(couponActivityDTO.getId()); + } + couponActivityItemService.saveBatch(couponActivityDTO.getCouponActivityItems()); + } } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java new file mode 100644 index 00000000..8dabf79f --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -0,0 +1,51 @@ +package cn.lili.controller.promotion; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.vos.CouponActivityVO; +import cn.lili.modules.promotion.service.CouponActivityService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * 优惠券活动 + * + * @author Bulbasaur + * @date: 2021/5/21 7:11 下午 + */ +@RestController +@Api(tags = "管理端,优惠券接口") +@RequestMapping("/manager/promotion/coupon") +public class CouponActivityManagerController { + + @Autowired + private CouponActivityService couponActivityService; + + @ApiOperation(value = "获取优惠券活动分页") + @GetMapping + public ResultMessage> getCouponActivityPage(PageVO page) { + return ResultUtil.data(couponActivityService.page(PageUtil.initPage(page))); + } + + @ApiOperation(value = "获取优惠券活动") + @ApiImplicitParam(name = "couponActivityId", value = "优惠券活动ID", required = true, paramType = "path") + @GetMapping("/getCouponActivity/{couponActivityId}") + public ResultMessage getCouponActivity(@PathVariable String couponActivityId) { + return ResultUtil.data(couponActivityService.getCouponActivityVO(couponActivityId)); + } + + @ApiOperation(value = "添加优惠券活动") + @PostMapping("/add") + public ResultMessage addCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { + return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); + } +} From 777226dc95fc15b984115368b136da9c1e2f2181 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 24 May 2021 11:09:21 +0800 Subject: [PATCH 14/68] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E5=8F=91=E9=80=81/=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/RegisteredCouponActivityExecute.java | 41 ++++ .../couponActivity/CouponActivityExecute.java | 79 ++++++ .../PromotionTimeTriggerExecutor.java | 37 ++- .../modules/promotion/entity/dos/Coupon.java | 10 + .../promotion/entity/dos/CouponActivity.java | 7 + .../entity/enums/CouponRangeDayEnum.java | 27 +++ .../entity/enums/PromotionTypeEnum.java | 8 +- .../service/CouponActivityService.java | 11 +- .../CouponActivityServiceImpl.java | 20 +- .../serviceimpl/PromotionServiceImpl.java | 224 ++++++++++++------ .../CouponActivityManagerController.java | 25 +- 11 files changed, 389 insertions(+), 100 deletions(-) create mode 100644 consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java create mode 100644 consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java diff --git a/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java new file mode 100644 index 00000000..9eabd094 --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java @@ -0,0 +1,41 @@ +package cn.lili.event.impl; + +import cn.lili.event.MemberRegisterEvent; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.service.CouponActivityService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 注册赠券活动 + * + * @author Bulbasaur + * @date: 2021/5/24 10:48 上午 + */ +@Component +public class RegisteredCouponActivityExecute implements MemberRegisterEvent { + + @Autowired + private CouponActivityService couponActivityService; + + /** + * 获取进行中的注册赠券的优惠券活动 + * 发送注册赠券 + * + * @param member 会员 + */ + @Override + public void memberRegister(Member member) { + List couponActivities = couponActivityService.list(new LambdaQueryWrapper() + .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) + .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name())); + couponActivityService.registered(couponActivities, member); + + } +} diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java new file mode 100644 index 00000000..9481998d --- /dev/null +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java @@ -0,0 +1,79 @@ +package cn.lili.timetask.handler.impl.couponActivity; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.service.CouponActivityService; +import cn.lili.timetask.handler.EveryMinuteExecute; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 优惠券活动状态监测 + * + * @author Bulbasaur + * @date: 2021/5/24 10:08 上午 + */ +@Component +public class CouponActivityExecute implements EveryMinuteExecute { + + @Autowired + private CouponActivityService couponActivityService; + + @Override + public void execute() { + //精确发券活动 + specify(); + //注册赠券的活动 + registered(); + } + + /** + * 监测精确发券活动 + * 达到活动时间发送优惠券 + */ + private void specify(){ + DateTime dateTime=DateUtil.date(); + List couponActivities=couponActivityService.list(new LambdaQueryWrapper() + .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name()) + .le(CouponActivity::getStartTime, dateTime) + .eq(CouponActivity::getPromotionStatus,PromotionStatusEnum.NEW.name())); + //如果有符合要求的优惠券活动,发送优惠券 + if(couponActivities.size()>0){ + for (CouponActivity CouponActivity:couponActivities) { + couponActivityService.specify(CouponActivity.getId()); + } + //修改精准发券优惠券活动状态 + couponActivityService.update(new LambdaUpdateWrapper() + .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name()) + .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name())); + } + + } + /** + * 注册赠券活动状态监测 + */ + private void registered(){ + //开启注册赠券优惠券活动 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) + .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.NEW.name()) + .le(CouponActivity::getStartTime, DateUtil.date()) + .set(CouponActivity::getActivityScope,PromotionStatusEnum.START.name()); + couponActivityService.update(lambdaUpdateWrapper); + + //关闭注册赠券优惠券活动 + LambdaUpdateWrapper endWrapper = new LambdaUpdateWrapper<>(); + endWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) + .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name()) + .le(CouponActivity::getEndTime, DateUtil.date()) + .set(CouponActivity::getActivityScope,PromotionStatusEnum.END.name()); + couponActivityService.update(endWrapper); + } +} diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index c0aee57d..f347e484 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -48,19 +48,13 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { log.info("促销活动信息消费:{}", promotionMessage); // 如果为促销活动开始,则需要发布促销活动结束的定时任务 if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { - if (!promotionService.updatePromotionStatus(promotionMessage)) { - log.error("开始促销活动失败: {}", promotionMessage); - return; - } - // 促销活动开始后,设置促销活动结束的定时任务 - promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); - String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); - // 结束时间(延时一分钟) - long closeTime = promotionMessage.getEndTime().getTime() + 60000; - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); - timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(promotionMessage.getEndTime().getTime())); - } else { - promotionService.updatePromotionStatus(promotionMessage); + //设置活动关闭时间 + setCloseTime(promotionMessage); + } + //更新促销活动状态 + if (!promotionService.updatePromotionStatus(promotionMessage)) { + log.error("开始促销活动失败: {}", promotionMessage); + return; } return; } @@ -73,5 +67,22 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { } } + /** + * 设置促销活动结束时间 + * + * @param promotionMessage 信息队列传输促销信息实体 + */ + private void setCloseTime(PromotionMessage promotionMessage) { + //如果设置了活动结束时间则创建促销结束延时任务 + if(promotionMessage.getEndTime()!=null){ + // 促销活动开始后,设置促销活动结束的定时任务 + promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); + String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); + // 结束时间(延时一分钟) + long closeTime = promotionMessage.getEndTime().getTime() + 60000; + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); + timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(promotionMessage.getEndTime().getTime())); + } + } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java index f26919dc..9c9739e0 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java @@ -81,4 +81,14 @@ public class Coupon extends BasePromotion { @ApiModelProperty(value = "消费门槛") private Double consumeThreshold; + /** + * @see cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum + * + */ + @ApiModelProperty(value = "时间范围类型") + private String rangeDayType; + + @ApiModelProperty(value = "有效期") + private Integer effectiveDays; + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 00be19bc..6cb4c216 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -1,6 +1,7 @@ package cn.lili.modules.promotion.entity.dos; import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -23,6 +24,12 @@ import javax.validation.constraints.NotNull; @ApiModel(value = "优惠券活动实体类") public class CouponActivity extends BasePromotion { + /** + * @see CouponActivityTypeEnum + * @author Bulbasaur + * @date: 2021/5/24 10:28 上午 + * + */ @NotNull(message = "优惠券活动类型不能为空") @ApiModelProperty(value = "优惠券活动类型") private String couponActivityType; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java new file mode 100644 index 00000000..d67aa29d --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java @@ -0,0 +1,27 @@ +package cn.lili.modules.promotion.entity.enums; + +/** + * 优惠券时间范围枚举 + * + * @author Bulbasaur + * @date: 2021/5/24 8:31 上午 + */ +public enum CouponRangeDayEnum { + + /** + * 枚举 + */ + FIXEDTIME("固定时间"), DYNAMICTIME("动态时间"); + + private final String description; + + CouponRangeDayEnum(String str) { + this.description = str; + } + + public String description() { + return description; + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java index 2a346080..e7e2a883 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java @@ -11,7 +11,13 @@ public enum PromotionTypeEnum { /** * 促销枚举 */ - PINTUAN("拼团"), SECKILL("秒杀"), COUPON("优惠券"), FULL_DISCOUNT("满减"), POINTS_GOODS("积分商品"); + PINTUAN("拼团"), + SECKILL("秒杀"), + COUPON("优惠券"), + FULL_DISCOUNT("满减"), + POINTS_GOODS("积分商品"), + COUPON_ACTIVITY("优惠券活动") + ; /** * 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方 diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java index f178b21d..6992fb95 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java @@ -1,7 +1,9 @@ package cn.lili.modules.promotion.service; +import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -46,17 +48,16 @@ public interface CouponActivityService extends IService { /** * 注册赠券 * - * @param couponActivityIds 优惠券活动ID - * @param memberId + * @param couponActivityList 优惠券活动 + * @param member 会员 */ - void registered(List couponActivityIds, String memberId); + void registered(List couponActivityList, Member member); - //编辑优惠券活动 //删除优惠券活动 //关闭优惠券活动 - + boolean updateCouponActivityStatus(String id, PromotionStatusEnum promotionStatus); //开启优惠券活动 //查看优惠券活动 diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 4ae3801b..c78b41ae 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -10,6 +10,7 @@ import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.mapper.CouponActivityMapper; import cn.lili.modules.promotion.service.CouponActivityItemService; @@ -53,7 +54,6 @@ public class CouponActivityServiceImpl extends ServiceImpl couponActivityIds, String memberId) { - for (String couponActivityId : couponActivityIds) { - //获取优惠券 - CouponActivity couponActivity = this.getById(couponActivityId); + public void registered(List couponActivityList, Member member) { + for (CouponActivity couponActivity : couponActivityList) { //获取会员信息 List> memberList = new ArrayList<>(); Map map = new HashMap<>(); - map.put("id", memberId); - map.put("nick_name", memberService.getById(memberId).getNickName()); + map.put("id", member.getId()); + map.put("nick_name", member.getNickName()); memberList.add(map); //优惠优惠券活动的优惠券列表 @@ -111,6 +108,13 @@ public class CouponActivityServiceImpl extends ServiceImpl promotionGoodsList = pintuanVO.getPromotionGoodsList(); - // 更新促销商品索引 - for (PromotionGoods promotionGoods : promotionGoodsList) { - Pintuan pintuan1 = JSONUtil.toBean(JSONUtil.toJsonStr(pintuanVO), Pintuan.class); - this.goodsIndexService.updateEsGoodsIndex(promotionGoods.getSkuId(), pintuan1, esPromotionKey, promotionGoods.getPrice()); - } - this.mongoTemplate.save(pintuanVO); + result = this.updatePintuan(promotionMessage, esPromotionKey, promotionTypeEnum); break; //优惠券 case COUPON: @@ -146,16 +96,11 @@ public class PromotionServiceImpl implements PromotionService { break; //积分商品 case POINTS_GOODS: - PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); - if (pointsGoodsVO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - break; - } - pointsGoodsVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.pointsGoodsService.update(promotionMessage.updateWrapper()); - PointsGoods pointsGoods = JSONUtil.toBean(JSONUtil.toJsonStr(pointsGoodsVO), PointsGoods.class); - this.goodsIndexService.updateEsGoodsIndex(pointsGoodsVO.getSkuId(), pointsGoods, esPromotionKey, null); - this.mongoTemplate.save(pointsGoodsVO); + result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum); + break; + //优惠券活动 + case COUPON_ACTIVITY: + result = this.updateCouponActivity(promotionMessage, promotionTypeEnum); break; default: break; @@ -285,6 +230,13 @@ public class PromotionServiceImpl implements PromotionService { return promotionMap; } + /** + * 修改满额活动状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ private boolean updateFullDiscount(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; //从mongo中获取促销备份 @@ -315,19 +267,31 @@ public class PromotionServiceImpl implements PromotionService { return result; } + /** + * 修改优惠券状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ private boolean updateCoupon(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; + //从mongo中获取优惠券信息 CouponVO couponVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), CouponVO.class); if (couponVO == null) { this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); return false; } + //修改优惠券 couponVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.couponService.update(promotionMessage.updateWrapper()); - - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(MemberCoupon::getCouponId, couponVO.getId()).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - this.memberCouponService.update(updateWrapper); + //优惠券活动结束,会员已领取的优惠券状态修改为:已过期 + if(couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)){ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(MemberCoupon::getCouponId, couponVO.getId()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + this.memberCouponService.update(updateWrapper); + } // clone一个活动信息,用于存放与索引中 CouponVO clone = ObjectUtil.clone(couponVO); clone.setPromotionGoodsList(null); @@ -343,11 +307,127 @@ public class PromotionServiceImpl implements PromotionService { return result; } + /** + * 修改拼团状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + boolean result; + PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class); + if (pintuanVO == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + pintuanVO.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.pintuanService.update(promotionMessage.updateWrapper()); + this.promotionGoodsService.updateBatchById(pintuanVO.getPromotionGoodsList()); + List promotionGoodsList = pintuanVO.getPromotionGoodsList(); + // 更新促销商品索引 + for (PromotionGoods promotionGoods : promotionGoodsList) { + Pintuan pintuan1 = JSONUtil.toBean(JSONUtil.toJsonStr(pintuanVO), Pintuan.class); + this.goodsIndexService.updateEsGoodsIndex(promotionGoods.getSkuId(), pintuan1, esPromotionKey, promotionGoods.getPrice()); + } + this.mongoTemplate.save(pintuanVO); + return result; + } + + /** + * 修改秒杀状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + boolean result; + SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class); + if (seckill == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + seckill.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.seckillService.update(promotionMessage.updateWrapper()); + for (SeckillApply seckillApply : seckill.getSeckillApplyList()) { + if (seckillApply.getPromotionApplyStatus().equals(PromotionApplyStatusEnum.PASS.name())) { + // 下一个时间,默认为当天结束时间 + int nextHour = 23; + String[] split = seckill.getHours().split(","); + int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); + // 排序时间段 + Arrays.sort(hoursSored); + for (int i : hoursSored) { + // 如果当前时间段大于排序后的时间段的某个,当前时间段的下个时间段即为排序后的时间段的某个 + if (seckillApply.getTimeLine() < i) { + nextHour = i; + break; + } + } + Seckill seckill1 = JSONUtil.toBean(JSONUtil.toJsonStr(seckill), Seckill.class); + String format = cn.hutool.core.date.DateUtil.format(seckill.getStartTime(), DateUtil.STANDARD_DATE_FORMAT); + DateTime parseStartTime = cn.hutool.core.date.DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH"); + DateTime parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH"); + // 如果是当天最后的时间段则设置到当天结束时间的59分59秒 + if (nextHour == seckillApply.getTimeLine()) { + parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour + ":59:59"), DateUtil.STANDARD_FORMAT); + } + seckill1.setStartTime(parseStartTime); + // 当时商品的限时抢购活动结束时间为下个时间段的开始 + seckill1.setEndTime(parseEndTime); + this.goodsIndexService.updateEsGoodsIndex(seckillApply.getSkuId(), seckill1, promotionTypeEnum.name() + "-" + seckillApply.getTimeLine(), seckillApply.getPrice()); + } + } + return result; + } + + /** + * 修改积分商品状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + boolean result; + PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); + if (pointsGoodsVO == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + pointsGoodsVO.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.pointsGoodsService.update(promotionMessage.updateWrapper()); + PointsGoods pointsGoods = JSONUtil.toBean(JSONUtil.toJsonStr(pointsGoodsVO), PointsGoods.class); + this.goodsIndexService.updateEsGoodsIndex(pointsGoodsVO.getSkuId(), pointsGoods, esPromotionKey, null); + this.mongoTemplate.save(pointsGoodsVO); + return result; + } + + /** + * 修改优惠券活动状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum){ + boolean result; + CouponActivityVO couponActivityVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), CouponActivityVO.class); + if (couponActivityVO == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + couponActivityVO.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.couponActivityService.update(promotionMessage.updateWrapper()); + this.mongoTemplate.save(couponActivityVO); + return result; + } + /** * 更新促销商品信息 * - * @param promotionId - * @param promotionStatus + * @param promotionId 促销活动ID + * @param promotionStatus 活动状态 */ private void updatePromotionGoods(String promotionId, String promotionStatus) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index 8dabf79f..b71e55bb 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -1,16 +1,20 @@ package cn.lili.controller.promotion; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.service.CouponActivityService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -44,8 +48,27 @@ public class CouponActivityManagerController { } @ApiOperation(value = "添加优惠券活动") - @PostMapping("/add") + @PostMapping("/addCouponActivity") public ResultMessage addCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); } + + @ApiOperation(value = "修改优惠券活动") + @PutMapping("/updateCouponActivity") + public ResultMessage updateCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { + return ResultUtil.data(couponActivityService.updateCouponActivity(couponActivityDTO)); + } + + @ApiOperation(value = "关闭、启动优惠券") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "优惠券活动ID", required = true, dataType = "String", paramType = "path"), + @ApiImplicitParam(name = "promotionStatus", value = "活动状态", required = true, dataType = "String", paramType = "path") + }) + @PutMapping("/updateStatus/{id}/{promotionStatus}") + public ResultMessage updateStatus(@PathVariable String id,@PathVariable String promotionStatus) { + if(couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.valueOf(promotionStatus))){ + return ResultUtil.success(ResultCode.SUCCESS); + } + throw new ServiceException(ResultCode.ERROR); + } } From 639435ec45e24283e7856ebed0a28cdb9f18f679 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 24 May 2021 14:00:07 +0800 Subject: [PATCH 15/68] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E6=9C=89=E9=99=90=E6=9C=9F=E8=AE=BE=E7=BD=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CouponActivityExecute.java | 2 +- .../handler/impl/coupon/CouponExecute.java | 38 +++++++++++++++++++ .../promotion/entity/dos/MemberCoupon.java | 17 +++++---- .../CouponActivityServiceImpl.java | 2 +- .../serviceimpl/PromotionServiceImpl.java | 3 +- 5 files changed, 52 insertions(+), 10 deletions(-) rename consumer/src/main/java/cn/lili/timetask/handler/impl/{couponActivity => coupon}/CouponActivityExecute.java (98%) create mode 100644 consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java similarity index 98% rename from consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java rename to consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java index 9481998d..0bca3df4 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java @@ -1,4 +1,4 @@ -package cn.lili.timetask.handler.impl.couponActivity; +package cn.lili.timetask.handler.impl.coupon; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java new file mode 100644 index 00000000..68a66e98 --- /dev/null +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java @@ -0,0 +1,38 @@ +package cn.lili.timetask.handler.impl.coupon; + +import cn.hutool.core.date.DateUtil; +import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.service.MemberCouponService; +import cn.lili.timetask.handler.EveryDayExecute; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 优惠券状态监测 + * + * @author Bulbasaur + * @date: 2021/5/24 10:08 上午 + */ +@Component +public class CouponExecute implements EveryDayExecute { + + @Autowired + private MemberCouponService memberCouponService; + + /** + * 检测优惠券的使用时间,超期未使用则失效 + * 此方法用于领取*天后失效优惠券使用 + */ + @Override + public void execute() { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) + .le(MemberCoupon::getEndTime, DateUtil.date()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + this.memberCouponService.update(updateWrapper); + + } + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java index 62028958..21e1f1ab 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java @@ -1,6 +1,10 @@ package cn.lili.modules.promotion.entity.dos; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.lili.base.BaseEntity; +import cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -114,14 +118,13 @@ public class MemberCoupon extends BaseEntity { setScopeId(coupon.getScopeId()); setCouponType(coupon.getCouponType()); setStartTime(coupon.getStartTime()); - setEndTime(coupon.getEndTime()); + setGetType(coupon.getGetType()); setStoreCommission(coupon.getStoreCommission()); + if(coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + setEndTime(coupon.getEndTime()); + }else { + setEndTime(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR,coupon.getEffectiveDays())); + } } - - public boolean canUse() { - return this.getMemberCouponStatus().equals(MemberCouponStatusEnum.NEW.name()); - } - - } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index c78b41ae..fbe337d9 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -130,8 +130,8 @@ public class CouponActivityServiceImpl extends ServiceImpl memberCouponList = new LinkedList<>(); //循环会员列表,添加优惠券 + MemberCoupon memberCoupon = new MemberCoupon(coupon); for (Map map : memberList) { - MemberCoupon memberCoupon = new MemberCoupon(coupon); memberCoupon.setMemberId(map.get("id").toString()); memberCoupon.setMemberName(map.get("nick_name").toString()); memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index e16874dc..4e72d1a1 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -285,10 +285,11 @@ public class PromotionServiceImpl implements PromotionService { //修改优惠券 couponVO.setPromotionStatus(promotionMessage.getPromotionStatus()); result = this.couponService.update(promotionMessage.updateWrapper()); - //优惠券活动结束,会员已领取的优惠券状态修改为:已过期 + //优惠券活动结束,会员已领取未使用的优惠券状态修改为:已过期 if(couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)){ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .eq(MemberCoupon::getCouponId, couponVO.getId()) + .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); this.memberCouponService.update(updateWrapper); } From 5c32fd9d7c27cf978a610e687f48e427017ca546 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 24 May 2021 14:06:22 +0800 Subject: [PATCH 16/68] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=9C=89?= =?UTF-8?q?=E6=95=88=E6=9C=9F=E6=97=B6=E9=97=B4=E5=88=A4=E5=AE=9A=EF=BC=8C?= =?UTF-8?q?=E5=A6=82=E6=9E=9C=E6=98=AF1=E5=88=99=E6=98=AF=E5=BD=93?= =?UTF-8?q?=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lili/modules/promotion/entity/dos/MemberCoupon.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java index 21e1f1ab..de6f5eb0 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/MemberCoupon.java @@ -121,10 +121,10 @@ public class MemberCoupon extends BaseEntity { setGetType(coupon.getGetType()); setStoreCommission(coupon.getStoreCommission()); - if(coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { setEndTime(coupon.getEndTime()); - }else { - setEndTime(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR,coupon.getEffectiveDays())); + } else { + setEndTime(DateUtil.endOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, (coupon.getEffectiveDays() - 1)))); } } } \ No newline at end of file From 16cc989cdf560a78bf1c035f5e3541ce80715074 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 24 May 2021 18:18:24 +0800 Subject: [PATCH 17/68] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=A7=92=E6=9D=80?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E4=B8=BA=E8=87=AA=E5=8A=A8=E5=BC=80=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/SeckillBuyerController.java | 10 +- .../promotion/PromotionEverydayExecute.java | 73 +++- .../cn/lili/common/cache/CachePrefix.java | 2 +- .../order/entity/enums/OrderOutTypeEnum.java | 2 +- .../modules/promotion/entity/dos/Seckill.java | 36 +- .../promotion/entity/dos/SeckillApply.java | 4 +- .../entity/enums/SeckillApplyStatusEnum.java | 4 +- .../promotion/entity/vos/SeckillApplyVO.java | 2 +- .../promotion/entity/vos/SeckillGoodsVO.java | 2 +- .../entity/vos/SeckillSearchParams.java | 4 +- .../entity/vos/SeckillTimelineVO.java | 4 +- .../promotion/entity/vos/SeckillVO.java | 61 +-- .../promotion/mapper/SeckillApplyMapper.java | 2 +- .../promotion/mapper/SeckillMapper.java | 2 +- .../service/SeckillApplyService.java | 65 +--- .../promotion/service/SeckillService.java | 41 +- .../serviceimpl/PintuanServiceImpl.java | 6 +- .../PromotionGoodsServiceImpl.java | 4 +- .../PromotionPriceServiceImpl.java | 14 +- .../serviceimpl/PromotionServiceImpl.java | 4 +- .../serviceimpl/SeckillApplyServiceImpl.java | 351 ++++++------------ .../serviceimpl/SeckillServiceImpl.java | 61 ++- .../promotion/tools/PromotionCacheKeys.java | 2 +- .../system/entity/dto/SeckillSetting.java | 25 ++ .../system/entity/enums/SettingEnum.java | 2 + .../CouponActivityManagerController.java | 4 +- .../promotion/SeckillManagerController.java | 25 +- .../cn/lili/test/promotion/SeckillTest.java | 7 - .../promotion/SeckillStoreController.java | 16 +- 29 files changed, 355 insertions(+), 480 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/system/entity/dto/SeckillSetting.java diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/SeckillBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/SeckillBuyerController.java index 45e2afcf..466bc376 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/SeckillBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/SeckillBuyerController.java @@ -17,29 +17,29 @@ import java.util.List; /** - * 买家端,限时抢购接口 + * 买家端,秒杀活动接口 * * @author paulG * @date 2020/11/17 2:30 下午 */ -@Api(tags = "买家端,限时抢购接口") +@Api(tags = "买家端,秒杀活动接口") @RestController @RequestMapping("/buyer/promotion/seckill") public class SeckillBuyerController { /** - * 限时抢购 + * 秒杀活动 */ @Autowired private SeckillApplyService seckillApplyService; - @ApiOperation(value = "获取当天限时抢购信息") + @ApiOperation(value = "获取当天秒杀活动信息") @GetMapping public ResultMessage> getSeckillTime() { return ResultUtil.data(seckillApplyService.getSeckillTimeline()); } - @ApiOperation(value = "获取某个时刻的限时抢购商品信息") + @ApiOperation(value = "获取某个时刻的秒杀活动商品信息") @GetMapping("/{timeline}") public ResultMessage> getSeckillGoods(@PathVariable Integer timeline) { return ResultUtil.data(seckillApplyService.getSeckillGoods(timeline)); diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index 946931a3..d0a1aa47 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -3,15 +3,21 @@ package cn.lili.timetask.handler.impl.promotion; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.entity.vos.PintuanVO; import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.service.EsGoodsIndexService; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.SeckillSetting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; import cn.lili.timetask.handler.EveryDayExecute; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.google.gson.Gson; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -53,6 +59,12 @@ public class PromotionEverydayExecute implements EveryDayExecute { //促销商品 @Autowired private PromotionGoodsService promotionGoodsService; + //设置 + @Autowired + private SettingService settingService; + @Autowired + private SeckillService seckillService; + /** @@ -68,7 +80,35 @@ public class PromotionEverydayExecute implements EveryDayExecute { query.addCriteria(Criteria.where("endTime").lt(new Date())); List promotionIds = new ArrayList<>(); + //关闭满减活动 + endFullDiscount(promotionIds,query); + //关闭拼团活动 + endPintuan(promotionIds,query); + //关闭优惠券 + endCoupon(promotionIds,query); + //每日新增秒杀活动 + addSeckill(); + promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(promotionIds)); + } + /** + * 添加秒杀活动 + * 从系统设置中获取秒杀活动的配置 + * 添加30天后的秒杀活动 + */ + private void addSeckill(){ + Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); + SeckillSetting seckillSetting=new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); + Seckill seckill=new Seckill(seckillSetting.getHours(),seckillSetting.getSeckillRule()); + seckillService.saveSeckill(seckill); + } + + /** + * 修改满额活动下的商品 + * @param promotionIds 促销活动ID + * @param query 查询Wrapper + */ + private void endFullDiscount(List promotionIds,Query query){ //关闭满减活动 List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); if (!fullDiscountVOS.isEmpty()) { @@ -87,7 +127,14 @@ public class PromotionEverydayExecute implements EveryDayExecute { fullDiscountService.update(this.getUpdatePromotionWrapper(ids)); promotionIds.addAll(ids); } - //关闭拼团活动 + } + + /** + * 修改拼团活动下的商品 + * @param promotionIds 促销活动ID + * @param query 查询Wrapper + */ + private void endPintuan(List promotionIds,Query query){ List pintuanVOS = mongoTemplate.find(query, PintuanVO.class); if (!pintuanVOS.isEmpty()) { //准备修改活动的id @@ -106,8 +153,14 @@ public class PromotionEverydayExecute implements EveryDayExecute { pintuanService.update(this.getUpdatePromotionWrapper(ids)); promotionIds.addAll(ids); } + } - //关闭优惠券活动 + /** + * 修改优惠券下的商品 + * @param promotionIds 促销活动ID + * @param query 查询Wrapper + */ + private void endCoupon(List promotionIds,Query query){ List couponVOS = mongoTemplate.find(query, CouponVO.class); if (!couponVOS.isEmpty()) { List ids = new ArrayList<>(); @@ -123,19 +176,19 @@ public class PromotionEverydayExecute implements EveryDayExecute { ids.add(vo.getId()); } couponService.update(this.getUpdatePromotionWrapper(ids)); - LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper().in(MemberCoupon::getCouponId, ids).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper() + .in(MemberCoupon::getCouponId, ids) + .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); memberCouponService.update(memberCouponLambdaUpdateWrapper); promotionIds.addAll(ids); } - - promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(promotionIds)); - } /** * 获取促销修改查询条件 修改活动状态 - * @param ids - * @return + * @param ids 促销活动ID + * @return 促销活动商品查询Wrapper */ private UpdateWrapper getUpdatePromotionWrapper(List ids) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); @@ -145,8 +198,8 @@ public class PromotionEverydayExecute implements EveryDayExecute { } /** * 获取商品的促销修改查询条件 修改商品状态 - * @param ids - * @return + * @param ids 促销活动ID + * @return 促销活动商品修改Wrapper */ private UpdateWrapper getUpdatePromotionGoodsWrapper(List ids) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); diff --git a/framework/src/main/java/cn/lili/common/cache/CachePrefix.java b/framework/src/main/java/cn/lili/common/cache/CachePrefix.java index 65466d36..49d4fc13 100644 --- a/framework/src/main/java/cn/lili/common/cache/CachePrefix.java +++ b/framework/src/main/java/cn/lili/common/cache/CachePrefix.java @@ -219,7 +219,7 @@ public enum CachePrefix { STORE_ID_FULL_DISCOUNT, /** - * 限时抢购活动缓存key前缀 + * 秒杀活动活动缓存key前缀 */ STORE_ID_SECKILL, diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderOutTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderOutTypeEnum.java index b3d2b564..fe2a6d71 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderOutTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderOutTypeEnum.java @@ -15,7 +15,7 @@ public enum OrderOutTypeEnum { * 出库类型枚举 */ GOODS("商品"), - SECKILL_GOODS("限时抢购商品"); + SECKILL_GOODS("秒杀活动商品"); private final String description; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java index 55b154eb..5410d247 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java @@ -1,11 +1,16 @@ package cn.lili.modules.promotion.entity.dos; +import cn.hutool.core.date.DateField; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persistence.Table; @@ -13,7 +18,7 @@ import javax.validation.constraints.NotNull; import java.util.Date; /** - * 限时抢购实体类 + * 秒杀活动实体类 * * @author Chopper * @date 2020-03-19 10:44 上午 @@ -22,7 +27,8 @@ import java.util.Date; @Entity @Table(name = "li_seckill") @TableName("li_seckill") -@ApiModel(value = "限时抢购活动") +@ApiModel(value = "秒杀活动活动") +@NoArgsConstructor public class Seckill extends BasePromotion { private static final long serialVersionUID = -9116425737163730836L; @@ -44,4 +50,30 @@ public class Seckill extends BasePromotion { */ @ApiModelProperty(value = "商家id集合以逗号分隔") private String storeIds; + + @ApiModelProperty(value = "商品数量") + private Integer goodsNum; + + @ApiModelProperty(value = "店铺数量") + private Integer storeNum; + + public Seckill(String hours,String seckillRule){ + //默认创建30天后的秒杀活动 + DateTime dateTime= DateUtil.beginOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, 30)); + this.applyEndTime=dateTime; + this.hours=hours; + this.seckillRule=seckillRule; + this.goodsNum=0; + this.storeNum=0; + + //BasePromotion + setStoreName("platform"); + setStoreId("platform"); + setPromotionName(DateUtil.formatDate(dateTime)+" 秒杀活动"); + setStartTime(dateTime); + setEndTime(DateUtil.endOfDay(dateTime)); + setPromotionStatus(PromotionStatusEnum.NEW.name()); + + + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java index e21b3505..754e0c4c 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/SeckillApply.java @@ -13,7 +13,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; /** - * 限时抢购申请实体类 + * 秒杀活动申请实体类 * * @author Chopper * @date 2020-03-19 10:44 上午 @@ -22,7 +22,7 @@ import javax.validation.constraints.NotNull; @Entity @Table(name = "li_seckill_apply") @TableName("li_seckill_apply") -@ApiModel(value = "限时抢购申请") +@ApiModel(value = "秒杀活动申请") public class SeckillApply extends BaseEntity { private static final long serialVersionUID = 5440164641970820989L; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/SeckillApplyStatusEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/SeckillApplyStatusEnum.java index d243df5a..0479580e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/SeckillApplyStatusEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/SeckillApplyStatusEnum.java @@ -1,7 +1,7 @@ package cn.lili.modules.promotion.entity.enums; /** - * 限时抢购状态枚举 + * 秒杀活动状态枚举 * * @author paulG * @date 2020/8/26 @@ -9,7 +9,7 @@ package cn.lili.modules.promotion.entity.enums; public enum SeckillApplyStatusEnum { /** - * 当前店铺对当前限时抢购的申请状态 + * 当前店铺对当前秒杀活动的申请状态 */ APPLIED("已经申请过"), NOT_APPLY("未报名"), EXPIRE("过期的"); diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillApplyVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillApplyVO.java index d351d4d2..ca07f14b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillApplyVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillApplyVO.java @@ -5,7 +5,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; /** - * 限时抢购申请视图对象 + * 秒杀活动申请视图对象 * * @author paulG * @date 2020/8/21 diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillGoodsVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillGoodsVO.java index 238c5cdb..011c9e04 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillGoodsVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillGoodsVO.java @@ -6,7 +6,7 @@ import lombok.Data; import java.io.Serializable; /** - * 限时抢购商品视图对象 + * 秒杀活动商品视图对象 * * @author paulG * @date 2020/8/26 diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java index 04838e41..063921b7 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillSearchParams.java @@ -17,7 +17,7 @@ import java.util.Date; import java.util.regex.Pattern; /** - * 限时抢购查询通用类 + * 秒杀活动查询通用类 * * @author paulG * @date 2020/8/21 @@ -27,7 +27,7 @@ public class SeckillSearchParams implements Serializable { private static final long serialVersionUID = -4052716630253333681L; - @ApiModelProperty(value = "限时抢购活动编号") + @ApiModelProperty(value = "秒杀活动活动编号") private String seckillId; @ApiModelProperty(value = "活动名称") diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillTimelineVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillTimelineVO.java index 1c8a7ae1..b03e9fd6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillTimelineVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillTimelineVO.java @@ -7,7 +7,7 @@ import java.io.Serializable; import java.util.List; /** - * 限时抢购时刻视图对象 + * 秒杀活动时刻视图对象 * * @author paulG * @date 2020/8/27 @@ -26,7 +26,7 @@ public class SeckillTimelineVO implements Serializable { @ApiModelProperty(value = "距离本组活动开始的时间,秒为单位。如果活动的开始时间是10点,服务器时间为8点,距离开始还有多少时间") private Long distanceStartTime; - @ApiModelProperty(value = "本组活动内的限时抢购商品列表") + @ApiModelProperty(value = "本组活动内的秒杀活动商品列表") private List seckillGoodsList; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillVO.java index 6191c84d..10c1246d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/SeckillVO.java @@ -1,19 +1,14 @@ package cn.lili.modules.promotion.entity.vos; -import cn.lili.common.exception.ServiceException; -import cn.lili.common.utils.DateUtil; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.dos.SeckillApply; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.EqualsAndHashCode; -import java.util.Arrays; -import java.util.Date; import java.util.List; /** - * 限时抢购视图对象 + * 秒杀活动视图对象 * * @author paulG * @date 2020/8/20 @@ -30,60 +25,8 @@ public class SeckillVO extends Seckill { private String seckillApplyStatus; /** - * 当前限时抢购下所有的秒杀申请信息 + * 当前秒杀活动下所有的秒杀申请信息 */ private List seckillApplyList; - /** - * 检查当前时间 - */ - public void checkTime() { - String[] timeRange = this.getHours().split(","); - int[] hoursSored = Arrays.stream(timeRange).mapToInt(Integer::parseInt).toArray(); - Arrays.sort(hoursSored); - int lastTime = 0; - for (int s : hoursSored) { - if (lastTime == s) { - throw new ServiceException("抢购区间的值不能重复"); - } else { - lastTime = s; - } - - if (s < 0 || s > 23) { - throw new ServiceException("抢购区间必须在0点到23点的整点时刻"); - } - } - - // 活动开始时间 - long startTime = this.getStartTime().getTime() / 1000; - // 报名截止时间 - long applyEndTime = this.getApplyEndTime().getTime() / 1000; - - int timeHour = hoursSored[0]; - int endTimeHour = hoursSored[hoursSored.length - 1]; - //获取活动开始当天0点的时间 - String startDate = DateUtil.toString(startTime, DateUtil.STANDARD_DATE_FORMAT) + " " + (timeHour > 10 ? timeHour : "0" + timeHour) + ":00:00"; - long startDayTime = cn.hutool.core.date.DateUtil.parse(startDate, DateUtil.STANDARD_FORMAT).getTime() / 1000; - // 结束时间 - String endDate = DateUtil.toString(startTime, DateUtil.STANDARD_DATE_FORMAT) + " " + (endTimeHour > 10 ? endTimeHour : "0" + endTimeHour) + ":59:00"; - long endDayTime = cn.hutool.core.date.DateUtil.parse(endDate, DateUtil.STANDARD_FORMAT).getTime() / 1000; - //活动时间小于当天开始时间 - if (startDayTime < DateUtil.startOfTodDay()) { - throw new ServiceException("活动时间不能小于当前时间"); - } - - //报名截止时间小于当前时间 - if (applyEndTime < DateUtil.getDateline()) { - throw new ServiceException("报名截止时间不能小于当前时间"); - } - - //报名截止时间大于活动开始当天的起始时间 - if (applyEndTime >= startDayTime) { - throw new ServiceException("报名截止时间不能大于等于活动开始时间"); - } - - this.setStartTime(new Date(startDayTime * 1000)); - this.setEndTime(new Date(endDayTime * 1000)); - } - } diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillApplyMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillApplyMapper.java index 45eb1ce6..f3d0fa47 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillApplyMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillApplyMapper.java @@ -4,7 +4,7 @@ import cn.lili.modules.promotion.entity.dos.SeckillApply; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** - * 限时抢购申请数据处理层 + * 秒杀活动申请数据处理层 * * @author Chopper * @date 2020/8/21 diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java index 1ffae1f8..6a207cc6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java @@ -4,7 +4,7 @@ import cn.lili.modules.promotion.entity.dos.Seckill; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** - * 限时抢购数据处理层 + * 秒杀活动数据处理层 * * @author Chopper * @date 2020/8/21 diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java index aeff8ee7..07e1c0cf 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillApplyService.java @@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; -import java.util.Map; /** * 秒杀申请业务层 @@ -22,82 +21,46 @@ public interface SeckillApplyService extends IService { /** - * 获取当天限时抢购信息列表(时刻及对应时刻下的商品) + * 获取当天秒杀活动信息列表(时刻及对应时刻下的商品) * - * @return 限时抢购信息列表 + * @return 秒杀活动信息列表 */ List getSeckillTimeline(); - /** - * 获取当天某个时刻的限时抢购商品列表 + * 获取当天某个时刻的秒杀活动商品列表 * * @param timeline 指定时刻 - * @return 限时抢购商品列表 + * @return 秒杀活动商品列表 */ List getSeckillGoods(Integer timeline); - /** - * 审核一批申请 - * - * @param ids 限时抢购申请编号 - * @param seckillId 限时抢购编号 - * @param applyStatus 审批状态 - * @param failReason 驳回原因 - */ - void auditBatchApply(String[] ids, String seckillId, String applyStatus, String failReason); - - /** - * 分页查询限时请购申请列表 - * - * @param queryParam 限时抢购申请查询参数 - * @param pageVo 分页参数 - * @return 限时请购申请列表 - */ - IPage getSeckillApplyFromMysql(SeckillSearchParams queryParam, PageVO pageVo); - /** * 从mongo中分页查询限时请购申请列表 * - * @param queryParam 限时抢购申请查询参数 + * @param queryParam 秒杀活动申请查询参数 * @param pageVo 分页参数 * @return 限时请购申请列表 */ IPage getSeckillApplyFromMongo(SeckillSearchParams queryParam, PageVO pageVo); /** - * 添加限时抢购申请 + * 添加秒杀活动申请 + * 检测是否商品是否同时参加多个活动 + * 将秒杀商品信息存入秒杀活动中,更新mogo信息 + * 保存秒杀活动商品,促销商品信息 * - * @param seckillId 限时抢购编号 + * @param seckillId 秒杀活动编号 * @param storeId 商家id - * @param seckillApplyList 限时抢购申请列表 + * @param seckillApplyList 秒杀活动申请列表 */ void addSeckillApply(String seckillId, String storeId, List seckillApplyList); /** - * 批量删除限时抢购申请 + * 批量删除秒杀活动申请 * - * @param seckillId 限时抢购活动id - * @param ids 限时抢购申请id集合 + * @param seckillId 秒杀活动活动id + * @param ids 秒杀活动申请id集合 */ void removeSeckillApplyByIds(String seckillId, List ids); - - /** - * 更新限时抢购库存数量 - * - * @param id 限时抢购申请(限时抢购商品)id - * @param num 数量 - * @return 是否成功 - */ - boolean updateSeckillStock(String id, Integer num); - - - /** - * 更新限时抢购库存数量 - * - * @param map key 为 限时抢购申请(限时抢购商品)id, value 为数量 - * @return 是否成功 - */ - boolean updateSeckillStock(Map map); - } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java index bd8cfc90..fc1d43a4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java @@ -17,78 +17,79 @@ public interface SeckillService extends IService { /** - * 从mysql中根据条件获取限时抢购分页列表 + * 从mysql中根据条件获取秒杀活动分页列表 * * @param queryParam 查询参数 * @param pageVo 分页参数 - * @return 限时抢购分页列表 + * @return 秒杀活动分页列表 */ IPage getSeckillByPageFromMysql(SeckillSearchParams queryParam, PageVO pageVo); /** - * 从mongo中根据条件获取限时抢购分页列表 + * 从mongo中根据条件获取秒杀活动分页列表 * * @param queryParam 查询参数 * @param pageVo 分页参数 - * @return 限时抢购分页列表 + * @return 秒杀活动分页列表 */ IPage getSeckillByPageFromMongo(SeckillSearchParams queryParam, PageVO pageVo); /** - * 从mongo中获取限时抢购信息 + * 从mongo中获取秒杀活动信息 * - * @param id 限时抢购id - * @return 限时抢购信息 + * @param id 秒杀活动id + * @return 秒杀活动信息 */ SeckillVO getSeckillByIdFromMongo(String id); /** - * 保存限时抢购 + * 保存秒杀活动 * - * @param seckill 限时抢购信息 + * @param seckill 秒杀活动 * @return 是否保存成功 */ - boolean saveSeckill(SeckillVO seckill); + boolean saveSeckill(Seckill seckill); /** - * 商家报名限时抢购活动 + * 商家报名秒杀活动活动 * * @param storeId 商家编号 - * @param seckillId 限时抢购编号 + * @param seckillId 秒杀活动编号 */ void storeApply(String storeId, String seckillId); /** - * 修改限时抢购 + * 修改秒杀活动 * - * @param seckillVO 限时抢购信息 + * @param seckillVO 秒杀活动信息 * @return 是否修改成功 */ boolean modifySeckill(SeckillVO seckillVO); /** - * 删除限时抢购 + * 删除秒杀活动 * - * @param id 限时抢购编号 + * @param id 秒杀活动编号 */ void deleteSeckill(String id); /** - * 开启一个限时抢购 + * 开启一个秒杀活动 * - * @param id 限时抢购编号 + * @param id 秒杀活动编号 */ void openSeckill(String id); /** - * 关闭一个限时抢购 + * 关闭一个秒杀活动 * - * @param id 限时抢购编号 + * @param id 秒杀活动编号 */ void closeSeckill(String id); /** * 获取当前可参与的活动数量 + * * @return 可参与活动数量 */ Integer getApplyNum(); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java index 3567e332..b343df1d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java @@ -505,11 +505,11 @@ public class PintuanServiceImpl extends ServiceImpl impl } // 查询是否在同一时间段参与了拼团活动 Integer count = promotionGoodsService.findInnerOverlapPromotionGoods(PromotionTypeEnum.SECKILL.name(), promotionGood.getSkuId(), pintuan.getStartTime(), pintuan.getEndTime()); - // 查询是否在同一时间段参与了限时抢购活动 + // 查询是否在同一时间段参与了秒杀活动活动 count += promotionGoodsService.findInnerOverlapPromotionGoods(PromotionTypeEnum.PINTUAN.name(), promotionGood.getSkuId(), pintuan.getStartTime(), pintuan.getEndTime()); if (count > 0) { - log.error("商品[" + promotionGood.getGoodsName() + "]已经在重叠的时间段参加了限时抢购或拼团活动,不能参加拼团活动"); - throw new ServiceException("商品[" + promotionGood.getGoodsName() + "]已经在重叠的时间段参加了限时抢购或拼团活动,不能参加拼团活动"); + log.error("商品[" + promotionGood.getGoodsName() + "]已经在重叠的时间段参加了秒杀活动或拼团活动,不能参加拼团活动"); + throw new ServiceException("商品[" + promotionGood.getGoodsName() + "]已经在重叠的时间段参加了秒杀活动或拼团活动,不能参加拼团活动"); } } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java index 2724925e..84ad114f 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java @@ -64,7 +64,7 @@ public class PromotionGoodsServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(SeckillApply::getSeckillId, promotionId).eq(SeckillApply::getSkuId, skuId); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java index cc4ab245..26b08c2d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java @@ -33,7 +33,7 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { //ES商品 @Autowired private EsGoodsSearchService goodsSearchService; - //限时抢购申请 + //秒杀活动申请 @Autowired private SeckillApplyService seckillApplyService; //促销商品 @@ -180,7 +180,7 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { } /** - * 促销计算(限时抢购,拼团) + * 促销计算(秒杀活动,拼团) * * @param promotionMap 当前商品所有参加的促销活动 * @param goodsSkuPromotionPrice 商品SKU促销计算信息 @@ -189,11 +189,11 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { */ private void calculationPromotionMap(Map promotionMap, GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice, EsGoodsIndex esGoodsIndex, String pintuanId) { if (promotionMap != null && !promotionMap.isEmpty()) { - // 检查当前商品是否存在限时抢购活动 + // 检查当前商品是否存在秒杀活动活动 Optional existSeckill = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.SECKILL.name())).findFirst(); if (existSeckill.isPresent()) { Seckill seckill = (Seckill) promotionMap.get(existSeckill.get()); - // 计算限时抢购促销 + // 计算秒杀活动促销 this.calculationSeckill(seckill, goodsSkuPromotionPrice); seckill.setPromotionName(PromotionTypeEnum.SECKILL.name()); goodsSkuPromotionPrice.getJoinPromotion().add(seckill); @@ -338,9 +338,9 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { } /** - * 计算限时抢购 + * 计算秒杀活动 * - * @param seckill 限时抢购信息 + * @param seckill 秒杀活动信息 * @param promotionPrice 商品SKU的计算促销信息 */ private void calculationSeckill(Seckill seckill, GoodsSkuPromotionPriceDTO promotionPrice) { @@ -358,7 +358,7 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { promotionPrice.setDiscountPrice(discountPrice); promotionPrice.setFinalePrice(seckillApply.getPrice()); } else { - log.error("购买数量超出限时抢购剩余数量"); + log.error("购买数量超出秒杀活动剩余数量"); } } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index 4e72d1a1..0d5f6ee4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -121,7 +121,7 @@ public class PromotionServiceImpl implements PromotionService { queryWrapper.eq("promotion_status", PromotionStatusEnum.START.name()); queryWrapper.gt("start_time", new Date()); queryWrapper.lt("end_time", new Date()); - // 获取当前进行的限时抢购活动 + // 获取当前进行的秒杀活动活动 List seckillList = seckillService.list(queryWrapper); if (seckillList != null && !seckillList.isEmpty()) { for (Seckill seckill : seckillList) { @@ -375,7 +375,7 @@ public class PromotionServiceImpl implements PromotionService { parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour + ":59:59"), DateUtil.STANDARD_FORMAT); } seckill1.setStartTime(parseStartTime); - // 当时商品的限时抢购活动结束时间为下个时间段的开始 + // 当时商品的秒杀活动活动结束时间为下个时间段的开始 seckill1.setEndTime(parseEndTime); this.goodsIndexService.updateEsGoodsIndex(seckillApply.getSkuId(), seckill1, promotionTypeEnum.name() + "-" + seckillApply.getTimeLine(), seckillApply.getPrice()); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java index 157ae00c..e3e662a2 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java @@ -3,12 +3,10 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.cache.Cache; import cn.lili.common.exception.ServiceException; -import cn.lili.common.utils.DateUtil; -import cn.lili.common.utils.PageUtil; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.GoodsSkuService; @@ -27,12 +25,9 @@ import cn.lili.modules.promotion.tools.PromotionCacheKeys; import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.modules.search.service.EsGoodsIndexService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Query; @@ -75,15 +70,15 @@ public class SeckillApplyServiceImpl extends ServiceImpl getSeckillTimeline() { List timelineVoS = new ArrayList<>(); - // 限时抢购缓存key - String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.toString(DateUtil.startOfTodDay(), DateUtil.STANDARD_DATE_NO_UNDERLINE_FORMAT)); + // 秒杀活动缓存key + String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.format(DateUtil.beginOfDay(new DateTime()), "yyyyMMdd")); Map cacheSeckill = cache.getHash(seckillCacheKey); if (cacheSeckill == null || cacheSeckill.isEmpty()) { // 如缓存中不存在,则单独获取 try { timelineVoS = getSeckillTimelineToCache(seckillCacheKey); } catch (Exception e) { - log.error("获取限时抢购信息发生错误!", e); + log.error("获取秒杀活动信息发生错误!", e); } } else { // 如缓存中存在,则取缓存中转为展示的信息 @@ -98,8 +93,8 @@ public class SeckillApplyServiceImpl extends ServiceImpl getSeckillGoods(Integer timeline) { List seckillGoodsVoS = new ArrayList<>(); - // 限时抢购缓存key - String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.toString(DateUtil.startOfTodDay(), DateUtil.STANDARD_DATE_NO_UNDERLINE_FORMAT)); + // 秒杀活动缓存key + String seckillCacheKey = PromotionCacheKeys.getSeckillTimelineKey(DateUtil.format(DateUtil.beginOfDay(new DateTime()), "yyyyMMdd")); Map cacheSeckill = cache.getHash(seckillCacheKey); if (cacheSeckill == null || cacheSeckill.isEmpty()) { // 如缓存中不存在,则单独获取 @@ -116,57 +111,6 @@ public class SeckillApplyServiceImpl extends ServiceImpl seckillApplyList = seckillVO.getSeckillApplyList(); - - for (String id : ids) { - - Optional seckillApplyOptional = seckillApplyList.stream().filter(i -> i.getId().equals(id)).findFirst(); - SeckillApply seckillApply; - if (seckillApplyOptional.isPresent()) { - seckillApply = seckillApplyOptional.get(); - } else { - log.error("编号为【" + id + "】限时抢购的申请不存在"); - throw new ServiceException(); - } - - seckillApply.setPromotionApplyStatus(PromotionApplyStatusEnum.valueOf(applyStatus).name()); - seckillApply.setFailReason(failReason); - this.updateById(seckillApply); - if (PromotionApplyStatusEnum.PASS.name().equals(applyStatus)) { - //检查缓存中是否存在相同商品参与的限时抢购活动 - checkCache(seckillVO.getStartTime().getTime()); - } - } - seckillVO.setSeckillApplyList(seckillApplyList); - mongoTemplate.save(seckillVO); - } - - @Override - public IPage getSeckillApplyFromMysql(SeckillSearchParams queryParam, PageVO pageVo) { - QueryWrapper queryWrapper = queryParam.wrapper(); - return page(PageUtil.initPage(pageVo), queryWrapper); - } - @Override public IPage getSeckillApplyFromMongo(SeckillSearchParams queryParam, PageVO pageVo) { IPage seckillApplyIPage = new Page<>(); @@ -201,133 +145,67 @@ public class SeckillApplyServiceImpl extends ServiceImpl seckillApplyList) { SeckillVO seckill = mongoTemplate.findById(seckillId, SeckillVO.class); if (seckill == null) { - throw new ServiceException("当前参与的限时抢购不存在!"); + throw new ServiceException("当前参与的秒杀活动不存在!"); } - seckill.checkTime(); - // 检查限时抢购申请是否合法 - checkSeckillApplyList(seckill.getApplyEndTime().getTime(), seckill.getHours(), seckillApplyList, storeId); - String storeIds = seckill.getStoreIds() != null ? seckill.getStoreIds() : ""; - boolean containsStore = false; - List storeIdList = Arrays.asList(storeIds.split(",")); - // 检查是否为已参加活动的店铺 - if (CharSequenceUtil.isNotEmpty(seckillId) && !storeIdList.contains(storeId)) { - if (!CharSequenceUtil.isEmpty(storeIds)) { - String[] storeIdSplit = storeIds.split(","); - for (String s : storeIdSplit) { - if (s.equals(seckillId)) { - containsStore = true; - break; - } - } - storeIds = seckill.getStoreIds() + storeId + ","; - } else { - storeIds = storeId + ","; - } - seckill.setStoreIds(storeIds); - } - - List originList = seckill.getSeckillApplyList(); + // 检查秒杀活动申请是否合法 + checkSeckillApplyList(seckill.getHours(), seckillApplyList, storeId); + //获取已参与活动的秒杀活动活动申请列表 + List originList = seckill.getSeckillApplyList() != null ? seckill.getSeckillApplyList() : new ArrayList<>(); List promotionGoodsList = new ArrayList<>(); - if (originList == null) { - originList = new ArrayList<>(); - } for (SeckillApplyVO seckillApply : seckillApplyList) { + //获取参与活动的商品信息 GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(seckillApply.getSkuId()); + //活动库存不能大于商品库存 if (goodsSku.getQuantity() < seckillApply.getQuantity()) { throw new ServiceException(seckillApply.getGoodsName() + ",此商品库存不足"); } - - /* - *************两种情况:****************** - 团购时间段: |________________| - 秒杀时间段: |_____| |_______| - - ************第三种情况:****************** - 团购时间段: |______| - 秒杀时间段: |________________| - - ************第四种情况:****************** - 团购时间段: |________________| - 秒杀时间段: |______| - - 这个商品的开始时间计算要用他参与的时间段来计算,结束时间是当天晚上23:59:59 - */ - String startTimeStr = DateUtil.toString(seckill.getStartTime(), DateUtil.STANDARD_DATE_FORMAT) + " " + (seckillApply.getTimeLine() > 10 ? ("0" + seckillApply.getTimeLine()) : seckillApply.getTimeLine()) + ":00:00"; - String endTimeStr = DateUtil.toString(seckill.getStartTime(), "yyyy-MM-dd") + " 23:59:59"; - - // 查询是否在同一时间段参与了拼团活动 - Integer count = promotionGoodsService.findInnerOverlapPromotionGoods(PromotionTypeEnum.PINTUAN.name(), goodsSku.getId(), DateUtil.toDate(startTimeStr, DateUtil.STANDARD_FORMAT), DateUtil.toDate(endTimeStr, DateUtil.STANDARD_FORMAT)); - // 查询是否在同一时间段参与了限时抢购活动 - count += promotionGoodsService.findInnerOverlapPromotionGoods(PromotionTypeEnum.SECKILL.name(), goodsSku.getId(), DateUtil.toDate(startTimeStr, DateUtil.STANDARD_FORMAT), DateUtil.toDate(endTimeStr, DateUtil.STANDARD_FORMAT)); - if (count > 0) { - throw new ServiceException("商品[" + goodsSku.getGoodsName() + "]已经在重叠的时间段参加了团购或限时抢购活动,不能参加限时抢购活动"); - } + //获取秒杀活动时间段 + DateTime startTime = DateUtil.offsetHour(seckill.getStartTime(), seckillApply.getTimeLine()); + //检测是否可以发布促销商品 + checkSeckillGoodsSKU(seckill, goodsSku, startTime); + //设置秒杀申请默认内容 seckillApply.setOriginalPrice(goodsSku.getPrice()); - seckillApply.setPromotionApplyStatus(PromotionApplyStatusEnum.APPLY.name()); + seckillApply.setPromotionApplyStatus(PromotionApplyStatusEnum.PASS.name()); seckillApply.setSalesNum(0); - - Optional first = originList.stream().filter(i -> i.getSkuId().equals(seckillApply.getSkuId())).findFirst(); - if (first.isPresent() && (first.get().getPromotionApplyStatus().equals(PromotionApplyStatusEnum.REFUSE.name()) || first.get().getPromotionApplyStatus().equals(PromotionApplyStatusEnum.APPLY.name()))) { - originList = originList.stream().filter(i -> !i.getSkuId().equals(seckillApply.getSkuId())).collect(Collectors.toList()); - } else if (first.isPresent() && first.get().getPromotionApplyStatus().equals(PromotionApplyStatusEnum.PASS.name())) { - continue; - } originList.add(seckillApply); - PromotionGoods promotionGoods = new PromotionGoods(goodsSku); - promotionGoods.setPrice(seckillApply.getPrice()); - promotionGoods.setQuantity(seckillApply.getQuantity()); - // 设置单独每个促销商品的结束时间 - int nextHour = 23; - String[] split = seckill.getHours().split(","); - int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); - Arrays.sort(hoursSored); - for (int i : hoursSored) { - if (seckillApply.getTimeLine() < i) { - nextHour = i; - break; - } - } - String format = cn.hutool.core.date.DateUtil.format(seckill.getStartTime(), DateUtil.STANDARD_DATE_FORMAT); - DateTime parseStartTime = cn.hutool.core.date.DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH"); - DateTime parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH"); - // 如果是当天最后的时间段则设置到当天结束时间的59分59秒 - if (nextHour == seckillApply.getTimeLine()) { - parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour + ":59:59"), DateUtil.STANDARD_FORMAT); - } - promotionGoods.setStartTime(parseStartTime); - promotionGoods.setEndTime(parseEndTime); + //获取促销商品 + PromotionGoods promotionGoods = this.setSeckillGoods(goodsSku, seckillApply, seckill); promotionGoodsList.add(promotionGoods); } + //保存秒杀活动申请 this.saveOrUpdateBatch(originList); + //设置秒杀活动下的申请列表 seckill.setSeckillApplyList(originList); + //mongo保存秒杀活动信息 this.mongoTemplate.save(seckill); + //保存促销活动商品信息 if (!promotionGoodsList.isEmpty()) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(PromotionGoods::getSkuId, promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList())).eq(PromotionGoods::getStoreId, storeId); + queryWrapper.in(PromotionGoods::getSkuId, promotionGoodsList.stream().map(PromotionGoods::getSkuId).collect(Collectors.toList())) + .eq(PromotionGoods::getStoreId, storeId); promotionGoodsService.remove(queryWrapper); + //初始化促销商品 PromotionTools.promotionGoodsInit(promotionGoodsList, seckill, PromotionTypeEnum.SECKILL); promotionGoodsService.saveBatch(promotionGoodsList); } - if (Boolean.FALSE.equals(containsStore)) { - seckillService.storeApply(storeId, seckill.getId()); - } } + /** - * 批量删除限时抢购申请 + * 批量删除秒杀活动申请 * - * @param seckillId 限时抢购活动id - * @param ids 限时抢购申请id集合 + * @param seckillId 秒杀活动活动id + * @param ids 秒杀活动申请id集合 */ @Override public void removeSeckillApplyByIds(String seckillId, List ids) { SeckillVO seckillVO = this.mongoTemplate.findById(seckillId, SeckillVO.class); if (seckillVO == null) { - throw new ServiceException("当前限时抢购活动不存在!"); + throw new ServiceException("当前秒杀活动活动不存在!"); } if (seckillVO.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { - throw new ServiceException("当前限时抢购活动已经开始,无法修改!"); + throw new ServiceException("当前秒杀活动活动已经开始,无法修改!"); } seckillVO.getSeckillApplyList().removeIf(seckillApply -> ids.contains(seckillApply.getId())); this.mongoTemplate.save(seckillVO); @@ -335,78 +213,26 @@ public class SeckillApplyServiceImpl extends ServiceImpl promotionIds = this.esGoodsIndexService.getPromotionIdByPromotionType(id, PromotionTypeEnum.SECKILL); - for (String promotionId : promotionIds) { - SeckillVO seckillVO = this.mongoTemplate.findById(promotionId, SeckillVO.class); - if (seckillVO == null) { - log.error("限时抢购活动id为" + promotionId + "的限时抢购活动不存在!"); - break; - } - if (seckillVO.getSeckillApplyList() != null && !seckillVO.getSeckillApplyList().isEmpty()) { - Optional seckillApplyOptional = seckillVO.getSeckillApplyList().stream().filter(i -> i.getSkuId().equals(id)).findFirst(); - if (seckillApplyOptional.isPresent()) { - SeckillApply seckillApply = seckillApplyOptional.get(); - // 设置售卖数量 - Integer countNum = seckillApply.getSalesNum() + num; - seckillApply.setSalesNum(countNum); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(SeckillApply::getId, seckillApply.getId()); - updateWrapper.set(SeckillApply::getQuantity, seckillApply.getQuantity() - num); - updateWrapper.set(SeckillApply::getSalesNum, countNum); - this.update(updateWrapper); - this.mongoTemplate.save(seckillVO); - } - } - } - return true; - } - - /** - * 更新限时抢购库存数量 - * - * @param map key 为 限时抢购申请(限时抢购商品)id, value 为数量 - * @return 是否成功 - */ - @Override - public boolean updateSeckillStock(Map map) { - boolean result = false; - for (Map.Entry entry : map.entrySet()) { - result = this.updateSeckillStock(entry.getKey(), entry.getValue()); - } - return result; - } - - /** - * 检查限时抢购申请列表参数信息 - * - * @param applyEndTime 申请结束时间 - * @param hours 限时抢购时间段 - * @param seckillApplyList 限时抢购申请列表 + * @param hours 秒杀活动时间段 + * @param seckillApplyList 秒杀活动申请列表 * @param storeId 当前申请商家编号 */ - private void checkSeckillApplyList(Long applyEndTime, String hours, List seckillApplyList, String storeId) { + private void checkSeckillApplyList(String hours, List seckillApplyList, String storeId) { List existSku = new ArrayList<>(); for (SeckillApplyVO seckillApply : seckillApplyList) { seckillApply.setStoreId(storeId); if (seckillApply.getPrice() > seckillApply.getOriginalPrice()) { throw new ServiceException("活动价格不能大于商品原价"); } - - // 检查限时抢购申请的时刻,是否存在在限时抢购的时间段内 + // 检查秒杀活动申请的时刻,是否存在在秒杀活动的时间段内 String[] rangeHours = hours.split(","); boolean containsSame = Arrays.stream(rangeHours).anyMatch(i -> i.equals(seckillApply.getTimeLine().toString())); if (!containsSame) { throw new ServiceException("时刻参数异常"); } - + //检查商品是否参加多个时间段的活动 if (existSku.contains(seckillApply.getSkuId())) { throw new ServiceException(seckillApply.getGoodsName() + "该商品不能同时参加多个时间段的活动"); } else { @@ -419,13 +245,13 @@ public class SeckillApplyServiceImpl extends ServiceImpl hash = cache.getHash(seckillCacheKey); - //如果缓存中存在当前审核商品参与的限时抢购活动商品信息,清除 + //如果缓存中存在当前审核商品参与的秒杀活动活动商品信息,清除 if (hash != null && !hash.isEmpty()) { cache.remove(seckillCacheKey); } } /** - * 从缓存中获取限时抢购信息 + * 从缓存中获取秒杀活动信息 * - * @param seckillCacheKey 限时抢购缓存键 - * @return 限时抢购信息 + * @param seckillCacheKey 秒杀活动缓存键 + * @return 秒杀活动信息 */ private List getSeckillTimelineToCache(String seckillCacheKey) { List timelineList = new ArrayList<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - // 查询当天时间段内的且状态不为结束或关闭的限时抢购活动 - queryWrapper.gt(Seckill::getStartTime, new Date(DateUtil.startOfTodDay() * 1000)).lt(Seckill::getEndTime, DateUtil.endOfDate()) + // 查询当天时间段内的且状态不为结束或关闭的秒杀活动活动 + queryWrapper.gt(Seckill::getStartTime, new Date(cn.lili.common.utils.DateUtil.startOfTodDay() * 1000)).lt(Seckill::getEndTime, cn.lili.common.utils.DateUtil.endOfDate()) .and(i -> i.eq(Seckill::getPromotionStatus, PromotionStatusEnum.NEW.name()) .or(j -> j.eq(Seckill::getPromotionStatus, PromotionStatusEnum.START.name()))); List seckillList = seckillService.list(queryWrapper); @@ -483,14 +309,14 @@ public class SeckillApplyServiceImpl extends ServiceImpl= hour || ((i + 1) < hoursSored.length && hoursSored[i + 1] > hour)) { - SimpleDateFormat format = new SimpleDateFormat(DateUtil.STANDARD_DATE_FORMAT); + SimpleDateFormat format = new SimpleDateFormat(cn.lili.common.utils.DateUtil.STANDARD_DATE_FORMAT); String date = format.format(new Date()); //当前时间的秒数 - long currentTime = DateUtil.getDateline(); - //限时抢购的时刻 - long timeLine = DateUtil.getDateline(date + " " + hoursSored[i], "yyyy-MM-dd HH"); + long currentTime = cn.lili.common.utils.DateUtil.getDateline(); + //秒杀活动的时刻 + long timeLine = cn.lili.common.utils.DateUtil.getDateline(date + " " + hoursSored[i], "yyyy-MM-dd HH"); if ((i + 1) < hoursSored.length && hour > hoursSored[i] && hour <= hoursSored[i + 1]) { - timeLine = DateUtil.getDateline(date + " " + hoursSored[i + 1], "yyyy-MM-dd HH"); + timeLine = cn.lili.common.utils.DateUtil.getDateline(date + " " + hoursSored[i + 1], "yyyy-MM-dd HH"); } Long distanceTime = timeLine - currentTime < 0 ? 0 : timeLine - currentTime; tempTimeline.setDistanceStartTime(distanceTime); @@ -507,16 +333,16 @@ public class SeckillApplyServiceImpl extends ServiceImpl wrapperSeckillGoods(Integer startTimeline) { List seckillGoodsVoS = new ArrayList<>(); LambdaQueryWrapper seckillLambdaQueryWrapper = new LambdaQueryWrapper<>(); - seckillLambdaQueryWrapper.gt(Seckill::getStartTime, new Date(DateUtil.startOfTodDay() * 1000)).lt(Seckill::getEndTime, DateUtil.endOfDate()) + seckillLambdaQueryWrapper.gt(Seckill::getStartTime, new Date(cn.lili.common.utils.DateUtil.startOfTodDay() * 1000)).lt(Seckill::getEndTime, cn.lili.common.utils.DateUtil.endOfDate()) .and(i -> i.eq(Seckill::getPromotionStatus, PromotionStatusEnum.NEW.name()) .or(j -> j.eq(Seckill::getPromotionStatus, PromotionStatusEnum.START.name()))); List seckillList = this.seckillService.list(seckillLambdaQueryWrapper); @@ -539,4 +365,53 @@ public class SeckillApplyServiceImpl extends ServiceImpl 0) { + throw new ServiceException("商品[" + goodsSku.getGoodsName() + "]已经在重叠的时间段参加了拼团活动,不能参加秒杀活动"); + } + // 查询是否在同一时间段参与了秒杀活动活动 + if (promotionGoodsService.findInnerOverlapPromotionGoods(PromotionTypeEnum.SECKILL.name(), goodsSku.getId(), startTime, seckill.getEndTime()) > 0) { + throw new ServiceException("商品[" + goodsSku.getGoodsName() + "]已经在重叠的时间段参加了秒杀活动,不能参加秒杀活动活动"); + } + } + + /** + * 获取秒杀活动促销商品 + * + * @param goodsSku 商品SKU + * @param seckillApply 秒杀活动申请 + * @param seckill 秒杀活动 + * @return 秒杀活动促销商品 + */ + private PromotionGoods setSeckillGoods(GoodsSku goodsSku, SeckillApply seckillApply, Seckill seckill) { + //设置促销商品默认内容 + PromotionGoods promotionGoods = new PromotionGoods(goodsSku); + promotionGoods.setPrice(seckillApply.getPrice()); + promotionGoods.setQuantity(seckillApply.getQuantity()); + // 设置单独每个促销商品的结束时间 + int nextHour = 23; + String[] split = seckill.getHours().split(","); + int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); + Arrays.sort(hoursSored); + for (int i : hoursSored) { + if (seckillApply.getTimeLine() < i) { + nextHour = i; + break; + } + } + DateTime startTime = DateUtil.offsetHour(seckill.getStartTime(), seckillApply.getTimeLine()); + DateTime parseEndTime = DateUtil.offsetSecond(DateUtil.offsetHour(seckill.getStartTime(), nextHour), 1); + promotionGoods.setStartTime(startTime); + promotionGoods.setEndTime(parseEndTime); + return promotionGoods; + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java index bae6b9e1..76ec2b28 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java @@ -7,6 +7,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; import cn.lili.common.trigger.model.TimeExecuteConstant; import cn.lili.common.trigger.model.TimeTriggerMsg; +import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.DateUtil; import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.StringUtils; @@ -43,7 +44,7 @@ import java.util.List; import java.util.stream.Collectors; /** - * 限时抢购业务层实现 + * 秒杀活动业务层实现 * * @author Chopper * @date 2020/8/21 @@ -77,13 +78,6 @@ public class SeckillServiceImpl extends ServiceImpl impl return page(PageUtil.initPage(pageVo), queryWrapper); } - /** - * 从mongo中根据条件获取限时抢购分页列表 - * - * @param queryParam 查询参数 - * @param pageVo 分页参数 - * @return 限时抢购分页列表 - */ @Override public IPage getSeckillByPageFromMongo(SeckillSearchParams queryParam, PageVO pageVo) { IPage seckill = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize()); @@ -101,27 +95,24 @@ public class SeckillServiceImpl extends ServiceImpl impl return seckill; } - /** - * 从mongo中获取限时抢购信息 - * - * @param id 限时抢购id - * @return 限时抢购信息 - */ @Override public SeckillVO getSeckillByIdFromMongo(String id) { return this.checkSeckillExist(id); } @Override - public boolean saveSeckill(SeckillVO seckill) { - // 检查限时抢购参数 - checkSeckillParam(seckill, seckill.getStoreId()); - seckill.setPromotionStatus(PromotionStatusEnum.NEW.name()); + public boolean saveSeckill(Seckill seckill) { + + SeckillVO seckillVO=new SeckillVO(); + BeanUtil.copyProperties(seckill,seckillVO); + // 检查秒杀活动参数 + checkSeckillParam(seckillVO, seckill.getStoreId()); // 保存到MYSQL中 boolean result = this.save(seckill); // 保存到MONGO中 this.mongoTemplate.save(seckill); - this.addSeckillStartTask(seckill); + //添加秒杀延时任务 + this.addSeckillStartTask(seckillVO); return result; } @@ -135,17 +126,18 @@ public class SeckillServiceImpl extends ServiceImpl impl storeIds = storeId + ","; } seckill.setStoreIds(storeIds); + this.updateById(seckill); } @Override public boolean modifySeckill(SeckillVO seckillVO) { - // 检查该限时抢购是否存在 + // 检查该秒杀活动是否存在 SeckillVO seckill = checkSeckillExist(seckillVO.getId()); if (PromotionStatusEnum.START.name().equals(seckillVO.getPromotionStatus())) { throw new ServiceException("活动已经开始,不能进行编辑删除操作"); } - // 检查限时抢购参数 + // 检查秒杀活动参数 this.checkSeckillParam(seckillVO, seckillVO.getStoreId()); // 更新到MYSQL中 @@ -170,7 +162,7 @@ public class SeckillServiceImpl extends ServiceImpl impl public void deleteSeckill(String id) { Seckill seckill = checkSeckillExist(id); if (PromotionStatusEnum.CLOSE.name().equals(seckill.getPromotionStatus()) || PromotionStatusEnum.END.name().equals(seckill.getPromotionStatus())) { - // 更新限时抢购状态为关闭,标示删除标志 + // 更新秒杀活动状态为关闭,标示删除标志 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(Seckill::getId, id).set(Seckill::getDeleteFlag, true).set(Seckill::getPromotionStatus, PromotionStatusEnum.CLOSE.name()); this.update(updateWrapper); LambdaUpdateWrapper seckillApplyLambdaUpdateWrapper = new LambdaUpdateWrapper().eq(SeckillApply::getSeckillId, id).set(SeckillApply::getDeleteFlag, true); @@ -183,14 +175,14 @@ public class SeckillServiceImpl extends ServiceImpl impl DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), rocketmqCustomProperties.getPromotionTopic()); } else { - throw new ServiceException("该限时抢购活动的状态不能删除"); + throw new ServiceException("该秒杀活动活动的状态不能删除"); } } /** - * 开启一个限时抢购 + * 开启一个秒杀活动 * - * @param id 限时抢购编号 + * @param id 秒杀活动编号 */ @Override public void openSeckill(String id) { @@ -227,7 +219,7 @@ public class SeckillServiceImpl extends ServiceImpl impl rocketmqCustomProperties.getPromotionTopic()); } } else { - throw new ServiceException("该限时抢购活动的状态不能关闭"); + throw new ServiceException("该秒杀活动活动的状态不能关闭"); } } @@ -240,6 +232,10 @@ public class SeckillServiceImpl extends ServiceImpl impl return this.count(queryWrapper); } + /** + * 添加秒杀活动延时任务 + * @param seckill 秒杀活动 + */ private void addSeckillStartTask(SeckillVO seckill) { PromotionMessage promotionMessage = new PromotionMessage(seckill.getId(), PromotionTypeEnum.SECKILL.name(), PromotionStatusEnum.START.name(), seckill.getStartTime(), seckill.getEndTime()); TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, @@ -252,27 +248,26 @@ public class SeckillServiceImpl extends ServiceImpl impl } /** - * 检查该限时抢购是否存在 + * 检查该秒杀活动是否存在 * - * @param id 限时抢购编号 - * @return 限时抢购信息 + * @param id 秒杀活动编号 + * @return 秒杀活动信息 */ private SeckillVO checkSeckillExist(String id) { SeckillVO seckill = this.mongoTemplate.findById(id, SeckillVO.class); if (seckill == null) { - throw new ServiceException("当前限时抢购活动不存在"); + throw new ServiceException("当前秒杀活动活动不存在"); } return seckill; } /** - * 检查限时抢购参数 + * 检查秒杀活动参数 * - * @param seckill 限时抢购信息 + * @param seckill 秒杀活动信息 * @param storeId 卖家编号 */ private void checkSeckillParam(SeckillVO seckill, String storeId) { - seckill.checkTime(); // 同一时间段内相同的活动 QueryWrapper queryWrapper = PromotionTools.checkActiveTime(seckill.getStartTime(), seckill.getEndTime(), PromotionTypeEnum.SECKILL, storeId, seckill.getId()); int sameNum = this.count(queryWrapper); diff --git a/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionCacheKeys.java b/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionCacheKeys.java index e2f4be21..b2a7a150 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionCacheKeys.java +++ b/framework/src/main/java/cn/lili/modules/promotion/tools/PromotionCacheKeys.java @@ -28,7 +28,7 @@ public class PromotionCacheKeys { } /** - * 读取满优惠redis key + * 读取秒杀活动redis key * @param timeStr 时间字符串(格式为 yyyyMMdd) * @return 满优惠redis key */ diff --git a/framework/src/main/java/cn/lili/modules/system/entity/dto/SeckillSetting.java b/framework/src/main/java/cn/lili/modules/system/entity/dto/SeckillSetting.java new file mode 100644 index 00000000..d5c0075e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/system/entity/dto/SeckillSetting.java @@ -0,0 +1,25 @@ +package cn.lili.modules.system.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 秒杀活动设置 + * + * @author Bulbasaur + * @date: 2021/5/24 3:27 下午 + */ +@Data +public class SeckillSetting implements Serializable { + + @ApiModelProperty(value = "开启几点场 例如:6,8,12") + @NotNull(message = "活动时间段不能为空") + private String hours; + + @ApiModelProperty(value = "秒杀规则") + @NotNull(message = "秒杀规则不能为空") + private String seckillRule; +} diff --git a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java index dd16dd13..bf618c05 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java @@ -29,6 +29,8 @@ public enum SettingEnum { POINT_SETTING, //经验值设置 EXPERIENCE_SETTING, + //经验值设置 + SECKILL_SETTING, //微信 联合登陆设置 WECHAT_CONNECT, diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index b71e55bb..4be8fd32 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -27,8 +27,8 @@ import org.springframework.web.bind.annotation.*; * @date: 2021/5/21 7:11 下午 */ @RestController -@Api(tags = "管理端,优惠券接口") -@RequestMapping("/manager/promotion/coupon") +@Api(tags = "管理端,优惠券活动接口") +@RequestMapping("/manager/promotion/couponActivity") public class CouponActivityManagerController { @Autowired diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java index 6fc60377..fba5b74b 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java @@ -19,13 +19,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** - * 管理端,限时抢购接口 + * 管理端,秒杀活动接口 * * @author paulG * @date 2020/8/20 **/ @RestController -@Api(tags = "管理端,限时抢购接口") +@Api(tags = "管理端,秒杀活动接口") @RequestMapping("/manager/promotion/seckill") public class SeckillManagerController { @Autowired @@ -34,7 +34,7 @@ public class SeckillManagerController { private SeckillApplyService seckillApplyService; @PostMapping - @ApiOperation(value = "添加限时抢购") + @ApiOperation(value = "添加秒杀活动") public ResultMessage addSeckill(SeckillVO seckillVO) { AuthUser currentUser = UserContext.getCurrentUser(); seckillVO.setStoreId(currentUser.getId()); @@ -45,7 +45,7 @@ public class SeckillManagerController { } @PutMapping - @ApiOperation(value = "修改限时抢购") + @ApiOperation(value = "修改秒杀活动") public ResultMessage updateSeckill(SeckillVO seckillVO) { AuthUser currentUser = UserContext.getCurrentUser(); seckillVO.setStoreId(currentUser.getId()); @@ -62,7 +62,7 @@ public class SeckillManagerController { } @GetMapping - @ApiOperation(value = "分页查询限时抢购列表") + @ApiOperation(value = "分页查询秒杀活动列表") public ResultMessage> getAll(SeckillSearchParams param, PageVO pageVo) { pageVo.setNotConvert(true); IPage page = seckillService.getSeckillByPageFromMongo(param, pageVo); @@ -70,38 +70,31 @@ public class SeckillManagerController { } @DeleteMapping("/{id}") - @ApiOperation(value = "删除一个限时抢购") + @ApiOperation(value = "删除一个秒杀活动") public ResultMessage deleteSeckill(@PathVariable String id) { seckillService.deleteSeckill(id); return ResultUtil.success(); } @PutMapping("/close/{id}") - @ApiOperation(value = "关闭一个限时抢购") + @ApiOperation(value = "关闭一个秒杀活动") public ResultMessage closeSeckill(@PathVariable String id) { seckillService.closeSeckill(id); return ResultUtil.success(); } @PutMapping("/open/{id}") - @ApiOperation(value = "一个限时抢购") + @ApiOperation(value = "一个秒杀活动") public ResultMessage openSeckill(@PathVariable String id) { seckillService.openSeckill(id); return ResultUtil.success(); } @GetMapping("/apply") - @ApiOperation(value = "获取限时抢购申请列表") + @ApiOperation(value = "获取秒杀活动申请列表") public ResultMessage> getSeckillApply(SeckillSearchParams param, PageVO pageVo) { IPage seckillApply = seckillApplyService.getSeckillApplyFromMongo(param, pageVo); return ResultUtil.data(seckillApply); } - @PutMapping("/apply/audit/{ids}") - @ApiOperation(value = "审核多个限时抢购申请") - public ResultMessage auditSeckillApply(@PathVariable String[] ids, String seckillId, String applyStatus, String failReason) { - seckillApplyService.auditBatchApply(ids, seckillId, applyStatus, failReason); - return ResultUtil.success(); - } - } diff --git a/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java b/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java index 835b0716..c0c9eac8 100644 --- a/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java +++ b/manager-api/src/test/java/cn/lili/test/promotion/SeckillTest.java @@ -83,11 +83,4 @@ class SeckillTest { Assertions.assertTrue(true); } - - @Test - void audit() { - seckillApplyService.auditBatchApply(new String[]{"1327169604003061760"}, "123456", PromotionApplyStatusEnum.PASS.name(), ""); - Assertions.assertTrue(true); - } - } diff --git a/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java b/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java index 83c0a3b9..c620777d 100644 --- a/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/promotion/SeckillStoreController.java @@ -22,13 +22,13 @@ import java.util.Arrays; import java.util.List; /** - * 店铺端,限时抢购接口 + * 店铺端,秒杀活动接口 * * @author paulG * @date 2020/8/26 **/ @RestController -@Api(tags = "店铺端,限时抢购接口") +@Api(tags = "店铺端,秒杀活动接口") @RequestMapping("/store/promotion/seckill") public class SeckillStoreController { @Autowired @@ -37,14 +37,14 @@ public class SeckillStoreController { private SeckillApplyService seckillApplyService; @GetMapping - @ApiOperation(value = "获取限时抢购列表") + @ApiOperation(value = "获取秒杀活动列表") public ResultMessage> getSeckillPage(SeckillSearchParams queryParam, PageVO pageVo) { IPage seckillPage = seckillService.getSeckillByPageFromMongo(queryParam, pageVo); return ResultUtil.data(seckillPage); } @GetMapping("/apply") - @ApiOperation(value = "获取限时抢购申请列表") + @ApiOperation(value = "获取秒杀活动申请列表") public ResultMessage> getSeckillApplyPage(SeckillSearchParams queryParam, PageVO pageVo) { String storeId = UserContext.getCurrentUser().getStoreId(); queryParam.setStoreId(storeId); @@ -53,19 +53,19 @@ public class SeckillStoreController { } @GetMapping("/{seckillId}") - @ApiOperation(value = "获取限时抢购") + @ApiOperation(value = "获取秒杀活动") public ResultMessage getSeckill(@PathVariable String seckillId) { return ResultUtil.data(seckillService.getSeckillByIdFromMongo(seckillId)); } @GetMapping("/apply/{seckillApplyId}") - @ApiOperation(value = "获取限时抢购申请") + @ApiOperation(value = "获取秒杀活动申请") public ResultMessage getSeckillApply(@PathVariable String seckillApplyId) { return ResultUtil.data(seckillApplyService.getById(seckillApplyId)); } @PostMapping(path = "/apply/{seckillId}", consumes = "application/json", produces = "application/json") - @ApiOperation(value = "添加限时抢购申请") + @ApiOperation(value = "添加秒杀活动申请") public ResultMessage addSeckillApply(@PathVariable String seckillId, @RequestBody List applyVos) { String storeId = UserContext.getCurrentUser().getStoreId(); seckillApplyService.addSeckillApply(seckillId, storeId, applyVos); @@ -73,7 +73,7 @@ public class SeckillStoreController { } @DeleteMapping("/apply/{seckillId}/{ids}") - @ApiOperation(value = "删除限时抢购申请") + @ApiOperation(value = "删除秒杀活动申请") public ResultMessage deleteSeckillApply(@PathVariable("seckillId") String seckillId, @PathVariable("ids") String ids) { String[] idsSplit = ids.split(","); seckillApplyService.removeSeckillApplyByIds(seckillId, Arrays.asList(idsSplit)); From 00a0edeade0b9f3a0ec20df2fc29023acabb0ed1 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 24 May 2021 18:24:19 +0800 Subject: [PATCH 18/68] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broadcast/service/CommodityService.java | 4 +++- .../serviceimpl/CommodityServiceImpl.java | 14 ++++++++------ .../other/broadcast/CommodityController.java | 6 ++++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java index 310687be..8bde1e8b 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java @@ -3,6 +3,8 @@ package cn.lili.modules.broadcast.service; import cn.lili.modules.broadcast.entity.dos.Commodity; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 直播商品业务层 * @@ -15,7 +17,7 @@ public interface CommodityService extends IService { * 添加直播商品 * @return 添加结果 */ - boolean addCommodity(Commodity commodity); + boolean addCommodity(List commodity); /** * 删除直播商品 diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index 1e524984..baa954ce 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -27,12 +27,14 @@ public class CommodityServiceImpl extends ServiceImpl commodityList) { + for (Commodity commodity:commodityList) { + JSONObject json = wechatLivePlayerUtil.addGoods(commodity); + commodity.setLiveGoodsId(Convert.toInt(json.getStr("goodsId"))); + commodity.setAuditId(json.getStr("auditId")); + commodity.setStoreId(UserContext.getCurrentUser().getStoreId()); + } + return this.saveBatch(commodityList); } @Override diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java index cb8a9b39..0e59756d 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java @@ -15,6 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 店铺端,直播商品接口 * @@ -37,8 +39,8 @@ public class CommodityController { @ApiOperation(value = "添加店铺直播商品") @PostMapping - public ResultMessage addCommodity(@Validated Commodity commodity) { - if (commodityService.addCommodity(commodity)) { + public ResultMessage addCommodity(@Validated List commodityList) { + if (commodityService.addCommodity(commodityList)) { return ResultUtil.success(ResultCode.SUCCESS); } throw new ServiceException(ResultCode.ERROR); From e7e29da455aa412e696952c6c5e4eb8cb86c719c Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 25 May 2021 08:02:31 +0800 Subject: [PATCH 19/68] =?UTF-8?q?=E7=A7=92=E6=9D=80=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B4=BB=E5=8A=A8=E5=95=86=E5=93=81=E6=95=B0?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/promotion/entity/dos/Seckill.java | 4 ---- .../promotion/mapper/SeckillMapper.java | 3 +++ .../promotion/service/SeckillService.java | 7 ++++++ .../serviceimpl/SeckillApplyServiceImpl.java | 16 +++++++------ .../serviceimpl/SeckillServiceImpl.java | 5 ++++ .../promotion/SeckillManagerController.java | 23 ++++++++++++------- 6 files changed, 39 insertions(+), 19 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java index 5410d247..65c7fe55 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java @@ -54,9 +54,6 @@ public class Seckill extends BasePromotion { @ApiModelProperty(value = "商品数量") private Integer goodsNum; - @ApiModelProperty(value = "店铺数量") - private Integer storeNum; - public Seckill(String hours,String seckillRule){ //默认创建30天后的秒杀活动 DateTime dateTime= DateUtil.beginOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, 30)); @@ -64,7 +61,6 @@ public class Seckill extends BasePromotion { this.hours=hours; this.seckillRule=seckillRule; this.goodsNum=0; - this.storeNum=0; //BasePromotion setStoreName("platform"); diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java index 6a207cc6..9491fc6d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/SeckillMapper.java @@ -2,6 +2,7 @@ package cn.lili.modules.promotion.mapper; import cn.lili.modules.promotion.entity.dos.Seckill; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Update; /** * 秒杀活动数据处理层 @@ -11,4 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface SeckillMapper extends BaseMapper { + @Update("UPDATE li_seckill SET goods_num =( SELECT count( id ) FROM li_seckill_apply WHERE seckill_id = #{seckillId} ) WHERE id = #{seckillId}") + void updateSeckillGoodsNum(String seckillId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java index fc1d43a4..729d0a72 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java @@ -93,4 +93,11 @@ public interface SeckillService extends IService { * @return 可参与活动数量 */ Integer getApplyNum(); + + /** + * 更新秒杀活动的商品数量 + * @param seckillId 秒杀活动ID + * @return 更新结果 + */ + void updateSeckillGoodsNum(String seckillId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java index e3e662a2..659f77ca 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillApplyServiceImpl.java @@ -155,14 +155,10 @@ public class SeckillApplyServiceImpl extends ServiceImpl 0) { throw new ServiceException("商品[" + goodsSku.getGoodsName() + "]已经在重叠的时间段参加了拼团活动,不能参加秒杀活动"); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java index 76ec2b28..8be37013 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java @@ -232,6 +232,11 @@ public class SeckillServiceImpl extends ServiceImpl impl return this.count(queryWrapper); } + @Override + public void updateSeckillGoodsNum(String seckillId) { + this.baseMapper.updateSeckillGoodsNum(seckillId); + } + /** * 添加秒杀活动延时任务 * @param seckill 秒杀活动 diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java index fba5b74b..e4ecc423 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java @@ -14,6 +14,7 @@ import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -33,8 +34,9 @@ public class SeckillManagerController { @Autowired private SeckillApplyService seckillApplyService; - @PostMapping + @ApiOperation(value = "添加秒杀活动") + @PostMapping public ResultMessage addSeckill(SeckillVO seckillVO) { AuthUser currentUser = UserContext.getCurrentUser(); seckillVO.setStoreId(currentUser.getId()); @@ -44,8 +46,9 @@ public class SeckillManagerController { return ResultUtil.data(seckillVO); } - @PutMapping + @ApiOperation(value = "修改秒杀活动") + @PutMapping public ResultMessage updateSeckill(SeckillVO seckillVO) { AuthUser currentUser = UserContext.getCurrentUser(); seckillVO.setStoreId(currentUser.getId()); @@ -54,44 +57,48 @@ public class SeckillManagerController { return ResultUtil.data(seckillVO); } - @GetMapping(value = "/{id}") @ApiOperation(value = "通过id获取") + @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") + @GetMapping(value = "/{id}") public ResultMessage get(@PathVariable String id) { Seckill seckill = seckillService.getById(id); return ResultUtil.data(seckill); } - @GetMapping @ApiOperation(value = "分页查询秒杀活动列表") + @GetMapping public ResultMessage> getAll(SeckillSearchParams param, PageVO pageVo) { pageVo.setNotConvert(true); IPage page = seckillService.getSeckillByPageFromMongo(param, pageVo); return ResultUtil.data(page); } - @DeleteMapping("/{id}") @ApiOperation(value = "删除一个秒杀活动") + @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") + @DeleteMapping("/{id}") public ResultMessage deleteSeckill(@PathVariable String id) { seckillService.deleteSeckill(id); return ResultUtil.success(); } - @PutMapping("/close/{id}") @ApiOperation(value = "关闭一个秒杀活动") + @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") + @PutMapping("/close/{id}") public ResultMessage closeSeckill(@PathVariable String id) { seckillService.closeSeckill(id); return ResultUtil.success(); } + @ApiOperation(value = "开启一个秒杀活动") + @ApiImplicitParam(name = "id", value = "秒杀活动ID", required = true, dataType = "String", paramType = "path") @PutMapping("/open/{id}") - @ApiOperation(value = "一个秒杀活动") public ResultMessage openSeckill(@PathVariable String id) { seckillService.openSeckill(id); return ResultUtil.success(); } - @GetMapping("/apply") @ApiOperation(value = "获取秒杀活动申请列表") + @GetMapping("/apply") public ResultMessage> getSeckillApply(SeckillSearchParams param, PageVO pageVo) { IPage seckillApply = seckillApplyService.getSeckillApplyFromMongo(param, pageVo); return ResultUtil.data(seckillApply); From d9ccc4a7b772e2e49b9284d02f8e84c26552a2d4 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 25 May 2021 08:29:07 +0800 Subject: [PATCH 20/68] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A7=92=E6=9D=80?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/system/entity/enums/SettingEnum.java | 4 ++-- .../setting/SettingManagerController.java | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java index bf618c05..23c8fbda 100644 --- a/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java +++ b/framework/src/main/java/cn/lili/modules/system/entity/enums/SettingEnum.java @@ -29,7 +29,7 @@ public enum SettingEnum { POINT_SETTING, //经验值设置 EXPERIENCE_SETTING, - //经验值设置 + //秒杀活动设置 SECKILL_SETTING, //微信 联合登陆设置 @@ -42,5 +42,5 @@ public enum SettingEnum { //支付宝支付设置 ALIPAY_PAYMENT, //微信支付设置 - WECHAT_PAYMENT, + WECHAT_PAYMENT; } diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java index c60b586c..534765f0 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java @@ -115,7 +115,6 @@ public class SettingManagerController { return setting == null ? ResultUtil.data(new BaseSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), BaseSetting.class)); - case WITHDRAWAL_SETTING: return setting == null ? ResultUtil.data(new WithdrawalSetting()) : @@ -124,7 +123,6 @@ public class SettingManagerController { return setting == null ? ResultUtil.data(new DistributionSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class)); - case EMAIL_SETTING: return setting == null ? ResultUtil.data(new EmailSetting()) : @@ -141,46 +139,42 @@ public class SettingManagerController { return setting == null ? ResultUtil.data(new OrderSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class)); - case OSS_SETTING: return setting == null ? ResultUtil.data(new OssSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), OssSetting.class)); - case SMS_SETTING: return setting == null ? ResultUtil.data(new SmsSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), SmsSetting.class)); - case POINT_SETTING: return setting == null ? ResultUtil.data(new PointSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), PointSetting.class)); - case QQ_CONNECT: return setting == null ? ResultUtil.data(new QQConnectSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), QQConnectSetting.class)); - case PAYMENT_SUPPORT: return setting == null ? ResultUtil.data(new PaymentSupportSetting(new PaymentSupportForm())) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), PaymentSupportSetting.class)); - case ALIPAY_PAYMENT: return setting == null ? ResultUtil.data(new AlipayPaymentSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), AlipayPaymentSetting.class)); - case WECHAT_CONNECT: return setting == null ? ResultUtil.data(new WechatConnectSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), WechatConnectSetting.class)); - case WECHAT_PAYMENT: return setting == null ? ResultUtil.data(new WechatPaymentSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), WechatPaymentSetting.class)); + case SECKILL_SETTING: + return setting == null ? + ResultUtil.data(new SeckillSetting()) : + ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), SeckillSetting.class)); default: throw new ServiceException(ResultCode.SETTING_NOT_TO_SET); } From a9ec03f0a4614a54b264bc3c5c89e96a9e363737 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 25 May 2021 16:10:16 +0800 Subject: [PATCH 21/68] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E5=95=86=E5=93=81=202.=E5=90=8C=E6=AD=A5=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E5=95=86=E5=93=81=E7=8A=B6=E6=80=81=203.=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=B1=95=E7=A4=BA=E7=9B=B4=E6=92=AD=E5=95=86?= =?UTF-8?q?=E5=93=81=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- consumer/src/main/resources/application.yml | 2 +- .../broadcast/entity/dos/Commodity.java | 2 +- .../broadcast/entity/dto/CommodityDTO.java | 19 +++++++++ .../broadcast/mapper/CommodityMapper.java | 4 +- .../broadcast/service/CommodityService.java | 11 +++++ .../serviceimpl/CommodityServiceImpl.java | 40 +++++++++++++------ .../broadcast/util/WechatLivePlayerUtil.java | 12 +++++- .../serviceimpl/GoodsSkuServiceImpl.java | 3 ++ .../other/broadcast/CommodityController.java | 20 ++++++---- 9 files changed, 88 insertions(+), 25 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml index f808afe7..79a1af45 100644 --- a/consumer/src/main/resources/application.yml +++ b/consumer/src/main/resources/application.yml @@ -77,7 +77,7 @@ spring: default-datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/lilishop?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/Bulbasaur?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: lilishop maxActive: 20 diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java index da71b825..b4aa4a7e 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java @@ -17,7 +17,7 @@ import javax.persistence.Table; */ @Data @Entity -@ApiModel(value = "直播商品") +@ApiModel(value = "Commodity", description = "直播商品") @TableName("li_commodity") @Table(name = "li_commodity") public class Commodity extends BaseEntity { diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java new file mode 100644 index 00000000..fb326888 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java @@ -0,0 +1,19 @@ +package cn.lili.modules.broadcast.entity.dto; + +import lombok.Data; + +/** + * 直播商品DTO + * 用于获取直播商品状态时使用 + * + * @author Bulbasaur + * @date: 2021/5/25 12:12 下午 + */ +@Data +public class CommodityDTO { + + private Integer goods_id; + private String name; + private String url; + private Integer audit_status; +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java index 530d59d6..621533a9 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java @@ -15,8 +15,8 @@ import java.util.List; */ public interface CommodityMapper extends BaseMapper { - @Select("SELECT live_goods_id FROM li_commodity WHERE audit_status='0' or audit_status='1' AND store_id =#{storeId}") - List getAuditCommodity(String storeId); + @Select("SELECT live_goods_id FROM li_commodity WHERE audit_status='0' or audit_status='1'") + List getAuditCommodity(); @Select("SELECT * FROM li_commodity c WINNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") List getCommodityByRoomId(Integer roomId); diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java index 8bde1e8b..8ff14e31 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java @@ -1,6 +1,8 @@ package cn.lili.modules.broadcast.service; +import cn.lili.common.vo.PageVO; import cn.lili.modules.broadcast.entity.dos.Commodity; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -30,4 +32,13 @@ public interface CommodityService extends IService { * 查询微信小程序直播商品审核状态 */ void getGoodsWareHouse(); + + /** + * 查看直播商品分页 + * @param pageVO 分页 + * @param name 商品名称 + * @param auditStatus 审核状态 + * @return 直播商品分页 + */ + IPage commodityList(PageVO pageVO,String name,String auditStatus); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index baa954ce..4fb61043 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -1,18 +1,25 @@ package cn.lili.modules.broadcast.serviceimpl; import cn.hutool.core.convert.Convert; +import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.lili.common.security.context.UserContext; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.vo.PageVO; import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.entity.dto.CommodityDTO; import cn.lili.modules.broadcast.mapper.CommodityMapper; import cn.lili.modules.broadcast.service.CommodityService; import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Map; /** * 直播商品业务层实现 @@ -28,7 +35,7 @@ public class CommodityServiceImpl extends ServiceImpl commodityList) { - for (Commodity commodity:commodityList) { + for (Commodity commodity : commodityList) { JSONObject json = wechatLivePlayerUtil.addGoods(commodity); commodity.setLiveGoodsId(Convert.toInt(json.getStr("goodsId"))); commodity.setAuditId(json.getStr("auditId")); @@ -49,18 +56,27 @@ public class CommodityServiceImpl extends ServiceImpl goodsIdList = this.baseMapper.getAuditCommodity(UserContext.getCurrentUser().getStoreId()); - //同步状态 - JSONObject json = wechatLivePlayerUtil.getGoodsWareHouse(goodsIdList); - //修改状态 - List> list = (List) json.get("goods"); - for (Map map : list) { - //修改审核状态 - this.update(this.lambdaUpdate() - .eq(Commodity::getLiveGoodsId, map.get("goods_id")) - .set(Commodity::getAuditStatus, map.get("audit_status"))); + List goodsIdList = this.baseMapper.getAuditCommodity(); + if (goodsIdList.size() > 0) { + //同步状态 + JSONObject json = wechatLivePlayerUtil.getGoodsWareHouse(goodsIdList); + //修改状态 + List commodityDTOList = JSONUtil.toList((JSONArray) json.get("goods"), CommodityDTO.class); + for (CommodityDTO commodityDTO : commodityDTOList) { + //修改审核状态 + this.update(new LambdaUpdateWrapper() + .eq(Commodity::getLiveGoodsId, commodityDTO.getGoods_id()) + .set(Commodity::getAuditStatus, commodityDTO.getAudit_status())); + } } } + @Override + public IPage commodityList(PageVO pageVO, String name, String auditStatus) { + return this.page(PageUtil.initPage(pageVO), + new LambdaQueryWrapper().like(name!=null,Commodity::getName,name) + .eq(auditStatus!=null,Commodity::getAuditStatus,auditStatus)); + } + } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index 4852a419..7faceeb4 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -164,8 +164,12 @@ public class WechatLivePlayerUtil { String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=" + token; //新建微信商品DTO GoodsInfo goodsInfo = new GoodsInfo(commodity); + //上传微信临时图片 goodsInfo.setCoverImgUrl(wechatMediaUtil.uploadMedia(token,"image",commodity.getGoodsImage())); - String content = HttpUtils.doPostWithJson(url, goodsInfo); + Map map=new HashMap<>(); + //调用新增直播商品接口 + map.put("goodsInfo",goodsInfo); + String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序添加直播商品结果:" + content); return json; @@ -182,6 +186,8 @@ public class WechatLivePlayerUtil { String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=" + token; + Map map=new HashMap<>(); + map.put("goodsId",goodsId); String content = HttpUtils.doPostWithJson(url, goodsId); JSONObject json = new JSONObject(content); log.info("微信小程序删除直播商品结果:" + content); @@ -199,7 +205,9 @@ public class WechatLivePlayerUtil { String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=" + token; - String content = HttpUtils.doPostWithJson(url, goodsIdList); + Map map=new HashMap<>(); + map.put("goods_ids",goodsIdList); + String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序查询直播商品结果:" + content); return json; diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index 17ca7d27..8823ee9c 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -572,6 +572,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i StringBuilder goodsName = new StringBuilder(goods.getGoodsName()); //规格商品缩略图 String thumbnail = ""; + String small = ""; //规格值 Map specMap = new HashMap<>(); //商品属性 @@ -591,6 +592,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i throw new ServiceException("sku图片至少为一个"); } thumbnail = goodsGalleryService.getGoodsGallery(images.get(0).get("url")).getThumbnail(); + small = goodsGalleryService.getGoodsGallery(images.get(0).get("url")).getSmall(); } else { //设置商品名称 goodsName.append(" ").append(m.getValue()); @@ -615,6 +617,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i //设置规格信息 sku.setGoodsName(goodsName.toString()); sku.setThumbnail(thumbnail); + sku.setSmall(small); //规格信息 sku.setId(Convert.toStr(map.get("id"), "").toString()); diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java index 0e59756d..5876edf5 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java @@ -3,16 +3,16 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; -import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Commodity; import cn.lili.modules.broadcast.service.CommodityService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -32,14 +32,19 @@ public class CommodityController { private CommodityService commodityService; @ApiOperation(value = "获取店铺直播商品列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "商品名称", dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "auditStatus", value = "直播商品状态", dataType = "String", paramType = "query") + }) @GetMapping - public ResultMessage> page(PageVO pageVO) { - return ResultUtil.data(commodityService.page(PageUtil.initPage(pageVO))); + public ResultMessage> page(String auditStatus, String name, PageVO pageVO) { + return ResultUtil.data(commodityService.commodityList(pageVO, name, auditStatus)); } @ApiOperation(value = "添加店铺直播商品") + @ApiImplicitParam(name = "commodityList", value = "直播商品列表", paramType = "body", allowMultiple = true, dataType = "Commodity") @PostMapping - public ResultMessage addCommodity(@Validated List commodityList) { + public ResultMessage addCommodity(@RequestBody List commodityList) { if (commodityService.addCommodity(commodityList)) { return ResultUtil.success(ResultCode.SUCCESS); } @@ -47,8 +52,9 @@ public class CommodityController { } @ApiOperation(value = "删除店铺直播商品") - @DeleteMapping - public ResultMessage delete(String goodsId) { + @ApiImplicitParam(name = "goodsId", value = "直播商品ID", dataType = "String", paramType = "path") + @DeleteMapping("/{goodsId}") + public ResultMessage delete(@PathVariable String goodsId) { if (commodityService.deleteCommodity(goodsId)) { return ResultUtil.success(ResultCode.SUCCESS); } From b4240ae2c070136154fc060a879218a346b1a3cf Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 26 May 2021 08:18:28 +0800 Subject: [PATCH 22/68] =?UTF-8?q?=E5=95=86=E5=93=81=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E4=B9=B0=E5=AE=B6=E6=89=BF=E6=8B=85=E8=BF=90=E8=B4=B9=E3=80=81?= =?UTF-8?q?=E5=8D=96=E5=AE=B6=E6=89=BF=E6=8B=85=E8=BF=90=E8=B4=B9=EF=BC=8C?= =?UTF-8?q?=E9=85=8D=E9=80=81=E6=A8=A1=E6=9D=BF=E5=A2=9E=E5=8A=A0=E9=80=89?= =?UTF-8?q?=E9=A1=B9=EF=BC=9A=E5=8C=85=E9=82=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broadcast/entity/dos/Commodity.java | 3 +++ .../serviceimpl/CommodityServiceImpl.java | 26 +++++++++++++++++-- .../lili/modules/goods/entity/dos/Goods.java | 6 ----- .../modules/goods/entity/dos/GoodsSku.java | 2 -- .../goods/serviceimpl/GoodsServiceImpl.java | 1 - .../serviceimpl/GoodsSkuServiceImpl.java | 2 -- .../order/cart/entity/vo/CartSkuVO.java | 5 ---- .../cart/render/impl/SkuFreightRender.java | 10 +++---- .../order/cart/service/CartServiceImpl.java | 9 ++++--- .../store/entity/dos/FreightTemplate.java | 4 +-- .../lili/modules/store/entity/dos/Store.java | 6 +++++ .../store/entity/dto/StoreEditDTO.java | 6 +++++ .../entity/enums/FreightTemplateEnum.java | 3 ++- .../store/entity/vos/StoreBasicInfoVO.java | 6 +++++ .../store/mapper/StoreDetailMapper.java | 6 ++--- .../store/service/FreightTemplateService.java | 1 + .../FreightTemplateServiceImpl.java | 14 ++++++---- 17 files changed, 71 insertions(+), 39 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java index b4aa4a7e..725b2b94 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java @@ -60,4 +60,7 @@ public class Commodity extends BaseEntity { @ApiModelProperty(value = "规格ID") private String skuId; + + @ApiModelProperty(value = "SKU库存") + private Integer quantity; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index 4fb61043..92863542 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; @@ -12,6 +13,9 @@ import cn.lili.modules.broadcast.entity.dto.CommodityDTO; import cn.lili.modules.broadcast.mapper.CommodityMapper; import cn.lili.modules.broadcast.service.CommodityService; import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; +import cn.lili.modules.goods.entity.dos.GoodsSku; +import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; +import cn.lili.modules.goods.service.GoodsSkuService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -32,18 +36,36 @@ public class CommodityServiceImpl extends ServiceImpl commodityList) { for (Commodity commodity : commodityList) { + //检测直播商品 + checkCommodity(commodity); + //添加直播商品 JSONObject json = wechatLivePlayerUtil.addGoods(commodity); commodity.setLiveGoodsId(Convert.toInt(json.getStr("goodsId"))); commodity.setAuditId(json.getStr("auditId")); commodity.setStoreId(UserContext.getCurrentUser().getStoreId()); + //默认为待审核状态 + commodity.setAuditStatus("0"); + this.save(commodity); + } + return true; + } + private void checkCommodity(Commodity commodity){ + //商品是否审核通过 + GoodsSku goodsSku=goodsSkuService.getById(commodity.getSkuId()); + if(!goodsSku.getIsAuth().equals(GoodsAuthEnum.PASS)){ + throw new ServiceException(goodsSku.getGoodsName()+" 未审核通过,不能添加直播商品"); + } + //是否已添加规格商品 + if(this.count(new LambdaQueryWrapper().eq(Commodity::getSkuId,commodity.getSkuId()))>0){ + throw new ServiceException(goodsSku.getGoodsName()+" 已添加规格商品,无法重复增加"); } - return this.saveBatch(commodityList); } - @Override public boolean deleteCommodity(String goodsId) { JSONObject json = wechatLivePlayerUtil.deleteGoods(goodsId); diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java index c0e50d69..c7ba9d46 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java @@ -142,11 +142,6 @@ public class Goods extends BaseEntity { */ @ApiModelProperty(value = "运费模板id") private String templateId; - /** - * 谁承担运费 BUYER:买家承担,STORE:卖家承担 - */ - @ApiModelProperty(value = " 谁承担运费 BUYER:买家承担,STORE:卖家承担") - private String freightPayer; /** * 审核状态 * @@ -198,7 +193,6 @@ public class Goods extends BaseEntity { this.sn = goodsOperationDTO.getSn(); this.price = goodsOperationDTO.getPrice(); this.weight = goodsOperationDTO.getWeight(); - this.freightPayer = goodsOperationDTO.getFreightPayer(); this.templateId = goodsOperationDTO.getTemplateId(); this.recommend = goodsOperationDTO.isRecommend(); this.sellingPoint = goodsOperationDTO.getSellingPoint(); diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java index 96b6ead7..830ed3ff 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java @@ -131,8 +131,6 @@ public class GoodsSku extends BaseEntity { @ApiModelProperty(value = "运费模板id") private String templateId; - @ApiModelProperty(value = " 谁承担运费 BUYER:买家承担,STORE:卖家承担") - private String freightPayer; /** * @see GoodsAuthEnum */ diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index 355d06e0..6f25a75b 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -306,7 +306,6 @@ public class GoodsServiceImpl extends ServiceImpl implements @Override public Boolean freight(List goodsIds, String freightPayer, String templateId) { LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); - lambdaUpdateWrapper.set(Goods::getFreightPayer, freightPayer); lambdaUpdateWrapper.set(Goods::getTemplateId, templateId); lambdaUpdateWrapper.in(Goods::getId, goodsIds); return this.update(lambdaUpdateWrapper); diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index 8823ee9c..d2e0e856 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -544,8 +544,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl i sku.setIntro(goods.getIntro()); sku.setMobileIntro(goods.getMobileIntro()); sku.setGoodsUnit(goods.getGoodsUnit()); - //运费 - sku.setFreightPayer(goods.getFreightPayer()); //商品状态 sku.setIsAuth(goods.getIsAuth()); sku.setSalesModel(goods.getSalesModel()); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java index 2a0ff507..7671d446 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java @@ -51,10 +51,6 @@ public class CartSkuVO extends CartBase implements Serializable { @ApiModelProperty(value = "是否选中,要去结算") private Boolean checked; - - @ApiModelProperty(value = " 谁承担运费 BUYER:买家承担,STORE:卖家承担") - private String freightPayer; - @ApiModelProperty(value = "是否免运费") private Boolean isFreeFreight; @@ -100,7 +96,6 @@ public class CartSkuVO extends CartBase implements Serializable { this.isShip = true; this.purchasePrice = goodsSku.getIsPromotion() != null && goodsSku.getIsPromotion() ? goodsSku.getPromotionPrice() : goodsSku.getPrice(); this.isFreeFreight = false; - this.freightPayer = goodsSku.getFreightPayer(); this.setStoreId(goodsSku.getStoreId()); this.setStoreName(goodsSku.getStoreName()); } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java index afadb005..b159eee0 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java @@ -11,7 +11,6 @@ import cn.lili.modules.store.entity.dto.FreightTemplateChildDTO; import cn.lili.modules.store.entity.enums.FreightTemplateEnum; import cn.lili.modules.store.entity.vos.FreightTemplateVO; import cn.lili.modules.store.service.FreightTemplateService; -import com.xkcoding.http.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @@ -44,10 +43,6 @@ public class SkuFreightRender implements CartRenderStep { forSku: for (CartSkuVO cartSkuVO : cartSkuVOS) { String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); - //如果商品设置卖家承担运费,或者没设置运费,则跳出此商品运费计算 - if (StringUtil.isEmpty(cartSkuVO.getFreightPayer())||cartSkuVO.getFreightPayer().equals("STORE")) { - continue; - } //免运费则跳出运费计算 if (Boolean.TRUE.equals(cartSkuVO.getIsFreeFreight()) || freightTemplateId == null) { @@ -57,7 +52,10 @@ public class SkuFreightRender implements CartRenderStep { //寻找对应对商品运费计算模版 FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { - + //店铺支付运费则跳过 + if(freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())){ + break; + } FreightTemplateChild freightTemplateChild = null; //获取市级别id diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index 55808273..9a2d8dc2 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -34,6 +34,7 @@ import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; import cn.lili.modules.store.entity.dos.FreightTemplateChild; +import cn.lili.modules.store.entity.enums.FreightTemplateEnum; import cn.lili.modules.store.entity.vos.FreightTemplateVO; import cn.lili.modules.store.service.FreightTemplateService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -524,12 +525,12 @@ public class CartServiceImpl implements CartService { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } for (CartSkuVO cartSkuVO : skuList) { - //店铺支付运费则跳过 - if (cartSkuVO.getFreightPayer().equals("STORE")) { - break; - } String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); + //店铺支付运费则跳过 + if(freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())){ + break; + } //收货地址判定 forTemplates: if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/FreightTemplate.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/FreightTemplate.java index 98058968..ffdbc8b0 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/FreightTemplate.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/FreightTemplate.java @@ -13,9 +13,9 @@ import javax.validation.constraints.NotEmpty; /** * 运费模板 + * * @author Chopper * @date 2020/11/17 4:27 下午 - * */ @Data @Entity @@ -35,7 +35,7 @@ public class FreightTemplate extends BaseEntity { * @see FreightTemplateEnum */ @NotEmpty(message = "计价方式不能为空") - @ApiModelProperty(value = "计价方式:按件、按重量", allowableValues = "WEIGHT, NUM") + @ApiModelProperty(value = "计价方式:按件、按重量", allowableValues = "WEIGHT,NUM,FREE") private String pricingMethod; diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java index c271a186..27c2c9be 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/Store.java @@ -95,6 +95,12 @@ public class Store extends BaseEntity { @ApiModelProperty(value = "收藏数量") private Integer collectionNum; + @ApiModelProperty(value = "腾讯云智服唯一标识") + private String yzfSign; + + @ApiModelProperty(value = "腾讯云智服小程序唯一标识") + private String yzfMpSign; + public Store(Member member) { this.memberId = member.getId(); this.memberName = member.getUsername(); diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java index 33616b57..6b6bfe50 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dto/StoreEditDTO.java @@ -42,4 +42,10 @@ public class StoreEditDTO extends StoreDetail { @ApiModelProperty(value = "详细地址") private String storeAddressDetail; + @ApiModelProperty(value = "腾讯云智服唯一标识") + private String yzfSign; + + @ApiModelProperty(value = "腾讯云智服小程序唯一标识") + private String yzfMpSign; + } diff --git a/framework/src/main/java/cn/lili/modules/store/entity/enums/FreightTemplateEnum.java b/framework/src/main/java/cn/lili/modules/store/entity/enums/FreightTemplateEnum.java index d4a3c720..e1a1a404 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/enums/FreightTemplateEnum.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/enums/FreightTemplateEnum.java @@ -11,8 +11,9 @@ public enum FreightTemplateEnum { /** * 重量 * 件数 + * 包邮 */ - WEIGHT, NUM + WEIGHT, NUM, FREE } diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java index ffbcae0c..af85fc2b 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java @@ -42,4 +42,10 @@ public class StoreBasicInfoVO { @ApiModelProperty(value = "是否自营") private String selfOperated; + + @ApiModelProperty(value = "腾讯云智服唯一标识") + private String yzfSign; + + @ApiModelProperty(value = "腾讯云智服小程序唯一标识") + private String yzfMpSign; } diff --git a/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java b/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java index 0b91d1fe..1478fea8 100644 --- a/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java +++ b/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java @@ -23,15 +23,15 @@ import java.util.List; */ public interface StoreDetailMapper extends BaseMapper { - @Select("select s.store_logo,s.member_name,s.store_name,s.store_disable,s.self_operated,s.store_address_detail,s.store_address_path,s.store_address_id_path,s.store_center,s.store_desc,d.* " + - "from li_store s inner join li_store_detail d on s.id=d.store_id where s.id=#{storeId}") + @Select("select s.store_logo,s.member_name,s.store_name,s.store_disable,s.self_operated,s.store_address_detail,s.store_address_path,s.store_address_id_path,s.store_center,s.store_desc,s.yzf_sign," + + "d.* from li_store s inner join li_store_detail d on s.id=d.store_id where s.id=#{storeId}") StoreDetailVO getStoreDetail(String storeId); @Select("select s.member_name,s.store_name,s.store_disable,s.self_operated,s.store_center,s.store_logo,s.store_desc,d.* " + "from li_store s inner join li_store_detail d on s.id=d.store_id where s.member_id=#{memberId}") StoreDetailVO getStoreDetailByMemberId(String memberId); - @Select("SELECT s.id as storeId,s.* FROM li_store s LEFT JOIN li_store_detail sd ON s.id=sd.store_id WHERE s.id=#{storeId}") + @Select("SELECT s.id as storeId,s.* FROM li_store s WHERE s.id=#{storeId}") StoreBasicInfoVO getStoreBasicInfoDTO(String storeId); @Select("select s.sales_consignee_name,s.sales_consignee_mobile,s.sales_consignee_address_id,s.sales_consignee_address_path,s.sales_consignee_detail " + diff --git a/framework/src/main/java/cn/lili/modules/store/service/FreightTemplateService.java b/framework/src/main/java/cn/lili/modules/store/service/FreightTemplateService.java index cecc0ba2..c4b82724 100644 --- a/framework/src/main/java/cn/lili/modules/store/service/FreightTemplateService.java +++ b/framework/src/main/java/cn/lili/modules/store/service/FreightTemplateService.java @@ -41,6 +41,7 @@ public interface FreightTemplateService extends IService { /** * 添加商家运费模板 + * 运费模板分为卖家包邮、运费计算两种类型 * * @param freightTemplateVO 运费模板 * @return 运费模板 diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java index 11e1b0bc..a239e50e 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/FreightTemplateServiceImpl.java @@ -108,12 +108,16 @@ public class FreightTemplateServiceImpl extends ServiceImpl list = new ArrayList<>(); - for (FreightTemplateChild freightTemplateChild : freightTemplateVO.getFreightTemplateChildList()) { - freightTemplateChild.setFreightTemplateId(freightTemplate.getId()); - list.add(freightTemplateChild); + //如果子运费模板不为空则进行新增 + if(freightTemplateVO.getFreightTemplateChildList()!=null){ + for (FreightTemplateChild freightTemplateChild : freightTemplateVO.getFreightTemplateChildList()) { + freightTemplateChild.setFreightTemplateId(freightTemplate.getId()); + list.add(freightTemplateChild); + } + //添加运费模板子内容 + freightTemplateChildService.addFreightTemplateChild(list); } - //添加运费模板子内容 - freightTemplateChildService.addFreightTemplateChild(list); + //更新缓存 cache.remove(CachePrefix.SHIP_TEMPLATE.getPrefix() + tokenUser.getStoreId()); return freightTemplateVO; From 5f93ce38510bf0c1c125f7daa5cbfe37f69111f5 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 26 May 2021 08:42:12 +0800 Subject: [PATCH 23/68] =?UTF-8?q?=E4=BC=9A=E5=91=98=E7=B2=BE=E5=87=86?= =?UTF-8?q?=E5=8F=91=E5=88=B8=EF=BC=8C=E6=9B=B4=E6=94=B9=E6=94=B9=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E8=BF=9B=E8=A1=8C=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/coupon/CouponActivityExecute.java | 8 +++--- .../CouponActivityServiceImpl.java | 26 ++++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java index 0bca3df4..b4f6cc19 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java @@ -46,13 +46,15 @@ public class CouponActivityExecute implements EveryMinuteExecute { .eq(CouponActivity::getPromotionStatus,PromotionStatusEnum.NEW.name())); //如果有符合要求的优惠券活动,发送优惠券 if(couponActivities.size()>0){ - for (CouponActivity CouponActivity:couponActivities) { - couponActivityService.specify(CouponActivity.getId()); - } + for (CouponActivity couponActivity:couponActivities) { + couponActivityService.specify(couponActivity.getId()); + //修改精准发券优惠券活动状态 couponActivityService.update(new LambdaUpdateWrapper() .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name()) + .eq(CouponActivity::getId,couponActivity.getId()) .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name())); + } } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index fbe337d9..8bf5734f 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -65,7 +65,7 @@ public class CouponActivityServiceImpl extends ServiceImpl() - .eq(CouponActivityItem::getActivityId,couponActivityDTO.getId())); + .eq(CouponActivityItem::getActivityId, couponActivityDTO.getId())); //重新添加优惠券活动关联优惠券 this.addCouponActivityItems(couponActivityDTO); return couponActivityDTO; @@ -83,11 +83,24 @@ public class CouponActivityServiceImpl extends ServiceImpl> memberList = this.getMemberList(couponActivity); + List> member = this.getMemberList(couponActivity); + + //会员拆成多个小组进行发送 + List>> memberGroup = new ArrayList<>(); + + //循环分组 + for (int i = 0; i < (member.size() / 100 + (member.size() % 100 == 0 ? 0 : 1)); i++) { + int endPoint = Math.min((100 + (i * 100)), member.size()); + memberGroup.add(member.subList((i * 100), endPoint)); + } + //优惠优惠券活动的优惠券列表 List couponActivityItems = couponActivityItemService.getCouponActivityList(couponActivity.getId()); //发送优惠券 - sendCoupon(memberList, couponActivityItems); + for (List> memberList : memberGroup) { + sendCoupon(memberList, couponActivityItems); + } + } @Override @@ -110,7 +123,7 @@ public class CouponActivityServiceImpl extends ServiceImpl Date: Wed, 26 May 2021 17:09:55 +0800 Subject: [PATCH 24/68] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8F=91=E8=B4=A7Excel=EF=BC=8C=E4=B8=8A=E4=BC=A0Excel?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=89=B9=E9=87=8F=E5=8F=91=E8=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/pom.xml | 29 +++--- .../java/cn/lili/common/enums/ResultCode.java | 1 + .../modules/broadcast/entity/dos/Studio.java | 3 + .../serviceimpl/CommodityServiceImpl.java | 2 +- .../serviceimpl/StudioServiceImpl.java | 6 +- .../broadcast/util/WechatLivePlayerUtil.java | 8 +- .../broadcast/util/WechatMediaUtil.java | 3 + .../entity/dto/OrderBatchDeliverDTO.java | 27 ++++++ .../order/order/mapper/OrderMapper.java | 8 +- .../order/order/service/OrderService.java | 17 ++++ .../order/serviceimpl/OrderServiceImpl.java | 89 ++++++++++++++++--- .../system/mapper/StoreLogisticsMapper.java | 3 + .../system/service/StoreLogisticsService.java | 7 ++ .../StoreLogisticsServiceImpl.java | 5 ++ .../trade/OrderStoreController.java | 55 ++++++++++++ 15 files changed, 226 insertions(+), 37 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderBatchDeliverDTO.java diff --git a/framework/pom.xml b/framework/pom.xml index a47a8901..49ffefd8 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -45,6 +45,8 @@ 2.3.1 1.21 1.2 + 5.0.0 + 5.0.0 @@ -81,11 +83,6 @@ xk-time 2.2.0 - - - - - org.springframework.boot spring-boot-starter-web @@ -356,23 +353,11 @@ simple-http ${simple-http-version} - org.antlr antlr4-runtime ${antlr4-runtime-version} - - - - - - - - - - - com.alipay.sdk alipay-sdk-java @@ -385,6 +370,16 @@ UserAgentUtils ${userAgentUtils} + + org.apache.poi + poi + ${poi-version} + + + org.apache.poi + poi-ooxml + ${poi-ooxml-version} + diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 838afc87..1787332e 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -138,6 +138,7 @@ public enum ResultCode { ORDER_NOT_USER(31007, "非当前会员的订单"), ORDER_TAKE_ERROR(31008, "当前订单无法核销"), MEMBER_ADDRESS_NOT_EXIST(31009, "订单无收货地址,请先配置收货地址"), + ORDER_DELIVER_NUM_ERROR(31010, "没有待发货的订单"), /** * 支付 diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java index 9f90bb4d..c001b41a 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java @@ -77,6 +77,9 @@ public class Studio extends BaseEntity { @ApiModelProperty(value = "房间ID") private Integer roomId; + @ApiModelProperty(value = "小程序直播码") + private String qrCodeUrl; + @ApiModelProperty(value = "店铺ID") private String storeId; diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index 92863542..e213bd77 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -58,7 +58,7 @@ public class CommodityServiceImpl extends ServiceImpl impleme public Boolean create(Studio studio) { try { //创建小程序直播 - Integer roomId = wechatLivePlayerUtil.create(studio); - studio.setRoomId(roomId); + Map roomMap=wechatLivePlayerUtil.create(studio); + studio.setRoomId(Integer.parseInt(roomMap.get("roomId"))); + studio.setQrCodeUrl(roomMap.get("qrcodeUrl")); studio.setStoreId(UserContext.getCurrentUser().getStoreId()); return this.save(studio); } catch (Exception e) { diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index 7faceeb4..dda7a1eb 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -1,6 +1,5 @@ package cn.lili.modules.broadcast.util; -import cn.hutool.core.convert.Convert; import cn.hutool.json.JSONObject; import cn.lili.modules.base.entity.enums.ClientTypeEnum; import cn.lili.modules.broadcast.entity.dos.Commodity; @@ -37,7 +36,7 @@ public class WechatLivePlayerUtil { * @param studio 小程序直播 * @return 房间ID */ - public Integer create(Studio studio) throws Exception{ + public Map create(Studio studio) throws Exception{ //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url @@ -74,7 +73,10 @@ public class WechatLivePlayerUtil { String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序直播间创建结果:" + content); - return Convert.toInt(json.getStr("roomId")); + Map roomMap=new HashMap<>(); + roomMap.put("roomId",json.getStr("roomId")); + roomMap.put("qrcodeUrl",json.getStr("qrcode_url")); + return roomMap; } /** diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java index 0cfb49fe..3f7650fe 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatMediaUtil.java @@ -115,6 +115,9 @@ public class WechatMediaUtil { fileExt = ".png"; break; case "image/jpeg": + fileExt = ".jpeg"; + break; + case "image/jpg": fileExt = ".jpg"; break; } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderBatchDeliverDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderBatchDeliverDTO.java new file mode 100644 index 00000000..d6ccd31c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderBatchDeliverDTO.java @@ -0,0 +1,27 @@ +package cn.lili.modules.order.order.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 订单批量发货DTO + * @author Bulbasaur + * @date: 2021/5/26 4:21 下午 + * + */ +@Data +public class OrderBatchDeliverDTO { + + @ApiModelProperty(value = "订单SN") + private String orderSn; + + @ApiModelProperty(value = "物流公司ID") + private String logisticsId; + + @ApiModelProperty(value = "物流公司名称") + private String logisticsName; + + @ApiModelProperty(value = "发货单号") + private String logisticsNo; + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java index e976a1a7..1cc21d35 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java @@ -11,6 +11,8 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; +import java.util.List; + /** * 订单数据处理层 * @@ -19,9 +21,6 @@ import org.apache.ibatis.annotations.Update; */ public interface OrderMapper extends BaseMapper { - @Update({"update li_order set order_status = #{status} where sn in #{orderSn}"}) - void batchUpdateStatus(String status, String orderSns); - @Update({"update li_order set order_status = #{status} where sn = #{orderSn}"}) void updateStatus(String status, String orderSn); @@ -39,8 +38,9 @@ public interface OrderMapper extends BaseMapper { " FROM li_order o INNER JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") IPage queryByParams(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); - @Select("select * from li_order ${ew.customSqlSegment} ") IPage queryPaymentLogs(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("SELECT sn FROM li_order o ${ew.customSqlSegment} ") + List deliverSnList(@Param(Constants.WRAPPER) Wrapper queryWrapper); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 1f8da09e..c89e5e4a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -4,6 +4,7 @@ import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; @@ -13,6 +14,7 @@ import cn.lili.modules.system.entity.vo.Traces; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -176,4 +178,19 @@ public interface OrderService extends IService { */ void agglomeratePintuanOrder(String pintuanId, String parentOrderSn); + /** + * 获取待发货订单编号列表 + * @param response + * @param orderIds 订单ID列表 + * @param logisticsName 店铺已选择物流公司列表 + * @return 待发货订单编号列表 + */ + void getBatchDeliverList(HttpServletResponse response, List orderIds, List logisticsName); + + /** + * 订单批量发货 + * @param list 批量发货列表 + */ + void batchDeliver(List list); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 9b86d152..7d5869da 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -2,8 +2,11 @@ package cn.lili.modules.order.order.serviceimpl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; import cn.lili.common.aop.syslog.annotation.SystemLogPoint; import cn.lili.common.delayqueue.DelayQueueTools; import cn.lili.common.delayqueue.DelayQueueType; @@ -31,6 +34,7 @@ import cn.lili.modules.order.order.aop.OrderLogPoint; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.Receipt; +import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; @@ -60,12 +64,16 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -78,7 +86,6 @@ import java.util.List; */ @Service @Transactional(rollbackFor = Exception.class) - public class OrderServiceImpl extends ServiceImpl implements OrderService { private static final String ORDER_SN_COLUMN = "order_sn"; @@ -364,8 +371,6 @@ public class OrderServiceImpl extends ServiceImpl implements this.updateById(order); //修改订单状态为已发送 this.updateStatus(orderSn, OrderStatusEnum.DELIVERED); - - //修改订单货物可以进行售后、投诉 orderItemService.update(new UpdateWrapper().eq(ORDER_SN_COLUMN, orderSn) .set("after_sale_status", OrderItemAfterSaleStatusEnum.NOT_APPLIED) @@ -375,8 +380,6 @@ public class OrderServiceImpl extends ServiceImpl implements orderMessage.setNewStatus(OrderStatusEnum.DELIVERED); orderMessage.setOrderSn(order.getSn()); this.sendUpdateStatusMessage(orderMessage); - - } else { throw new ServiceException(ResultCode.ORDER_DELIVER_ERROR); } @@ -512,6 +515,77 @@ public class OrderServiceImpl extends ServiceImpl implements } } + @Override + public void getBatchDeliverList(HttpServletResponse response, List orderIds, List logisticsName) { + //获取待发货订单列表 + List deliverList = this.baseMapper.deliverSnList(new LambdaQueryWrapper() + .eq(Order::getStoreId, UserContext.getCurrentUser().getStoreId()) + .eq(Order::getOrderStatus, "'UNDELIVERED'") + .in(orderIds.size() > 0, Order::getId, orderIds)); + //如果没有待发货的订单则返回 + if (deliverList.size() < 1) { + throw new ServiceException(ResultCode.ORDER_DELIVER_NUM_ERROR); + } + ExcelWriter writer = ExcelUtil.getWriter(); + writer.addHeaderAlias("sn", "订单号"); + writer.addHeaderAlias("logisticsName", "物流公司"); + writer.addHeaderAlias("logisticsNo", "物流单号"); + //写入待发货的订单列表 + writer.write(deliverList, true); + //存放下拉列表 + String[] logiList = logisticsName.toArray(new String[]{}); + CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, deliverList.size(), 2, 3); + writer.addSelect(cellRangeAddressList, logiList); + + response.setHeader("Content-Disposition", "attachment;filename=批量发货.xls"); + ServletOutputStream out = null; + try { + out = response.getOutputStream(); + writer.flush(out, true); + } catch (IOException e) { + e.printStackTrace(); + } finally { + writer.close(); + } + IoUtil.close(out); + } + + @Override + public void batchDeliver(List list) { + //循环检查是否符合规范 + checkBatchDeliver(list); + //订单批量发货 + for (OrderBatchDeliverDTO orderBatchDeliverDTO : list) { + this.delivery(orderBatchDeliverDTO.getOrderSn(), orderBatchDeliverDTO.getLogisticsNo(), orderBatchDeliverDTO.getLogisticsId()); + } + } + + /** + * 循环检查批量发货订单列表 + * + * @param list 待发货订单列表 + */ + private void checkBatchDeliver(List list) { + for (OrderBatchDeliverDTO orderBatchDeliverDTO : list) { + //查看订单号是否存在-是否是当前店铺的订单 + int count = this.count(new LambdaQueryWrapper() + .eq(Order::getStoreId, UserContext.getCurrentUser().getStoreId()) + .eq(Order::getSn, orderBatchDeliverDTO.getOrderSn())); + if (count == 0) { + throw new ServiceException("订单编号:'" + orderBatchDeliverDTO.getOrderSn() + " '不存在"); + } + //查看物流公司 + Logistics logistics = logisticsService.getOne(new LambdaQueryWrapper().eq(Logistics::getName, orderBatchDeliverDTO.getLogisticsName())); + if (logistics == null) { + throw new ServiceException("物流公司:'" + orderBatchDeliverDTO.getLogisticsName() + " '不存在"); + } else { + orderBatchDeliverDTO.setLogisticsId(logistics.getId()); + } + } + + + } + /** * 订单状态变更消息 * @@ -605,11 +679,6 @@ public class OrderServiceImpl extends ServiceImpl implements */ private void pintuanOrderFailed(List list) { for (Order order : list) { -// LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); -// updateWrapper.eq(Order::getId, order.getId()); -// updateWrapper.set(Order::getOrderStatus, OrderStatusEnum.CANCELLED.name()); -// updateWrapper.set(Order::getCancelReason, "拼团人数不足,拼团失败!"); -// this.update(updateWrapper); try { this.cancel(order.getSn(), "拼团人数不足,拼团失败!"); } catch (Exception e) { diff --git a/framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java b/framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java index d441d321..23bb348b 100644 --- a/framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java +++ b/framework/src/main/java/cn/lili/modules/system/mapper/StoreLogisticsMapper.java @@ -18,6 +18,9 @@ public interface StoreLogisticsMapper extends BaseMapper { @Select("SELECT l.* FROM li_logistics l RIGHT JOIN li_store_logistics sl ON l.id=sl.logistics_id WHERE sl.store_id=#{storeId}") List getSelectedStoreLogistics(String storeId); + @Select("SELECT l.name FROM li_logistics l RIGHT JOIN li_store_logistics sl ON l.id=sl.logistics_id WHERE sl.store_id=#{storeId}") + List getSelectedStoreLogisticsName(String storeId); + @Select("SELECT *, ( SELECT sl.id FROM li_store_logistics sl WHERE l.id = sl.logistics_id AND sl.store_id=#{storeId} ) AS selected FROM li_logistics l;") List getStoreLogistics(String storeId); diff --git a/framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java b/framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java index 0fb6adc3..8d4e39be 100644 --- a/framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java +++ b/framework/src/main/java/cn/lili/modules/system/service/StoreLogisticsService.java @@ -28,6 +28,13 @@ public interface StoreLogisticsService extends IService { */ List getStoreSelectedLogistics(); + /** + * 获取当前店铺已选择的物流公司名称列表 + * + * @return 物流公司列表 + */ + List getStoreSelectedLogisticsName(); + /** * 添加店铺-物流公司 * diff --git a/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java index 230296fc..b9f542ec 100644 --- a/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/system/serviceimpl/StoreLogisticsServiceImpl.java @@ -35,6 +35,11 @@ public class StoreLogisticsServiceImpl extends ServiceImpl getStoreSelectedLogisticsName() { + return this.baseMapper.getSelectedStoreLogisticsName(UserContext.getCurrentUser().getStoreId()); + } + @Override public StoreLogistics add(String logisticsId) { //判断是否已经选择过,如果没有选择则进行添加 diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index 4ca89760..0c034911 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -1,13 +1,18 @@ package cn.lili.controller.trade; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; +import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.service.OrderPriceService; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.system.service.StoreLogisticsService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -15,10 +20,15 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; /** * 店铺端,订单接口 @@ -42,6 +52,11 @@ public class OrderStoreController { */ @Autowired private OrderPriceService orderPriceService; + /** + * 物流公司 + */ + @Autowired + private StoreLogisticsService storeLogisticsService; @ApiOperation(value = "查询订单列表") @GetMapping @@ -121,4 +136,44 @@ public class OrderStoreController { public ResultMessage getTraces(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { return ResultUtil.data(orderService.getTraces(orderSn)); } + + @ApiOperation(value = "下载待发货的订单列表") + @GetMapping(value = "/downLoadDeliverExcel") + public ResultMessage downLoadDeliverExcel(HttpServletResponse response, List orderIds) { + + //获取店铺已经选择物流公司列表 + List logisticsName = storeLogisticsService.getStoreSelectedLogisticsName(); + //下载订单批量发货Excel + this.orderService.getBatchDeliverList(response,orderIds,logisticsName); + + return ResultUtil.success(ResultCode.SUCCESS); + + } + + @ApiOperation(value = "上传文件进行订单批量发货") + @ApiImplicitParam(name = "file", value = "订单列表", required = true, dataType = "file", paramType = "query") + @PutMapping(value = "/batchDeliver") + public void batchDeliver(@RequestParam MultipartFile file) { + InputStream inputStream = null; + try { + inputStream = file.getInputStream(); + // 2.应用HUtool ExcelUtil获取ExcelReader指定输入流和sheet + ExcelReader excelReader = ExcelUtil.getReader(inputStream); + // 可以加上表头验证 + // 3.读取第二行到最后一行数据 + List> read = excelReader.read(1, excelReader.getRowCount()); + List orderBatchDeliverDTOList=new ArrayList<>(); + for (List objects : read) { + OrderBatchDeliverDTO orderBatchDeliverDTO=new OrderBatchDeliverDTO(); + orderBatchDeliverDTO.setOrderSn(objects.get(0).toString()); + orderBatchDeliverDTO.setLogisticsName(objects.get(1).toString()); + orderBatchDeliverDTO.setLogisticsNo(objects.get(2).toString()); + orderBatchDeliverDTOList.add(orderBatchDeliverDTO); + } + orderService.batchDeliver(orderBatchDeliverDTOList); + } catch (Exception e) { + e.printStackTrace(); + } + + } } \ No newline at end of file From c58524cf94c3a350ecac95c9487e21a657045610 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 26 May 2021 18:40:54 +0800 Subject: [PATCH 25/68] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E5=95=86=E5=93=81VO=EF=BC=8C=E6=98=BE=E7=A4=BA=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E5=95=86=E5=93=81=E7=9A=84=E5=BA=93=E5=AD=98=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E5=BA=97=E9=93=BA=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../broadcast/entity/dos/Commodity.java | 2 -- .../broadcast/entity/dto/CommodityDTO.java | 5 +++- .../broadcast/entity/vos/CommodityVO.java | 21 ++++++++++++++ .../broadcast/mapper/CommodityMapper.java | 12 ++++++-- .../broadcast/service/CommodityService.java | 3 +- .../serviceimpl/CommodityServiceImpl.java | 28 +++++++++++-------- .../other/broadcast/CommodityController.java | 3 +- 7 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/vos/CommodityVO.java diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java index 725b2b94..51dab69e 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Commodity.java @@ -61,6 +61,4 @@ public class Commodity extends BaseEntity { @ApiModelProperty(value = "规格ID") private String skuId; - @ApiModelProperty(value = "SKU库存") - private Integer quantity; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java index fb326888..e28e41d3 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dto/CommodityDTO.java @@ -11,9 +11,12 @@ import lombok.Data; */ @Data public class CommodityDTO { - + //商品ID private Integer goods_id; + //商品名称 private String name; + //地址 private String url; + //审核状态 private Integer audit_status; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/CommodityVO.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/CommodityVO.java new file mode 100644 index 00000000..012ac5b0 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/CommodityVO.java @@ -0,0 +1,21 @@ +package cn.lili.modules.broadcast.entity.vos; + +import cn.lili.modules.broadcast.entity.dos.Commodity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 直播商品VO + * + * @author Bulbasaur + * @date: 2021/5/26 6:09 下午 + */ +@Data +public class CommodityVO extends Commodity { + + @ApiModelProperty(value = "SKU库存") + private Integer quantity; + + @ApiModelProperty(value = "店铺名称") + private String storeName; +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java index 621533a9..5083efd7 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java @@ -2,7 +2,12 @@ package cn.lili.modules.broadcast.mapper; import cn.lili.modules.broadcast.entity.dos.Commodity; import cn.lili.modules.broadcast.entity.dto.SimpleCommodity; +import cn.lili.modules.broadcast.entity.vos.CommodityVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @@ -18,10 +23,13 @@ public interface CommodityMapper extends BaseMapper { @Select("SELECT live_goods_id FROM li_commodity WHERE audit_status='0' or audit_status='1'") List getAuditCommodity(); - @Select("SELECT * FROM li_commodity c WINNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") + @Select("SELECT * FROM li_commodity c INNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") List getCommodityByRoomId(Integer roomId); - @Select("SELECT name,goods_image FROM li_commodity c WINNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") + @Select("SELECT name,goods_image FROM li_commodity c INNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") List getSimpleCommodityByRoomId(Integer roomId); + @Select("SELECT c.*,gs.quantity,s.store_name FROM li_commodity c INNER JOIN li_goods_sku gs ON c.sku_id = gs.id INNER JOIN li_store s ON s.id=c.store_id ${ew.customSqlSegment}") + IPage commodityVOList(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java index 8ff14e31..c9161c7b 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/CommodityService.java @@ -2,6 +2,7 @@ package cn.lili.modules.broadcast.service; import cn.lili.common.vo.PageVO; import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.entity.vos.CommodityVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -40,5 +41,5 @@ public interface CommodityService extends IService { * @param auditStatus 审核状态 * @return 直播商品分页 */ - IPage commodityList(PageVO pageVO,String name,String auditStatus); + IPage commodityList(PageVO pageVO, String name, String auditStatus); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index e213bd77..1bc20b88 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -6,10 +6,12 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; +import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.broadcast.entity.dos.Commodity; import cn.lili.modules.broadcast.entity.dto.CommodityDTO; +import cn.lili.modules.broadcast.entity.vos.CommodityVO; import cn.lili.modules.broadcast.mapper.CommodityMapper; import cn.lili.modules.broadcast.service.CommodityService; import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; @@ -17,6 +19,7 @@ import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.service.GoodsSkuService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -55,17 +58,19 @@ public class CommodityServiceImpl extends ServiceImpl().eq(Commodity::getSkuId,commodity.getSkuId()))>0){ - throw new ServiceException(goodsSku.getGoodsName()+" 已添加规格商品,无法重复增加"); + if (this.count(new LambdaQueryWrapper().eq(Commodity::getSkuId, commodity.getSkuId())) > 0) { + throw new ServiceException(goodsSku.getGoodsName() + " 已添加规格商品,无法重复增加"); } } + @Override public boolean deleteCommodity(String goodsId) { JSONObject json = wechatLivePlayerUtil.deleteGoods(goodsId); @@ -94,11 +99,10 @@ public class CommodityServiceImpl extends ServiceImpl commodityList(PageVO pageVO, String name, String auditStatus) { - return this.page(PageUtil.initPage(pageVO), - new LambdaQueryWrapper().like(name!=null,Commodity::getName,name) - .eq(auditStatus!=null,Commodity::getAuditStatus,auditStatus)); + public IPage commodityList(PageVO pageVO, String name, String auditStatus) { + return this.baseMapper.commodityVOList(PageUtil.initPage(pageVO), + new QueryWrapper().like(name != null, "c.name", name) + .eq(auditStatus != null, "c.audit_status", auditStatus) + .eq(UserContext.getCurrentUser().getRole().equals(UserEnums.STORE), "c.store_id", UserContext.getCurrentUser().getStoreId())); } - - } diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java index 5876edf5..14348b5c 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java @@ -6,6 +6,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Commodity; +import cn.lili.modules.broadcast.entity.vos.CommodityVO; import cn.lili.modules.broadcast.service.CommodityService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; @@ -37,7 +38,7 @@ public class CommodityController { @ApiImplicitParam(name = "auditStatus", value = "直播商品状态", dataType = "String", paramType = "query") }) @GetMapping - public ResultMessage> page(String auditStatus, String name, PageVO pageVO) { + public ResultMessage> page(String auditStatus, String name, PageVO pageVO) { return ResultUtil.data(commodityService.commodityList(pageVO, name, auditStatus)); } From 814d118d778b2cf989ac195207e9b3de1c2e8e6c Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 28 May 2021 12:10:33 +0800 Subject: [PATCH 26/68] =?UTF-8?q?=E8=BF=90=E8=90=A5=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=8F=AF=E8=AE=BE=E7=BD=AE=E6=8E=A8=E8=8D=90=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../other/broadcast/StudioController.java | 13 +- .../modules/broadcast/entity/dos/Studio.java | 6 + .../broadcast/service/StudioService.java | 19 +++ .../serviceimpl/CommodityServiceImpl.java | 3 + .../serviceimpl/StudioServiceImpl.java | 32 ++++- .../broadcast/util/WechatLivePlayerUtil.java | 127 +++++++++++------- .../broadcast/CommodityManagerController.java | 41 ++++++ .../broadcast/StudioManagerController.java | 64 +++++++++ ...ler.java => CommodityStoreController.java} | 2 +- ...roller.java => StudioStoreController.java} | 20 ++- 10 files changed, 264 insertions(+), 63 deletions(-) create mode 100644 manager-api/src/main/java/cn/lili/controller/other/broadcast/CommodityManagerController.java create mode 100644 manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java rename seller-api/src/main/java/cn/lili/controller/other/broadcast/{CommodityController.java => CommodityStoreController.java} (98%) rename seller-api/src/main/java/cn/lili/controller/other/broadcast/{StudioController.java => StudioStoreController.java} (84%) diff --git a/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java index 83d96f3b..b0235aa2 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java +++ b/buyer-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java @@ -1,13 +1,14 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultUtil; -import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.service.StudioService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -29,14 +30,18 @@ public class StudioController { private StudioService studioService; @ApiOperation(value = "获取店铺直播间列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "recommend", value = "是否推荐", paramType = "query", dataType = "int"), + @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query", dataType = "String") + }) @GetMapping - public ResultMessage> page(PageVO pageVO) { - return ResultUtil.data(studioService.page(PageUtil.initPage(pageVO))); + public ResultMessage> page(PageVO pageVO, Integer recommend, String status) { + return ResultUtil.data(studioService.studioList(pageVO, recommend, status)); } @ApiOperation(value = "获取店铺直播间回放地址") @GetMapping("/getLiveInfo/{roomId}") - public ResultMessage getLiveInfo(Integer roomId){ + public ResultMessage getLiveInfo(Integer roomId) { return ResultUtil.data(studioService.getLiveInfo(roomId)); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java index c001b41a..2eebe3b5 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/dos/Studio.java @@ -88,4 +88,10 @@ public class Studio extends BaseEntity { @ApiModelProperty(value = "直播间商品(最多展示两个商品:name/goodsImage)") private String roomGoodsList; + + @ApiModelProperty(value = "推荐直播间") + private boolean recommend; + + @ApiModelProperty(value = "直播间状态") + private String status; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java index b1eb0fc4..9e6bba7e 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java @@ -1,7 +1,9 @@ package cn.lili.modules.broadcast.service; +import cn.lili.common.vo.PageVO; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.entity.vos.StudioVO; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -21,6 +23,14 @@ public interface StudioService extends IService { */ Boolean create(Studio studio); + /** + * 修改直播间 + * 直播间默认手机直播 + * @param studio 直播间 + * @return 修改状态 + */ + Boolean edit(Studio studio); + /** * 获取直播间信息 * @param id 直播间ID @@ -50,4 +60,13 @@ public interface StudioService extends IService { * @return 操作结果 */ Boolean goodsDeleteInRoom(Integer roomId,Integer goodsId); + + /** + * 获取直播间列表 + * @param pageVO 分页 + * @param recommend 是否推荐 + * @param status 直播间状态 + * @return 直播间分页 + */ + IPage studioList(PageVO pageVO, Integer recommend, String status); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index 1bc20b88..e2b52023 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -49,6 +49,9 @@ public class CommodityServiceImpl extends ServiceImpl impleme public Boolean create(Studio studio) { try { //创建小程序直播 - Map roomMap=wechatLivePlayerUtil.create(studio); + Map roomMap = wechatLivePlayerUtil.create(studio); studio.setRoomId(Integer.parseInt(roomMap.get("roomId"))); studio.setQrCodeUrl(roomMap.get("qrcodeUrl")); studio.setStoreId(UserContext.getCurrentUser().getStoreId()); @@ -53,6 +57,12 @@ public class StudioServiceImpl extends ServiceImpl impleme } + @Override + public Boolean edit(Studio studio) { + wechatLivePlayerUtil.editRoom(studio); + return this.updateById(studio); + } + @Override public StudioVO getStudioVO(String id) { StudioVO studioVO = new StudioVO(); @@ -86,8 +96,9 @@ public class StudioServiceImpl extends ServiceImpl impleme Studio studio = this.getByRoomId(roomId); studio.setRoomGoodsNum(studio.getRoomGoodsNum() != null ? studio.getRoomGoodsNum() + 1 : 1); //设置直播间默认的商品(前台展示)只展示两个 - if(studio.getRoomGoodsNum()<3){ - studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId)));; + if (studio.getRoomGoodsNum() < 3) { + studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId))); + ; } return this.updateById(studio); } @@ -103,14 +114,23 @@ public class StudioServiceImpl extends ServiceImpl impleme Studio studio = this.getByRoomId(roomId); studio.setRoomGoodsNum(studio.getRoomGoodsNum() - 1); //设置直播间默认的商品(前台展示)只展示两个 - if(studio.getRoomGoodsNum()<3){ - studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId)));; + if (studio.getRoomGoodsNum() < 3) { + studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId))); + ; } return this.updateById(studio); } return false; } + @Override + public IPage studioList(PageVO pageVO, Integer recommend, String status) { + return this.page(PageUtil.initPage(pageVO), new QueryWrapper() + .eq(recommend != null, "recommend", true) + .eq(status!=null,"status",status)); + + } + /** * 根据直播间ID获取直播间 * @@ -118,6 +138,6 @@ public class StudioServiceImpl extends ServiceImpl impleme * @return 直播间 */ private Studio getByRoomId(Integer roomId) { - return this.getOne(this.lambdaQuery().eq(Studio::getRoomId, roomId)); + return this.getOne(new LambdaQueryWrapper().eq(Studio::getRoomId, roomId)); } } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index dda7a1eb..e69f6808 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -1,6 +1,7 @@ package cn.lili.modules.broadcast.util; import cn.hutool.json.JSONObject; +import cn.lili.common.exception.ServiceException; import cn.lili.modules.base.entity.enums.ClientTypeEnum; import cn.lili.modules.broadcast.entity.dos.Commodity; import cn.lili.modules.broadcast.entity.dos.Studio; @@ -36,49 +37,50 @@ public class WechatLivePlayerUtil { * @param studio 小程序直播 * @return 房间ID */ - public Map create(Studio studio) throws Exception{ + public Map create(Studio studio) throws Exception { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=" + token; - - Map map = new HashMap<>(); - // 背景图 - map.put("coverImg", wechatMediaUtil.uploadMedia(token,"image",studio.getCoverImg())); - // 分享图 - map.put("shareImg", wechatMediaUtil.uploadMedia(token,"image",studio.getShareImg())); - // 购物直播频道封面图 - map.put("feedsImg", wechatMediaUtil.uploadMedia(token,"image",studio.getFeedsImg())); - // 直播间名字 - map.put("name", studio.getName()); - // 直播计划开始时间 - map.put("startTime", studio.getStartTime()); - // 直播计划结束时间 - map.put("endTime", studio.getEndTime()); - // 主播昵称 - map.put("anchorName", studio.getAnchorName()); - // 主播微信号 - map.put("anchorWechat", studio.getAnchorWechat()); - // 直播间类型 - map.put("type", "0"); - // 是否关闭点赞 - map.put("closeLike", "0"); - // 是否关闭货架 - map.put("closeGoods", "0"); - // 是否关闭评论 - map.put("closeComment", "0"); - // 直播间名字 - map.put("closeReplay", "0"); - + //添加直播间 + Map map = this.mockRoom(token, studio); String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序直播间创建结果:" + content); - Map roomMap=new HashMap<>(); - roomMap.put("roomId",json.getStr("roomId")); - roomMap.put("qrcodeUrl",json.getStr("qrcode_url")); + if (!json.getStr("errcode").equals("0")) { + throw new ServiceException(json.getStr("errmsg")); + } + Map roomMap = new HashMap<>(); + roomMap.put("roomId", json.getStr("roomId")); + roomMap.put("qrcodeUrl", json.getStr("qrcode_url")); return roomMap; } + /** + * 创建小程序直播间 + * + * @param studio 小程序直播 + * @return 房间ID + */ + public boolean editRoom(Studio studio) { + //获取token + String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); + //发送url + String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/editroom?access_token=" + token; + + //修改直播间 + Map map = this.mockRoom(token, studio); + map.put("id", studio.getRoomId().toString()); + String content = HttpUtils.doPostWithJson(url, map); + JSONObject json = new JSONObject(content); + log.info("微信小程序直播间修改结果:" + content); + if (!json.getStr("errcode").equals("0")) { + throw new ServiceException(json.getStr("errmsg")); + } + return true; + } + + /** * 获取直播间回放 * @@ -118,16 +120,20 @@ public class WechatLivePlayerUtil { //获取token String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url - String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/push?access_token=" + token; - Map map = new HashMap<>(); + String url = "https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=" + token; + Map map = new HashMap<>(); // 直播间回放 - map.put("goodsId", goodsId); + Integer[] ids = {goodsId}; + map.put("ids", ids); // 商品ID map.put("roomId", roomId); String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); - log.info("微信小程序直播间推送商品:" + content); - return json.getStr("errcode").equals("0"); + log.info("直播间导入商品:" + content); + if (!json.getStr("errcode").equals("0")) { + throw new ServiceException(json.getStr("errmsg")); + } + return true; } /** @@ -167,10 +173,10 @@ public class WechatLivePlayerUtil { //新建微信商品DTO GoodsInfo goodsInfo = new GoodsInfo(commodity); //上传微信临时图片 - goodsInfo.setCoverImgUrl(wechatMediaUtil.uploadMedia(token,"image",commodity.getGoodsImage())); - Map map=new HashMap<>(); + goodsInfo.setCoverImgUrl(wechatMediaUtil.uploadMedia(token, "image", commodity.getGoodsImage())); + Map map = new HashMap<>(); //调用新增直播商品接口 - map.put("goodsInfo",goodsInfo); + map.put("goodsInfo", goodsInfo); String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序添加直播商品结果:" + content); @@ -188,8 +194,8 @@ public class WechatLivePlayerUtil { String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=" + token; - Map map=new HashMap<>(); - map.put("goodsId",goodsId); + Map map = new HashMap<>(); + map.put("goodsId", goodsId); String content = HttpUtils.doPostWithJson(url, goodsId); JSONObject json = new JSONObject(content); log.info("微信小程序删除直播商品结果:" + content); @@ -207,12 +213,43 @@ public class WechatLivePlayerUtil { String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=" + token; - Map map=new HashMap<>(); - map.put("goods_ids",goodsIdList); + Map map = new HashMap<>(); + map.put("goods_ids", goodsIdList); String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序查询直播商品结果:" + content); return json; + } + private Map mockRoom(String token, Studio studio) { + Map map = new HashMap<>(); + // 背景图 + map.put("coverImg", wechatMediaUtil.uploadMedia(token, "image", studio.getCoverImg())); + // 分享图 + map.put("shareImg", wechatMediaUtil.uploadMedia(token, "image", studio.getShareImg())); + // 购物直播频道封面图 + map.put("feedsImg", wechatMediaUtil.uploadMedia(token, "image", studio.getFeedsImg())); + // 直播间名字 + map.put("name", studio.getName()); + // 直播计划开始时间 + map.put("startTime", studio.getStartTime()); + // 直播计划结束时间 + map.put("endTime", studio.getEndTime()); + // 主播昵称 + map.put("anchorName", studio.getAnchorName()); + // 主播微信号 + map.put("anchorWechat", studio.getAnchorWechat()); + // 直播间类型 + map.put("type", "0"); + // 是否关闭点赞 + map.put("closeLike", "0"); + // 是否关闭货架 + map.put("closeGoods", "0"); + // 是否关闭评论 + map.put("closeComment", "0"); + // 直播间名字 + map.put("closeReplay", "0"); + + return map; } } diff --git a/manager-api/src/main/java/cn/lili/controller/other/broadcast/CommodityManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/broadcast/CommodityManagerController.java new file mode 100644 index 00000000..7c87b697 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/other/broadcast/CommodityManagerController.java @@ -0,0 +1,41 @@ +package cn.lili.controller.other.broadcast; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.broadcast.entity.vos.CommodityVO; +import cn.lili.modules.broadcast.service.CommodityService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 管理端,直播间管理接口 + * + * @author Bulbasaur + * @date: 2021/5/28 11:56 上午 + */ +@RestController +@Api(tags = "店铺端,直播商品接口") +@RequestMapping("/manager/broadcast/commodity") +public class CommodityManagerController { + + @Autowired + private CommodityService commodityService; + + @ApiOperation(value = "获取店铺直播商品列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "商品名称", dataType = "String", paramType = "query"), + @ApiImplicitParam(name = "auditStatus", value = "直播商品状态", dataType = "String", paramType = "query") + }) + @GetMapping + public ResultMessage> page(String auditStatus, String name, PageVO pageVO) { + return ResultUtil.data(commodityService.commodityList(pageVO, name, auditStatus)); + } +} diff --git a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java new file mode 100644 index 00000000..0856d200 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java @@ -0,0 +1,64 @@ +package cn.lili.controller.other.broadcast; + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.service.StudioService; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 管理端,直播间接口 + * + * @author Bulbasaur + * @date: 2021/5/28 11:56 上午 + */ +@RestController +@Api(tags = "店铺端,直播商品接口") +@RequestMapping("/manager/broadcast/studio") +public class StudioManagerController { + + @Autowired + private StudioService studioService; + + @ApiOperation(value = "获取店铺直播间列表") + @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query", dataType = "String") + @GetMapping + public ResultMessage> page(PageVO pageVO, String status) { + return ResultUtil.data(studioService.studioList(pageVO, null, status)); + } + + @ApiOperation(value = "获取店铺直播间详情") + @ApiImplicitParam(name = "studioId", value = "直播间ID", required = true, dataType = "String", paramType = "path") + @GetMapping("/studioInfo/{studioId}") + public ResultMessage studioInfo(@PathVariable String studioId) { + return ResultUtil.data(studioService.getById(studioId)); + } + + @ApiOperation(value = "是否推荐直播间") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "Id", required = true, dataType = "String", paramType = "path"), + @ApiImplicitParam(name = "recommend", value = "是否推荐", required = true, dataType = "boolean", paramType = "path") + }) + @GetMapping("/id/{studioId}") + public ResultMessage recommend(@PathVariable String id, @PathVariable boolean recommend) { + if (studioService.update(new UpdateWrapper() + .eq("id", id) + .set("recommend", recommend))) { + return ResultUtil.success(); + } + throw new ServiceException(ResultCode.ERROR); + } +} diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityStoreController.java similarity index 98% rename from seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java rename to seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityStoreController.java index 14348b5c..30cbb04b 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/CommodityStoreController.java @@ -27,7 +27,7 @@ import java.util.List; @RestController @Api(tags = "店铺端,直播商品接口") @RequestMapping("/store/broadcast/commodity") -public class CommodityController { +public class CommodityStoreController { @Autowired private CommodityService commodityService; diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java similarity index 84% rename from seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java rename to seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java index ff3d0a57..bd8301ae 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java @@ -3,12 +3,10 @@ package cn.lili.controller.other.broadcast; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; -import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.service.StudioService; -import cn.lili.modules.message.util.WechatAccessTokenUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -28,17 +26,16 @@ import org.springframework.web.bind.annotation.*; @RestController @Api(tags = "店铺端,直播间接口") @RequestMapping("/store/broadcast/studio") -public class StudioController { +public class StudioStoreController { @Autowired private StudioService studioService; - @Autowired - private WechatAccessTokenUtil wechatAccessTokenUtil; @ApiOperation(value = "获取店铺直播间列表") + @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query", dataType = "String") @GetMapping - public ResultMessage> page(PageVO pageVO) { - return ResultUtil.data(studioService.page(PageUtil.initPage(pageVO))); + public ResultMessage> page(PageVO pageVO, String status) { + return ResultUtil.data(studioService.studioList(pageVO, null, status)); } @ApiOperation(value = "获取店铺直播间详情") @@ -57,6 +54,15 @@ public class StudioController { throw new ServiceException(ResultCode.ERROR); } + @ApiOperation(value = "修改直播间") + @PutMapping("/edit") + public ResultMessage edit(@Validated Studio studio) { + if (studioService.edit(studio)) { + return ResultUtil.success(ResultCode.SUCCESS); + } + throw new ServiceException(ResultCode.ERROR); + } + @ApiOperation(value = "店铺直播间添加商品") @ApiImplicitParams({ @ApiImplicitParam(name = "roomId", value = "房间ID", required = true, dataType = "Integer", paramType = "path"), From 969437fc349141c25eb7778bda8f582d82233cc2 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 28 May 2021 17:43:55 +0800 Subject: [PATCH 27/68] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=95=86=E5=93=81?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=EF=BC=9A=E5=AE=9E=E7=89=A9=E5=95=86=E5=93=81?= =?UTF-8?q?=E3=80=81=E8=99=9A=E6=8B=9F=E5=95=86=E5=93=81=E3=80=81=E7=94=B5?= =?UTF-8?q?=E5=AD=90=E5=8D=A1=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buyer-api/src/main/resources/application.yml | 1 + config/application.yml | 1 + .../lili/modules/goods/entity/dos/Goods.java | 8 +- .../goods/entity/dto/GoodsOperationDTO.java | 8 +- .../goods/entity/dto/GoodsSearchParams.java | 10 ++ .../goods/entity/enums/GoodsFreightEnum.java | 28 ----- .../goods/entity/enums/GoodsTypeEnum.java | 29 +++++ .../goods/serviceimpl/GoodsServiceImpl.java | 108 ++++++++++-------- .../modules/order/order/entity/dos/Order.java | 2 +- .../order/order/entity/dos/OrderItem.java | 11 ++ .../order/serviceimpl/OrderServiceImpl.java | 8 +- .../store/entity/vos/StoreBasicInfoVO.java | 2 +- 12 files changed, 133 insertions(+), 83 deletions(-) delete mode 100644 framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsFreightEnum.java create mode 100644 framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsTypeEnum.java diff --git a/buyer-api/src/main/resources/application.yml b/buyer-api/src/main/resources/application.yml index fa22d1d5..6de333af 100644 --- a/buyer-api/src/main/resources/application.yml +++ b/buyer-api/src/main/resources/application.yml @@ -150,6 +150,7 @@ ignored: - /buyer/memberEvaluation/**/goodsEvaluation - /buyer/memberEvaluation/**/evaluationNumber - /buyer/appVersion/** + - /buyer/broadcast/studio - /druid/** - /swagger-ui.html - /doc.html diff --git a/config/application.yml b/config/application.yml index 38c732bd..740082ce 100644 --- a/config/application.yml +++ b/config/application.yml @@ -147,6 +147,7 @@ ignored: - /buyer/memberEvaluation/**/goodsEvaluation - /buyer/memberEvaluation/**/evaluationNumber - /buyer/appVersion/** + - /buyer/broadcast/studio/** - /store/login/** - /manager/user/login - /manager/user/refresh/** diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java index c7ba9d46..7ed91670 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java @@ -182,6 +182,12 @@ public class Goods extends BaseEntity { @ApiModelProperty(value = "销售模式", required = true) private String salesModel; + /** + * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum + */ + @ApiModelProperty(value = "商品类型", required = true) + private String goodsType; + public Goods() { } @@ -203,6 +209,6 @@ public class Goods extends BaseEntity { this.cost = goodsOperationDTO.getCost(); //如果立即上架则 this.marketEnable = goodsOperationDTO.isRelease() ? GoodsStatusEnum.UPPER.name() : GoodsStatusEnum.DOWN.name(); - + this.goodsType=goodsOperationDTO.getGoodsType(); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java index 9e518082..40845f9a 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.Map; /** - * 商品查询条件 + * 商品编辑DTO * * @author pikachu * @date 2020-02-24 19:27:20 @@ -118,4 +118,10 @@ public class GoodsOperationDTO implements Serializable { @ApiModelProperty(value = "是否重新生成sku数据") private Boolean regeneratorSkuFlag = true; + + /** + * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum + */ + @ApiModelProperty(value = "商品类型") + private String goodsType; } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java index 6edfcb6b..346a913e 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java @@ -67,6 +67,12 @@ public class GoodsSearchParams extends PageVO { @ApiModelProperty(value = "是否为推荐商品") private Boolean recommend; + /** + * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum + */ + @ApiModelProperty(value = "商品类型") + private String goodsType; + public QueryWrapper queryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotEmpty(goodsId)) { @@ -108,6 +114,10 @@ public class GoodsSearchParams extends PageVO { if (recommend != null) { queryWrapper.le("recommend", recommend); } + if (goodsType != null) { + queryWrapper.eq("goods_type", goodsType); + } + queryWrapper.eq("delete_flag", false); this.betweenWrapper(queryWrapper); return queryWrapper; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsFreightEnum.java b/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsFreightEnum.java deleted file mode 100644 index c89a56c2..00000000 --- a/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsFreightEnum.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.lili.modules.goods.entity.enums; - -/** - * 商品运费承担者 - * - * @author pikachu - * @date 2020-02-26 23:24:13 - */ -public enum GoodsFreightEnum { - /** - * 买家承担运费 - */ - BUYER("买家承担运费"), - /** - * 卖家承担运费 - */ - STORE("卖家承担运费"); - - private final String description; - - GoodsFreightEnum(String description) { - this.description = description; - } - - public String description() { - return description; - } -} diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsTypeEnum.java b/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsTypeEnum.java new file mode 100644 index 00000000..db55d23e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsTypeEnum.java @@ -0,0 +1,29 @@ +package cn.lili.modules.goods.entity.enums; + +/** + * 商品类型 + * + * @author Bulbasaur + * @date: 2021/5/28 4:23 下午 + */ +public enum GoodsTypeEnum { + + + PHYSICAL_GOODS("实物商品"), + + VIRTUAL_GOODS("虚拟商品"), + + E_COUPON("电子卡券"); + + + private final String description; + + GoodsTypeEnum(String description) { + this.description = description; + } + + public String description() { + return description; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index 6f25a75b..8ffc0aa2 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -101,41 +101,19 @@ public class GoodsServiceImpl extends ServiceImpl implements @Override public void addGoods(GoodsOperationDTO goodsOperationDTO) { - Goods goods = new Goods(goodsOperationDTO); - - //判定商品是否需要审核 - this.checkNeedAuth(goods); - + //检查商品 + this.checkGoods(goods); // 向goods加入图片 this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods); - - //商品添加卖家信息 - StoreVO storeDetail = this.storeService.getStoreDetail(); - goods.setStoreId(storeDetail.getId()); - goods.setStoreName(storeDetail.getStoreName()); - if (storeDetail.getSelfOperated() != null) { - goods.setSelfOperated(storeDetail.getSelfOperated()); - } - // 评论次数 - goods.setCommentNum(0); - // 购买次数 - goods.setBuyCount(0); - // 购买次数 - goods.setQuantity(0); - // 商品评分 - goods.setGrade(100.0); - + //添加商品 this.save(goods); - // 添加商品参数 if (goodsOperationDTO.getGoodsParamsList() != null && !goodsOperationDTO.getGoodsParamsList().isEmpty()) { this.goodsParamsService.addParams(goodsOperationDTO.getGoodsParamsList(), goods.getId()); } - // 添加商品sku信息 this.goodsSkuService.add(goodsOperationDTO.getSkuList(), goods); - // 添加相册 if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) { this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId()); @@ -145,35 +123,25 @@ public class GoodsServiceImpl extends ServiceImpl implements @Override public void editGoods(GoodsOperationDTO goodsOperationDTO, String goodsId) { - this.checkExist(goodsId); Goods goods = new Goods(goodsOperationDTO); goods.setId(goodsId); - - //是否需要审核 - this.checkNeedAuth(goods); - + //检查商品信息 + this.checkGoods(goods); // 向goods加入图片 this.setGoodsGalleryParam(goodsOperationDTO.getGoodsGalleryList().get(0), goods); - - //商品添加卖家信息 - StoreVO storeDetail = this.storeService.getStoreDetail(); - if (storeDetail.getSelfOperated() != null) { - goods.setSelfOperated(storeDetail.getSelfOperated()); - } - goods.setStoreId(storeDetail.getId()); - goods.setStoreName(storeDetail.getStoreName()); - //修改商品 this.updateById(goods); - // 添加商品参数 - this.goodsParamsService.addParams(goodsOperationDTO.getGoodsParamsList(), goods.getId()); - - //修改商品规格 + if (goodsOperationDTO.getGoodsParamsList() != null && !goodsOperationDTO.getGoodsParamsList().isEmpty()) { + this.goodsParamsService.addParams(goodsOperationDTO.getGoodsParamsList(), goods.getId()); + } + //修改商品sku信息 this.goodsSkuService.update(goodsOperationDTO.getSkuList(), goods, goodsOperationDTO.getRegeneratorSkuFlag()); - // 添加相册 - this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId()); + if (goodsOperationDTO.getGoodsGalleryList() != null && !goodsOperationDTO.getGoodsGalleryList().isEmpty()) { + this.goodsGalleryService.add(goodsOperationDTO.getGoodsGalleryList(), goods.getId()); + } + } @Override @@ -353,16 +321,62 @@ public class GoodsServiceImpl extends ServiceImpl implements } /** - * 商品是否需要审核 + * 检查商品信息 + * 如果商品是虚拟商品则无需配置配送模板 + * 如果商品是实物商品需要配置配送模板 + * 判断商品是否存在 + * 判断商品是否需要审核 + * 判断当前用户是否为店铺 * * @param goods 商品 */ - private void checkNeedAuth(Goods goods) { + private void checkGoods(Goods goods) { + //判断商品类型 + switch (goods.getGoodsType()) { + case "PHYSICAL_GOODS": + if (goods.getTemplateId() == null) { + throw new ServiceException("实物商品需选择配送模板"); + } + break; + case "VIRTUAL_GOODS": + if (goods.getTemplateId() != null) { + throw new ServiceException("虚拟商品不需要选择配送模板"); + } + break; + default: + throw new ServiceException("需选择商品类型"); + } + //检查商品是否存在--修改商品时使用 + if (goods.getId() != null) { + this.checkExist(goods.getId()); + } else { + // 评论次数 + goods.setCommentNum(0); + // 购买次数 + goods.setBuyCount(0); + // 购买次数 + goods.setQuantity(0); + // 商品评分 + goods.setGrade(100.0); + } + //获取商品系统配置决定是否审核 Setting setting = settingService.get(SettingEnum.GOODS_SETTING.name()); GoodsSetting goodsSetting = JSONUtil.toBean(setting.getSettingValue(), GoodsSetting.class); //是否需要审核 goods.setIsAuth(Boolean.TRUE.equals(goodsSetting.getGoodsCheck()) ? GoodsAuthEnum.TOBEAUDITED.name() : GoodsAuthEnum.PASS.name()); + //判断当前用户是否为店铺 + if (UserContext.getCurrentUser().getRole().equals(UserEnums.STORE)) { + StoreVO storeDetail = this.storeService.getStoreDetail(); + if (storeDetail.getSelfOperated() != null) { + goods.setSelfOperated(storeDetail.getSelfOperated()); + } + goods.setStoreId(storeDetail.getId()); + goods.setStoreName(storeDetail.getStoreName()); + goods.setSelfOperated(storeDetail.getSelfOperated()); + } else { + throw new ServiceException("当前未登录店铺"); + } } /** diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 9aa5d281..917a5baa 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -184,7 +184,7 @@ public class Order extends BaseEntity { private Boolean canReturn; @ApiModelProperty(value = "提货码") - private String qrCode; + private String verificationCode; @ApiModelProperty(value = "分销员ID") private String distributionId; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java index cd59e1b5..0ef83e44 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/OrderItem.java @@ -56,27 +56,38 @@ public class OrderItem extends BaseEntity { @ApiModelProperty(value = "商品ID") private String goodsId; + @ApiModelProperty(value = "货品ID") private String skuId; + @ApiModelProperty(value = "销售量") private Integer num; + @ApiModelProperty(value = "交易编号") private String tradeSn; + @ApiModelProperty(value = "图片") private String image; + @ApiModelProperty(value = "商品名称") private String goodsName; + @ApiModelProperty(value = "分类ID") private String categoryId; + @ApiModelProperty(value = "快照id") private String snapshotId; + @ApiModelProperty(value = "规格json") @Column(columnDefinition = "TEXT") private String specs; + @ApiModelProperty(value = "促销类型") private String promotionType; + @ApiModelProperty(value = "促销id") private String promotionId; + @ApiModelProperty(value = "销售金额") private Double goodsPrice; diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 7d5869da..5ec15a54 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -282,7 +282,7 @@ public class OrderServiceImpl extends ServiceImpl implements //填写提货码 String code = CommonUtil.getRandomNum(); orderLambdaUpdateWrapper.eq(Order::getSn, orderSn); - orderLambdaUpdateWrapper.set(Order::getQrCode, code); + orderLambdaUpdateWrapper.set(Order::getVerificationCode, code); orderLambdaUpdateWrapper.set(Order::getOrderStatus, OrderStatusEnum.TAKE.name()); orderLambdaUpdateWrapper.set(Order::getCanReturn, !PaymentMethodEnum.BANK_TRANSFER.name().equals(order.getPaymentMethod())); @@ -395,8 +395,8 @@ public class OrderServiceImpl extends ServiceImpl implements } @Override - @OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#qrCode+']'", orderSn = "#orderSn") - public Order take(String orderSn, String qrCode) { + @OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#verificationCode+']'", orderSn = "#orderSn") + public Order take(String orderSn, String verificationCode) { //是否可以查询到订单 Order order = OperationalJudgment.judgment(this.getBySn(orderSn)); //判断是否为虚拟订单 @@ -406,7 +406,7 @@ public class OrderServiceImpl extends ServiceImpl implements //判断虚拟订单状态 if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) { //判断提货码是否正确\修改订单状态 - if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()) && qrCode.equals(order.getQrCode())) { + if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()) && verificationCode.equals(order.getVerificationCode())) { order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); this.updateById(order); diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java index af85fc2b..7d54992f 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java @@ -14,7 +14,7 @@ import lombok.Data; public class StoreBasicInfoVO { @ApiModelProperty(value = "店铺ID") - private Long storeId; + private String storeId; @ApiModelProperty(value = "店铺名称") private String storeName; From e5d42078398220459453c86da87a73df33f51873 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 29 May 2021 11:37:55 +0800 Subject: [PATCH 28/68] =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=95=86=E5=93=81?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=9B=E5=BB=BA=E6=A0=B8=E9=AA=8C=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/DistributionOrderExecute.java | 4 +- .../cn/lili/event/impl/PaymentExecute.java | 5 - .../lili/event/impl/StockUpdateExecute.java | 2 - .../event/impl/VerificationOrderExecute.java | 34 +++ .../order/cart/entity/dto/StoreRemarkDTO.java | 2 +- .../order/cart/entity/dto/TradeDTO.java | 6 +- .../order/cart/entity/enums/CartTypeEnum.java | 4 + .../modules/order/cart/entity/vo/CartVO.java | 6 +- .../modules/order/order/entity/dos/Order.java | 89 +++---- .../entity/enums/OrderPromotionTypeEnum.java | 24 ++ .../order/entity/enums/OrderTypeEnum.java | 2 +- .../order/order/entity/vo/AllowOperation.java | 4 +- .../order/order/entity/vo/OrderVO.java | 7 + .../order/serviceimpl/OrderServiceImpl.java | 233 +++++++++++------- .../order/serviceimpl/TradeServiceImpl.java | 2 + 15 files changed, 257 insertions(+), 167 deletions(-) create mode 100644 consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java diff --git a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java index 685b3289..fefac047 100644 --- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java @@ -15,6 +15,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * 分销订单入库 * @@ -28,7 +30,7 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa @Autowired private DistributionOrderService distributionOrderService; //分销订单持久层 - @Autowired + @Resource private DistributionOrderMapper distributionOrderMapper; diff --git a/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java b/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java index 1fa2566c..c51b180d 100644 --- a/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/PaymentExecute.java @@ -10,8 +10,6 @@ import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.kit.Payment; import cn.lili.modules.payment.kit.enums.PaymentMethodEnum; -import cn.lili.modules.payment.service.PaymentService; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,9 +22,6 @@ import org.springframework.stereotype.Service; @Service public class PaymentExecute implements OrderStatusChangeEvent { - //支付日志 - @Autowired - private PaymentService paymentService; //订单 @Autowired private OrderService orderService; diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index aa226c27..00ce1024 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -52,7 +52,6 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { switch (orderMessage.getNewStatus()) { case PAID: { - OrderDetailVO order = orderService.queryDetail(orderMessage.getOrderSn()); //库存key 和 扣减数量 List keys = new ArrayList<>(); @@ -78,7 +77,6 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { break; } case CANCELLED: { - OrderDetailVO order = orderService.queryDetail(orderMessage.getOrderSn()); if (order.getOrder().getPayStatus().equals(PayStatusEnum.PAID.name())) { for (OrderItem orderItem : order.getOrderItems()) { diff --git a/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java new file mode 100644 index 00000000..22526529 --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java @@ -0,0 +1,34 @@ +package cn.lili.event.impl; + +import cn.lili.common.utils.CommonUtil; +import cn.lili.event.OrderStatusChangeEvent; +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderMessage; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.service.OrderService; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 虚拟商品 + * @author Bulbasaur + * @date: 2021/5/29 9:17 上午 + * + */ +@Component +public class VerificationOrderExecute implements OrderStatusChangeEvent { + + @Autowired + private OrderService orderService; + @Override + public void orderChange(OrderMessage orderMessage) { + //订单状态为待核验,添加订单添加核验码 + if(orderMessage.getNewStatus().equals(OrderStatusEnum.TAKE)) { + String code = CommonUtil.getRandomNum(); + orderService.update(new LambdaUpdateWrapper() + .set(Order::getVerificationCode, code) + .eq(Order::getSn, orderMessage.getOrderSn())); + } + } +} diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/StoreRemarkDTO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/StoreRemarkDTO.java index f9d2d981..a51f7460 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/StoreRemarkDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/StoreRemarkDTO.java @@ -15,7 +15,7 @@ import java.io.Serializable; public class StoreRemarkDTO implements Serializable { private static final long serialVersionUID = -6793274046513576434L; - @ApiModelProperty(value = "商家id") + @ApiModelProperty(value = "店铺id") private String storeId; @ApiModelProperty(value = "备注") diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java index 2781aacd..2b50795c 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/dto/TradeDTO.java @@ -65,14 +65,12 @@ public class TradeDTO implements Serializable { /** * key 为商家id * value 为商家优惠券 - * 商家优惠券 + * 店铺优惠券 */ private Map storeCoupons; /** - * key 为商家id - * value 为商家优惠券 - * 商家优惠券 + * 店铺备注 */ private List storeRemark; diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java index 054f5e1c..998da240 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java @@ -24,5 +24,9 @@ public enum CartTypeEnum { * 积分 */ POINTS, + /** + * 虚拟商品 + */ + FICTITIOUS; } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java index 20713c8e..5906b4fb 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartVO.java @@ -5,6 +5,7 @@ import cn.lili.modules.promotion.entity.dos.MemberCoupon; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.ArrayList; @@ -19,6 +20,7 @@ import java.util.List; */ @Data @ApiModel(description = "购物车") +@NoArgsConstructor public class CartVO extends CartBase implements Serializable { private static final long serialVersionUID = -5651775413457562422L; @@ -44,7 +46,6 @@ public class CartVO extends CartBase implements Serializable { @ApiModelProperty(value = "使用的优惠券列表") private List couponList; - @ApiModelProperty(value = "赠品列表") private List giftList; @@ -72,9 +73,6 @@ public class CartVO extends CartBase implements Serializable { @ApiModelProperty(value = "已参与的的促销活动提示,直接展示给客户") private String promotionNotice; - public CartVO() { - } - public CartVO(CartSkuVO cartSkuVO) { this.setStoreId(cartSkuVO.getStoreId()); this.setStoreName(cartSkuVO.getStoreName()); diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 917a5baa..0aa85356 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -4,27 +4,23 @@ import cn.hutool.json.JSONUtil; import cn.lili.base.BaseEntity; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.base.entity.enums.ClientTypeEnum; -import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; -import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; -import cn.lili.modules.order.order.entity.enums.DeliverStatusEnum; -import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; -import cn.lili.modules.order.order.entity.enums.PayStatusEnum; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; +import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.cart.entity.vo.CartVO; +import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; +import cn.lili.modules.order.order.entity.enums.*; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.NoArgsConstructor; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.Date; -import java.util.Optional; /** * 订单 @@ -37,6 +33,7 @@ import java.util.Optional; @Table(name = "li_order") @TableName("li_order") @ApiModel(value = "订单") +@NoArgsConstructor public class Order extends BaseEntity { @@ -176,6 +173,12 @@ public class Order extends BaseEntity { @ApiModelProperty(value = "订单类型") private String orderType; + /** + * @see OrderPromotionTypeEnum + */ + @ApiModelProperty(value = "订单促销类型") + private String orderPromotionType; + @Column(columnDefinition = "TEXT") @ApiModelProperty(value = "价格详情") private String priceDetail; @@ -195,62 +198,38 @@ public class Order extends BaseEntity { @ApiModelProperty(value = "使用的平台会员优惠券id") private String usePlatformMemberCouponId; - public Order() { - - } - + /** + * 构建订单 + * + * @param cartVO 购物车VO + * @param tradeDTO 交易DTO + */ public Order(CartVO cartVO, TradeDTO tradeDTO) { - String oldId = this.getId(); + String orderId = this.getId(); BeanUtil.copyProperties(tradeDTO, this); BeanUtil.copyProperties(cartVO.getPriceDetailDTO(), this); BeanUtil.copyProperties(cartVO, this); - this.setId(oldId); - //循环购物车列表判断是否为促销订单 - this.setOrderType(OrderTypeEnum.NORMAL.name()); - //促销信息填充 - if (cartVO.getSkuList().get(0).getPromotions() != null) { - //判断是否为拼团订单 - Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); - if (pintuanId.isPresent()) { - this.setOrderType(OrderTypeEnum.PINTUAN.name()); - if (tradeDTO.getParentOrderSn() == null) { - this.setParentOrderSn(""); - } - } - //判断是否为积分订单 - Optional pointGoodsId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.POINTS_GOODS.name())).map(PromotionGoods::getPromotionId).findFirst(); - if (pointGoodsId.isPresent()) { - this.setOrderType(OrderTypeEnum.POINT.name()); - if (tradeDTO.getParentOrderSn() == null) { - this.setParentOrderSn(""); - } - } - }else{ + + //订单类型判断--普通订单,活动订单。 + if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.CART) || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.BUY_NOW)) { this.setOrderType(OrderTypeEnum.NORMAL.name()); + } else { + this.setOrderType(tradeDTO.getCartTypeEnum().name()); } //设定订单默认状态 + this.setId(orderId); this.setOrderStatus(OrderStatusEnum.UNPAID.name()); this.setPayStatus(PayStatusEnum.UNPAID.name()); this.setDeliverStatus(DeliverStatusEnum.UNDELIVERED.name()); - //填充订单收件人信息 + this.setTradeSn(tradeDTO.getSn()); + this.setRemark(cartVO.getRemark()); + this.setFreightPrice(tradeDTO.getPriceDetailDTO().getFreightPrice()); + //会员收件信息 this.setConsigneeAddressIdPath(tradeDTO.getMemberAddress().getConsigneeAddressIdPath()); this.setConsigneeAddressPath(tradeDTO.getMemberAddress().getConsigneeAddressPath()); this.setConsigneeDetail(tradeDTO.getMemberAddress().getDetail()); this.setConsigneeMobile(tradeDTO.getMemberAddress().getMobile()); this.setConsigneeName(tradeDTO.getMemberAddress().getName()); - //判断是否使用平台优惠券 - if (tradeDTO.getPlatformCoupon() != null) { - this.setUsePlatformMemberCouponId(tradeDTO.getPlatformCoupon().getMemberCoupon().getId()); - } - //判断是否使用店铺优惠券 - //如果有收货地址,才记录收货地址 - if (tradeDTO.getMemberAddress() != null) { - this.setConsigneeAddressIdPath(tradeDTO.getMemberAddress().getConsigneeAddressIdPath()); - this.setConsigneeAddressPath(tradeDTO.getMemberAddress().getConsigneeAddressPath()); - this.setConsigneeDetail(tradeDTO.getMemberAddress().getDetail()); - this.setConsigneeMobile(tradeDTO.getMemberAddress().getMobile()); - this.setConsigneeName(tradeDTO.getMemberAddress().getName()); - } //平台优惠券判定 if (tradeDTO.getPlatformCoupon() != null) { this.setUsePlatformMemberCouponId(tradeDTO.getPlatformCoupon().getMemberCoupon().getId()); @@ -263,18 +242,10 @@ public class Order extends BaseEntity { } this.setUseStoreMemberCouponIds(storeCouponIds.toString()); } - this.setTradeSn(tradeDTO.getSn()); - this.setRemark(cartVO.getRemark()); - this.setFreightPrice(tradeDTO.getPriceDetailDTO().getFreightPrice()); } public PriceDetailDTO getPriceDetailDTO() { - - try { - return JSONUtil.toBean(priceDetail, PriceDetailDTO.class); - } catch (Exception e) { - return null; - } + return JSONUtil.toBean(priceDetail, PriceDetailDTO.class); } public void setPriceDetailDTO(PriceDetailDTO priceDetail) { diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java new file mode 100644 index 00000000..ac06e73c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java @@ -0,0 +1,24 @@ +package cn.lili.modules.order.order.entity.enums; + +/** + * 订单促销类型枚举 + * + * @author Chopper + * @date 2020/11/17 7:28 下午 + */ +public enum OrderPromotionTypeEnum { + + /** + * 赠品订单 + */ + GIFT, + /** + * 拼团订单 + */ + PINTUAN, + /** + * 积分订单 + */ + POINT + +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java index 8b9d6e6b..4f81bbfb 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java @@ -21,7 +21,7 @@ public enum OrderTypeEnum { /** * 虚拟订单 */ - FICTITIOUS, + VIRTUAL, /** * 拼团订单 */ diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java index 1a00f5d1..dd8a1e9a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/AllowOperation.java @@ -81,7 +81,7 @@ public class AllowOperation implements Serializable { //是否允许查看物流信息 this.showLogistics = order.getDeliverStatus().equals(DeliverStatusEnum.DELIVERED.name()) && status.equals(OrderStatusEnum.DELIVERED.name()); - this.take = order.getOrderType().equals(OrderTypeEnum.FICTITIOUS.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()); + this.take = order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()); } /** @@ -119,7 +119,7 @@ public class AllowOperation implements Serializable { //是否允许查看物流信息 this.showLogistics = order.getDeliverStatus().equals(DeliverStatusEnum.DELIVERED.name()) && status.equals(OrderStatusEnum.DELIVERED.name()); - this.take = order.getOrderType().equals(OrderTypeEnum.FICTITIOUS.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()); + this.take = order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderVO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderVO.java index b04687bf..f6845095 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderVO.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/vo/OrderVO.java @@ -1,9 +1,11 @@ package cn.lili.modules.order.order.entity.vo; +import cn.hutool.core.bean.BeanUtil; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @@ -14,6 +16,7 @@ import java.util.List; * @date 2020/11/28 11:38 */ @Data +@NoArgsConstructor public class OrderVO extends Order { @@ -23,4 +26,8 @@ public class OrderVO extends Order { private List orderItems; + public OrderVO (Order order,List orderItems){ + BeanUtil.copyProperties(order, this); + this.setOrderItems(orderItems); + } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 5ec15a54..b2d76c6a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -21,7 +21,10 @@ import cn.lili.common.security.enums.UserEnums; import cn.lili.common.trigger.interfaces.TimeTrigger; import cn.lili.common.trigger.model.TimeExecuteConstant; import cn.lili.common.trigger.model.TimeTriggerMsg; -import cn.lili.common.utils.*; +import cn.lili.common.utils.OperationalJudgment; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.utils.SnowFlake; +import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.config.rocketmq.RocketmqCustomProperties; import cn.lili.modules.goods.entity.dos.GoodsSku; @@ -126,38 +129,40 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public void intoDB(TradeDTO tradeDTO) { + //检查TradeDTO信息 + checkTradeDTO(tradeDTO); + //订单列表 List orders = new ArrayList<>(tradeDTO.getCartList().size()); + //订单日志 + List orderLogs = new ArrayList<>(tradeDTO.getCartList().size()); + //订单VO列表 + List OrderVOList = new ArrayList<>(tradeDTO.getCartList().size()); + //订单货物列表 List orderItems = new ArrayList<>(); - List orderLogs = new ArrayList<>(); - if (tradeDTO.getParentOrderSn() != null) { - Order parentOrder = this.getBySn(tradeDTO.getParentOrderSn()); - if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { - throw new ServiceException("不能参与自己发起的拼团活动!"); - } - } - List list = new ArrayList<>(); + //循环交易货物列表,新增订单 tradeDTO.getCartList().forEach(item -> { + //构建订单 Order order = new Order(item, tradeDTO); - if (OrderTypeEnum.PINTUAN.name().equals(order.getOrderType())) { - Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && order.getGoodsNum() > limitNum) { - throw new ServiceException("购买数量超过拼团活动限制数量"); - } - } - //构建orderVO对象 - OrderVO orderVO = new OrderVO(); - BeanUtil.copyProperties(order, orderVO); + //检查订单信息 + checkOrder(order); + //新建订单 orders.add(order); - String message = "订单[" + item.getSn() + "]创建"; - orderLogs.add(new OrderLog(item.getSn(), UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), UserContext.getCurrentUser().getUsername(), message)); + //记录订单日志 + orderLogs.add(new OrderLog(item.getSn(), + UserContext.getCurrentUser().getId(), + UserContext.getCurrentUser().getRole().getRole(), + UserContext.getCurrentUser().getUsername(), "订单[" + item.getSn() + "]创建")); + + //添加订单货物 item.getSkuList().forEach( sku -> orderItems.add(new OrderItem(sku, item, tradeDTO)) ); - orderVO.setOrderItems(orderItems); - list.add(orderVO); + + //构建orderVO对象 + OrderVO orderVO = new OrderVO(order, orderItems); + OrderVOList.add(orderVO); }); - tradeDTO.setOrderVO(list); + tradeDTO.setOrderVO(OrderVOList); //批量保存订单 this.saveBatch(orders); //批量保存 子订单 @@ -165,6 +170,7 @@ public class OrderServiceImpl extends ServiceImpl implements // 批量记录订单操作日志 orderLogService.saveBatch(orderLogs); // 赠品根据店铺单独生成订单 + //todo 优化赠品订单代码逻辑 this.generatorGiftOrder(tradeDTO); } @@ -275,62 +281,18 @@ public class OrderServiceImpl extends ServiceImpl implements @OrderLogPoint(description = "'库存确认'", orderSn = "#orderSn") public void afterOrderConfirm(String orderSn) { Order order = this.getBySn(orderSn); - LambdaUpdateWrapper orderLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - - //如果为虚拟订单-修改订单状态为待核验 - if (order.getOrderType().equals(OrderTypeEnum.FICTITIOUS.name())) { - //填写提货码 - String code = CommonUtil.getRandomNum(); - orderLambdaUpdateWrapper.eq(Order::getSn, orderSn); - orderLambdaUpdateWrapper.set(Order::getVerificationCode, code); - orderLambdaUpdateWrapper.set(Order::getOrderStatus, OrderStatusEnum.TAKE.name()); - orderLambdaUpdateWrapper.set(Order::getCanReturn, !PaymentMethodEnum.BANK_TRANSFER.name().equals(order.getPaymentMethod())); - - this.update(orderLambdaUpdateWrapper); - - OrderMessage orderMessage = new OrderMessage(); - orderMessage.setNewStatus(OrderStatusEnum.TAKE); - orderMessage.setOrderSn(order.getSn()); - this.sendUpdateStatusMessage(orderMessage); - } - //如果为商品订单-修改订单状态为待发货 - else { - orderLambdaUpdateWrapper.eq(Order::getSn, orderSn); - //拼团订单 - if (order.getOrderType().equals(OrderTypeEnum.PINTUAN.name()) && order.getPromotionId() != null) { - //校验拼团是否成团 对拼团结果进行处理 - this.checkPintuanOrder(order.getPromotionId(), order.getParentOrderSn()); + //判断是否为拼团订单,进行特殊处理 + //判断订单类型进行不同的订单确认操作 + if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.PINTUAN.name())) { + this.checkPintuanOrder(order.getPromotionId(), order.getParentOrderSn()); + } else { + //判断订单类型 + if (order.getOrderType().equals(OrderTypeEnum.NORMAL.name())) { + normalOrderConfirm(orderSn); } else { - //普通订单直接修改为代发货状态 - orderLambdaUpdateWrapper.set(Order::getOrderStatus, OrderStatusEnum.UNDELIVERED.name()); - orderLambdaUpdateWrapper.set(Order::getCanReturn, !PaymentMethodEnum.BANK_TRANSFER.name().equals(order.getPaymentMethod())); - this.update(orderLambdaUpdateWrapper); - - OrderMessage orderMessage = new OrderMessage(); - orderMessage.setNewStatus(OrderStatusEnum.UNDELIVERED); - orderMessage.setOrderSn(order.getSn()); - this.sendUpdateStatusMessage(orderMessage); + virtualOrderConfirm(orderSn); } } - - // 发送当前商品购买完成的信息(用于更新商品数据) - List orderItems = orderItemService.getByOrderSn(orderSn); - List goodsCompleteMessageList = new ArrayList<>(); - for (OrderItem orderItem : orderItems) { - GoodsCompleteMessage goodsCompleteMessage = new GoodsCompleteMessage(); - goodsCompleteMessage.setGoodsId(orderItem.getGoodsId()); - goodsCompleteMessage.setSkuId(orderItem.getSkuId()); - goodsCompleteMessage.setBuyNum(orderItem.getNum()); - goodsCompleteMessage.setMemberId(order.getMemberId()); - goodsCompleteMessageList.add(goodsCompleteMessage); - } - if (!goodsCompleteMessageList.isEmpty()) { - String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.BUY_GOODS_COMPLETE.name(); - //发送订单变更mq消息 - rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsCompleteMessageList), RocketmqSendCallbackBuilder.commonCallback()); - } - - } @@ -400,7 +362,7 @@ public class OrderServiceImpl extends ServiceImpl implements //是否可以查询到订单 Order order = OperationalJudgment.judgment(this.getBySn(orderSn)); //判断是否为虚拟订单 - if (!order.getOrderType().equals(OrderTypeEnum.FICTITIOUS.name())) { + if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) { throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); } //判断虚拟订单状态 @@ -438,6 +400,25 @@ public class OrderServiceImpl extends ServiceImpl implements orderMessage.setNewStatus(OrderStatusEnum.COMPLETED); orderMessage.setOrderSn(order.getSn()); this.sendUpdateStatusMessage(orderMessage); + + // 发送当前商品购买完成的信息(用于更新商品数据) + List orderItems = orderItemService.getByOrderSn(orderSn); + List goodsCompleteMessageList = new ArrayList<>(); + for (OrderItem orderItem : orderItems) { + GoodsCompleteMessage goodsCompleteMessage = new GoodsCompleteMessage(); + goodsCompleteMessage.setGoodsId(orderItem.getGoodsId()); + goodsCompleteMessage.setSkuId(orderItem.getSkuId()); + goodsCompleteMessage.setBuyNum(orderItem.getNum()); + goodsCompleteMessage.setMemberId(order.getMemberId()); + goodsCompleteMessageList.add(goodsCompleteMessage); + } + //发送商品购买消息 + if (!goodsCompleteMessageList.isEmpty()) { + String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.BUY_GOODS_COMPLETE.name(); + //发送订单变更mq消息 + rocketMQTemplate.asyncSend(destination, JSONUtil.toJsonStr(goodsCompleteMessageList), RocketmqSendCallbackBuilder.commonCallback()); + } + } @Override @@ -609,6 +590,14 @@ public class OrderServiceImpl extends ServiceImpl implements this.baseMapper.updateStatus(orderStatus.name(), orderSn); } + /** + * 检测拼团订单内容 + * 此方法用与订单确认 + * 判断拼团是否达到人数进行下一步处理 + * + * @param pintuanId 拼团活动ID + * @param parentOrderSn 拼团父订单编号 + */ private void checkPintuanOrder(String pintuanId, String parentOrderSn) { //拼团有效参数判定 if (CharSequenceUtil.isEmpty(parentOrderSn)) { @@ -630,9 +619,8 @@ public class OrderServiceImpl extends ServiceImpl implements DelayQueueTools.wrapperUniqueKey(DelayQueueType.PINTUAN_ORDER, (pintuanId + parentOrderSn)), rocketmqCustomProperties.getPromotionTopic()); this.timeTrigger.addDelay(timeTriggerMsg, cn.lili.common.utils.DateUtil.getDelayTime(startTime)); - } - //拼团所需人数,小于等于 参团后的人数,则说明成团,所有订单成团 - if (pintuan.getRequiredNum() <= count) { + } else if (pintuan.getRequiredNum() <= count) { + //拼团所需人数,小于等于 参团后的人数,则说明成团,所有订单成团 this.pintuanOrderSuccess(list); } } @@ -659,17 +647,18 @@ public class OrderServiceImpl extends ServiceImpl implements /** * 根据提供的拼团订单列表更新拼团状态为拼团成功 + * 循环订单列表根据不同的订单类型进行确认订单 * * @param list 需要更新拼团状态为成功的拼团订单列表 */ private void pintuanOrderSuccess(List list) { - for (Order order : list) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Order::getId, order.getId()); - updateWrapper.set(Order::getOrderStatus, OrderStatusEnum.UNDELIVERED.name()); - updateWrapper.set(Order::getCanReturn, !PaymentMethodEnum.BANK_TRANSFER.name().equals(order.getPaymentMethod())); - this.update(updateWrapper); - } + list.stream().forEach(order -> { + if (order.getOrderType().equals(OrderTypeEnum.VIRTUAL)) { + this.virtualOrderConfirm(order.getSn()); + } else if (order.getOrderType().equals(OrderTypeEnum.NORMAL)) { + this.normalOrderConfirm(order.getSn()); + } + }); } /** @@ -761,4 +750,72 @@ public class OrderServiceImpl extends ServiceImpl implements } } + /** + * 检查交易信息 + * + * @param tradeDTO 交易DTO + */ + private void checkTradeDTO(TradeDTO tradeDTO) { + //检测是否为拼团订单 + if (tradeDTO.getParentOrderSn() != null) { + //判断用户不能参与自己发起的拼团活动 + Order parentOrder = this.getBySn(tradeDTO.getParentOrderSn()); + if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { + throw new ServiceException("不能参与自己发起的拼团活动!"); + } + } + } + + /** + * 检查交易信息 + * + * @param order 订单 + */ + private void checkOrder(Order order) { + //订单类型为拼团订单,检测购买数量是否超过了限购数量 + if (OrderTypeEnum.PINTUAN.name().equals(order.getOrderType())) { + Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); + Integer limitNum = pintuan.getLimitNum(); + if (limitNum != 0 && order.getGoodsNum() > limitNum) { + throw new ServiceException("购买数量超过拼团活动限制数量"); + } + } + } + + /** + * 普通商品订单确认 + * 修改订单状态为待发货 + * 发送订单状态变更消息 + * + * @param orderSn 订单编号 + */ + private void normalOrderConfirm(String orderSn) { + //修改订单 + this.update(new LambdaUpdateWrapper() + .eq(Order::getSn, orderSn) + .set(Order::getOrderStatus, OrderStatusEnum.UNDELIVERED.name())); + //修改订单 + OrderMessage orderMessage = new OrderMessage(); + orderMessage.setNewStatus(OrderStatusEnum.UNDELIVERED); + orderMessage.setOrderSn(orderSn); + this.sendUpdateStatusMessage(orderMessage); + } + + /** + * 虚拟商品订单确认 + * 修改订单状态为待核验 + * 发送订单状态变更消息 + * + * @param orderSn 订单编号 + */ + private void virtualOrderConfirm(String orderSn) { + //修改订单 + this.update(new LambdaUpdateWrapper() + .eq(Order::getSn, orderSn) + .set(Order::getOrderStatus, OrderStatusEnum.TAKE.name())); + OrderMessage orderMessage = new OrderMessage(); + orderMessage.setNewStatus(OrderStatusEnum.TAKE); + orderMessage.setOrderSn(orderSn); + this.sendUpdateStatusMessage(orderMessage); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java index d4907def..b4e49d35 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java @@ -74,7 +74,9 @@ public class TradeServiceImpl extends ServiceImpl implements pointPretreatment(tradeDTO); //优惠券预处理 couponPretreatment(tradeDTO); + //添加交易 this.save(trade); + //添加订单 orderService.intoDB(tradeDTO); //写入缓存,给消费者调用 cache.put(key, tradeDTO); From 3639ed731b9bac8a4b009f53e82c90c083c4424a Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 29 May 2021 12:31:38 +0800 Subject: [PATCH 29/68] =?UTF-8?q?=E8=99=9A=E6=8B=9F=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=A0=B8=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/order/service/OrderService.java | 12 +++- .../order/serviceimpl/OrderServiceImpl.java | 71 ++++++++++++------- .../trade/OrderStoreController.java | 25 +++---- 3 files changed, 68 insertions(+), 40 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index c89e5e4a..272864d6 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -118,10 +118,16 @@ public interface OrderService extends IService { /** * 订单核验 * - * @param orderSn 订单编号 - * @param qrCode 提货码 + * @param verificationCode 验证码 */ - Order take(String orderSn, String qrCode); + Order take(String orderSn,String verificationCode); + + /** + * 根据核验码获取订单信息 + * + * @param verificationCode 验证码 + */ + Order getOrderByVerificationCode(String verificationCode); /** * 订单完成 diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index b2d76c6a..243e18a0 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -239,9 +239,7 @@ public class OrderServiceImpl extends ServiceImpl implements */ @Override public Order getBySn(String orderSn) { - QueryWrapper orderWrapper = new QueryWrapper<>(); - orderWrapper.eq("sn", orderSn); - return this.getOne(orderWrapper); + return this.getOne(new LambdaQueryWrapper().eq(Order::getSn, orderSn)); } @Override @@ -357,30 +355,29 @@ public class OrderServiceImpl extends ServiceImpl implements } @Override - @OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#verificationCode+']'", orderSn = "#orderSn") - public Order take(String orderSn, String verificationCode) { - //是否可以查询到订单 - Order order = OperationalJudgment.judgment(this.getBySn(orderSn)); - //判断是否为虚拟订单 - if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) { - throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); - } - //判断虚拟订单状态 - if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) { - //判断提货码是否正确\修改订单状态 - if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()) && verificationCode.equals(order.getVerificationCode())) { - order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); + public Order take(String orderSn,String verificationCode) { - this.updateById(order); + //获取订单信息 + Order order = this.getBySn(orderSn); + //检测虚拟订单信息 + checkVerificationOrder(order,verificationCode); + order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); + //修改订单信息 + this.updateById(order); + //发送订单完成消息 + OrderMessage orderMessage = new OrderMessage(); + orderMessage.setNewStatus(OrderStatusEnum.COMPLETED); + orderMessage.setOrderSn(order.getSn()); + this.sendUpdateStatusMessage(orderMessage); + return order; + } - OrderMessage orderMessage = new OrderMessage(); - orderMessage.setNewStatus(OrderStatusEnum.COMPLETED); - orderMessage.setOrderSn(order.getSn()); - this.sendUpdateStatusMessage(orderMessage); - } - return order; - } - throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); + @Override + public Order getOrderByVerificationCode(String verificationCode) { + return this.getOne(new LambdaQueryWrapper() + .eq(Order::getOrderStatus, OrderStatusEnum.TAKE.name()) + .eq(Order::getStoreId,UserContext.getCurrentUser().getStoreId()) + .eq(Order::getVerificationCode, verificationCode)); } @Override @@ -818,4 +815,28 @@ public class OrderServiceImpl extends ServiceImpl implements orderMessage.setOrderSn(orderSn); this.sendUpdateStatusMessage(orderMessage); } + + /** + * 检测虚拟订单信息 + * @param order 订单 + * @param verificationCode 验证码 + */ + private void checkVerificationOrder(Order order,String verificationCode){ + //判断查询是否可以查询到订单 + if (order==null) { + throw new ServiceException(ResultCode.ORDER_NOT_EXIST); + } + //判断是否为虚拟订单 + else if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) { + throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); + } + //判断虚拟订单状态 + else if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) { + throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); + } + //判断验证码是否正确 + else if(!verificationCode.equals(order.getVerificationCode())){ + throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); + } + } } \ No newline at end of file diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index 0c034911..76626a4c 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -117,22 +117,23 @@ public class OrderStoreController { return ResultUtil.data(orderService.cancel(orderSn, reason)); } + @ApiOperation(value = "根据核验码获取订单信息") + @ApiImplicitParam(name = "verificationCode", value = "核验码", required = true, paramType = "path") + @GetMapping(value = "/getOrderByVerificationCode/{verificationCode}") + public ResultMessage getOrderByVerificationCode(@PathVariable String verificationCode){ + return ResultUtil.data(orderService.getOrderByVerificationCode(verificationCode)); + } + @ApiOperation(value = "订单核验") - @ApiImplicitParams({ - @ApiImplicitParam(name = "orderSn", value = "订单sn", required = true, dataType = "String", paramType = "path"), - @ApiImplicitParam(name = "qrCode", value = "发货单号", required = true, dataType = "String", paramType = "query") - }) - @PostMapping(value = "/{orderSn}/take") - public ResultMessage take(@NotNull(message = "参数非法") @PathVariable String orderSn, - @NotNull(message = "核验码") String qrCode) { - return ResultUtil.data(orderService.take(orderSn, qrCode)); + @ApiImplicitParam(name = "verificationCode", value = "核验码", required = true, paramType = "path") + @PutMapping(value = "/take/${order}/{verificationCode}") + public ResultMessage take(@PathVariable String orderSn,@PathVariable String verificationCode) { + return ResultUtil.data(orderService.take(orderSn,verificationCode)); } @ApiOperation(value = "查询物流踪迹") - @ApiImplicitParams({ - @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") - }) - @PostMapping(value = "/getTraces/{orderSn}") + @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") + @GetMapping(value = "/getTraces/{orderSn}") public ResultMessage getTraces(@NotBlank(message = "订单编号不能为空") @PathVariable String orderSn) { return ResultUtil.data(orderService.getTraces(orderSn)); } From 7fa0fb75b14f323823492da25895d6ae1eed73d5 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 31 May 2021 08:37:15 +0800 Subject: [PATCH 30/68] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E5=90=8E=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8E=9F=E8=B7=AF=E9=80=80=E6=AC=BE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/order/order/service/OrderService.java | 12 ++++++++---- .../order/order/serviceimpl/OrderServiceImpl.java | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 272864d6..640c69eb 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -66,6 +66,8 @@ public interface OrderService extends IService { /** * 订单付款 + * 修改订单付款信息 + * 记录订单流水 * * @param orderSn 订单编号 * @param paymentMethod 支付方法 @@ -118,14 +120,14 @@ public interface OrderService extends IService { /** * 订单核验 * - * @param verificationCode 验证码 + * @param verificationCode 验证码 */ - Order take(String orderSn,String verificationCode); + Order take(String orderSn, String verificationCode); /** * 根据核验码获取订单信息 * - * @param verificationCode 验证码 + * @param verificationCode 验证码 */ Order getOrderByVerificationCode(String verificationCode); @@ -186,8 +188,9 @@ public interface OrderService extends IService { /** * 获取待发货订单编号列表 + * * @param response - * @param orderIds 订单ID列表 + * @param orderIds 订单ID列表 * @param logisticsName 店铺已选择物流公司列表 * @return 待发货订单编号列表 */ @@ -195,6 +198,7 @@ public interface OrderService extends IService { /** * 订单批量发货 + * * @param list 批量发货列表 */ void batchDeliver(List list); diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 243e18a0..42fafe52 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -257,11 +257,13 @@ public class OrderServiceImpl extends ServiceImpl implements order.setPayStatus(PayStatusEnum.PAID.name()); order.setOrderStatus(OrderStatusEnum.PAID.name()); order.setReceivableNo(receivableNo); + order.setCanReturn(!PaymentMethodEnum.BANK_TRANSFER.name().equals(order.getPaymentMethod())); this.updateById(order); //记录订单流水 storeFlowService.payOrder(orderSn); + //发送订单已付款消息 OrderMessage orderMessage = new OrderMessage(); orderMessage.setOrderSn(order.getSn()); orderMessage.setPaymentMethod(paymentMethod); @@ -272,7 +274,6 @@ public class OrderServiceImpl extends ServiceImpl implements OrderLog orderLog = new OrderLog(orderSn, "-1", UserEnums.SYSTEM.getRole(), "系统操作", message); orderLogService.save(orderLog); - } @Override @@ -355,6 +356,7 @@ public class OrderServiceImpl extends ServiceImpl implements } @Override + @OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#verificationCode+']'", orderSn = "#orderSn") public Order take(String orderSn,String verificationCode) { //获取订单信息 From e09747c410eb2f05ac2e19d3136509d90a89042d Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 31 May 2021 11:34:43 +0800 Subject: [PATCH 31/68] =?UTF-8?q?=E6=94=AF=E6=8C=81elk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buyer-api/src/main/resources/application.yml | 3 +- buyer-api/src/main/resources/logback.xml | 40 +++++++++++ common-api/src/main/resources/logback.xml | 41 +++++++++++ config/application.yml | 2 + consumer/src/main/resources/logback.xml | 41 +++++++++++ framework/pom.xml | 74 +++++++++++--------- manager-api/src/main/resources/manager.xml | 41 +++++++++++ seller-api/src/main/resources/logback.xml | 41 +++++++++++ 8 files changed, 250 insertions(+), 33 deletions(-) create mode 100644 buyer-api/src/main/resources/logback.xml create mode 100644 common-api/src/main/resources/logback.xml create mode 100644 consumer/src/main/resources/logback.xml create mode 100644 manager-api/src/main/resources/manager.xml create mode 100644 seller-api/src/main/resources/logback.xml diff --git a/buyer-api/src/main/resources/application.yml b/buyer-api/src/main/resources/application.yml index fa22d1d5..22307655 100644 --- a/buyer-api/src/main/resources/application.yml +++ b/buyer-api/src/main/resources/application.yml @@ -259,7 +259,8 @@ lili: # account: # username: elastic # password: LiLiShopES - + logstash: + server: 192.168.0.116:4560 rocketmq: promotion-topic: lili_promotion_topic promotion-group: lili_promotion_group diff --git a/buyer-api/src/main/resources/logback.xml b/buyer-api/src/main/resources/logback.xml new file mode 100644 index 00000000..4e5e5ef5 --- /dev/null +++ b/buyer-api/src/main/resources/logback.xml @@ -0,0 +1,40 @@ + + + + + + + + + + ${APP_NAME} + + + + ${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log + 30 + + + ${FILE_LOG_PATTERN} + + + + + + 127.0.0.1:4560 + + + + UTC + + + + {"appName":"${APP_NAME}"} + + + + + + + + \ No newline at end of file diff --git a/common-api/src/main/resources/logback.xml b/common-api/src/main/resources/logback.xml new file mode 100644 index 00000000..46c868ce --- /dev/null +++ b/common-api/src/main/resources/logback.xml @@ -0,0 +1,41 @@ + + + + + + + + + + ${APP_NAME} + + + + ${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log + 30 + + + ${FILE_LOG_PATTERN} + + + + + + + 127.0.0.1:4560 + + + + UTC + + + + {"appName":"${APP_NAME}"} + + + + + + + + \ No newline at end of file diff --git a/config/application.yml b/config/application.yml index 38c732bd..c2387c8c 100644 --- a/config/application.yml +++ b/config/application.yml @@ -260,6 +260,8 @@ lili: # username: elastic # password: LiLiShopES + logstash: + server: 192.168.0.116:4560 rocketmq: promotion-topic: lili_promotion_topic promotion-group: lili_promotion_group diff --git a/consumer/src/main/resources/logback.xml b/consumer/src/main/resources/logback.xml new file mode 100644 index 00000000..e4de4ff4 --- /dev/null +++ b/consumer/src/main/resources/logback.xml @@ -0,0 +1,41 @@ + + + + + + + + + + ${APP_NAME} + + + + ${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log + 30 + + + ${FILE_LOG_PATTERN} + + + + + + + 127.0.0.1:4560 + + + + UTC + + + + {"appName":"${APP_NAME}"} + + + + + + + + \ No newline at end of file diff --git a/framework/pom.xml b/framework/pom.xml index 49ffefd8..d9a60488 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -47,42 +47,14 @@ 1.2 5.0.0 5.0.0 + 6.6 + 3.4.1 + 1.7.28 + 2.2.0 - - javax.interceptor - javax.interceptor-api - ${interceptor-api} - - - de.codecentric - spring-boot-admin-starter-client - ${de.codecentric} - - - - com.google.zxing - core - 3.4.1 - - - com.google.zxing - javase - 3.4.1 - - - org.slf4j - slf4j-api - 1.7.28 - - - - com.github.xkzhangsan - xk-time - 2.2.0 - org.springframework.boot spring-boot-starter-web @@ -380,6 +352,44 @@ poi-ooxml ${poi-ooxml-version} + + + net.logstash.logback + logstash-logback-encoder + ${logstash-logback-encoder} + + + javax.interceptor + javax.interceptor-api + ${interceptor-api} + + + de.codecentric + spring-boot-admin-starter-client + ${de.codecentric} + + + + com.google.zxing + core + ${zxing} + + + com.google.zxing + javase + ${zxing} + + + org.slf4j + slf4j-api + ${slf4j-api} + + + + com.github.xkzhangsan + xk-time + ${xk-time} + diff --git a/manager-api/src/main/resources/manager.xml b/manager-api/src/main/resources/manager.xml new file mode 100644 index 00000000..46c868ce --- /dev/null +++ b/manager-api/src/main/resources/manager.xml @@ -0,0 +1,41 @@ + + + + + + + + + + ${APP_NAME} + + + + ${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log + 30 + + + ${FILE_LOG_PATTERN} + + + + + + + 127.0.0.1:4560 + + + + UTC + + + + {"appName":"${APP_NAME}"} + + + + + + + + \ No newline at end of file diff --git a/seller-api/src/main/resources/logback.xml b/seller-api/src/main/resources/logback.xml new file mode 100644 index 00000000..28ed75c2 --- /dev/null +++ b/seller-api/src/main/resources/logback.xml @@ -0,0 +1,41 @@ + + + + + + + + + + ${APP_NAME} + + + + ${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log + 30 + + + ${FILE_LOG_PATTERN} + + + + + + + 127.0.0.1:4560 + + + + UTC + + + + {"appName":"${APP_NAME}"} + + + + + + + + \ No newline at end of file From 0324951d9afab36c6e5c5bbff1088ce0e94394a6 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 1 Jun 2021 15:51:19 +0800 Subject: [PATCH 32/68] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/event/impl/MemberPointExecute.java | 4 +-- .../lili/event/impl/NoticeMessageExecute.java | 5 ++-- .../entity/enums/StudioStatusEnum.java | 27 +++++++++++++++++++ .../broadcast/entity/vos/StudioVO.java | 10 +++---- .../broadcast/mapper/CommodityMapper.java | 4 +-- .../serviceimpl/CommodityServiceImpl.java | 5 ++-- .../serviceimpl/StudioServiceImpl.java | 7 ++--- .../broadcast/util/WechatLivePlayerUtil.java | 2 +- .../order/entity/enums/OrderTypeEnum.java | 16 +---------- .../order/serviceimpl/OrderServiceImpl.java | 8 +++--- .../serviceimpl/PintuanServiceImpl.java | 15 ++++++----- .../broadcast/StudioManagerController.java | 26 +++++++++--------- .../broadcast/StudioStoreController.java | 8 +++--- .../trade/OrderStoreController.java | 7 +++-- 14 files changed, 81 insertions(+), 63 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/broadcast/entity/enums/StudioStatusEnum.java diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index b0d454d4..e4ce6de0 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -12,8 +12,8 @@ import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.order.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderMessage; +import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.system.entity.dos.Setting; @@ -77,7 +77,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp if(orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)){ //根据订单编号获取订单数据,如果为积分订单则跳回 Order order = orderService.getBySn(orderMessage.getOrderSn()); - if(order.getOrderType().equals(OrderTypeEnum.POINT)){ + if(order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINT.name())){ return; } //获取积分设置 diff --git a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java index 7a23048a..3b63bdd8 100644 --- a/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/NoticeMessageExecute.java @@ -11,12 +11,11 @@ import cn.lili.modules.message.service.NoticeMessageService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dto.OrderMessage; -import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; +import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.order.trade.entity.enums.AfterSaleTypeEnum; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -83,7 +82,7 @@ public class NoticeMessageExecute implements TradeEvent, OrderStatusChangeEvent, break; //如果是拼团订单,发送拼团成功消息 case UNDELIVERED: - if(orderDetailVO.getOrder().getOrderType().equals(OrderTypeEnum.PINTUAN.name())){ + if(orderDetailVO.getOrder().getOrderPromotionType().equals(OrderPromotionTypeEnum.PINTUAN.name())){ //拼团成功消息 noticeMessageDTO.setNoticeMessageNodeEnum(NoticeMessageNodeEnum.PINTUAN_SUCCESS); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/enums/StudioStatusEnum.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/enums/StudioStatusEnum.java new file mode 100644 index 00000000..8cdcbde9 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/enums/StudioStatusEnum.java @@ -0,0 +1,27 @@ +package cn.lili.modules.broadcast.entity.enums; + + +/** + * 直播间状态 + * @author Bulbasaur + * @date: 2021/5/31 10:32 上午 + * + */ +public enum StudioStatusEnum { + + NEW("新建"), START("开始"), END("结束"); + + private final String clientName; + + StudioStatusEnum(String des) { + this.clientName = des; + } + + public String clientName() { + return this.clientName; + } + + public String value() { + return this.name(); + } +} diff --git a/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java index b058c6bb..9d207e44 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/entity/vos/StudioVO.java @@ -8,15 +8,15 @@ import lombok.Data; import java.util.List; /** - * @author liushuai(liushuai711 @ gmail.com) - * @version v4.1 - * @Description: - * @since 2021/5/17 3:04 下午 + * 直播间VO + * + * @author Bulbasaur + * @date: 2021/5/31 11:58 上午 */ @Data public class StudioVO extends Studio { @ApiModelProperty(value = "直播间商品列表") - private List CommodityList; + private List commodityList; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java index 5083efd7..9420d175 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/mapper/CommodityMapper.java @@ -26,8 +26,8 @@ public interface CommodityMapper extends BaseMapper { @Select("SELECT * FROM li_commodity c INNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") List getCommodityByRoomId(Integer roomId); - @Select("SELECT name,goods_image FROM li_commodity c INNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") - List getSimpleCommodityByRoomId(Integer roomId); + @Select("SELECT goods_image FROM li_commodity c INNER JOIN li_studio_commodity sc ON sc.goods_id = c.live_goods_id WHERE sc.room_id =#{roomId}") + List getSimpleCommodityByRoomId(Integer roomId); @Select("SELECT c.*,gs.quantity,s.store_name FROM li_commodity c INNER JOIN li_goods_sku gs ON c.sku_id = gs.id INNER JOIN li_store s ON s.id=c.store_id ${ew.customSqlSegment}") IPage commodityVOList(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java index e2b52023..beabdc2e 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/CommodityServiceImpl.java @@ -78,7 +78,7 @@ public class CommodityServiceImpl extends ServiceImpl().eq(Commodity::getLiveGoodsId, goodsId)); } return false; } @@ -106,6 +106,7 @@ public class CommodityServiceImpl extends ServiceImpl().like(name != null, "c.name", name) .eq(auditStatus != null, "c.audit_status", auditStatus) - .eq(UserContext.getCurrentUser().getRole().equals(UserEnums.STORE), "c.store_id", UserContext.getCurrentUser().getStoreId())); + .eq(UserContext.getCurrentUser().getRole().equals(UserEnums.STORE), "c.store_id", UserContext.getCurrentUser().getStoreId()) + .orderByDesc("create_time")); } } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 54732459..4530d8d4 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -7,6 +7,7 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.BeanUtil; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; +import cn.lili.modules.broadcast.entity.StudioStatusEnum; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.entity.dos.StudioCommodity; import cn.lili.modules.broadcast.entity.vos.StudioVO; @@ -49,6 +50,7 @@ public class StudioServiceImpl extends ServiceImpl impleme studio.setRoomId(Integer.parseInt(roomMap.get("roomId"))); studio.setQrCodeUrl(roomMap.get("qrcodeUrl")); studio.setStoreId(UserContext.getCurrentUser().getStoreId()); + studio.setStatus(StudioStatusEnum.NEW.name()); return this.save(studio); } catch (Exception e) { e.printStackTrace(); @@ -98,7 +100,6 @@ public class StudioServiceImpl extends ServiceImpl impleme //设置直播间默认的商品(前台展示)只展示两个 if (studio.getRoomGoodsNum() < 3) { studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId))); - ; } return this.updateById(studio); } @@ -116,7 +117,6 @@ public class StudioServiceImpl extends ServiceImpl impleme //设置直播间默认的商品(前台展示)只展示两个 if (studio.getRoomGoodsNum() < 3) { studio.setRoomGoodsList(JSONUtil.toJsonStr(commodityMapper.getSimpleCommodityByRoomId(roomId))); - ; } return this.updateById(studio); } @@ -127,7 +127,8 @@ public class StudioServiceImpl extends ServiceImpl impleme public IPage studioList(PageVO pageVO, Integer recommend, String status) { return this.page(PageUtil.initPage(pageVO), new QueryWrapper() .eq(recommend != null, "recommend", true) - .eq(status!=null,"status",status)); + .eq(status!=null,"status",status) + .orderByDesc("create_time")); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index e69f6808..a853bae5 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -196,7 +196,7 @@ public class WechatLivePlayerUtil { String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=" + token; Map map = new HashMap<>(); map.put("goodsId", goodsId); - String content = HttpUtils.doPostWithJson(url, goodsId); + String content = HttpUtils.doPostWithJson(url, map); JSONObject json = new JSONObject(content); log.info("微信小程序删除直播商品结果:" + content); return json; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java index 4f81bbfb..974f875e 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderTypeEnum.java @@ -13,22 +13,8 @@ public enum OrderTypeEnum { */ NORMAL, - /** - * 赠品订单 - */ - GIFT, - /** * 虚拟订单 */ - VIRTUAL, - /** - * 拼团订单 - */ - PINTUAN, - /** - * 积分订单 - */ - POINT - + VIRTUAL; } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 42fafe52..4b81fb0a 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -201,7 +201,7 @@ public class OrderServiceImpl extends ServiceImpl implements @OrderLogPoint(description = "'订单['+#orderSn+']取消,原因为:'+#reason", orderSn = "#orderSn") public Order cancel(String orderSn, String reason) { Order order = OperationalJudgment.judgment(this.getBySn(orderSn)); - if (order.getOrderType().equals(OrderTypeEnum.PINTUAN.name()) && !order.getOrderStatus().equals(OrderStatusEnum.UNDELIVERED.name())) { + if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.PINTUAN.name()) && !order.getOrderStatus().equals(OrderStatusEnum.UNDELIVERED.name())) { throw new ServiceException("未成团订单不可取消"); } if (CharSequenceUtil.equalsAny(order.getOrderStatus(), @@ -635,7 +635,7 @@ public class OrderServiceImpl extends ServiceImpl implements //寻找拼团的所有订单 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getPromotionId, pintuanId) - .eq(Order::getOrderType, OrderTypeEnum.PINTUAN.name()) + .eq(Order::getOrderPromotionType, OrderPromotionTypeEnum.PINTUAN.name()) .eq(Order::getPayStatus, PayStatusEnum.PAID.name()); // 拼团sn=开团订单sn 或者 参团订单的开团订单sn queryWrapper.and(i -> i.eq(Order::getSn, parentOrderSn) @@ -692,7 +692,7 @@ public class OrderServiceImpl extends ServiceImpl implements BeanUtil.copyProperties(priceDetailDTO, order, "id"); order.setSn(SnowFlake.createStr("G")); order.setTradeSn(tradeDTO.getSn()); - order.setOrderType(OrderTypeEnum.GIFT.name()); + order.setOrderType(OrderPromotionTypeEnum.GIFT.name()); order.setOrderStatus(OrderStatusEnum.UNPAID.name()); order.setPayStatus(PayStatusEnum.UNPAID.name()); order.setDeliverStatus(DeliverStatusEnum.UNDELIVERED.name()); @@ -772,7 +772,7 @@ public class OrderServiceImpl extends ServiceImpl implements */ private void checkOrder(Order order) { //订单类型为拼团订单,检测购买数量是否超过了限购数量 - if (OrderTypeEnum.PINTUAN.name().equals(order.getOrderType())) { + if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderPromotionType())) { Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); Integer limitNum = pintuan.getLimitNum(); if (limitNum != 0 && order.getGoodsNum() > limitNum) { diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java index 085cb5eb..d67fbc01 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PintuanServiceImpl.java @@ -17,7 +17,6 @@ import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; -import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.dos.Pintuan; @@ -103,8 +102,10 @@ public class PintuanServiceImpl extends ServiceImpl impl return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Order::getPromotionId, pintuanId).eq(Order::getOrderType, OrderTypeEnum.PINTUAN.name()) - .eq(Order::getOrderStatus, OrderStatusEnum.PAID.name()).eq(Order::getParentOrderSn, ""); + queryWrapper.eq(Order::getPromotionId, pintuanId) + .eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()) + .eq(Order::getOrderStatus, OrderStatusEnum.PAID.name()) + .eq(Order::getParentOrderSn, ""); List orders = orderService.list(queryWrapper); // 遍历订单状态为已支付,为团长的拼团订单 for (Order order : orders) { @@ -266,7 +267,7 @@ public class PintuanServiceImpl extends ServiceImpl impl } else { pintuan.setPromotionStatus(PromotionStatusEnum.END.name()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(Order::getOrderType, OrderTypeEnum.PINTUAN.name()); + queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); queryWrapper.eq(Order::getPromotionId, pintuanId); queryWrapper.nested(i -> i.eq(Order::getPayStatus, PayStatusEnum.PAID.name()).or().eq(Order::getOrderStatus, OrderStatusEnum.PAID.name())); // 过滤父级拼团订单,根据父级拼团订单分组 @@ -323,7 +324,7 @@ public class PintuanServiceImpl extends ServiceImpl impl pintuanShareVO.setPintuanMemberVOS(new ArrayList<>()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // 查找团长订单和已和当前拼团订单拼团的订单 - queryWrapper.eq(Order::getOrderType, OrderTypeEnum.PINTUAN.name()) + queryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()) .eq(Order::getPayStatus, OrderStatusEnum.PAID.name()) .and(i -> i.eq(Order::getParentOrderSn, parentOrderSn).or(j -> j.eq(Order::getSn, parentOrderSn))); List orders = orderService.list(queryWrapper); @@ -332,7 +333,7 @@ public class PintuanServiceImpl extends ServiceImpl impl if (!orders.isEmpty() && pintuanShareVO.getPromotionGoods() == null) { LambdaQueryWrapper orderLambdaQueryWrapper = new LambdaQueryWrapper<>(); // 查找团长订单和已和当前拼团订单拼团的订单 - orderLambdaQueryWrapper.eq(Order::getOrderType, OrderTypeEnum.PINTUAN.name()) + orderLambdaQueryWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()) .eq(Order::getPayStatus, OrderStatusEnum.PAID.name()) .ne(Order::getSn, parentOrderSn) .and(i -> i.eq(Order::getParentOrderSn, orders.get(0).getParentOrderSn()).or(j -> j.eq(Order::getSn, orders.get(0).getParentOrderSn()))); @@ -424,7 +425,7 @@ public class PintuanServiceImpl extends ServiceImpl impl if (Boolean.FALSE.equals(pintuan.getFictitious()) && entry.getValue().size() < requiredNum) { // 如果未开启虚拟成团且已参团人数小于成团人数,则自动取消订单 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(Order::getOrderType, OrderTypeEnum.PINTUAN.name()); + updateWrapper.eq(Order::getOrderPromotionType, PromotionTypeEnum.PINTUAN.name()); updateWrapper.eq(Order::getPromotionId, pintuan.getId()); updateWrapper.eq(Order::getParentOrderSn, entry.getKey()); updateWrapper.set(Order::getOrderStatus, OrderStatusEnum.CANCELLED.name()); diff --git a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java index 0856d200..9436e196 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java @@ -6,6 +6,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.entity.vos.StudioVO; import cn.lili.modules.broadcast.service.StudioService; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -14,10 +15,9 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotNull; /** * 管理端,直播间接口 @@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.RestController; * @date: 2021/5/28 11:56 上午 */ @RestController -@Api(tags = "店铺端,直播商品接口") +@Api(tags = "店铺端,直播间接口") @RequestMapping("/manager/broadcast/studio") public class StudioManagerController { @@ -34,26 +34,26 @@ public class StudioManagerController { private StudioService studioService; @ApiOperation(value = "获取店铺直播间列表") - @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query", dataType = "String") + @ApiImplicitParam(name = "status", value = "直播间状态", paramType = "query") @GetMapping public ResultMessage> page(PageVO pageVO, String status) { return ResultUtil.data(studioService.studioList(pageVO, null, status)); } @ApiOperation(value = "获取店铺直播间详情") - @ApiImplicitParam(name = "studioId", value = "直播间ID", required = true, dataType = "String", paramType = "path") + @ApiImplicitParam(name = "studioId", value = "直播间ID", required = true, paramType = "path") @GetMapping("/studioInfo/{studioId}") - public ResultMessage studioInfo(@PathVariable String studioId) { - return ResultUtil.data(studioService.getById(studioId)); + public ResultMessage studioInfo(@PathVariable String studioId) { + return ResultUtil.data(studioService.getStudioVO(studioId)); } @ApiOperation(value = "是否推荐直播间") @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "Id", required = true, dataType = "String", paramType = "path"), - @ApiImplicitParam(name = "recommend", value = "是否推荐", required = true, dataType = "boolean", paramType = "path") + @ApiImplicitParam(name = "id", value = "Id", required = true, paramType = "path"), + @ApiImplicitParam(name = "recommend", value = "是否推荐", required = true, paramType = "query") }) - @GetMapping("/id/{studioId}") - public ResultMessage recommend(@PathVariable String id, @PathVariable boolean recommend) { + @PutMapping("/recommend/{id}") + public ResultMessage recommend(@PathVariable String id, @NotNull boolean recommend) { if (studioService.update(new UpdateWrapper() .eq("id", id) .set("recommend", recommend))) { diff --git a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java index bd8301ae..36831063 100644 --- a/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/other/broadcast/StudioStoreController.java @@ -6,13 +6,13 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.broadcast.entity.dos.Studio; +import cn.lili.modules.broadcast.entity.vos.StudioVO; import cn.lili.modules.broadcast.service.StudioService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.ibatis.annotations.Delete; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -41,8 +41,8 @@ public class StudioStoreController { @ApiOperation(value = "获取店铺直播间详情") @ApiImplicitParam(name = "studioId", value = "直播间ID", required = true, dataType = "String", paramType = "path") @GetMapping("/studioInfo/{studioId}") - public ResultMessage studioInfo(@PathVariable String studioId) { - return ResultUtil.data(studioService.getById(studioId)); + public ResultMessage studioInfo(@PathVariable String studioId) { + return ResultUtil.data(studioService.getStudioVO(studioId)); } @ApiOperation(value = "添加直播间") @@ -81,7 +81,7 @@ public class StudioStoreController { @ApiImplicitParam(name = "roomId", value = "房间ID", required = true, dataType = "Integer", paramType = "path"), @ApiImplicitParam(name = "liveGoodsId", value = "直播商品ID", required = true, dataType = "Integer", paramType = "path") }) - @Delete(value = "/deleteInRoom/{roomId}/{liveGoodsId}") + @DeleteMapping(value = "/deleteInRoom/{roomId}/{liveGoodsId}") public ResultMessage deleteInRoom(@PathVariable Integer roomId, @PathVariable Integer liveGoodsId) { if (studioService.goodsDeleteInRoom(roomId, liveGoodsId)) { return ResultUtil.success(ResultCode.SUCCESS); diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index 76626a4c..ca927927 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -125,8 +125,11 @@ public class OrderStoreController { } @ApiOperation(value = "订单核验") - @ApiImplicitParam(name = "verificationCode", value = "核验码", required = true, paramType = "path") - @PutMapping(value = "/take/${order}/{verificationCode}") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderSn", value = "订单号", required = true, paramType = "path"), + @ApiImplicitParam(name = "verificationCode", value = "核验码", required = true, paramType = "path") + }) + @PutMapping(value = "/take/{orderSn}/{verificationCode}") public ResultMessage take(@PathVariable String orderSn,@PathVariable String verificationCode) { return ResultUtil.data(orderService.take(orderSn,verificationCode)); } From f802810330e9745ada915cff1c8ff93cb1fa9b45 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 1 Jun 2021 17:23:32 +0800 Subject: [PATCH 33/68] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E9=97=B4=E7=8A=B6=E6=80=81=E5=8F=98=E5=8C=96=E5=BB=B6=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/application.yml | 2 + .../BroadcastTimeTriggerExecutor.java | 36 +++++++++ consumer/src/main/resources/application.yml | 2 + .../common/delayqueue/BroadcastMessage.java | 34 +++++++++ .../common/delayqueue/DelayQueueType.java | 7 +- .../trigger/model/TimeExecuteConstant.java | 5 ++ .../rocketmq/RocketmqCustomProperties.java | 4 + .../broadcast/service/StudioService.java | 7 ++ .../serviceimpl/StudioServiceImpl.java | 74 ++++++++++++++++++- .../serviceimpl/FullDiscountServiceImpl.java | 5 +- 10 files changed, 171 insertions(+), 5 deletions(-) create mode 100644 consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java create mode 100644 framework/src/main/java/cn/lili/common/delayqueue/BroadcastMessage.java diff --git a/config/application.yml b/config/application.yml index 08e4e29b..08f94a4f 100644 --- a/config/application.yml +++ b/config/application.yml @@ -280,6 +280,8 @@ lili: notice-group: lili_notice_group notice-send-topic: lili_send_notice_topic notice-send-group: lili_send_notice_group + broadcast-topic: lili_broadcast_topic + broadcast-group: lili_broadcast_group rocketmq: name-server: 192.168.0.116:9876 producer: diff --git a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java new file mode 100644 index 00000000..0bc67f6c --- /dev/null +++ b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java @@ -0,0 +1,36 @@ +package cn.lili.trigger.executor; + +import cn.hutool.json.JSONUtil; +import cn.lili.common.delayqueue.BroadcastMessage; +import cn.lili.common.trigger.interfaces.TimeTriggerExecutor; +import cn.lili.common.trigger.model.TimeExecuteConstant; +import cn.lili.modules.broadcast.service.StudioService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 直播间事件触发 + * + * @author Bulbasaur + * @date: 2021/6/1 5:02 下午 + */ +@Slf4j +@Component(TimeExecuteConstant.BROADCAST_EXECUTOR) +public class BroadcastTimeTriggerExecutor implements TimeTriggerExecutor { + + + @Autowired + private StudioService studioService; + + @Override + public void execute(Object object) { + //直播间订单消息 + BroadcastMessage broadcastMessage = JSONUtil.toBean(JSONUtil.parseObj(object), BroadcastMessage.class); + if (broadcastMessage != null && broadcastMessage.getStudioId() != null) { + log.info("直播间消费:{}", broadcastMessage); + // 修改直播间状态 + studioService.updateStudioStatus(broadcastMessage); + } + } +} diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml index 79a1af45..4b27771b 100644 --- a/consumer/src/main/resources/application.yml +++ b/consumer/src/main/resources/application.yml @@ -279,6 +279,8 @@ lili: notice-send-group: lili_send_notice_group after-sale-topic: lili_after_sale_topic after-sale-group: lili_after_sale_group + broadcast-topic: lili_broadcast_topic + broadcast-group: lili_broadcast_group rocketmq: name-server: 127.0.0.1:9876 producer: diff --git a/framework/src/main/java/cn/lili/common/delayqueue/BroadcastMessage.java b/framework/src/main/java/cn/lili/common/delayqueue/BroadcastMessage.java new file mode 100644 index 00000000..42e96cbf --- /dev/null +++ b/framework/src/main/java/cn/lili/common/delayqueue/BroadcastMessage.java @@ -0,0 +1,34 @@ +package cn.lili.common.delayqueue; + +import cn.hutool.core.date.DateTime; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 直播消息实体 + * + * @author Bulbasaur + * @date: 2021/6/1 4:48 下午 + */ +@Data +@NoArgsConstructor +public class BroadcastMessage { + + /** + * 直播间ID + */ + private String studioId; + + /** + * 状态 + */ + private String status; + + + public BroadcastMessage(String studioId, String status) { + this.studioId = studioId; + this.status = status; + } +} diff --git a/framework/src/main/java/cn/lili/common/delayqueue/DelayQueueType.java b/framework/src/main/java/cn/lili/common/delayqueue/DelayQueueType.java index bb5c1a87..86a2e147 100644 --- a/framework/src/main/java/cn/lili/common/delayqueue/DelayQueueType.java +++ b/framework/src/main/java/cn/lili/common/delayqueue/DelayQueueType.java @@ -15,7 +15,12 @@ public enum DelayQueueType { /** * 拼团订单 */ - PINTUAN_ORDER("拼团订单"); + PINTUAN_ORDER("拼团订单"), + + /** + * 直播 + */ + BROADCAST("直播"); private final String description; diff --git a/framework/src/main/java/cn/lili/common/trigger/model/TimeExecuteConstant.java b/framework/src/main/java/cn/lili/common/trigger/model/TimeExecuteConstant.java index 6438de52..82bd8754 100644 --- a/framework/src/main/java/cn/lili/common/trigger/model/TimeExecuteConstant.java +++ b/framework/src/main/java/cn/lili/common/trigger/model/TimeExecuteConstant.java @@ -11,6 +11,11 @@ public abstract class TimeExecuteConstant { */ public static final String PROMOTION_EXECUTOR = "promotionTimeTriggerExecutor"; + /** + * 直播间延迟加载执行器 + */ + public static final String BROADCAST_EXECUTOR = "broadcastTimeTriggerExecutor"; + /** * 拼团延迟加载执行器 */ diff --git a/framework/src/main/java/cn/lili/config/rocketmq/RocketmqCustomProperties.java b/framework/src/main/java/cn/lili/config/rocketmq/RocketmqCustomProperties.java index 9f17158f..daedfe43 100644 --- a/framework/src/main/java/cn/lili/config/rocketmq/RocketmqCustomProperties.java +++ b/framework/src/main/java/cn/lili/config/rocketmq/RocketmqCustomProperties.java @@ -61,4 +61,8 @@ public class RocketmqCustomProperties { private String afterSaleGroup; + private String broadcastTopic; + + private String broadcastGroup; + } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java index 9e6bba7e..0acb351b 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/service/StudioService.java @@ -1,5 +1,6 @@ package cn.lili.modules.broadcast.service; +import cn.lili.common.delayqueue.BroadcastMessage; import cn.lili.common.vo.PageVO; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.entity.vos.StudioVO; @@ -69,4 +70,10 @@ public interface StudioService extends IService { * @return 直播间分页 */ IPage studioList(PageVO pageVO, Integer recommend, String status); + + /** + * 修改直播间状态 + * @param broadcastMessage 直播间消息 + */ + void updateStudioStatus(BroadcastMessage broadcastMessage); } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 4530d8d4..ad3bf81b 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -1,15 +1,23 @@ package cn.lili.modules.broadcast.serviceimpl; import cn.hutool.json.JSONUtil; +import cn.lili.common.delayqueue.BroadcastMessage; +import cn.lili.common.delayqueue.DelayQueueTools; +import cn.lili.common.delayqueue.DelayQueueType; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; +import cn.lili.common.trigger.interfaces.TimeTrigger; +import cn.lili.common.trigger.model.TimeExecuteConstant; +import cn.lili.common.trigger.model.TimeTriggerMsg; import cn.lili.common.utils.BeanUtil; +import cn.lili.common.utils.DateUtil; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; -import cn.lili.modules.broadcast.entity.StudioStatusEnum; +import cn.lili.config.rocketmq.RocketmqCustomProperties; import cn.lili.modules.broadcast.entity.dos.Studio; import cn.lili.modules.broadcast.entity.dos.StudioCommodity; +import cn.lili.modules.broadcast.entity.enums.StudioStatusEnum; import cn.lili.modules.broadcast.entity.vos.StudioVO; import cn.lili.modules.broadcast.mapper.CommodityMapper; import cn.lili.modules.broadcast.mapper.StudioMapper; @@ -18,6 +26,7 @@ import cn.lili.modules.broadcast.service.StudioService; import cn.lili.modules.broadcast.util.WechatLivePlayerUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +50,12 @@ public class StudioServiceImpl extends ServiceImpl impleme private StudioCommodityService studioCommodityService; @Resource private CommodityMapper commodityMapper; + //延时任务 + @Autowired + private TimeTrigger timeTrigger; + //Rocketmq + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; @Override public Boolean create(Studio studio) { @@ -51,7 +66,28 @@ public class StudioServiceImpl extends ServiceImpl impleme studio.setQrCodeUrl(roomMap.get("qrcodeUrl")); studio.setStoreId(UserContext.getCurrentUser().getStoreId()); studio.setStatus(StudioStatusEnum.NEW.name()); - return this.save(studio); + //直播间添加成功发送直播间开启、关闭延时任务 + if(this.save(studio)){ + //直播开启延时任务 + BroadcastMessage broadcastMessage = new BroadcastMessage(studio.getId(),StudioStatusEnum.START.name()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.BROADCAST_EXECUTOR, + Long.parseLong(studio.getStartTime()), broadcastMessage, + DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST, studio.getId()), + rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(Long.parseLong(studio.getStartTime()))); + + //直播结束延时任务 + broadcastMessage = new BroadcastMessage(studio.getId(),StudioStatusEnum.END.name()); + timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.BROADCAST_EXECUTOR, + Long.parseLong(studio.getEndTime()), broadcastMessage, + DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST, studio.getId()), + rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(Long.parseLong(studio.getEndTime()))); + } + return true; + } catch (Exception e) { e.printStackTrace(); throw new ServiceException(ResultCode.ERROR); @@ -61,8 +97,33 @@ public class StudioServiceImpl extends ServiceImpl impleme @Override public Boolean edit(Studio studio) { + Studio oldStudio=this.getById(studio.getId()); wechatLivePlayerUtil.editRoom(studio); - return this.updateById(studio); + if(this.updateById(studio)){ + // 发送更新延时任务 + //直播间开始 + BroadcastMessage broadcastMessage = new BroadcastMessage(studio.getId(),StudioStatusEnum.START.name()); + this.timeTrigger.edit( + TimeExecuteConstant.BROADCAST_EXECUTOR, + broadcastMessage, + Long.parseLong(oldStudio.getStartTime()), + Long.parseLong(studio.getStartTime()), + DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST,studio.getId()), + DateUtil.getDelayTime(Long.parseLong(studio.getStartTime())), + rocketmqCustomProperties.getPromotionTopic()); + + //直播间结束 + broadcastMessage = new BroadcastMessage(studio.getId(),StudioStatusEnum.START.name()); + this.timeTrigger.edit( + TimeExecuteConstant.BROADCAST_EXECUTOR, + broadcastMessage, + Long.parseLong(oldStudio.getEndTime()), + Long.parseLong(studio.getEndTime()), + DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST,studio.getId()), + DateUtil.getDelayTime(Long.parseLong(studio.getEndTime())), + rocketmqCustomProperties.getPromotionTopic()); + } + return true; } @Override @@ -132,6 +193,13 @@ public class StudioServiceImpl extends ServiceImpl impleme } + @Override + public void updateStudioStatus(BroadcastMessage broadcastMessage) { + this.update(new LambdaUpdateWrapper() + .eq(Studio::getId,broadcastMessage.getStudioId()) + .set(Studio::getStatus,broadcastMessage.getStatus())); + } + /** * 根据直播间ID获取直播间 * diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java index 06e9081c..d38aa4e8 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java @@ -97,7 +97,10 @@ public class FullDiscountServiceImpl extends ServiceImpl Date: Tue, 1 Jun 2021 22:10:28 +0800 Subject: [PATCH 34/68] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=BF=83=E9=94=80=E7=B1=BB=E5=9E=8B=E8=BF=9B=E8=A1=8C=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E8=AE=A2=E5=8D=95=EF=BC=9A=E6=8B=BC=E5=9B=A2=E3=80=81?= =?UTF-8?q?=E7=A7=AF=E5=88=86=E3=80=81=E8=B5=A0=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/order/order/entity/dto/OrderSearchParams.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java index 8e561ce6..ba8a8fe6 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java @@ -67,8 +67,9 @@ public class OrderSearchParams extends PageVO { /** * @see OrderTypeEnum + * @see cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum */ - @ApiModelProperty(value = "订单类型") + @ApiModelProperty(value = "订单类型",allowableValues = "NORMAL,VIRTUAL,GIFT,PINTUAN,POINT" ) private String orderType; @ApiModelProperty(value = "支付方式") @@ -136,7 +137,8 @@ public class OrderSearchParams extends PageVO { // 按订单类型 if (StringUtils.isNotEmpty(orderType)) { - wrapper.eq("o.order_type", orderType); + wrapper.eq("o.order_type", orderType) + .or().eq("o.order_promotion_type", orderType); } // 按支付方式 From 07b9e413d696da89a1ac08e28df578fe95c1fb68 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 2 Jun 2021 17:30:32 +0800 Subject: [PATCH 35/68] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A7=92=E6=9D=80?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buyer-api/src/main/resources/logback.xml | 2 +- common-api/src/main/resources/logback.xml | 2 +- consumer/src/main/resources/logback.xml | 4 ++-- .../modules/promotion/serviceimpl/SeckillServiceImpl.java | 2 +- .../lili/controller/promotion/SeckillManagerController.java | 6 ++---- .../lili/controller/setting/SettingManagerController.java | 4 ++-- manager-api/src/main/resources/manager.xml | 2 +- seller-api/src/main/resources/logback.xml | 2 +- 8 files changed, 11 insertions(+), 13 deletions(-) diff --git a/buyer-api/src/main/resources/logback.xml b/buyer-api/src/main/resources/logback.xml index 4e5e5ef5..5837ff17 100644 --- a/buyer-api/src/main/resources/logback.xml +++ b/buyer-api/src/main/resources/logback.xml @@ -6,7 +6,7 @@ - + ${APP_NAME} diff --git a/common-api/src/main/resources/logback.xml b/common-api/src/main/resources/logback.xml index 46c868ce..46dec7c7 100644 --- a/common-api/src/main/resources/logback.xml +++ b/common-api/src/main/resources/logback.xml @@ -6,7 +6,7 @@ - + ${APP_NAME} diff --git a/consumer/src/main/resources/logback.xml b/consumer/src/main/resources/logback.xml index e4de4ff4..45ee2e13 100644 --- a/consumer/src/main/resources/logback.xml +++ b/consumer/src/main/resources/logback.xml @@ -6,7 +6,7 @@ - + ${APP_NAME} @@ -22,7 +22,7 @@ - 127.0.0.1:4560 + 192.168.0.116:4560 diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java index 8be37013..2a3c5415 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java @@ -110,7 +110,7 @@ public class SeckillServiceImpl extends ServiceImpl impl // 保存到MYSQL中 boolean result = this.save(seckill); // 保存到MONGO中 - this.mongoTemplate.save(seckill); + this.mongoTemplate.save(seckillVO); //添加秒杀延时任务 this.addSeckillStartTask(seckillVO); return result; diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java index e4ecc423..454d1d14 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java @@ -67,10 +67,8 @@ public class SeckillManagerController { @ApiOperation(value = "分页查询秒杀活动列表") @GetMapping - public ResultMessage> getAll(SeckillSearchParams param, PageVO pageVo) { - pageVo.setNotConvert(true); - IPage page = seckillService.getSeckillByPageFromMongo(param, pageVo); - return ResultUtil.data(page); + public ResultMessage> getAll(SeckillSearchParams param, PageVO pageVo) { + return ResultUtil.data(seckillService.getSeckillByPageFromMysql(param, pageVo)); } @ApiOperation(value = "删除一个秒杀活动") diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java index 534765f0..916e3956 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java @@ -46,7 +46,7 @@ public class SettingManagerController { "WECHAT_PC_CONNECT,WECHAT_WAP_CONNECT,WECHAT_APP_CONNECT,WECHAT_MP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT,WEIBO_CONNECT,ALIPAY_CONNECT," + - "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT") + "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT,SECKILL_SETTING") public ResultMessage saveConfig(@PathVariable String key, @RequestBody String configValue) { SettingEnum settingEnum = SettingEnum.valueOf(key); //获取系统配置 @@ -92,7 +92,7 @@ public class SettingManagerController { "WECHAT_PC_CONNECT,WECHAT_WAP_CONNECT,WECHAT_APP_CONNECT,WECHAT_MP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT,WEIBO_CONNECT,ALIPAY_CONNECT," + - "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT" + "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT,SECKILL_SETTING" ) public ResultMessage settingGet(@PathVariable String key) { return createSetting(key); diff --git a/manager-api/src/main/resources/manager.xml b/manager-api/src/main/resources/manager.xml index 46c868ce..46dec7c7 100644 --- a/manager-api/src/main/resources/manager.xml +++ b/manager-api/src/main/resources/manager.xml @@ -6,7 +6,7 @@ - + ${APP_NAME} diff --git a/seller-api/src/main/resources/logback.xml b/seller-api/src/main/resources/logback.xml index 28ed75c2..ce08fb6f 100644 --- a/seller-api/src/main/resources/logback.xml +++ b/seller-api/src/main/resources/logback.xml @@ -6,7 +6,7 @@ - + ${APP_NAME} From f3faec3f723c433612794376c6ac0ba65c27001e Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 2 Jun 2021 17:54:40 +0800 Subject: [PATCH 36/68] =?UTF-8?q?=E4=B9=B0=E5=AE=B6=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=8B=BC=E5=9B=A2=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buyer-api/src/main/resources/application.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/buyer-api/src/main/resources/application.yml b/buyer-api/src/main/resources/application.yml index a2f8f570..982bcee4 100644 --- a/buyer-api/src/main/resources/application.yml +++ b/buyer-api/src/main/resources/application.yml @@ -135,22 +135,22 @@ ignored: - /MP_verify_qSyvBPhDsPdxvOhC.txt - /weixin/** - /source/** - - /buyer/store/** - /buyer/mini-program/** - /buyer/cashier/** - /buyer/pageData/** - /buyer/article/** - /buyer/goods/** - /buyer/category/** - - /buyer/shop/** + - /buyer/store/** - /buyer/connect/** - /buyer/members/** - - /buyer/promotion/pintuan - - /buyer/promotion/seckill + - /buyer/promotion/pintuan/** + - /buyer/promotion/seckill/** + - /buyer/promotion/pointsGoods/** - /buyer/memberEvaluation/**/goodsEvaluation - /buyer/memberEvaluation/**/evaluationNumber - /buyer/appVersion/** - - /buyer/broadcast/studio + - /buyer/broadcast/studio/** - /druid/** - /swagger-ui.html - /doc.html From 73002148d40c18602d929768f358138191275468 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 4 Jun 2021 15:42:35 +0800 Subject: [PATCH 37/68] =?UTF-8?q?1.=E5=B1=95=E7=A4=BA=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E7=9A=84=E5=95=86=E5=93=81=E6=95=B0=E9=87=8F=E3=80=81=E6=94=B6?= =?UTF-8?q?=E8=97=8F=E6=95=B0=E9=87=8F=202.=E5=8A=A8=E6=80=81=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E4=BC=98=E6=83=A0=E5=88=B8=E8=BF=9B=E8=A1=8C=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=88=A4=E6=96=AD=E3=80=82=203.=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=AE=A2=E5=8D=95API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/PromotionEverydayExecute.java | 60 +++++------- .../order/entity/dto/OrderExportDTO.java | 95 +++++++++++++++++++ .../order/entity/dto/OrderSearchParams.java | 3 - .../order/order/mapper/OrderMapper.java | 6 ++ .../order/order/service/OrderService.java | 9 ++ .../order/serviceimpl/OrderServiceImpl.java | 15 ++- .../promotion/entity/dos/CouponActivity.java | 2 - .../serviceimpl/CouponServiceImpl.java | 51 ++++++---- .../store/entity/vos/StoreBasicInfoVO.java | 7 ++ .../trade/OrderManagerController.java | 11 ++- 10 files changed, 189 insertions(+), 70 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index d0a1aa47..9804989f 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -1,12 +1,12 @@ package cn.lili.timetask.handler.impl.promotion; +import cn.hutool.core.date.DateTime; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.entity.vos.PintuanVO; import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.service.EsGoodsIndexService; @@ -66,7 +66,6 @@ public class PromotionEverydayExecute implements EveryDayExecute { private SeckillService seckillService; - /** * 将已过期的促销活动置为结束 */ @@ -81,11 +80,11 @@ public class PromotionEverydayExecute implements EveryDayExecute { List promotionIds = new ArrayList<>(); //关闭满减活动 - endFullDiscount(promotionIds,query); + endFullDiscount(promotionIds, query); //关闭拼团活动 - endPintuan(promotionIds,query); + endPintuan(promotionIds, query); //关闭优惠券 - endCoupon(promotionIds,query); + endCoupon(); //每日新增秒杀活动 addSeckill(); promotionGoodsService.update(this.getUpdatePromotionGoodsWrapper(promotionIds)); @@ -96,19 +95,20 @@ public class PromotionEverydayExecute implements EveryDayExecute { * 从系统设置中获取秒杀活动的配置 * 添加30天后的秒杀活动 */ - private void addSeckill(){ + private void addSeckill() { Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); - SeckillSetting seckillSetting=new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); - Seckill seckill=new Seckill(seckillSetting.getHours(),seckillSetting.getSeckillRule()); + SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); + Seckill seckill = new Seckill(seckillSetting.getHours(), seckillSetting.getSeckillRule()); seckillService.saveSeckill(seckill); } /** * 修改满额活动下的商品 + * * @param promotionIds 促销活动ID - * @param query 查询Wrapper + * @param query 查询Wrapper */ - private void endFullDiscount(List promotionIds,Query query){ + private void endFullDiscount(List promotionIds, Query query) { //关闭满减活动 List fullDiscountVOS = mongoTemplate.find(query, FullDiscountVO.class); if (!fullDiscountVOS.isEmpty()) { @@ -131,10 +131,11 @@ public class PromotionEverydayExecute implements EveryDayExecute { /** * 修改拼团活动下的商品 + * * @param promotionIds 促销活动ID - * @param query 查询Wrapper + * @param query 查询Wrapper */ - private void endPintuan(List promotionIds,Query query){ + private void endPintuan(List promotionIds, Query query) { List pintuanVOS = mongoTemplate.find(query, PintuanVO.class); if (!pintuanVOS.isEmpty()) { //准备修改活动的id @@ -157,36 +158,19 @@ public class PromotionEverydayExecute implements EveryDayExecute { /** * 修改优惠券下的商品 - * @param promotionIds 促销活动ID - * @param query 查询Wrapper */ - private void endCoupon(List promotionIds,Query query){ - List couponVOS = mongoTemplate.find(query, CouponVO.class); - if (!couponVOS.isEmpty()) { - List ids = new ArrayList<>(); - for (CouponVO vo : couponVOS) { - vo.setPromotionStatus(PromotionStatusEnum.END.name()); - if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { - for (PromotionGoods promotionGoods : vo.getPromotionGoodsList()) { - promotionGoods.setPromotionStatus(PromotionStatusEnum.END.name()); - esGoodsIndexService.deleteEsGoodsPromotionByPromotionId(promotionGoods.getSkuId(), vo.getId()); - } - } - mongoTemplate.save(vo); - ids.add(vo.getId()); - } - couponService.update(this.getUpdatePromotionWrapper(ids)); - LambdaUpdateWrapper memberCouponLambdaUpdateWrapper = new LambdaUpdateWrapper() - .in(MemberCoupon::getCouponId, ids) - .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) - .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - memberCouponService.update(memberCouponLambdaUpdateWrapper); - promotionIds.addAll(ids); - } + private void endCoupon() { + //修改超时的动态时间优惠券的状态 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) + .le(MemberCoupon::getEndTime, new DateTime()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + memberCouponService.update(lambdaUpdateWrapper); } /** * 获取促销修改查询条件 修改活动状态 + * * @param ids 促销活动ID * @return 促销活动商品查询Wrapper */ @@ -196,8 +180,10 @@ public class PromotionEverydayExecute implements EveryDayExecute { updateWrapper.set("promotion_status", PromotionStatusEnum.END.name()); return updateWrapper; } + /** * 获取商品的促销修改查询条件 修改商品状态 + * * @param ids 促销活动ID * @return 促销活动商品修改Wrapper */ diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java new file mode 100644 index 00000000..8d0b794b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderExportDTO.java @@ -0,0 +1,95 @@ +package cn.lili.modules.order.order.entity.dto; + +import cn.lili.modules.order.order.entity.enums.DeliverStatusEnum; +import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.entity.enums.PayStatusEnum; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 订单导出DTO + * @author Bulbasaur + * @date: 2021/6/3 6:36 下午 + * + */ +@Data +public class OrderExportDTO { + + @ApiModelProperty("订单编号") + private String sn; + + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "用户名") + private String memberName; + + @ApiModelProperty(value = "收件人姓名") + private String consigneeName; + + @ApiModelProperty(value = "收件人手机") + private String consigneeMobile; + + @ApiModelProperty(value = "收件人地址") + private String consigneeAddressPath; + + @ApiModelProperty(value = "详细地址") + private String consigneeDetail; + + @ApiModelProperty(value = "支付方式") + private String paymentMethod; + + @ApiModelProperty(value = "物流公司名称") + private String logisticsName; + + @ApiModelProperty(value = "运费") + private Double freightPrice; + + @ApiModelProperty(value = "商品价格") + private Double goodsPrice; + + @ApiModelProperty(value = "优惠的金额") + private Double discountPrice; + + @ApiModelProperty(value = "总价格") + private Double flowPrice; + + @ApiModelProperty(value = "商品名称") + private String goodsName; + + @ApiModelProperty(value = "商品数量") + private Integer num; + + @ApiModelProperty(value = "买家订单备注") + private String remark; + + /** + * @see OrderStatusEnum + */ + @ApiModelProperty(value = "订单状态") + private String orderStatus; + + /** + * @see PayStatusEnum + */ + @ApiModelProperty(value = "付款状态") + private String payStatus; + + /** + * @see DeliverStatusEnum + */ + @ApiModelProperty(value = "货运状态") + private String deliverStatus; + + @ApiModelProperty(value = "是否需要发票") + private Boolean needReceipt; + + @ApiModelProperty(value = "店铺名称") + private String storeName; +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java index ba8a8fe6..bc66e347 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/OrderSearchParams.java @@ -204,9 +204,6 @@ public class OrderSearchParams extends PageVO { wrapper.like("o.client_type", clientType); } wrapper.eq("o.delete_flag", false); - wrapper.groupBy("o.id"); - wrapper.orderByDesc("o.id"); - return wrapper; } diff --git a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java index 1cc21d35..081f4ae4 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/order/order/mapper/OrderMapper.java @@ -1,6 +1,7 @@ package cn.lili.modules.order.order.mapper; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; import cn.lili.modules.order.order.entity.vo.PaymentLog; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -38,6 +39,11 @@ public interface OrderMapper extends BaseMapper { " FROM li_order o INNER JOIN li_order_item AS oi on o.sn = oi.order_sn ${ew.customSqlSegment} ") IPage queryByParams(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("SELECT o.sn,o.create_time,o.member_name,o.consignee_name,o.consignee_mobile,o.consignee_address_path,o.consignee_detail," + + "o.payment_method, o.logistics_name,o.freight_price,o.goods_price,o.discount_price,o.flow_price,oi.goods_name,oi.num," + + "o.remark,o.order_status,o.pay_status,o.deliver_status,o.need_receipt,o.store_name FROM li_order_item oi INNER JOIN li_order o ON oi.order_sn=o.sn") + List queryExportOrder(@Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("select * from li_order ${ew.customSqlSegment} ") IPage queryPaymentLogs(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 640c69eb..4d887801 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -5,6 +5,7 @@ import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; @@ -49,6 +50,14 @@ public interface OrderService extends IService { */ IPage queryByParams(OrderSearchParams orderSearchParams); + /** + * 查询导出订单列表 + * @param orderSearchParams 查询参数 + * @return 导出订单列表 + */ + List queryExportOrder(OrderSearchParams orderSearchParams); + + /** * 订单详细 * diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 4b81fb0a..5dba270d 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -37,10 +37,7 @@ import cn.lili.modules.order.order.aop.OrderLogPoint; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.Receipt; -import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; -import cn.lili.modules.order.order.entity.dto.OrderMessage; -import cn.lili.modules.order.order.entity.dto.OrderSearchParams; -import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; +import cn.lili.modules.order.order.entity.dto.*; import cn.lili.modules.order.order.entity.enums.*; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; @@ -176,7 +173,15 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public IPage queryByParams(OrderSearchParams orderSearchParams) { - return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), orderSearchParams.queryWrapper()); + QueryWrapper queryWrapper=orderSearchParams.queryWrapper(); + queryWrapper.groupBy("o.id"); + queryWrapper.orderByDesc("o.id"); + return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper); + } + + @Override + public List queryExportOrder(OrderSearchParams orderSearchParams) { + return this.baseMapper.queryExportOrder(orderSearchParams.queryWrapper()); } @Override diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 6cb4c216..26c781a9 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -26,8 +26,6 @@ public class CouponActivity extends BasePromotion { /** * @see CouponActivityTypeEnum - * @author Bulbasaur - * @date: 2021/5/24 10:28 上午 * */ @NotNull(message = "优惠券活动类型不能为空") diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index bb01624c..0ca21fd2 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -87,16 +87,19 @@ public class CouponServiceImpl extends ServiceImpl impleme this.save(coupon); // 如果优惠券类型为部分商品则将促销活动商品更新 this.updateScopePromotionGoods(coupon); - // 保存到MONGO中 - this.mongoTemplate.save(coupon); - PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - coupon.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(coupon.getStartTime().getTime())); + // 如果是动态时间优惠券不走延时任务 + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + // 保存到MONGO中 + this.mongoTemplate.save(coupon); + PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + coupon.getStartTime().getTime(), + promotionMessage, + DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(coupon.getStartTime().getTime())); + } return coupon; } @@ -263,31 +266,37 @@ public class CouponServiceImpl extends ServiceImpl impleme * @param coupon 优惠券信息 */ private void checkParam(CouponVO coupon) { - + //判断优惠券领取数量限制 if (coupon.getCouponLimitNum() < 0) { throw new ServiceException("领取限制数量不能为负数"); } - + //领取数量不能超过发放数量 if (coupon.getCouponLimitNum() > coupon.getPublishNum()) { throw new ServiceException("领取限制数量超出发行数量"); } - + //判断优惠券面额 if (coupon.getCouponType().equals(CouponTypeEnum.PRICE.name()) && coupon.getPrice() > coupon.getConsumeThreshold()) { throw new ServiceException("优惠券面额必须小于优惠券消费限额"); } else if (coupon.getCouponType().equals(CouponTypeEnum.DISCOUNT.name()) && (coupon.getCouponDiscount() < 0 && coupon.getCouponDiscount() > 10)) { throw new ServiceException("优惠券折扣必须小于10且大于0"); } - + //判断优惠券时间 long nowTime = DateUtil.getDateline() * 1000; - if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { - throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { + throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); + } + + PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); + //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 + this.promotionStatusEmpty(coupon); + } else { + //动态时间优惠券需设置有限期并为活动赠送优惠券 + if (coupon.getEffectiveDays() == null || coupon.getGetType().equals(CouponGetEnum.FREE.name())) { + throw new ServiceException("活动赠送优惠券需设置有限期"); + } } - - PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); - this.checkCouponScope(coupon); - //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 - this.promotionStatusEmpty(coupon); } /** diff --git a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java index 7d54992f..f337722a 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/vos/StoreBasicInfoVO.java @@ -43,9 +43,16 @@ public class StoreBasicInfoVO { @ApiModelProperty(value = "是否自营") private String selfOperated; + @ApiModelProperty(value = "商品数量") + private Integer goodsNum; + + @ApiModelProperty(value = "收藏数量") + private Integer collectionNum; + @ApiModelProperty(value = "腾讯云智服唯一标识") private String yzfSign; @ApiModelProperty(value = "腾讯云智服小程序唯一标识") private String yzfMpSign; + } diff --git a/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java b/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java index 0b93d2c3..613bcbcd 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/trade/OrderManagerController.java @@ -1,10 +1,10 @@ package cn.lili.controller.trade; -import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; @@ -21,6 +21,7 @@ import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; import javax.validation.constraints.NotNull; +import java.util.List; /** * 管理端,订单API @@ -31,7 +32,6 @@ import javax.validation.constraints.NotNull; @RestController @RequestMapping("/manager/orders") @Api(tags = "管理端,订单API") - public class OrderManagerController { //订单 @@ -48,6 +48,13 @@ public class OrderManagerController { return ResultUtil.data(orderService.queryByParams(orderSearchParams)); } + @ApiOperation(value = "查询订单导出列表") + @GetMapping("/queryExportOrder") + public ResultMessage> queryExportOrder(OrderSearchParams orderSearchParams) { + return ResultUtil.data(orderService.queryExportOrder(orderSearchParams)); + } + + @ApiOperation(value = "订单明细") @ApiImplicitParam(name = "orderSn", value = "订单编号", required = true, dataType = "String", paramType = "path") @GetMapping(value = "/{orderSn}") From b7e439e1775179bcf6fb95e87e368be2a6f4ccb4 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 5 Jun 2021 14:04:56 +0800 Subject: [PATCH 38/68] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../goods/GoodsBuyerController.java | 3 -- .../service/PromotionGoodsService.java | 11 ----- .../serviceimpl/CouponServiceImpl.java | 44 +++++++++++-------- .../PromotionGoodsServiceImpl.java | 24 ---------- .../promotion/CouponManagerController.java | 6 +-- .../trade/OrderStoreController.java | 6 +++ 6 files changed, 33 insertions(+), 61 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java index f655ce92..e8e0b982 100644 --- a/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/goods/GoodsBuyerController.java @@ -82,9 +82,6 @@ public class GoodsBuyerController { @NotNull(message = "SKU ID不能为空") @PathVariable("skuId") String skuId) { Map map = goodsSkuService.getGoodsSkuDetail(goodsId, skuId); - - - return ResultUtil.data(map); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java index 7eb8d5e3..de04aea4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionGoodsService.java @@ -142,15 +142,4 @@ public interface PromotionGoodsService extends IService { */ void updatePromotionGoodsStock(PromotionTypeEnum typeEnum, String promotionId, String skuId, Integer quantity); - - /** - * 分页获取根据条件获取促销商品 - * - * @param goodsName 商品名称 - * @param categoryPath 商品分类 - * @param promotionType 促销类型 - * @param pageVo 分页参数 - * @return 促销商品信息 - */ - IPage getPromotionGoodsPage(String goodsName, String categoryPath, String promotionType, PageVO pageVo); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 0ca21fd2..86224b20 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -87,10 +87,10 @@ public class CouponServiceImpl extends ServiceImpl impleme this.save(coupon); // 如果优惠券类型为部分商品则将促销活动商品更新 this.updateScopePromotionGoods(coupon); + // 保存到MONGO中 + this.mongoTemplate.save(coupon); // 如果是动态时间优惠券不走延时任务 if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { - // 保存到MONGO中 - this.mongoTemplate.save(coupon); PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, coupon.getStartTime().getTime(), @@ -114,14 +114,17 @@ public class CouponServiceImpl extends ServiceImpl impleme this.updateScopePromotionGoods(couponVO); // 保存到MONGO中 this.mongoTemplate.save(couponVO); - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - // 更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); + // 如果是动态时间优惠券不走延时任务 + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + // 更新延时任务 + PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); + this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage, + coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(), + DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DateUtil.getDelayTime(couponVO.getStartTime().getTime()), + rocketmqCustomProperties.getPromotionTopic()); + } return couponVO; } @@ -141,15 +144,18 @@ public class CouponServiceImpl extends ServiceImpl impleme couponVO.setPromotionStatus(promotionStatus.name()); this.updateById(couponVO); this.mongoTemplate.save(couponVO); - if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) { - PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), couponVO.getStartTime(), couponVO.getEndTime()); - // 更新延时任务 - this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, - promotionMessage, - couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - DateUtil.getDelayTime(couponVO.getStartTime().getTime()), - rocketmqCustomProperties.getPromotionTopic()); + // 如果是动态时间优惠券不走延时任务 + if (couponVO.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + if (promotionStatus.name().equals(PromotionStatusEnum.START.name())) { + PromotionMessage promotionMessage = new PromotionMessage(couponVO.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), couponVO.getStartTime(), couponVO.getEndTime()); + // 更新延时任务 + this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage, + couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), + DelayQueueTools.wrapperUniqueKey(DelayQueueType.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DateUtil.getDelayTime(couponVO.getStartTime().getTime()), + rocketmqCustomProperties.getPromotionTopic()); + } } } return true; diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java index 5cc883de..76990684 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java @@ -335,30 +335,6 @@ public class PromotionGoodsServiceImpl extends ServiceImpl getPromotionGoodsPage(String goodsName, String categoryPath, String promotionType, PageVO pageVo) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (CharSequenceUtil.isNotEmpty(goodsName)) { - queryWrapper.like(PromotionGoods::getGoodsName, goodsName); - } - if (CharSequenceUtil.isNotEmpty(categoryPath)) { - queryWrapper.like(PromotionGoods::getCategoryPath, categoryPath); - } - if (CharSequenceUtil.isNotEmpty(promotionType)) { - queryWrapper.eq(PromotionGoods::getPromotionType, promotionType); - } - return this.page(PageUtil.initPage(pageVo), queryWrapper); - } - private void setFullDiscountPromotionGoods(IPage promotionGoodsPage, List fullDiscountVOS, PageVO pageVo) { List promotionGoodsDTOList = new ArrayList<>(); int total = 0; diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java index 9c8cbd31..cdc4ec46 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponManagerController.java @@ -42,11 +42,9 @@ public class CouponManagerController { @ApiOperation(value = "获取优惠券列表") @GetMapping - public ResultMessage> getCouponList(CouponSearchParams queryParam, PageVO page) { - page.setNotConvert(true); + public ResultMessage> getCouponList(CouponSearchParams queryParam, PageVO page) { queryParam.setStoreId("platform"); - IPage coupons = couponService.getCouponsByPageFromMongo(queryParam, page); - return ResultUtil.data(coupons); + return ResultUtil.data(couponService.getCouponsByPage(queryParam, page)); } @ApiOperation(value = "获取优惠券详情") diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index ca927927..69e0deb5 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -7,6 +7,7 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; +import cn.lili.modules.order.order.entity.dto.OrderExportDTO; import cn.lili.modules.order.order.entity.dto.OrderSearchParams; import cn.lili.modules.order.order.entity.vo.OrderDetailVO; import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; @@ -178,6 +179,11 @@ public class OrderStoreController { } catch (Exception e) { e.printStackTrace(); } + } + @ApiOperation(value = "查询订单导出列表") + @GetMapping("/queryExportOrder") + public ResultMessage> queryExportOrder(OrderSearchParams orderSearchParams) { + return ResultUtil.data(orderService.queryExportOrder(orderSearchParams)); } } \ No newline at end of file From e379a2eb34c2448c7532f91fb8693c69e2d59543 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 5 Jun 2021 14:48:16 +0800 Subject: [PATCH 39/68] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/order/order/service/AfterSaleService.java | 9 +++++++++ .../order/order/serviceimpl/AfterSaleServiceImpl.java | 6 ++++++ .../controller/trade/AfterSaleManagerController.java | 7 +++++++ .../lili/controller/trade/AfterSaleStoreController.java | 7 +++++++ 4 files changed, 29 insertions(+) diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java b/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java index 41baf6ff..21d23e69 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/AfterSaleService.java @@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import java.util.Date; +import java.util.List; /** * 售后业务层 @@ -31,6 +32,14 @@ public interface AfterSaleService extends IService { */ IPage getAfterSalePages(AfterSaleSearchParams saleSearchParams); + /** + * 查询导出售后信息 + * + * @param saleSearchParams 查询参数 + * @return 分页售后信息 + */ + List exportAfterSaleOrder(AfterSaleSearchParams saleSearchParams); + /** * 查询售后信息 * diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java index b553f686..ca072304 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/AfterSaleServiceImpl.java @@ -53,6 +53,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.Date; +import java.util.List; /** * 售后业务层实现 @@ -91,6 +92,11 @@ public class AfterSaleServiceImpl extends ServiceImpl exportAfterSaleOrder(AfterSaleSearchParams saleSearchParams) { + return this.list(saleSearchParams.queryWrapper()); + } + @Override public AfterSaleVO getAfterSale(String sn) { return this.baseMapper.getAfterSaleVO(sn); diff --git a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java b/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java index daf715af..8ae8f5f0 100644 --- a/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/trade/AfterSaleManagerController.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; +import java.util.List; /** * 管理端,售后接口 @@ -40,6 +41,12 @@ public class AfterSaleManagerController { return ResultUtil.data(afterSaleService.getAfterSalePages(searchParams)); } + @ApiOperation(value = "获取导出售后服务列表列表") + @GetMapping(value = "/exportAfterSaleOrder") + public ResultMessage> exportAfterSaleOrder(AfterSaleSearchParams searchParams) { + return ResultUtil.data(afterSaleService.exportAfterSaleOrder(searchParams)); + } + @ApiOperation(value = "查看售后服务详情") @ApiImplicitParam(name = "sn", value = "售后单号", required = true, paramType = "path") @GetMapping(value = "/get/{sn}") diff --git a/seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java index 57792ffa..214f63b6 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/AfterSaleStoreController.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; +import java.util.List; /** * 店铺端,售后管理接口 @@ -44,6 +45,12 @@ public class AfterSaleStoreController { return ResultUtil.data(afterSaleService.getAfterSalePages(searchParams)); } + @ApiOperation(value = "获取导出售后服务列表列表") + @GetMapping(value = "/exportAfterSaleOrder") + public ResultMessage> exportAfterSaleOrder(AfterSaleSearchParams searchParams) { + return ResultUtil.data(afterSaleService.exportAfterSaleOrder(searchParams)); + } + @ApiOperation(value = "审核售后申请") @ApiImplicitParams({ @ApiImplicitParam(name = "afterSaleSn", value = "售后sn", required = true, paramType = "path"), From bbe01e9e672d88c630c2ec63989ee97af751b854 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 5 Jun 2021 17:13:04 +0800 Subject: [PATCH 40/68] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=BB=8F=E9=AA=8C?= =?UTF-8?q?=E5=80=BC=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/goods/entity/dos/DraftGoods.java | 3 --- .../goods/entity/dto/GoodsOperationDTO.java | 3 --- .../modules/goods/service/GoodsService.java | 3 +-- .../goods/serviceimpl/GoodsServiceImpl.java | 2 +- .../serviceimpl/PointsGoodsServiceImpl.java | 4 +++- .../member/MemberGradeManagerController.java | 17 ++++++++++++++++- .../promotion/PointsGoodsManagerController.java | 3 +-- .../setting/SettingManagerController.java | 8 ++++++-- .../controller/goods/GoodsStoreController.java | 5 ++--- 9 files changed, 30 insertions(+), 18 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java index 6281e45f..48d74437 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java @@ -112,9 +112,6 @@ public class DraftGoods extends BaseEntity { @ApiModelProperty(value = "运费模板id") private String templateId; - @ApiModelProperty(value = "运费承担者") - private String freightPayer; - @ApiModelProperty(value = "是否自营") private Boolean selfOperated; /** diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java index 40845f9a..20cf8120 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java @@ -66,9 +66,6 @@ public class GoodsOperationDTO implements Serializable { @Max(value = 99999999, message = "重量不能超过99999999") private Double weight; - @ApiModelProperty(value = "谁承担运费 BUYER:买家承担,STORE:卖家承担", required = true) - private String freightPayer; - @ApiModelProperty(value = "详情") private String intro; diff --git a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java index 253ebb87..d95ca80a 100644 --- a/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java +++ b/framework/src/main/java/cn/lili/modules/goods/service/GoodsService.java @@ -109,11 +109,10 @@ public interface GoodsService extends IService { * 设置商品运费模板 * * @param goodsIds 商品列表 - * @param freightPayer 承担运费者 * @param templateId 运费模板ID * @return 操作结果 */ - Boolean freight(List goodsIds, String freightPayer, String templateId); + Boolean freight(List goodsIds, String templateId); /** * 修改商品库存数量 diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index 8ffc0aa2..edf43efb 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -272,7 +272,7 @@ public class GoodsServiceImpl extends ServiceImpl implements } @Override - public Boolean freight(List goodsIds, String freightPayer, String templateId) { + public Boolean freight(List goodsIds, String templateId) { LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(Goods::getTemplateId, templateId); lambdaUpdateWrapper.in(Goods::getId, goodsIds); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java index a6fb6770..2871e4bf 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java @@ -237,7 +237,9 @@ public class PointsGoodsServiceImpl extends ServiceImpl daa(@Validated MemberGrade memberGrade) { + if (memberGradeService.updateById(memberGrade)) { + return ResultUtil.success(ResultCode.SUCCESS); + } + throw new ServiceException(ResultCode.ERROR); + } + @ApiOperation(value = "修改会员等级") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, paramType = "path") @@ -57,9 +70,11 @@ public class MemberGradeManagerController { throw new ServiceException(ResultCode.ERROR); } + + @ApiOperation(value = "删除会员等级") @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, dataType = "String", paramType = "path") - @PutMapping(value = "/delete/{id}") + @DeleteMapping(value = "/delete/{id}") public ResultMessage> delete(@PathVariable String id) { if(memberGradeService.getById(id).getIsDefault()){ throw new ServiceException(ResultCode.USER_GRADE_IS_DEFAULT); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java index e7b2b59c..acfe4ca5 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java @@ -36,11 +36,10 @@ public class PointsGoodsManagerController { @PostMapping(consumes = "application/json", produces = "application/json") @ApiOperation(value = "添加积分商品") public ResultMessage addPointsGoods(@RequestBody List pointsGoodsList) { - AuthUser currentUser = UserContext.getCurrentUser(); List collect = new ArrayList<>(); for (PointsGoodsVO i : pointsGoodsList) { i.setStoreName(i.getGoodsSku().getStoreName()); - i.setStoreId(currentUser.getId()); + i.setStoreId(UserContext.getCurrentUser().getStoreId()); collect.add(i); } pointsGoodsService.addPointsGoods(collect); diff --git a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java index 916e3956..3f301f0f 100644 --- a/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/setting/SettingManagerController.java @@ -46,7 +46,7 @@ public class SettingManagerController { "WECHAT_PC_CONNECT,WECHAT_WAP_CONNECT,WECHAT_APP_CONNECT,WECHAT_MP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT,WEIBO_CONNECT,ALIPAY_CONNECT," + - "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT,SECKILL_SETTING") + "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT,SECKILL_SETTING,EXPERIENCE_SETTING") public ResultMessage saveConfig(@PathVariable String key, @RequestBody String configValue) { SettingEnum settingEnum = SettingEnum.valueOf(key); //获取系统配置 @@ -92,7 +92,7 @@ public class SettingManagerController { "WECHAT_PC_CONNECT,WECHAT_WAP_CONNECT,WECHAT_APP_CONNECT,WECHAT_MP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT," + "QQ_WEB_CONNECT,QQ_APP_CONNECT,WEIBO_CONNECT,ALIPAY_CONNECT," + - "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT,SECKILL_SETTING" + "PAYMENT_SUPPORT,ALIPAY_PAYMENT,WECHAT_PAYMENT,SECKILL_SETTING,EXPERIENCE_SETTING" ) public ResultMessage settingGet(@PathVariable String key) { return createSetting(key); @@ -175,6 +175,10 @@ public class SettingManagerController { return setting == null ? ResultUtil.data(new SeckillSetting()) : ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), SeckillSetting.class)); + case EXPERIENCE_SETTING: + return setting == null ? + ResultUtil.data(new ExperienceSetting()) : + ResultUtil.data(JSONUtil.toBean(setting.getSettingValue(), ExperienceSetting.class)); default: throw new ServiceException(ResultCode.SETTING_NOT_TO_SET); } diff --git a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java index b59a1e02..952925ef 100644 --- a/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java @@ -139,11 +139,10 @@ public class GoodsStoreController { @PutMapping(value = "/freight") @ApiImplicitParams({ @ApiImplicitParam(name = "goodsId", value = "商品ID", required = true, paramType = "query", allowMultiple = true), - @ApiImplicitParam(name = "freightPayer", value = "运费承担者", required = true, paramType = "query"), @ApiImplicitParam(name = "templateId", value = "运费模板ID", required = true, paramType = "query") }) - public ResultMessage freight(@RequestParam List goodsId, @RequestParam String freightPayer, @RequestParam String templateId) { - goodsService.freight(goodsId, freightPayer, templateId); + public ResultMessage freight(@RequestParam List goodsId, @RequestParam String templateId) { + goodsService.freight(goodsId, templateId); return ResultUtil.success(); } From 431f7c014f66a340b2e2b2ddcb7eab091a2f141a Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 7 Jun 2021 09:59:09 +0800 Subject: [PATCH 41/68] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=EF=BC=8C=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=20=E6=B7=BB=E5=8A=A0update.sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page/serviceimpl/PageDataServiceImpl.java | 17 +++++++++++++++++ update.sql | 14 ++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 update.sql diff --git a/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java b/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java index 92165a49..d2d4014f 100644 --- a/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/page/serviceimpl/PageDataServiceImpl.java @@ -50,12 +50,29 @@ public class PageDataServiceImpl extends ServiceImpl i @Override public PageData addPageData(PageData pageData) { + //如果页面为发布,则关闭其他页面,开启此页面 + if(pageData.getPageShow().equals(SwitchEnum.OPEN.name())){ + LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(PageData::getPageType,pageData.getPageType()); + lambdaUpdateWrapper.eq(PageData::getPageClientType,pageData.getPageClientType()); + lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name()); + this.update(lambdaUpdateWrapper); + } this.save(pageData); return pageData; } @Override public PageData updatePageData(PageData pageData) { + //如果页面为发布,则关闭其他页面,开启此页面 + if(pageData.getPageShow().equals(SwitchEnum.OPEN.name())){ + LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); + lambdaUpdateWrapper.eq(PageData::getPageType,pageData.getPageType()); + lambdaUpdateWrapper.eq(PageData::getPageClientType,pageData.getPageClientType()); + lambdaUpdateWrapper.set(PageData::getPageShow, SwitchEnum.CLOSE.name()); + this.update(lambdaUpdateWrapper); + } + LambdaUpdateWrapper lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(PageData::getPageData, pageData.getPageData()); lambdaUpdateWrapper.eq(PageData::getId, pageData.getId()); diff --git a/update.sql b/update.sql new file mode 100644 index 00000000..d853abbf --- /dev/null +++ b/update.sql @@ -0,0 +1,14 @@ +/** 修改文章表**/ +ALTER TABLE li_article DROP COLUMN open_status; +ALTER TABLE li_article ADD open_status bit ( 1 ); +UPDATE li_article SET open_status = 1; +/** 增加会员等级会员经验值**/ +ALTER TABLE li_member ADD gradeId VARCHAR ( 32 ); +ALTER TABLE li_member ADD experience BIGINT; +/**去除商品运费承担**/ +ALTER TABLE li_goods DROP COLUMN freight_payer; +/**增加优惠券有效期类型**/ +ALTER TABLE li_coupon ADD range_day_type VARCHAR ( 32 ); +ALTER TABLE li_coupon ADD effective_days INT; +/**秒杀增加显示商品数量**/ +ALTER TABLE li_seckill ADD goods_num INT; From e176d920cc37704ed68acd42d144049cb129e439 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 7 Jun 2021 15:08:12 +0800 Subject: [PATCH 42/68] =?UTF-8?q?=E5=BA=97=E9=93=BA=E7=BB=93=E7=AE=97?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=BC=80=E5=A7=8B=E3=80=81=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../timetask/handler/impl/bill/BillExecute.java | 16 +++++++++------- framework/pom.xml | 9 +-------- .../mapper/DistributionOrderMapper.java | 7 +++---- .../order/serviceimpl/StoreFlowServiceImpl.java | 9 ++------- .../cn/lili/modules/store/mapper/BillMapper.java | 9 +++++---- .../modules/store/mapper/StoreDetailMapper.java | 10 +++++----- .../lili/modules/store/service/BillService.java | 4 +++- .../store/serviceimpl/BillServiceImpl.java | 14 +++++++++++--- 8 files changed, 39 insertions(+), 39 deletions(-) diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java index 5905e279..2c62d650 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/bill/BillExecute.java @@ -1,15 +1,15 @@ package cn.lili.timetask.handler.impl.bill; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.mapper.StoreDetailMapper; import cn.lili.modules.store.service.BillService; import cn.lili.timetask.handler.EveryDayExecute; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.util.List; /** @@ -25,7 +25,7 @@ public class BillExecute implements EveryDayExecute { @Autowired private BillService billService; //店铺详情 - @Autowired + @Resource private StoreDetailMapper storeDetailMapper; /** @@ -37,19 +37,21 @@ public class BillExecute implements EveryDayExecute { public void execute() { //获取当前时间的前一天 - String day = "," + DateUtil.date().dayOfMonth() + ","; + int day = DateUtil.date().dayOfMonth(); //获取待结算商家列表 - List storeList = storeDetailMapper.getSettlementStore(new QueryWrapper().like("settlement_cycle", day)); + List storeList = storeDetailMapper.getSettlementStore(day); + //获取当前时间 + DateTime endTime =DateUtil.date(); //批量商家结算 for (StoreSettlementDay storeSettlementDay : storeList) { //生成结算单 - billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay()); + billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(),endTime); //修改店铺结算时间 - storeDetailMapper.updateSettlementDay(storeSettlementDay.getStoreId(), DateUtil.date()); + storeDetailMapper.updateSettlementDay(storeSettlementDay.getStoreId(), endTime); } } } diff --git a/framework/pom.xml b/framework/pom.xml index 9c398f37..f9842efd 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -45,16 +45,13 @@ 2.3.1 1.21 1.2 -<<<<<<< HEAD 5.0.0 5.0.0 6.6 3.4.1 1.7.28 2.2.0 -======= 1.4 ->>>>>>> master @@ -345,7 +342,6 @@ UserAgentUtils ${userAgentUtils} -<<<<<<< HEAD org.apache.poi poi @@ -393,14 +389,11 @@ com.github.xkzhangsan xk-time ${xk-time} -======= - - + org.apache.commons commons-text ${commons-text} ->>>>>>> master diff --git a/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java b/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java index 02d8d8e1..b5997871 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java +++ b/framework/src/main/java/cn/lili/modules/distribution/mapper/DistributionOrderMapper.java @@ -3,7 +3,7 @@ package cn.lili.modules.distribution.mapper; import cn.hutool.core.date.DateTime; import cn.lili.modules.distribution.entity.dos.DistributionOrder; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; /** * 分销订单数据处理层 @@ -16,9 +16,8 @@ public interface DistributionOrderMapper extends BaseMapper { /** * 分销提佣 */ - @Select("UPDATE li_distribution AS d SET " + - "d.can_rebate =(can_rebate +(SELECT SUM( dorder.rebate ) FROM li_distribution_order AS dorder " + - "WHERE dorder.distribution_id = d.id AND dorder.distribution_order_status=#{distributionOrderStatus} AND dorder.settle_cycle<=#{settleCycle}))") + @Update("UPDATE li_distribution AS d " + + "SET d.can_rebate =(d.can_rebate +(SELECT SUM( dorder.rebate ) FROM li_distribution_order AS dorder WHERE dorder.distribution_id = d.id AND dorder.distribution_order_status=#{distributionOrderStatus} AND dorder.settle_cycle< #{settleCycle} ))") void rebate(String distributionOrderStatus, DateTime settleCycle); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java index 76a2d176..4b9f726b 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java @@ -141,14 +141,9 @@ public class StoreFlowServiceImpl extends ServiceImpl lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreFlow::getStoreId, storeId); - if (distribution) { - lambdaQueryWrapper.isNotNull(StoreFlow::getDistributionRebate); - } + lambdaQueryWrapper.isNotNull(distribution,StoreFlow::getDistributionRebate); lambdaQueryWrapper.between(StoreFlow::getCreateTime, startTime, endTime); - if (StringUtils.isNotEmpty(type)) { - lambdaQueryWrapper.eq(StoreFlow::getFlowType, type); - } - + lambdaQueryWrapper.eq(StringUtils.isNotEmpty(type),StoreFlow::getFlowType, type); return this.page(PageUtil.initPage(pageVO), lambdaQueryWrapper); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java b/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java index cc14d1e7..468ebc87 100644 --- a/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java +++ b/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java @@ -4,6 +4,7 @@ package cn.lili.modules.store.mapper; import cn.lili.modules.store.entity.dos.Bill; import cn.lili.modules.store.entity.vos.BillListVO; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; @@ -23,11 +24,11 @@ public interface BillMapper extends BaseMapper { @Select("SELECT SUM( final_price ) AS orderPrice,SUM( commission_price ) AS commissionPrice" + ",SUM( distribution_rebate ) AS distributionCommission,SUM( site_coupon_commission ) AS siteCouponCommission" + - ",SUM( bill_price ) AS billPrice FROM li_store_flow WHERE store_id=#{storeId} AND flow_type=#{flowType}") - Bill getOrderBill(String storeId, String flowType); + ",SUM( bill_price ) AS billPrice FROM li_store_flow ${ew.customSqlSegment}") + Bill getOrderBill(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); @Select("SELECT SUM( final_price ) AS refundPrice,SUM( commission_price ) AS refundCommissionPrice" + ",SUM( distribution_rebate ) AS distributionRefundCommission,SUM( site_coupon_commission ) AS siteCouponRefundCommission" + - ",SUM( bill_price ) AS billPrice FROM li_store_flow WHERE store_id=#{storeId} AND flow_type=#{flowType}") - Bill getRefundBill(String storeId, String flowType); + ",SUM( bill_price ) AS billPrice FROM li_store_flow ${ew.customSqlSegment}") + Bill getRefundBill(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java b/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java index 1478fea8..c6e0a920 100644 --- a/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java +++ b/framework/src/main/java/cn/lili/modules/store/mapper/StoreDetailMapper.java @@ -6,10 +6,7 @@ import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; import cn.lili.modules.store.entity.dto.StoreSettlementDay; import cn.lili.modules.store.entity.vos.StoreBasicInfoVO; import cn.lili.modules.store.entity.vos.StoreDetailVO; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; @@ -38,8 +35,11 @@ public interface StoreDetailMapper extends BaseMapper { "from li_store_detail s where s.store_id=#{storeId}") StoreAfterSaleAddressDTO getStoreAfterSaleAddressDTO(String storeId); - @Select("SELECT store_id,settlement_day FROM li_store_detail ${ew.customSqlSegment}") - List getSettlementStore(@Param(Constants.WRAPPER) Wrapper queryWrapper); + @Select("SELECT store_id,settlement_day FROM li_store_detail " + + "WHERE settlement_cycle LIKE concat(#{day},',%') " + + "OR settlement_cycle LIKE concat('%,',#{day},',%') " + + "OR settlement_cycle LIKE concat('%,',#{day})") + List getSettlementStore(int day); @Update("UPDATE li_store_detail SET settlement_day=#{dateTime} WHERE store_id=#{storeId}") void updateSettlementDay(String storeId, DateTime dateTime); diff --git a/framework/src/main/java/cn/lili/modules/store/service/BillService.java b/framework/src/main/java/cn/lili/modules/store/service/BillService.java index 2d0e40ee..5759a700 100644 --- a/framework/src/main/java/cn/lili/modules/store/service/BillService.java +++ b/framework/src/main/java/cn/lili/modules/store/service/BillService.java @@ -1,5 +1,6 @@ package cn.lili.modules.store.service; +import cn.hutool.core.date.DateTime; import cn.lili.common.vo.PageVO; import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.store.entity.dos.Bill; @@ -26,8 +27,9 @@ public interface BillService extends IService { * * @param storeId 商家ID * @param startTime 开始时间 + * @param endTime 结束时间 */ - void createBill(String storeId, Date startTime); + void createBill(String storeId, Date startTime, DateTime endTime); /** diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index 36a2f95c..96afe165 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -1,5 +1,6 @@ package cn.lili.modules.store.serviceimpl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -51,7 +52,7 @@ public class BillServiceImpl extends ServiceImpl implements Bi private StoreFlowService storeFlowService; @Override - public void createBill(String storeId, Date startTime) { + public void createBill(String storeId, Date startTime, DateTime endTime) { //获取结算店铺 StoreDetailVO store = storeDetailService.getStoreDetailVO(storeId); @@ -74,7 +75,11 @@ public class BillServiceImpl extends ServiceImpl implements Bi bill.setSn(SnowFlake.createStr("B")); //入账结算信息 - Bill orderBill = this.baseMapper.getOrderBill(storeId, FlowTypeEnum.PAY.name()); + Bill orderBill = this.baseMapper.getOrderBill(new QueryWrapper() + .eq("store_id",storeId) + .eq("flow_type",FlowTypeEnum.PAY.name()) + .between("create_time",startTime,endTime)); + Double orderPrice = 0D; if (orderBill != null) { bill.setOrderPrice(orderBill.getOrderPrice()); @@ -86,7 +91,10 @@ public class BillServiceImpl extends ServiceImpl implements Bi //退款结算信息 - Bill refundBill = this.baseMapper.getRefundBill(storeId, FlowTypeEnum.REFUND.name()); + Bill refundBill = this.baseMapper.getRefundBill(new QueryWrapper() + .eq("store_id",storeId) + .eq("flow_type",FlowTypeEnum.REFUND.name()) + .between("create_time",startTime,endTime)); Double refundPrice = 0D; if(refundBill!=null){ bill.setRefundPrice(refundBill.getRefundPrice()); From cf4f9dd6bc985c42850b80cac48aee9506ef9f69 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 9 Jun 2021 16:29:25 +0800 Subject: [PATCH 43/68] =?UTF-8?q?=E5=95=86=E5=93=81=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=99=9A=E6=8B=9F=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/modules/goods/entity/dos/DraftGoods.java | 6 ++++++ .../modules/goods/serviceimpl/DraftGoodsServiceImpl.java | 3 +-- .../lili/modules/goods/serviceimpl/GoodsServiceImpl.java | 4 ++-- .../cn/lili/modules/search/entity/dos/EsGoodsIndex.java | 7 ++++++- .../cn/lili/modules/store/serviceimpl/BillServiceImpl.java | 7 ------- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java index 48d74437..23e0a4a3 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java @@ -151,4 +151,10 @@ public class DraftGoods extends BaseEntity { @ApiModelProperty(value = "sku列表JSON") private String skuListJson; + /** + * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum + */ + @ApiModelProperty(value = "商品类型", required = true) + private String goodsType; + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/DraftGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/DraftGoodsServiceImpl.java index 3566b0e7..3ff33cd8 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/DraftGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/DraftGoodsServiceImpl.java @@ -16,7 +16,6 @@ import cn.lili.modules.goods.service.GoodsGalleryService; import cn.lili.modules.goods.service.GoodsSkuService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -70,7 +69,7 @@ public class DraftGoodsServiceImpl extends ServiceImpl implements //判断商品类型 switch (goods.getGoodsType()) { case "PHYSICAL_GOODS": - if (goods.getTemplateId() == null) { + if (goods.getTemplateId().equals("0")) { throw new ServiceException("实物商品需选择配送模板"); } break; case "VIRTUAL_GOODS": - if (goods.getTemplateId() != null) { + if (!goods.getTemplateId().equals("0")) { throw new ServiceException("虚拟商品不需要选择配送模板"); } break; diff --git a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java index 76f54d9e..ddca62c3 100644 --- a/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java +++ b/framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java @@ -8,7 +8,6 @@ import cn.lili.modules.goods.entity.dos.GoodsSku; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.ToString; import org.springframework.data.annotation.Id; @@ -225,6 +224,12 @@ public class EsGoodsIndex implements Serializable { @Field(type = FieldType.Date, format = DateFormat.basic_date_time) private Date releaseTime; + /** + * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum + */ + @ApiModelProperty(value = "商品类型", required = true) + private String goodsType; + /** * 商品属性(参数和规格) */ diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index 4ed46ab9..36c92826 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -51,12 +51,9 @@ public class BillServiceImpl extends ServiceImpl implements Bi //商家流水 @Autowired private StoreFlowService storeFlowService; -<<<<<<< HEAD -======= //结算单 @Resource private BillMapper billMapper; ->>>>>>> master @Override public void createBill(String storeId, Date startTime, DateTime endTime) { @@ -86,10 +83,6 @@ public class BillServiceImpl extends ServiceImpl implements Bi .eq("store_id",storeId) .eq("flow_type",FlowTypeEnum.PAY.name()) .between("create_time",startTime,endTime)); -<<<<<<< HEAD - -======= ->>>>>>> master Double orderPrice = 0D; if (orderBill != null) { bill.setOrderPrice(orderBill.getOrderPrice()); From 19ae44f85122b7e54923d90b0e605187fed7718b Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 9 Jun 2021 17:39:57 +0800 Subject: [PATCH 44/68] =?UTF-8?q?=E5=95=86=E5=93=81=E8=A7=84=E6=A0=BC?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=95=86=E5=93=81=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java | 5 +++++ .../lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java | 1 + 2 files changed, 6 insertions(+) diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java index 830ed3ff..7b9231f4 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/GoodsSku.java @@ -158,6 +158,11 @@ public class GoodsSku extends BaseEntity { @ApiModelProperty(value = "销售模式", required = true) private String salesModel; + /** + * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum + */ + @ApiModelProperty(value = "商品类型", required = true) + private String goodsType; @Override public Date getUpdateTime() { diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java index d2e0e856..5db2536b 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java @@ -490,6 +490,7 @@ public class GoodsSkuServiceImpl extends ServiceImpl i if (goods.getSelfOperated() != null) { goodsSku.setSelfOperated(goods.getSelfOperated()); } + goodsSku.setGoodsType(goods.getGoodsType()); EsGoodsIndex goodsIndex = (EsGoodsIndex) resultMap.get("goodsIndex"); skus.add(goodsSku); goodsIndices.add(goodsIndex); From 34e5488b9dc3bb948f6740d10479076284b9cced Mon Sep 17 00:00:00 2001 From: lifenlong Date: Thu, 10 Jun 2021 16:25:40 +0800 Subject: [PATCH 45/68] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=20=E7=94=B1=E5=89=8D=E5=8F=B0=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=BE=85=E5=8F=91=E8=B4=A7=E8=AE=A2=E5=8D=95=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms/impl/SmsUtilAliImplService.java | 1 + .../order/cart/service/CartServiceImpl.java | 11 +++- .../modules/order/order/entity/dos/Order.java | 2 +- .../order/order/service/OrderService.java | 10 --- .../order/serviceimpl/OrderServiceImpl.java | 62 +++++-------------- .../trade/OrderStoreController.java | 20 +----- 6 files changed, 28 insertions(+), 78 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java b/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java index 19fc0fec..b0d7399b 100644 --- a/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java +++ b/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java @@ -103,6 +103,7 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { default: return; } + log.info("短信验证码:"+code); //缓存中写入要验证的信息 cache.put(cacheKey(verificationEnums, mobile, uuid), code, 300L); //发送短信 diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index 9a2d8dc2..b14d949c 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -10,6 +10,7 @@ import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.goods.entity.enums.GoodsTypeEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; @@ -524,17 +525,23 @@ public class CartServiceImpl implements CartService { if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } + //循环购物车列表计算运费 for (CartSkuVO cartSkuVO : skuList) { + GoodsSku goodsSku = cartSkuVO.getGoodsSku(); + //如果是虚拟商品无需运费 + if (goodsSku.getGoodsType() != null && goodsSku.getGoodsType().equals(GoodsTypeEnum.VIRTUAL_GOODS.name())) { + break; + } + //获取运费模板ID String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); //店铺支付运费则跳过 - if(freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())){ + if (freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())) { break; } //收货地址判定 forTemplates: if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { - //获取市级别id String addressId = memberAddress.getConsigneeAddressIdPath().split(",")[1]; //获取匹配的收货地址 diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 0aa85356..b13c2594 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -213,7 +213,7 @@ public class Order extends BaseEntity { //订单类型判断--普通订单,活动订单。 if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.CART) || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.BUY_NOW)) { this.setOrderType(OrderTypeEnum.NORMAL.name()); - } else { + } else { this.setOrderType(tradeDTO.getCartTypeEnum().name()); } //设定订单默认状态 diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 4d887801..c32f916e 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -195,16 +195,6 @@ public interface OrderService extends IService { */ void agglomeratePintuanOrder(String pintuanId, String parentOrderSn); - /** - * 获取待发货订单编号列表 - * - * @param response - * @param orderIds 订单ID列表 - * @param logisticsName 店铺已选择物流公司列表 - * @return 待发货订单编号列表 - */ - void getBatchDeliverList(HttpServletResponse response, List orderIds, List logisticsName); - /** * 订单批量发货 * diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 64f8f9e2..bd58f07b 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -173,7 +173,7 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public IPage queryByParams(OrderSearchParams orderSearchParams) { - QueryWrapper queryWrapper=orderSearchParams.queryWrapper(); + QueryWrapper queryWrapper = orderSearchParams.queryWrapper(); queryWrapper.groupBy("o.id"); queryWrapper.orderByDesc("o.id"); return this.baseMapper.queryByParams(PageUtil.initPage(orderSearchParams), queryWrapper); @@ -287,7 +287,7 @@ public class OrderServiceImpl extends ServiceImpl implements Order order = this.getBySn(orderSn); //判断是否为拼团订单,进行特殊处理 //判断订单类型进行不同的订单确认操作 - if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.PINTUAN.name())) { + if (order.getOrderPromotionType() != null && order.getOrderPromotionType().equals(OrderPromotionTypeEnum.PINTUAN.name())) { this.checkPintuanOrder(order.getPromotionId(), order.getParentOrderSn()); } else { //判断订单类型 @@ -362,12 +362,12 @@ public class OrderServiceImpl extends ServiceImpl implements @Override @OrderLogPoint(description = "'订单['+#orderSn+']核销,核销码['+#verificationCode+']'", orderSn = "#orderSn") - public Order take(String orderSn,String verificationCode) { + public Order take(String orderSn, String verificationCode) { //获取订单信息 Order order = this.getBySn(orderSn); //检测虚拟订单信息 - checkVerificationOrder(order,verificationCode); + checkVerificationOrder(order, verificationCode); order.setOrderStatus(OrderStatusEnum.COMPLETED.name()); //修改订单信息 this.updateById(order); @@ -383,7 +383,7 @@ public class OrderServiceImpl extends ServiceImpl implements public Order getOrderByVerificationCode(String verificationCode) { return this.getOne(new LambdaQueryWrapper() .eq(Order::getOrderStatus, OrderStatusEnum.TAKE.name()) - .eq(Order::getStoreId,UserContext.getCurrentUser().getStoreId()) + .eq(Order::getStoreId, UserContext.getCurrentUser().getStoreId()) .eq(Order::getVerificationCode, verificationCode)); } @@ -500,41 +500,6 @@ public class OrderServiceImpl extends ServiceImpl implements } } - @Override - public void getBatchDeliverList(HttpServletResponse response, List orderIds, List logisticsName) { - //获取待发货订单列表 - List deliverList = this.baseMapper.deliverSnList(new LambdaQueryWrapper() - .eq(Order::getStoreId, UserContext.getCurrentUser().getStoreId()) - .eq(Order::getOrderStatus, "'UNDELIVERED'") - .in(orderIds.size() > 0, Order::getId, orderIds)); - //如果没有待发货的订单则返回 - if (deliverList.size() < 1) { - throw new ServiceException(ResultCode.ORDER_DELIVER_NUM_ERROR); - } - ExcelWriter writer = ExcelUtil.getWriter(); - writer.addHeaderAlias("sn", "订单号"); - writer.addHeaderAlias("logisticsName", "物流公司"); - writer.addHeaderAlias("logisticsNo", "物流单号"); - //写入待发货的订单列表 - writer.write(deliverList, true); - //存放下拉列表 - String[] logiList = logisticsName.toArray(new String[]{}); - CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, deliverList.size(), 2, 3); - writer.addSelect(cellRangeAddressList, logiList); - - response.setHeader("Content-Disposition", "attachment;filename=批量发货.xls"); - ServletOutputStream out = null; - try { - out = response.getOutputStream(); - writer.flush(out, true); - } catch (IOException e) { - log.error("获取待发货订单编号列表错误",e); - } finally { - writer.close(); - } - IoUtil.close(out); - } - @Override public void batchDeliver(List list) { //循环检查是否符合规范 @@ -553,11 +518,13 @@ public class OrderServiceImpl extends ServiceImpl implements private void checkBatchDeliver(List list) { for (OrderBatchDeliverDTO orderBatchDeliverDTO : list) { //查看订单号是否存在-是否是当前店铺的订单 - int count = this.count(new LambdaQueryWrapper() + Order order = this.getOne(new LambdaQueryWrapper() .eq(Order::getStoreId, UserContext.getCurrentUser().getStoreId()) .eq(Order::getSn, orderBatchDeliverDTO.getOrderSn())); - if (count == 0) { + if (order==null) { throw new ServiceException("订单编号:'" + orderBatchDeliverDTO.getOrderSn() + " '不存在"); + }else if(order.getOrderStatus().equals(OrderStatusEnum.DELIVERED.name())){ + throw new ServiceException("订单编号:'" + orderBatchDeliverDTO.getOrderSn() + " '不能发货"); } //查看物流公司 Logistics logistics = logisticsService.getOne(new LambdaQueryWrapper().eq(Logistics::getName, orderBatchDeliverDTO.getLogisticsName())); @@ -825,12 +792,13 @@ public class OrderServiceImpl extends ServiceImpl implements /** * 检测虚拟订单信息 - * @param order 订单 + * + * @param order 订单 * @param verificationCode 验证码 */ - private void checkVerificationOrder(Order order,String verificationCode){ + private void checkVerificationOrder(Order order, String verificationCode) { //判断查询是否可以查询到订单 - if (order==null) { + if (order == null) { throw new ServiceException(ResultCode.ORDER_NOT_EXIST); } //判断是否为虚拟订单 @@ -838,11 +806,11 @@ public class OrderServiceImpl extends ServiceImpl implements throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); } //判断虚拟订单状态 - else if (order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) { + else if (!order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) { throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); } //判断验证码是否正确 - else if(!verificationCode.equals(order.getVerificationCode())){ + else if (!verificationCode.equals(order.getVerificationCode())) { throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); } } diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index f328490c..e35593b0 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -5,6 +5,7 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; +import cn.lili.config.context.ThreadContextHolder; import cn.lili.modules.member.entity.dto.MemberAddressDTO; import cn.lili.modules.order.order.entity.dto.OrderBatchDeliverDTO; import cn.lili.modules.order.order.entity.dto.OrderExportDTO; @@ -55,11 +56,7 @@ public class OrderStoreController { */ @Autowired private OrderPriceService orderPriceService; - /** - * 物流公司 - */ - @Autowired - private StoreLogisticsService storeLogisticsService; + @ApiOperation(value = "查询订单列表") @GetMapping @@ -144,19 +141,6 @@ public class OrderStoreController { return ResultUtil.data(orderService.getTraces(orderSn)); } - @ApiOperation(value = "下载待发货的订单列表") - @GetMapping(value = "/downLoadDeliverExcel") - public ResultMessage downLoadDeliverExcel(HttpServletResponse response, List orderIds) { - - //获取店铺已经选择物流公司列表 - List logisticsName = storeLogisticsService.getStoreSelectedLogisticsName(); - //下载订单批量发货Excel - this.orderService.getBatchDeliverList(response,orderIds,logisticsName); - - return ResultUtil.success(ResultCode.SUCCESS); - - } - @ApiOperation(value = "上传文件进行订单批量发货") @ApiImplicitParam(name = "file", value = "订单列表", required = true, dataType = "file", paramType = "query") @PutMapping(value = "/batchDeliver") From 332e2876757bd362581ee6937b75d682978e1f8c Mon Sep 17 00:00:00 2001 From: lifenlong Date: Thu, 10 Jun 2021 20:13:21 +0800 Subject: [PATCH 46/68] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/modules/order/cart/entity/enums/CartTypeEnum.java | 2 +- .../controller/member/MemberGradeManagerController.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java index 998da240..bdc11c9d 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java @@ -27,6 +27,6 @@ public enum CartTypeEnum { /** * 虚拟商品 */ - FICTITIOUS; + VIRTUAL; } diff --git a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java index e3b97c7f..95c7e5e0 100644 --- a/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/member/MemberGradeManagerController.java @@ -50,9 +50,9 @@ public class MemberGradeManagerController { @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, paramType = "path") }) - @GetMapping(value = "/add") + @PostMapping(value = "/add") public ResultMessage daa(@Validated MemberGrade memberGrade) { - if (memberGradeService.updateById(memberGrade)) { + if (memberGradeService.save(memberGrade)) { return ResultUtil.success(ResultCode.SUCCESS); } throw new ServiceException(ResultCode.ERROR); @@ -62,7 +62,7 @@ public class MemberGradeManagerController { @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "会员等级ID", required = true, paramType = "path") }) - @GetMapping(value = "/update/{id}") + @PutMapping(value = "/update/{id}") public ResultMessage update(@PathVariable String id,MemberGrade memberGrade) { if (memberGradeService.updateById(memberGrade)) { return ResultUtil.success(ResultCode.SUCCESS); From 3814b4a9a50156d55d89d77a903a1b433c00564f Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sun, 13 Jun 2021 14:51:39 +0800 Subject: [PATCH 47/68] =?UTF-8?q?=E6=9A=82=E6=8F=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../other/AppVersionBuyerController.java | 2 +- config/application.yml | 2 +- consumer/src/main/resources/application.yml | 2 +- framework/pom.xml | 4 +- .../order/order/entity/dto/ExcelDTO.java | 21 +++++++ .../order/order/service/OrderService.java | 14 ++++- .../order/serviceimpl/OrderServiceImpl.java | 59 ++++++++++++++++++- .../trade/OrderStoreController.java | 47 ++++++++------- 8 files changed, 117 insertions(+), 34 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java diff --git a/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java index 48e1051b..9c5473a7 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java @@ -39,7 +39,7 @@ public class AppVersionBuyerController { return ResultUtil.data(appVersionService.getAppVersion(appType)); } - @ApiOperation(value = "获取版本号") + @ApiOperation(value = "获取版本号列表") @ApiImplicitParam(name = "appType", value = "app类型", required = true, paramType = "path") @GetMapping("/appVersion/{type}") public ResultMessage> appVersion(PageVO pageVO, @PathVariable String appType) { diff --git a/config/application.yml b/config/application.yml index f047b72f..30affa8b 100644 --- a/config/application.yml +++ b/config/application.yml @@ -249,7 +249,7 @@ lili: # jwt 细节设定 jwt-setting: # token过期时间(分钟) - tokenExpireTime: 1 + tokenExpireTime: 30 # 使用Spring @Cacheable注解失效时间 cache: diff --git a/consumer/src/main/resources/application.yml b/consumer/src/main/resources/application.yml index 6f2f7746..0e110495 100644 --- a/consumer/src/main/resources/application.yml +++ b/consumer/src/main/resources/application.yml @@ -46,7 +46,7 @@ spring: open-in-view: false # Redis redis: - host: 127.0.0.1 + host: 192.168.0.116 port: 6379 password: lilishop lettuce: diff --git a/framework/pom.xml b/framework/pom.xml index f9842efd..4873ab05 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -45,8 +45,8 @@ 2.3.1 1.21 1.2 - 5.0.0 - 5.0.0 + 4.1.2 + 4.1.2 6.6 3.4.1 1.7.28 diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java new file mode 100644 index 00000000..4a4745d3 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java @@ -0,0 +1,21 @@ +package cn.lili.modules.order.order.entity.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author liushuai(liushuai711 @ gmail.com) + * @version v4.1 + * @Description: + * @since 2021/6/13 2:37 下午 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ExcelDTO { + + private String sn; + private String logisticsName; + private String logisticsNo; +} diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index c32f916e..083c7281 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -14,6 +14,7 @@ import cn.lili.modules.statistics.model.dto.StatisticsQueryParam; import cn.lili.modules.system.entity.vo.Traces; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -195,11 +196,20 @@ public interface OrderService extends IService { */ void agglomeratePintuanOrder(String pintuanId, String parentOrderSn); + /** + * 获取待发货订单编号列表 + * + * @param response + * @param logisticsName 店铺已选择物流公司列表 + * @return 待发货订单编号列表 + */ + void getBatchDeliverList(HttpServletResponse response, List logisticsName); + /** * 订单批量发货 * - * @param list 批量发货列表 + * @param files 文件 */ - void batchDeliver(List list); + void batchDeliver(MultipartFile files); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 1411afbf..4e091eab 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONUtil; +import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.lili.common.aop.syslog.annotation.SystemLogPoint; @@ -69,11 +70,13 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -501,11 +504,61 @@ public class OrderServiceImpl extends ServiceImpl implements } @Override - public void batchDeliver(List list) { + public void getBatchDeliverList(HttpServletResponse response, List logisticsName) { + ExcelWriter writer = ExcelUtil.getWriter(); + writer.addHeaderAlias("sn", "订单号"); + writer.addHeaderAlias("logisticsName", "物流公司"); + writer.addHeaderAlias("logisticsNo", "物流单号"); + + ExcelDTO excelDTO=new ExcelDTO("asd","2","3"); + List list = new ArrayList<>(); + list.add(excelDTO); + writer.write(list,true); + //存放下拉列表 + String[] logiList = logisticsName.toArray(new String[]{}); + CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, 2, 2, 3); +// writer.addSelect(cellRangeAddressList, logiList); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + String name = "XXX国际贸易公司"; + response.setHeader("Content-Disposition", "attachment;filename="+name+".xls"); + ServletOutputStream out = null; + try { + out = response.getOutputStream(); + writer.flush(out, true); + } catch (IOException e) { + log.error("获取待发货订单编号列表错误",e); + } finally { + writer.close(); + } + IoUtil.close(out); + } + + @Override + public void batchDeliver(MultipartFile files) { + + InputStream inputStream = null; + List orderBatchDeliverDTOList = new ArrayList<>(); + try { + inputStream = files.getInputStream(); + // 2.应用HUtool ExcelUtil获取ExcelReader指定输入流和sheet + ExcelReader excelReader = ExcelUtil.getReader(inputStream); + // 可以加上表头验证 + // 3.读取第二行到最后一行数据 + List> read = excelReader.read(1, excelReader.getRowCount()); + for (List objects : read) { + OrderBatchDeliverDTO orderBatchDeliverDTO = new OrderBatchDeliverDTO(); + orderBatchDeliverDTO.setOrderSn(objects.get(0).toString()); + orderBatchDeliverDTO.setLogisticsName(objects.get(1).toString()); + orderBatchDeliverDTO.setLogisticsNo(objects.get(2).toString()); + orderBatchDeliverDTOList.add(orderBatchDeliverDTO); + } + }catch (Exception e){ + throw new ServiceException("文件读取失败"); + } //循环检查是否符合规范 - checkBatchDeliver(list); + checkBatchDeliver(orderBatchDeliverDTOList); //订单批量发货 - for (OrderBatchDeliverDTO orderBatchDeliverDTO : list) { + for (OrderBatchDeliverDTO orderBatchDeliverDTO : orderBatchDeliverDTOList) { this.delivery(orderBatchDeliverDTO.getOrderSn(), orderBatchDeliverDTO.getLogisticsNo(), orderBatchDeliverDTO.getLogisticsId()); } } diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index 9383e92d..bcc7670e 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -22,6 +22,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -50,12 +51,16 @@ public class OrderStoreController { */ @Autowired private OrderService orderService; - /** * 订单价格 */ @Autowired private OrderPriceService orderPriceService; + /** + * 物流公司 + */ + @Autowired + private StoreLogisticsService storeLogisticsService; @ApiOperation(value = "查询订单列表") @@ -141,30 +146,24 @@ public class OrderStoreController { return ResultUtil.data(orderService.getTraces(orderSn)); } + @ApiOperation(value = "下载待发货的订单列表") + @GetMapping(value = "/downLoadDeliverExcel") + public ResultMessage downLoadDeliverExcel() { + HttpServletResponse response = ThreadContextHolder.getHttpResponse(); + //获取店铺已经选择物流公司列表 + List logisticsName = storeLogisticsService.getStoreSelectedLogisticsName(); + //下载订单批量发货Excel + this.orderService.getBatchDeliverList(response,logisticsName); + + return ResultUtil.success(ResultCode.SUCCESS); + + } + + @PostMapping(value = "/batchDeliver", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @ApiOperation(value = "上传文件进行订单批量发货") - @ApiImplicitParam(name = "file", value = "订单列表", required = true, dataType = "file", paramType = "query") - @PostMapping(value = "/batchDeliver") - public void batchDeliver(@RequestParam MultipartFile file) { - InputStream inputStream = null; - try { - inputStream = file.getInputStream(); - // 2.应用HUtool ExcelUtil获取ExcelReader指定输入流和sheet - ExcelReader excelReader = ExcelUtil.getReader(inputStream); - // 可以加上表头验证 - // 3.读取第二行到最后一行数据 - List> read = excelReader.read(1, excelReader.getRowCount()); - List orderBatchDeliverDTOList=new ArrayList<>(); - for (List objects : read) { - OrderBatchDeliverDTO orderBatchDeliverDTO=new OrderBatchDeliverDTO(); - orderBatchDeliverDTO.setOrderSn(objects.get(0).toString()); - orderBatchDeliverDTO.setLogisticsName(objects.get(1).toString()); - orderBatchDeliverDTO.setLogisticsNo(objects.get(2).toString()); - orderBatchDeliverDTOList.add(orderBatchDeliverDTO); - } - orderService.batchDeliver(orderBatchDeliverDTOList); - } catch (Exception e) { - log.error("上传文件进行订单批量发货错误",e); - } + public ResultMessage batchDeliver(@RequestPart("files") MultipartFile files) { + orderService.batchDeliver(files); + return ResultUtil.success(ResultCode.SUCCESS); } @ApiOperation(value = "查询订单导出列表") From a159c0d0db6fb5808e097974771702db2129659d Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sun, 13 Jun 2021 15:53:19 +0800 Subject: [PATCH 48/68] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=8F=91=E8=B4=A7=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/order/service/OrderService.java | 2 + .../order/serviceimpl/OrderServiceImpl.java | 46 ++++++++++--------- .../trade/OrderStoreController.java | 6 +-- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java index 083c7281..a44078ff 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java +++ b/framework/src/main/java/cn/lili/modules/order/order/service/OrderService.java @@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; import java.util.List; /** @@ -53,6 +54,7 @@ public interface OrderService extends IService { /** * 查询导出订单列表 + * * @param orderSearchParams 查询参数 * @return 导出订单列表 */ diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 4e091eab..c83a7083 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -1,6 +1,7 @@ package cn.lili.modules.order.order.serviceimpl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.CharSequenceUtil; @@ -77,9 +78,9 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.*; /** * 子订单业务层实现 @@ -506,31 +507,32 @@ public class OrderServiceImpl extends ServiceImpl implements @Override public void getBatchDeliverList(HttpServletResponse response, List logisticsName) { ExcelWriter writer = ExcelUtil.getWriter(); - writer.addHeaderAlias("sn", "订单号"); - writer.addHeaderAlias("logisticsName", "物流公司"); - writer.addHeaderAlias("logisticsNo", "物流单号"); + //Excel 头部 + ArrayList rows = new ArrayList<>(); + rows.add("订单编号"); + rows.add("物流公司"); + rows.add("物流编号"); + writer.writeHeadRow(rows); - ExcelDTO excelDTO=new ExcelDTO("asd","2","3"); - List list = new ArrayList<>(); - list.add(excelDTO); - writer.write(list,true); - //存放下拉列表 + //存放下拉列表 ----店铺已选择物流公司列表 String[] logiList = logisticsName.toArray(new String[]{}); - CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(2, 2, 2, 3); -// writer.addSelect(cellRangeAddressList, logiList); - response.setContentType("application/vnd.ms-excel;charset=utf-8"); - String name = "XXX国际贸易公司"; - response.setHeader("Content-Disposition", "attachment;filename="+name+".xls"); + CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 200, 1, 1); + writer.addSelect(cellRangeAddressList, logiList); + ServletOutputStream out = null; try { + //设置公共属性,列表名称 + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("批量发货导入模板", "UTF8") + ".xls"); out = response.getOutputStream(); writer.flush(out, true); - } catch (IOException e) { - log.error("获取待发货订单编号列表错误",e); + } catch (Exception e) { + log.error("获取待发货订单编号列表错误", e); } finally { writer.close(); + IoUtil.close(out); } - IoUtil.close(out); + } @Override @@ -552,7 +554,7 @@ public class OrderServiceImpl extends ServiceImpl implements orderBatchDeliverDTO.setLogisticsNo(objects.get(2).toString()); orderBatchDeliverDTOList.add(orderBatchDeliverDTO); } - }catch (Exception e){ + } catch (Exception e) { throw new ServiceException("文件读取失败"); } //循环检查是否符合规范 @@ -574,9 +576,9 @@ public class OrderServiceImpl extends ServiceImpl implements Order order = this.getOne(new LambdaQueryWrapper() .eq(Order::getStoreId, UserContext.getCurrentUser().getStoreId()) .eq(Order::getSn, orderBatchDeliverDTO.getOrderSn())); - if (order==null) { + if (order == null) { throw new ServiceException("订单编号:'" + orderBatchDeliverDTO.getOrderSn() + " '不存在"); - }else if(order.getOrderStatus().equals(OrderStatusEnum.DELIVERED.name())){ + } else if (order.getOrderStatus().equals(OrderStatusEnum.DELIVERED.name())) { throw new ServiceException("订单编号:'" + orderBatchDeliverDTO.getOrderSn() + " '不能发货"); } //查看物流公司 diff --git a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java index bcc7670e..1290ded1 100644 --- a/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java +++ b/seller-api/src/main/java/cn/lili/controller/trade/OrderStoreController.java @@ -146,16 +146,16 @@ public class OrderStoreController { return ResultUtil.data(orderService.getTraces(orderSn)); } - @ApiOperation(value = "下载待发货的订单列表") + @ApiOperation(value = "下载待发货的订单列表",produces="application/octet-stream") @GetMapping(value = "/downLoadDeliverExcel") - public ResultMessage downLoadDeliverExcel() { + public void downLoadDeliverExcel() { HttpServletResponse response = ThreadContextHolder.getHttpResponse(); //获取店铺已经选择物流公司列表 List logisticsName = storeLogisticsService.getStoreSelectedLogisticsName(); //下载订单批量发货Excel this.orderService.getBatchDeliverList(response,logisticsName); - return ResultUtil.success(ResultCode.SUCCESS); + //return ResultUtil.success(ResultCode.SUCCESS); } From 10dbed04b6010531be63690cf187c276a3c1ef8b Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sun, 13 Jun 2021 16:27:40 +0800 Subject: [PATCH 49/68] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=A7=92?= =?UTF-8?q?=E6=9D=80=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/PromotionEverydayExecute.java | 2 +- .../order/order/entity/dto/ExcelDTO.java | 21 ------------------- .../modules/promotion/entity/dos/Seckill.java | 7 +++---- .../promotion/service/SeckillService.java | 6 ++++++ .../serviceimpl/SeckillServiceImpl.java | 18 ++++++++++++++++ .../promotion/SeckillManagerController.java | 13 ++++-------- 6 files changed, 32 insertions(+), 35 deletions(-) delete mode 100644 framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index 9804989f..e75dac32 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -98,7 +98,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { private void addSeckill() { Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); - Seckill seckill = new Seckill(seckillSetting.getHours(), seckillSetting.getSeckillRule()); + Seckill seckill = new Seckill(30,seckillSetting.getHours(), seckillSetting.getSeckillRule()); seckillService.saveSeckill(seckill); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java deleted file mode 100644 index 4a4745d3..00000000 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/ExcelDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.lili.modules.order.order.entity.dto; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author liushuai(liushuai711 @ gmail.com) - * @version v4.1 - * @Description: - * @since 2021/6/13 2:37 下午 - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class ExcelDTO { - - private String sn; - private String logisticsName; - private String logisticsNo; -} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java index 65c7fe55..2f00487e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Seckill.java @@ -54,9 +54,9 @@ public class Seckill extends BasePromotion { @ApiModelProperty(value = "商品数量") private Integer goodsNum; - public Seckill(String hours,String seckillRule){ - //默认创建30天后的秒杀活动 - DateTime dateTime= DateUtil.beginOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, 30)); + public Seckill(int day,String hours,String seckillRule){ + //默认创建*天后的秒杀活动 + DateTime dateTime= DateUtil.beginOfDay(DateUtil.offset(new DateTime(), DateField.DAY_OF_YEAR, day)); this.applyEndTime=dateTime; this.hours=hours; this.seckillRule=seckillRule; @@ -70,6 +70,5 @@ public class Seckill extends BasePromotion { setEndTime(DateUtil.endOfDay(dateTime)); setPromotionStatus(PromotionStatusEnum.NEW.name()); - } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java index 729d0a72..27fdc908 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/SeckillService.java @@ -42,6 +42,12 @@ public interface SeckillService extends IService { */ SeckillVO getSeckillByIdFromMongo(String id); + /** + * 初始化秒杀活动,默认开启三十天的秒杀活动 + * + * @return 是否保存成功 + */ + void init(); /** * 保存秒杀活动 * diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java index 426bf3d2..a0257615 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/SeckillServiceImpl.java @@ -26,6 +26,10 @@ import cn.lili.modules.promotion.service.SeckillApplyService; import cn.lili.modules.promotion.service.SeckillService; import cn.lili.modules.promotion.tools.PromotionTools; import cn.lili.modules.search.service.EsGoodsIndexService; +import cn.lili.modules.system.entity.dos.Setting; +import cn.lili.modules.system.entity.dto.SeckillSetting; +import cn.lili.modules.system.entity.enums.SettingEnum; +import cn.lili.modules.system.service.SettingService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -33,6 +37,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.Gson; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -71,6 +76,9 @@ public class SeckillServiceImpl extends ServiceImpl impl //秒杀申请 @Autowired private SeckillApplyService seckillApplyService; + //设置 + @Autowired + private SettingService settingService; @Override public IPage getSeckillByPageFromMysql(SeckillSearchParams queryParam, PageVO pageVo) { @@ -100,6 +108,16 @@ public class SeckillServiceImpl extends ServiceImpl impl return this.checkSeckillExist(id); } + @Override + public void init() { + Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name()); + SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class); + for (int i=1;i<=30;i++){ + Seckill seckill = new Seckill(i,seckillSetting.getHours(), seckillSetting.getSeckillRule()); + this.saveSeckill(seckill); + } + } + @Override public boolean saveSeckill(Seckill seckill) { diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java index 454d1d14..2235db88 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java @@ -35,15 +35,10 @@ public class SeckillManagerController { private SeckillApplyService seckillApplyService; - @ApiOperation(value = "添加秒杀活动") - @PostMapping - public ResultMessage addSeckill(SeckillVO seckillVO) { - AuthUser currentUser = UserContext.getCurrentUser(); - seckillVO.setStoreId(currentUser.getId()); - seckillVO.setStoreName(currentUser.getUsername()); - seckillVO.setSeckillApplyStatus(SeckillApplyStatusEnum.NOT_APPLY.name()); - seckillService.saveSeckill(seckillVO); - return ResultUtil.data(seckillVO); + @ApiOperation(value = "添加秒杀活动(初始化方法,默认初始化30天内的活动)") + @GetMapping + public void addSeckill() { + seckillService.init(); } From 24bb6a416982e55367ec8e6e32af410c053cf0e5 Mon Sep 17 00:00:00 2001 From: Chopper Date: Tue, 15 Jun 2021 15:28:33 +0800 Subject: [PATCH 50/68] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../other/AppVersionBuyerController.java | 6 ++--- .../promotion/service/CouponService.java | 6 +++++ .../serviceimpl/CouponServiceImpl.java | 10 ++++++++ .../CouponActivityManagerController.java | 25 ++++++++++++++----- .../promotion/SeckillManagerController.java | 5 ++-- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java index 9c5473a7..61354b6c 100644 --- a/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/other/AppVersionBuyerController.java @@ -41,10 +41,10 @@ public class AppVersionBuyerController { @ApiOperation(value = "获取版本号列表") @ApiImplicitParam(name = "appType", value = "app类型", required = true, paramType = "path") - @GetMapping("/appVersion/{type}") - public ResultMessage> appVersion(PageVO pageVO, @PathVariable String appType) { + @GetMapping("/appVersion/{appType}") + public ResultMessage> appVersion(@PathVariable String appType, PageVO pageVO) { - IPage page=appVersionService.page(PageUtil.initPage(pageVO), new LambdaQueryWrapper().eq(AppVersion::getType, appType)); + IPage page = appVersionService.page(PageUtil.initPage(pageVO), new LambdaQueryWrapper().eq(AppVersion::getType, appType)); return ResultUtil.data(page); } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java index 037f1193..a3b95f8d 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponService.java @@ -104,4 +104,10 @@ public interface CouponService extends IService { void usedCoupon(String couponId, Integer usedNum); + /** + * 活动优惠券列表 + */ + IPage activityCoupons(); + + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index c9b2619d..39bbbfb4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -266,6 +266,16 @@ public class CouponServiceImpl extends ServiceImpl impleme this.mongoTemplate.save(couponVO); } + @Override + public IPage activityCoupons() { + PageVO page = new PageVO(); + page.setPageSize(9999); + page.setPageNumber(1); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(Coupon::getGetType, CouponGetEnum.ACTIVITY.name()); + return page(PageUtil.initPage(page), queryWrapper); + } + /** * 检查优惠券信息是否合法 * diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index 4be8fd32..1c99078d 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -6,11 +6,13 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.service.CouponActivityService; +import cn.lili.modules.promotion.service.CouponService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -33,6 +35,8 @@ public class CouponActivityManagerController { @Autowired private CouponActivityService couponActivityService; + @Autowired + private CouponService couponService; @ApiOperation(value = "获取优惠券活动分页") @GetMapping @@ -42,20 +46,21 @@ public class CouponActivityManagerController { @ApiOperation(value = "获取优惠券活动") @ApiImplicitParam(name = "couponActivityId", value = "优惠券活动ID", required = true, paramType = "path") - @GetMapping("/getCouponActivity/{couponActivityId}") + @GetMapping("/{couponActivityId}") public ResultMessage getCouponActivity(@PathVariable String couponActivityId) { return ResultUtil.data(couponActivityService.getCouponActivityVO(couponActivityId)); } @ApiOperation(value = "添加优惠券活动") - @PostMapping("/addCouponActivity") + @PostMapping public ResultMessage addCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); } @ApiOperation(value = "修改优惠券活动") - @PutMapping("/updateCouponActivity") - public ResultMessage updateCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { + @PutMapping("/{id}") + public ResultMessage updateCouponActivity(@PathVariable String id, @Validated CouponActivityDTO couponActivityDTO) { + couponActivityDTO.setId(id); return ResultUtil.data(couponActivityService.updateCouponActivity(couponActivityDTO)); } @@ -65,10 +70,18 @@ public class CouponActivityManagerController { @ApiImplicitParam(name = "promotionStatus", value = "活动状态", required = true, dataType = "String", paramType = "path") }) @PutMapping("/updateStatus/{id}/{promotionStatus}") - public ResultMessage updateStatus(@PathVariable String id,@PathVariable String promotionStatus) { - if(couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.valueOf(promotionStatus))){ + public ResultMessage updateStatus(@PathVariable String id, @PathVariable String promotionStatus) { + if (couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) { return ResultUtil.success(ResultCode.SUCCESS); } throw new ServiceException(ResultCode.ERROR); } + + + @ApiOperation(value = "获取活动优惠券列表") + @GetMapping("/activityCoupons") + public ResultMessage> activityCoupons() { + return ResultUtil.data(couponService.activityCoupons()); + } + } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java index 2235db88..91210d44 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/SeckillManagerController.java @@ -7,7 +7,6 @@ import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.Seckill; import cn.lili.modules.promotion.entity.dos.SeckillApply; -import cn.lili.modules.promotion.entity.enums.SeckillApplyStatusEnum; import cn.lili.modules.promotion.entity.vos.SeckillSearchParams; import cn.lili.modules.promotion.entity.vos.SeckillVO; import cn.lili.modules.promotion.service.SeckillApplyService; @@ -35,8 +34,8 @@ public class SeckillManagerController { private SeckillApplyService seckillApplyService; - @ApiOperation(value = "添加秒杀活动(初始化方法,默认初始化30天内的活动)") - @GetMapping + @ApiOperation(value = "初始化秒杀活动(初始化方法,默认初始化30天内的活动)") + @GetMapping("/init") public void addSeckill() { seckillService.init(); } From 5f403ec67506ea0e83ccbe9122899b178ad58a65 Mon Sep 17 00:00:00 2001 From: Chopper Date: Tue, 15 Jun 2021 16:21:03 +0800 Subject: [PATCH 51/68] =?UTF-8?q?=E5=90=88=E5=B9=B6master=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trigger/listen/PromotionDelayQueueListen.java | 2 +- .../trigger/delay/queue/PromotionDelayQueue.java | 6 +----- .../common/trigger/enums/DelayQueueEnums.java | 4 ++-- ...ionDelayTypeEnums.java => DelayTypeEnums.java} | 4 ++-- .../lili/common/trigger/util/DelayQueueTools.java | 4 ++-- .../broadcast/serviceimpl/StudioServiceImpl.java | 15 ++++++++------- .../order/order/serviceimpl/OrderServiceImpl.java | 7 ++----- .../promotion/serviceimpl/CouponServiceImpl.java | 10 +++++----- .../serviceimpl/FullDiscountServiceImpl.java | 8 ++++---- .../promotion/serviceimpl/PintuanServiceImpl.java | 8 ++++---- .../serviceimpl/PointsGoodsServiceImpl.java | 10 +++++----- .../promotion/serviceimpl/SeckillServiceImpl.java | 10 +++++----- 12 files changed, 41 insertions(+), 47 deletions(-) rename framework/src/main/java/cn/lili/common/trigger/enums/{PromotionDelayTypeEnums.java => DelayTypeEnums.java} (81%) diff --git a/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java index 08091c68..4466aa97 100644 --- a/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java +++ b/consumer/src/main/java/cn/lili/trigger/listen/PromotionDelayQueueListen.java @@ -29,6 +29,6 @@ public class PromotionDelayQueueListen extends AbstractDelayQueueListen { @Override public String setDelayQueueName() { - return DelayQueueEnums.PROMOTION_QUEUE.name(); + return DelayQueueEnums.PROMOTION.name(); } } diff --git a/framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java b/framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java index 2a072375..28f92713 100644 --- a/framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java +++ b/framework/src/main/java/cn/lili/common/trigger/delay/queue/PromotionDelayQueue.java @@ -2,8 +2,6 @@ package cn.lili.common.trigger.delay.queue; import cn.lili.common.trigger.delay.AbstractDelayQueueMachineFactory; import cn.lili.common.trigger.enums.DelayQueueEnums; -import cn.lili.common.trigger.interfaces.TimeTrigger; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -18,11 +16,9 @@ import org.springframework.stereotype.Component; @Component public class PromotionDelayQueue extends AbstractDelayQueueMachineFactory { - @Autowired - private TimeTrigger timeTrigger; @Override public String setDelayQueueName() { - return DelayQueueEnums.PROMOTION_QUEUE.name(); + return DelayQueueEnums.PROMOTION.name(); } } diff --git a/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java b/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java index 6bfc8618..6b67d7fe 100644 --- a/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java +++ b/framework/src/main/java/cn/lili/common/trigger/enums/DelayQueueEnums.java @@ -7,9 +7,9 @@ public enum DelayQueueEnums { /** - * 促销任务队列 + * 促销活动 */ - PROMOTION_QUEUE("促销任务队列"); + PROMOTION("促销活动"); private String description; diff --git a/framework/src/main/java/cn/lili/common/trigger/enums/PromotionDelayTypeEnums.java b/framework/src/main/java/cn/lili/common/trigger/enums/DelayTypeEnums.java similarity index 81% rename from framework/src/main/java/cn/lili/common/trigger/enums/PromotionDelayTypeEnums.java rename to framework/src/main/java/cn/lili/common/trigger/enums/DelayTypeEnums.java index b77f743b..2369fa52 100644 --- a/framework/src/main/java/cn/lili/common/trigger/enums/PromotionDelayTypeEnums.java +++ b/framework/src/main/java/cn/lili/common/trigger/enums/DelayTypeEnums.java @@ -6,7 +6,7 @@ package cn.lili.common.trigger.enums; * @author paulG * @since 2021/5/7 */ -public enum PromotionDelayTypeEnums { +public enum DelayTypeEnums { /** * 促销活动 @@ -24,7 +24,7 @@ public enum PromotionDelayTypeEnums { private String description; - PromotionDelayTypeEnums(String description) { + DelayTypeEnums(String description) { this.description = description; } diff --git a/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java b/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java index e5055eda..c8ce87be 100644 --- a/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java +++ b/framework/src/main/java/cn/lili/common/trigger/util/DelayQueueTools.java @@ -1,6 +1,6 @@ package cn.lili.common.trigger.util; -import cn.lili.common.trigger.enums.PromotionDelayTypeEnums; +import cn.lili.common.trigger.enums.DelayTypeEnums; /** * 延时任务工具类 @@ -22,7 +22,7 @@ public class DelayQueueTools { * @param id id * @return 唯一键 */ - public static String wrapperUniqueKey(PromotionDelayTypeEnums type, String id) { + public static String wrapperUniqueKey(DelayTypeEnums type, String id) { return "{TIME_TRIGGER_" + type.name() + "}_" + id; } diff --git a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java index 563d7209..0a20efbb 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/serviceimpl/StudioServiceImpl.java @@ -5,7 +5,7 @@ import cn.lili.common.delayqueue.BroadcastMessage; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; -import cn.lili.common.trigger.enums.DelayQueueType; +import cn.lili.common.trigger.enums.DelayTypeEnums; import cn.lili.common.trigger.interfaces.TimeTrigger; import cn.lili.common.trigger.model.TimeExecuteConstant; import cn.lili.common.trigger.model.TimeTriggerMsg; @@ -72,19 +72,20 @@ public class StudioServiceImpl extends ServiceImpl impleme BroadcastMessage broadcastMessage = new BroadcastMessage(studio.getId(), StudioStatusEnum.START.name()); TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.BROADCAST_EXECUTOR, Long.parseLong(studio.getStartTime()) * 1000L, broadcastMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST, studio.getId()), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.BROADCAST, studio.getId()), rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(Long.parseLong(studio.getStartTime()) * 1000L)); + this.timeTrigger.addDelay(timeTriggerMsg); //直播结束延时任务 broadcastMessage = new BroadcastMessage(studio.getId(), StudioStatusEnum.END.name()); timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.BROADCAST_EXECUTOR, Long.parseLong(studio.getEndTime()) * 1000L, broadcastMessage, - DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST, studio.getId()), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.BROADCAST, studio.getId()), rocketmqCustomProperties.getPromotionTopic()); // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(Long.parseLong(studio.getEndTime()) * 1000L)); + this.timeTrigger.addDelay(timeTriggerMsg); } return true; @@ -107,7 +108,7 @@ public class StudioServiceImpl extends ServiceImpl impleme broadcastMessage, Long.parseLong(oldStudio.getStartTime()), Long.parseLong(studio.getStartTime()), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST, studio.getId()), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.BROADCAST, studio.getId()), DateUtil.getDelayTime(Long.parseLong(studio.getStartTime())), rocketmqCustomProperties.getPromotionTopic()); @@ -118,7 +119,7 @@ public class StudioServiceImpl extends ServiceImpl impleme broadcastMessage, Long.parseLong(oldStudio.getEndTime()), Long.parseLong(studio.getEndTime()), - DelayQueueTools.wrapperUniqueKey(DelayQueueType.BROADCAST, studio.getId()), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.BROADCAST, studio.getId()), DateUtil.getDelayTime(Long.parseLong(studio.getEndTime())), rocketmqCustomProperties.getPromotionTopic()); } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index dc66f080..efd7199c 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -1,7 +1,6 @@ package cn.lili.modules.order.order.serviceimpl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.CharSequenceUtil; @@ -11,7 +10,7 @@ import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.lili.common.aop.syslog.annotation.SystemLogPoint; import cn.lili.common.trigger.util.DelayQueueTools; -import cn.lili.common.trigger.enums.PromotionDelayTypeEnums; +import cn.lili.common.trigger.enums.DelayTypeEnums; import cn.lili.common.trigger.message.PintuanOrderMessage; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; @@ -76,9 +75,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; import java.io.InputStream; -import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.*; @@ -642,7 +639,7 @@ public class OrderServiceImpl extends ServiceImpl implements TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, startTime, pintuanOrderMessage, - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PINTUAN_ORDER, (pintuanId + parentOrderSn)), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PINTUAN_ORDER, (pintuanId + parentOrderSn)), rocketmqCustomProperties.getPromotionTopic()); this.timeTrigger.addDelay(timeTriggerMsg); diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index 6a7fd73c..d5ae1ac8 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.trigger.util.DelayQueueTools; -import cn.lili.common.trigger.enums.PromotionDelayTypeEnums; +import cn.lili.common.trigger.enums.DelayTypeEnums; import cn.lili.common.trigger.message.PromotionMessage; import cn.lili.common.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; @@ -93,7 +93,7 @@ public class CouponServiceImpl extends ServiceImpl impleme TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, coupon.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), rocketmqCustomProperties.getPromotionTopic()); // 发送促销活动开始的延时任务 this.timeTrigger.addDelay(timeTriggerMsg); @@ -116,7 +116,7 @@ public class CouponServiceImpl extends ServiceImpl impleme this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, promotionMessage, coupon.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), DateUtil.getDelayTime(couponVO.getStartTime().getTime()), rocketmqCustomProperties.getPromotionTopic()); return couponVO; @@ -144,7 +144,7 @@ public class CouponServiceImpl extends ServiceImpl impleme this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR, promotionMessage, couponVO.getStartTime().getTime(), couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), DateUtil.getDelayTime(couponVO.getStartTime().getTime()), rocketmqCustomProperties.getPromotionTopic()); } @@ -166,7 +166,7 @@ public class CouponServiceImpl extends ServiceImpl impleme this.mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").is(id)), CouponVO.class); this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, couponVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.COUPON.name() + couponVO.getId())), rocketmqCustomProperties.getPromotionTopic()); return result; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java index 7a513c49..cfcb8cef 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/FullDiscountServiceImpl.java @@ -1,7 +1,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.lili.common.trigger.util.DelayQueueTools; -import cn.lili.common.trigger.enums.PromotionDelayTypeEnums; +import cn.lili.common.trigger.enums.DelayTypeEnums; import cn.lili.common.trigger.message.PromotionMessage; import cn.lili.common.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; @@ -103,7 +103,7 @@ public class FullDiscountServiceImpl extends ServiceImpl impl promotionMessage, pintuanVO.getStartTime().getTime(), pintuan.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), DateUtil.getDelayTime(pintuanVO.getStartTime().getTime()), rocketmqCustomProperties.getPromotionTopic()); } @@ -390,7 +390,7 @@ public class PintuanServiceImpl extends ServiceImpl impl TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, pintuan.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), rocketmqCustomProperties.getPromotionTopic()); // 发送促销活动开始的延时任务 this.timeTrigger.addDelay(timeTriggerMsg); @@ -405,7 +405,7 @@ public class PintuanServiceImpl extends ServiceImpl impl private void removePintuanGoodsFromEs(String id, Long originStartTime) { this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, originStartTime, - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.PINTUAN.name() + id)), rocketmqCustomProperties.getPromotionTopic()); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java index d98a7ea7..690e2acb 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java @@ -2,7 +2,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.hutool.core.util.StrUtil; import cn.lili.common.trigger.util.DelayQueueTools; -import cn.lili.common.trigger.enums.PromotionDelayTypeEnums; +import cn.lili.common.trigger.enums.DelayTypeEnums; import cn.lili.common.trigger.message.PromotionMessage; import cn.lili.common.exception.ServiceException; import cn.lili.common.trigger.interfaces.TimeTrigger; @@ -120,7 +120,7 @@ public class PointsGoodsServiceImpl extends ServiceImpl impl promotionMessage, seckill.getStartTime().getTime(), seckillVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), DateUtil.getDelayTime(seckillVO.getStartTime().getTime()), rocketmqCustomProperties.getPromotionTopic()); } @@ -190,7 +190,7 @@ public class SeckillServiceImpl extends ServiceImpl impl this.promotionGoodsService.update(promotionGoodsQueryWrapper); this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, seckill.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckill.getId())), rocketmqCustomProperties.getPromotionTopic()); } else { throw new ServiceException("该秒杀活动活动的状态不能删除"); @@ -233,7 +233,7 @@ public class SeckillServiceImpl extends ServiceImpl impl } this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, seckillVO.getStartTime().getTime(), - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.SECKILL.name() + seckillVO.getId())), rocketmqCustomProperties.getPromotionTopic()); } } else { @@ -264,7 +264,7 @@ public class SeckillServiceImpl extends ServiceImpl impl TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, seckill.getStartTime().getTime(), promotionMessage, - DelayQueueTools.wrapperUniqueKey(PromotionDelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), rocketmqCustomProperties.getPromotionTopic()); // 发送促销活动开始的延时任务 this.timeTrigger.addDelay(timeTriggerMsg); From 841903d2a63884d6ea87d75369490f6eadca1a85 Mon Sep 17 00:00:00 2001 From: Chopper Date: Tue, 15 Jun 2021 18:10:25 +0800 Subject: [PATCH 52/68] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/BroadcastTimeTriggerExecutor.java | 2 +- .../promotion/entity/dos/CouponActivity.java | 1 - .../CouponActivityManagerController.java | 17 ++++------------- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java index 0bc67f6c..ab42b58b 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java @@ -2,9 +2,9 @@ package cn.lili.trigger.executor; import cn.hutool.json.JSONUtil; import cn.lili.common.delayqueue.BroadcastMessage; -import cn.lili.common.trigger.interfaces.TimeTriggerExecutor; import cn.lili.common.trigger.model.TimeExecuteConstant; import cn.lili.modules.broadcast.service.StudioService; +import cn.lili.trigger.TimeTriggerExecutor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 26c781a9..bec05f38 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -26,7 +26,6 @@ public class CouponActivity extends BasePromotion { /** * @see CouponActivityTypeEnum - * */ @NotNull(message = "优惠券活动类型不能为空") @ApiModelProperty(value = "优惠券活动类型") diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index 1c99078d..859db064 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -6,20 +6,17 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.service.CouponActivityService; -import cn.lili.modules.promotion.service.CouponService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** @@ -35,8 +32,6 @@ public class CouponActivityManagerController { @Autowired private CouponActivityService couponActivityService; - @Autowired - private CouponService couponService; @ApiOperation(value = "获取优惠券活动分页") @GetMapping @@ -53,13 +48,15 @@ public class CouponActivityManagerController { @ApiOperation(value = "添加优惠券活动") @PostMapping - public ResultMessage addCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { + @PutMapping(consumes = "application/json", produces = "application/json") + public ResultMessage addCouponActivity(@RequestBody CouponActivityDTO couponActivityDTO) { + couponActivityDTO.setPromotionStatus(PromotionStatusEnum.NEW.name()); return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); } @ApiOperation(value = "修改优惠券活动") @PutMapping("/{id}") - public ResultMessage updateCouponActivity(@PathVariable String id, @Validated CouponActivityDTO couponActivityDTO) { + public ResultMessage updateCouponActivity(@PathVariable String id, CouponActivityDTO couponActivityDTO) { couponActivityDTO.setId(id); return ResultUtil.data(couponActivityService.updateCouponActivity(couponActivityDTO)); } @@ -78,10 +75,4 @@ public class CouponActivityManagerController { } - @ApiOperation(value = "获取活动优惠券列表") - @GetMapping("/activityCoupons") - public ResultMessage> activityCoupons() { - return ResultUtil.data(couponService.activityCoupons()); - } - } From fbcd5b74703abf2b3906e55cfff8c5fa30de34d3 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Thu, 17 Jun 2021 00:28:36 +0800 Subject: [PATCH 53/68] =?UTF-8?q?app=E7=89=88=E6=9C=AC=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E8=BF=87=E6=BB=A4=E5=BD=93=E5=89=8D=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/system/serviceimpl/AppVersionServiceImpl.java | 5 ++++- .../controller/other/broadcast/StudioManagerController.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/system/serviceimpl/AppVersionServiceImpl.java b/framework/src/main/java/cn/lili/modules/system/serviceimpl/AppVersionServiceImpl.java index 45a31a10..bf6e05ec 100644 --- a/framework/src/main/java/cn/lili/modules/system/serviceimpl/AppVersionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/system/serviceimpl/AppVersionServiceImpl.java @@ -2,6 +2,7 @@ package cn.lili.modules.system.serviceimpl; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; +import cn.lili.modules.goods.entity.dos.Brand; import cn.lili.modules.system.entity.dos.AppVersion; import cn.lili.modules.system.mapper.AppVersionMapper; import cn.lili.modules.system.service.AppVersionService; @@ -29,7 +30,9 @@ public class AppVersionServiceImpl extends ServiceImpl().eq(AppVersion::getVersion,appVersion.getVersion()))){ + if (null != this.getOne(new LambdaQueryWrapper() + .eq(AppVersion::getVersion, appVersion.getVersion()) + .ne(appVersion.getId() != null, AppVersion::getId, appVersion.getId()))) { throw new ServiceException(ResultCode.APP_VERSION_EXIST); } return true; diff --git a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java index 9436e196..d510874d 100644 --- a/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/other/broadcast/StudioManagerController.java @@ -42,7 +42,7 @@ public class StudioManagerController { @ApiOperation(value = "获取店铺直播间详情") @ApiImplicitParam(name = "studioId", value = "直播间ID", required = true, paramType = "path") - @GetMapping("/studioInfo/{studioId}") + @GetMapping("/{studioId}") public ResultMessage studioInfo(@PathVariable String studioId) { return ResultUtil.data(studioService.getStudioVO(studioId)); } From 24be8f342d81a9cd1b766a94ac8b860f490874a4 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 18 Jun 2021 10:12:15 +0800 Subject: [PATCH 54/68] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/sms/impl/SmsUtilAliImplService.java | 5 ----- .../lili/modules/goods/entity/dos/Goods.java | 6 +++--- .../MemberEvaluationServiceImpl.java | 16 ++++------------ .../modules/order/order/entity/dos/Order.java | 18 +++++++++--------- 4 files changed, 16 insertions(+), 29 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java b/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java index e55b3773..26b6e6d4 100644 --- a/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java +++ b/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java @@ -119,10 +119,6 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { default: return; } -<<<<<<< HEAD - log.info("短信验证码:"+code); -======= - //如果是测试模式 默认验证码 6个1 if (systemSetting.getIsTestModel()) { code = "111111"; @@ -130,7 +126,6 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { //发送短信 this.sendSmsCode(smsSetting.getSignName(), mobile, params, templateCode); } ->>>>>>> master //缓存中写入要验证的信息 cache.put(cacheKey(verificationEnums, mobile, uuid), code, 300L); } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java index 3cab4025..512d4498 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java @@ -185,18 +185,18 @@ public class Goods extends BaseEntity { @ApiModelProperty(value = "销售模式", required = true) private String salesModel; -<<<<<<< HEAD + /** * @see cn.lili.modules.goods.entity.enums.GoodsTypeEnum */ @ApiModelProperty(value = "商品类型", required = true) private String goodsType; -======= + @ApiModelProperty(value = "商品参数json", hidden = true) @Column(columnDefinition = "TEXT") @JsonIgnore private String params; ->>>>>>> master + public Goods() { } diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java index c410ea3e..d75a37de 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberEvaluationServiceImpl.java @@ -45,6 +45,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.util.List; import java.util.Map; @@ -58,6 +59,9 @@ import java.util.Map; @Transactional public class MemberEvaluationServiceImpl extends ServiceImpl implements MemberEvaluationService { + //会员评价数据层 + @Resource + private MemberEvaluationMapper memberEvaluationMapper; //订单 @Autowired private OrderService orderService; @@ -84,22 +88,10 @@ public class MemberEvaluationServiceImpl extends ServiceImpl queryByParams(StoreEvaluationQueryParams storeEvaluationQueryParams) { - return this.baseMapper.getMemberEvaluationList(PageUtil.initPage(storeEvaluationQueryParams), storeEvaluationQueryParams.queryWrapper()); - } - - @Override - public IPage queryPage(EvaluationQueryParams evaluationQueryParams, PageVO page) { - return this.baseMapper.getMemberEvaluationList(PageUtil.initPage(page), evaluationQueryParams.queryWrapper()); - } -======= public IPage queryPage(EvaluationQueryParams evaluationQueryParams) { return memberEvaluationMapper.getMemberEvaluationList(PageUtil.initPage(evaluationQueryParams), evaluationQueryParams.queryWrapper()); } ->>>>>>> master - @Override public MemberEvaluationDTO addMemberEvaluation(MemberEvaluationDTO memberEvaluationDTO) { //获取子订单信息 diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 8ab413c9..89782321 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -4,8 +4,6 @@ import cn.hutool.json.JSONUtil; import cn.lili.base.BaseEntity; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.base.entity.enums.ClientTypeEnum; -<<<<<<< HEAD -======= import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; @@ -15,7 +13,6 @@ import cn.lili.modules.order.order.entity.enums.OrderTypeEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; ->>>>>>> master import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; @@ -33,6 +30,7 @@ import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import java.util.Date; +import java.util.Optional; /** * 订单 @@ -217,18 +215,16 @@ public class Order extends BaseEntity { * @param tradeDTO 交易DTO */ public Order(CartVO cartVO, TradeDTO tradeDTO) { - String orderId = this.getId(); + String oldId = this.getId(); BeanUtil.copyProperties(tradeDTO, this); BeanUtil.copyProperties(cartVO.getPriceDetailDTO(), this); BeanUtil.copyProperties(cartVO, this); -<<<<<<< HEAD - //订单类型判断--普通订单,活动订单。 if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.CART) || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.BUY_NOW)) { this.setOrderType(OrderTypeEnum.NORMAL.name()); } else { this.setOrderType(tradeDTO.getCartTypeEnum().name()); -======= + } this.setId(oldId); this.setOrderType(OrderTypeEnum.NORMAL.name()); //促销信息填充 @@ -241,7 +237,6 @@ public class Order extends BaseEntity { this.setParentOrderSn(""); } } ->>>>>>> master } //设置默认支付状态 @@ -272,7 +267,12 @@ public class Order extends BaseEntity { } public PriceDetailDTO getPriceDetailDTO() { - return JSONUtil.toBean(priceDetail, PriceDetailDTO.class); + + try { + return JSONUtil.toBean(priceDetail, PriceDetailDTO.class); + } catch (Exception e) { + return null; + } } public void setPriceDetailDTO(PriceDetailDTO priceDetail) { From daa6236b3772a536c538f6141856ceffdd8758b1 Mon Sep 17 00:00:00 2001 From: Chopper Date: Fri, 18 Jun 2021 10:27:33 +0800 Subject: [PATCH 55/68] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E6=97=A0=E6=B3=95=E4=BF=9D=E5=AD=98=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java index 1d26a5d2..720403f6 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/CategoryServiceImpl.java @@ -17,7 +17,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -165,6 +164,8 @@ public class CategoryServiceImpl extends ServiceImpl i Category parentCategory = this.getById(category.getParentId()); category.setDeleteFlag(parentCategory.getDeleteFlag()); } + save(category); + //清除缓存 removeCache(); return true; } From b361fe7d9549b4ee72dca25c69788ba23aed0b30 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 18 Jun 2021 11:27:38 +0800 Subject: [PATCH 56/68] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E6=B4=BB=E5=8A=A8=E4=B8=8B=E7=9A=84=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E5=88=97=E8=A1=A8=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/event/impl/StockUpdateExecute.java | 6 ---- .../promotion/entity/dos/CouponActivity.java | 4 +-- .../entity/vos/CouponActivityItemVO.java | 30 +++++++++++++++++++ .../entity/vos/CouponActivityVO.java | 4 +-- .../mapper/CouponActivityItemMapper.java | 8 ++++- .../service/CouponActivityItemService.java | 8 +++++ .../CouponActivityItemServiceImpl.java | 8 +++++ .../CouponActivityServiceImpl.java | 2 +- 8 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index bb024900..c8449df3 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -56,10 +56,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { switch (orderMessage.getNewStatus()) { case PAID: { -<<<<<<< HEAD -======= //获取订单详情 ->>>>>>> master OrderDetailVO order = orderService.queryDetail(orderMessage.getOrderSn()); //库存key 和 扣减数量 List keys = new ArrayList<>(); @@ -87,10 +84,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { break; } case CANCELLED: { -<<<<<<< HEAD -======= //获取订单详情 ->>>>>>> master OrderDetailVO order = orderService.queryDetail(orderMessage.getOrderSn()); //判定是否已支付 并且 非库存不足导致库存回滚 则需要考虑订单库存返还业务 if (order.getOrder().getPayStatus().equals(PayStatusEnum.PAID.name()) && order.getOrder().getCancelReason().equals(outOfStockMessage)) { diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index bec05f38..18e46793 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -28,14 +28,14 @@ public class CouponActivity extends BasePromotion { * @see CouponActivityTypeEnum */ @NotNull(message = "优惠券活动类型不能为空") - @ApiModelProperty(value = "优惠券活动类型") + @ApiModelProperty(value = "优惠券活动类型", allowableValues = "REGISTERED:新人赠券,SPECIFY:精确发券") private String couponActivityType; @NotNull(message = "请选择活动范围") @ApiModelProperty(value = "活动范围", allowableValues = "ALL:全部会员,DESIGNATED:指定会员") private String activityScope; - @ApiModelProperty(value = "活动范围详情") + @ApiModelProperty(value = "活动范围详情,只有精准发券使用") private String activityScopeInfo; } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java new file mode 100644 index 00000000..47dc2630 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java @@ -0,0 +1,30 @@ +package cn.lili.modules.promotion.entity.vos; + +import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import io.swagger.annotations.ApiModelProperty; + +/** + * 优惠券活动的优惠券VO + * + * @author Bulbasaur + * @date: 2021/6/18 11:00 上午 + */ +public class CouponActivityItemVO extends CouponActivityItem { + + @ApiModelProperty(value = "优惠券名称") + private String couponName; + + @ApiModelProperty(value = "面额") + private Double price; + + /** + * POINT("打折"), PRICE("减免现金"); + * + * @see cn.lili.modules.promotion.entity.enums.CouponTypeEnum + */ + @ApiModelProperty(value = "优惠券类型") + private String couponType; + + @ApiModelProperty(value = "折扣") + private Double couponDiscount; +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java index 956c9f8c..aeaa37a8 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java @@ -20,9 +20,9 @@ import java.util.List; public class CouponActivityVO extends CouponActivity { @ApiModelProperty(value = "优惠券活动下的优惠券列表") - private List couponActivityItems; + private List couponActivityItems; - public CouponActivityVO(CouponActivity couponActivity, List couponActivityItems) { + public CouponActivityVO(CouponActivity couponActivity, List couponActivityItemVOS) { BeanUtil.copyProperties(couponActivity, this); this.couponActivityItems = couponActivityItems; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java index 000d8b5c..ec251625 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/CouponActivityItemMapper.java @@ -1,7 +1,12 @@ package cn.lili.modules.promotion.mapper; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import cn.lili.modules.promotion.entity.vos.CouponActivityItemVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; /** * 优惠券活动 @@ -11,5 +16,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface CouponActivityItemMapper extends BaseMapper { - + @Select("SELECT cai.*,c.coupon_name,c.price,c.coupon_type,c.coupon_discount FROM li_coupon_activity_item cai INNER JOIN li_coupon c ON cai.coupon_id = c.id WHERE cai.activity_id= #{activityId} ") + List getCouponActivityItemListVO(String activityId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java index 5616b7c8..f85206dc 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityItemService.java @@ -1,6 +1,7 @@ package cn.lili.modules.promotion.service; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import cn.lili.modules.promotion.entity.vos.CouponActivityItemVO; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -20,4 +21,11 @@ public interface CouponActivityItemService extends IService * @return 优惠券关联优惠券列表 */ List getCouponActivityList(String activityId); + /** + * 获取优惠券活动关联优惠券列表VO + * + * @param activityId 优惠券活动ID + * @return 优惠券关联优惠券列表 + */ + List getCouponActivityItemListVO(String activityId); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java index b5993abc..c8c1cd5a 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java @@ -1,6 +1,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; +import cn.lili.modules.promotion.entity.vos.CouponActivityItemVO; import cn.lili.modules.promotion.mapper.CouponActivityItemMapper; import cn.lili.modules.promotion.service.CouponActivityItemService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -16,8 +17,15 @@ import java.util.List; */ @Service public class CouponActivityItemServiceImpl extends ServiceImpl implements CouponActivityItemService { + @Override public List getCouponActivityList(String activityId) { return this.list(this.lambdaQuery().eq(CouponActivityItem::getActivityId, activityId)); } + + @Override + public List getCouponActivityItemListVO(String activityId) { + return this.baseMapper.getCouponActivityItemListVO(activityId); + } + } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 8bf5734f..3dd081c6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -74,7 +74,7 @@ public class CouponActivityServiceImpl extends ServiceImpl Date: Fri, 18 Jun 2021 14:23:51 +0800 Subject: [PATCH 57/68] =?UTF-8?q?=E4=BA=A4=E4=BA=92=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/dto/CouponActivityDTO.java | 5 +++++ .../promotion/entity/dto/MemberDTO.java | 22 +++++++++++++++++++ .../CouponActivityItemServiceImpl.java | 5 ++++- .../CouponActivityServiceImpl.java | 5 +++++ .../CouponActivityManagerController.java | 2 +- 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/MemberDTO.java diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java index 0e997819..888edc6e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/CouponActivityDTO.java @@ -4,6 +4,8 @@ import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.beans.factory.annotation.Required; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -18,4 +20,7 @@ public class CouponActivityDTO extends CouponActivity { @ApiModelProperty(value = "优惠券列表") private List couponActivityItems; + + @ApiModelProperty(value = "会员列表") + private List memberDTOS; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/MemberDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/MemberDTO.java new file mode 100644 index 00000000..c7d40695 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/MemberDTO.java @@ -0,0 +1,22 @@ +package cn.lili.modules.promotion.entity.dto; + +import lombok.Data; + +/** + * 会员dto + * + * @author Chopper + * @version v1.0 + * 2021-06-18 11:30 + */ +@Data +public class MemberDTO { + /** + * 会员昵称 + */ + private String nickName; + /** + * id + */ + private String id; +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java index b5993abc..24cf0b7b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityItemServiceImpl.java @@ -3,6 +3,7 @@ package cn.lili.modules.promotion.serviceimpl; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import cn.lili.modules.promotion.mapper.CouponActivityItemMapper; import cn.lili.modules.promotion.service.CouponActivityItemService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -18,6 +19,8 @@ import java.util.List; public class CouponActivityItemServiceImpl extends ServiceImpl implements CouponActivityItemService { @Override public List getCouponActivityList(String activityId) { - return this.list(this.lambdaQuery().eq(CouponActivityItem::getActivityId, activityId)); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CouponActivityItem::getActivityId, activityId); + return this.list(lambdaQueryWrapper); } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 8bf5734f..10ae007f 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -1,5 +1,6 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.hutool.json.JSONUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.DateUtil; import cn.lili.modules.member.entity.dos.Member; @@ -50,6 +51,10 @@ public class CouponActivityServiceImpl extends ServiceImpl addCouponActivity(@RequestBody CouponActivityDTO couponActivityDTO) { + public ResultMessage addCouponActivity(@RequestBody(required = false) CouponActivityDTO couponActivityDTO) { couponActivityDTO.setPromotionStatus(PromotionStatusEnum.NEW.name()); return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); } From c787b4762be05e5111fe0389bc961060ec8fb119 Mon Sep 17 00:00:00 2001 From: Chopper Date: Fri, 18 Jun 2021 16:20:00 +0800 Subject: [PATCH 58/68] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E7=B2=97=E7=B2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/entity/dos/CouponActivity.java | 4 +++ .../enums/CouponActivitySendTypeEnum.java | 23 +++++++++++++++++ .../entity/vos/CouponActivityItemVO.java | 2 ++ .../entity/vos/CouponActivityVO.java | 3 +-- .../service/CouponActivityService.java | 15 +++++------ .../CouponActivityServiceImpl.java | 25 ++++++++++++++++--- .../CouponActivityManagerController.java | 18 ++++--------- 7 files changed, 63 insertions(+), 27 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivitySendTypeEnum.java diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 18e46793..a91fff96 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -1,6 +1,7 @@ package cn.lili.modules.promotion.entity.dos; import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.CouponActivitySendTypeEnum; import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; @@ -31,6 +32,9 @@ public class CouponActivity extends BasePromotion { @ApiModelProperty(value = "优惠券活动类型", allowableValues = "REGISTERED:新人赠券,SPECIFY:精确发券") private String couponActivityType; + /** + * @see CouponActivitySendTypeEnum + */ @NotNull(message = "请选择活动范围") @ApiModelProperty(value = "活动范围", allowableValues = "ALL:全部会员,DESIGNATED:指定会员") private String activityScope; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivitySendTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivitySendTypeEnum.java new file mode 100644 index 00000000..29faba67 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponActivitySendTypeEnum.java @@ -0,0 +1,23 @@ +package cn.lili.modules.promotion.entity.enums; + +/** + * 优惠券活动发送类型枚举 + * + * @author Bulbasaur + * @date: 2021/5/20 5:47 下午 + */ +public enum CouponActivitySendTypeEnum { + + ALL("全部会员"), + DESIGNATED("指定会员"); + + private final String description; + + CouponActivitySendTypeEnum(String str) { + this.description = str; + } + + public String description() { + return description; + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java index 47dc2630..da003d29 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityItemVO.java @@ -2,6 +2,7 @@ package cn.lili.modules.promotion.entity.vos; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; /** * 优惠券活动的优惠券VO @@ -9,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty; * @author Bulbasaur * @date: 2021/6/18 11:00 上午 */ +@Data public class CouponActivityItemVO extends CouponActivityItem { @ApiModelProperty(value = "优惠券名称") diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java index aeaa37a8..0a8a9d26 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/CouponActivityVO.java @@ -2,7 +2,6 @@ package cn.lili.modules.promotion.entity.vos; import cn.lili.common.utils.BeanUtil; import cn.lili.modules.promotion.entity.dos.CouponActivity; -import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -24,6 +23,6 @@ public class CouponActivityVO extends CouponActivity { public CouponActivityVO(CouponActivity couponActivity, List couponActivityItemVOS) { BeanUtil.copyProperties(couponActivity, this); - this.couponActivityItems = couponActivityItems; + this.couponActivityItems = couponActivityItemVOS; } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java index 6992fb95..7b5fd0d4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java @@ -19,12 +19,14 @@ public interface CouponActivityService extends IService { /** * 创建优惠券活动--精准发券、新人赠券 + * * @param couponActivityDTO 优惠券活动DTO */ CouponActivityDTO addCouponActivity(CouponActivityDTO couponActivityDTO); /** * 修改优惠券活动--精准发券、新人赠券 + * * @param couponActivityDTO 优惠券活动DTO */ CouponActivityDTO updateCouponActivity(CouponActivityDTO couponActivityDTO); @@ -49,18 +51,13 @@ public interface CouponActivityService extends IService { * 注册赠券 * * @param couponActivityList 优惠券活动 - * @param member 会员 + * @param member 会员 */ void registered(List couponActivityList, Member member); - //删除优惠券活动 - - //关闭优惠券活动 + /** + * 关闭优惠券活动 + */ boolean updateCouponActivityStatus(String id, PromotionStatusEnum promotionStatus); - //开启优惠券活动 - - //查看优惠券活动 - - //查看优惠券活动 } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 5f68ef81..33b06d31 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -10,6 +10,7 @@ import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.enums.CouponActivitySendTypeEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; @@ -51,8 +52,8 @@ public class CouponActivityServiceImpl extends ServiceImpl 10) { + throw new ServiceException("优惠券活动最多指定10个优惠券"); + } else { + for (CouponActivityItem item : couponActivity.getCouponActivityItems()) { + if (item.getNum() == null || item.getNum() <= 0) { + throw new ServiceException("赠券数量必须大于0"); + } + } + } } /** diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index 2ca35d8b..ac9575a4 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -54,21 +54,13 @@ public class CouponActivityManagerController { return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); } - @ApiOperation(value = "修改优惠券活动") - @PutMapping("/{id}") - public ResultMessage updateCouponActivity(@PathVariable String id, CouponActivityDTO couponActivityDTO) { - couponActivityDTO.setId(id); - return ResultUtil.data(couponActivityService.updateCouponActivity(couponActivityDTO)); - } - - @ApiOperation(value = "关闭、启动优惠券") + @ApiOperation(value = "关闭优惠券活动") @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "优惠券活动ID", required = true, dataType = "String", paramType = "path"), - @ApiImplicitParam(name = "promotionStatus", value = "活动状态", required = true, dataType = "String", paramType = "path") + @ApiImplicitParam(name = "id", value = "优惠券活动ID", required = true, dataType = "String", paramType = "path") }) - @PutMapping("/updateStatus/{id}/{promotionStatus}") - public ResultMessage updateStatus(@PathVariable String id, @PathVariable String promotionStatus) { - if (couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.valueOf(promotionStatus))) { + @PutMapping("/close/{id}") + public ResultMessage updateStatus(@PathVariable String id) { + if (couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.END)) { return ResultUtil.success(ResultCode.SUCCESS); } throw new ServiceException(ResultCode.ERROR); From e5b9280b7e705cb0d8ec5bdf2290139955332116 Mon Sep 17 00:00:00 2001 From: Chopper Date: Fri, 18 Jun 2021 16:36:53 +0800 Subject: [PATCH 59/68] =?UTF-8?q?=E5=85=B3=E9=97=AD=E5=88=B8=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/promotion/CouponActivityManagerController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index ac9575a4..5609a3e8 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -58,7 +58,7 @@ public class CouponActivityManagerController { @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "优惠券活动ID", required = true, dataType = "String", paramType = "path") }) - @PutMapping("/close/{id}") + @DeleteMapping("/{id}") public ResultMessage updateStatus(@PathVariable String id) { if (couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.END)) { return ResultUtil.success(ResultCode.SUCCESS); From 738a95edb6a97c69cd931284c9524df93b5b02ff Mon Sep 17 00:00:00 2001 From: Chopper Date: Fri, 18 Jun 2021 17:33:45 +0800 Subject: [PATCH 60/68] =?UTF-8?q?=E5=88=86=E7=B1=BB=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/modules/goods/entity/dos/Category.java | 6 ++++++ .../cn/lili/controller/goods/CategoryManagerController.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Category.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Category.java index b4f4d4f1..d7653ea7 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Category.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Category.java @@ -11,6 +11,7 @@ import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persistence.Table; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.Date; @@ -35,18 +36,23 @@ public class Category extends BaseEntity { @ApiModelProperty(value = "分类名称") private String name; + @NotEmpty(message = "请选择父分类") @ApiModelProperty(value = "父id, 根节点为0") private String parentId; + @NotNull(message = "层级不能为空") @ApiModelProperty(value = "层级, 从0开始") private Integer level; + @NotNull(message = "排序值不能为空") @ApiModelProperty(value = "排序值") private BigDecimal sortOrder; + @NotNull(message = "请填写佣金比例") @ApiModelProperty(value = "佣金比例") private Double commissionRate; + @NotEmpty(message = "分类图标不能为空") @ApiModelProperty(value = "分类图标") private String image; diff --git a/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java b/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java index 0ef47f8e..cd705a56 100644 --- a/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/goods/CategoryManagerController.java @@ -87,7 +87,7 @@ public class CategoryManagerController { @PutMapping @ApiOperation(value = "修改商品分类") - public ResultMessage updateCategory(CategoryVO category) { + public ResultMessage updateCategory(@Valid CategoryVO category) { Category catTemp = categoryService.getById(category.getId()); if (catTemp == null) { throw new ServiceException(ResultCode.CATEGORY_PARENT_NOT_EXIST); From 859689eec224c303d8885a1bde9c542dd2def5db Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 19 Jun 2021 14:11:57 +0800 Subject: [PATCH 61/68] =?UTF-8?q?1.=E7=9B=B4=E6=92=AD=E5=95=86=E5=93=81?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E4=B8=8D=E8=83=BD=E8=B6=85=E8=BF=8714?= =?UTF-8?q?=E4=BD=8D=E3=80=82=202.=E6=B7=BB=E5=8A=A0=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/modules/broadcast/util/WechatLivePlayerUtil.java | 6 ++++++ .../java/cn/lili/modules/order/order/entity/dos/Order.java | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java index a853bae5..702c284f 100644 --- a/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java +++ b/framework/src/main/java/cn/lili/modules/broadcast/util/WechatLivePlayerUtil.java @@ -170,6 +170,12 @@ public class WechatLivePlayerUtil { String token = wechatAccessTokenUtil.cgiAccessToken(ClientTypeEnum.WECHAT_MP); //发送url String url = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=" + token; + + //商品名称,最长14个汉字 + if (commodity.getName().length() > 14) { + commodity.setName(commodity.getName().substring(0, 13)); + } + //新建微信商品DTO GoodsInfo goodsInfo = new GoodsInfo(commodity); //上传微信临时图片 diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 89782321..09903e68 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -222,11 +222,13 @@ public class Order extends BaseEntity { //订单类型判断--普通订单,活动订单。 if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.CART) || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.BUY_NOW)) { this.setOrderType(OrderTypeEnum.NORMAL.name()); - } else { + } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.VIRTUAL)) { this.setOrderType(tradeDTO.getCartTypeEnum().name()); + } else { + this.setOrderType(OrderTypeEnum.NORMAL.name()); } this.setId(oldId); - this.setOrderType(OrderTypeEnum.NORMAL.name()); + //促销信息填充 if (cartVO.getSkuList().get(0).getPromotions() != null && tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)) { Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); From 4e87ad22c167404370eb844712349dd22d78e845 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 19 Jun 2021 14:31:56 +0800 Subject: [PATCH 62/68] =?UTF-8?q?=E8=99=9A=E6=8B=9F=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E8=AE=A2=E5=8D=95=E6=A0=B8=E9=AA=8C=E7=A0=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BA8=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/VerificationOrderExecute.java | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java index 22526529..95e2e3a8 100644 --- a/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/VerificationOrderExecute.java @@ -1,34 +1,62 @@ package cn.lili.event.impl; +import cn.hutool.core.util.RandomUtil; import cn.lili.common.utils.CommonUtil; import cn.lili.event.OrderStatusChangeEvent; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; import cn.lili.modules.order.order.service.OrderService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * 虚拟商品 + * * @author Bulbasaur * @date: 2021/5/29 9:17 上午 - * */ @Component public class VerificationOrderExecute implements OrderStatusChangeEvent { @Autowired private OrderService orderService; + @Override public void orderChange(OrderMessage orderMessage) { //订单状态为待核验,添加订单添加核验码 - if(orderMessage.getNewStatus().equals(OrderStatusEnum.TAKE)) { - String code = CommonUtil.getRandomNum(); - orderService.update(new LambdaUpdateWrapper() - .set(Order::getVerificationCode, code) - .eq(Order::getSn, orderMessage.getOrderSn())); - } + if (orderMessage.getNewStatus().equals(OrderStatusEnum.TAKE)) { + //获取订单信息 + Order order = orderService.getBySn(orderMessage.getOrderSn()); + //获取随机数,判定是否存在 + String code = getCode(order.getStoreId()); + //设置订单验证码 + orderService.update(new LambdaUpdateWrapper() + .set(Order::getVerificationCode, code) + .eq(Order::getSn, orderMessage.getOrderSn())); + } + } + + /** + * 获取随机数 + * 判断当前店铺下是否使用验证码,如果已使用则重新获取 + * + * @param storeId 店铺ID + * @return + */ + private String getCode(String storeId) { + //获取八位验证码 + String code = Long.toString(RandomUtil.randomLong(10000000, 99999999)); + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .eq(Order::getVerificationCode, code) + .eq(Order::getStoreId, storeId); + if (orderService.getOne(lambdaQueryWrapper) == null) { + return code; + } else { + return this.getCode(storeId); + } } } From d7b0ff4cd1e287104f096c2760c9a0c777543beb Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 19 Jun 2021 17:43:04 +0800 Subject: [PATCH 63/68] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=97=B6=E9=97=B4=E5=88=A4=E5=AE=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/CouponServiceImpl.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java index d5ae1ac8..04941ab5 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponServiceImpl.java @@ -89,14 +89,18 @@ public class CouponServiceImpl extends ServiceImpl impleme this.updateScopePromotionGoods(coupon); // 保存到MONGO中 this.mongoTemplate.save(coupon); - PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, - coupon.getStartTime().getTime(), - promotionMessage, - DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), - rocketmqCustomProperties.getPromotionTopic()); - // 发送促销活动开始的延时任务 - this.timeTrigger.addDelay(timeTriggerMsg); + //如果优惠券是固定时间则添加延时任务 + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + PromotionMessage promotionMessage = new PromotionMessage(coupon.getId(), PromotionTypeEnum.COUPON.name(), PromotionStatusEnum.START.name(), coupon.getStartTime(), coupon.getEndTime()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + coupon.getStartTime().getTime(), + promotionMessage, + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + // 发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg); + } + return coupon; } @@ -278,12 +282,14 @@ public class CouponServiceImpl extends ServiceImpl impleme throw new ServiceException("优惠券折扣必须小于10且大于0"); } - long nowTime = DateUtil.getDateline() * 1000; - if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { - throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); - } + if (coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { + long nowTime = DateUtil.getDateline() * 1000; + if (coupon.getStartTime().getTime() < nowTime && coupon.getEndTime().getTime() > nowTime) { + throw new ServiceException("活动时间小于当前时间,不能进行编辑删除操作"); + } - PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); + PromotionTools.checkPromotionTime(coupon.getStartTime().getTime(), coupon.getEndTime().getTime()); + } this.checkCouponScope(coupon); //对状态的处理.如果未传递状态则需要 根据当前时间来确认优惠券状态 @@ -326,7 +332,7 @@ public class CouponServiceImpl extends ServiceImpl impleme * @param coupon 优惠券参数 */ private void promotionStatusEmpty(CouponVO coupon) { - if (StringUtils.isEmpty(coupon.getPromotionStatus())) { + if (StringUtils.isEmpty(coupon.getPromotionStatus()) && coupon.getRangeDayType().equals(CouponRangeDayEnum.FIXEDTIME.name())) { //格式时间 long startTme = coupon.getStartTime().getTime() / 1000; long endTime = coupon.getEndTime().getTime() / 1000; From 9546807031ad8cedb617d98659d1bd347f242c0b Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 10:53:04 +0800 Subject: [PATCH 64/68] =?UTF-8?q?=E6=B5=81=E9=87=8F=E9=99=90=E5=88=B6?= =?UTF-8?q?=E8=AE=BE=E5=AE=9A=E6=9B=B4=E5=90=88=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/aop/limiter/LimitInterceptor.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 0e35a46a..59ea7a02 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -1,6 +1,7 @@ package cn.lili.common.aop.limiter; import cn.lili.common.aop.limiter.annotation.LimitPoint; +import cn.lili.common.exception.ServiceException; import com.google.common.collect.ImmutableList; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -21,6 +22,7 @@ import java.lang.reflect.Method; /** * 流量拦截 + * * @author Chopper */ @Aspect @@ -42,7 +44,7 @@ public class LimitInterceptor { } @Around("execution(public * *(..)) && @annotation(cn.lili.common.aop.limiter.annotation.LimitPoint)") - public Object interceptor(ProceedingJoinPoint pjp) { + public Object interceptor(ProceedingJoinPoint pjp) throws Throwable { MethodSignature signature = (MethodSignature) pjp.getSignature(); Method method = signature.getMethod(); LimitPoint limitPointAnnotation = method.getAnnotation(LimitPoint.class); @@ -65,22 +67,27 @@ public class LimitInterceptor { try { Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod); log.info("Access try count is {} for name={} and key = {}", count, name, key); - if (count != null && count.intValue() <= limitCount) { + // 如果缓存里没有值,或者他的值小于限制频率 + if (count.intValue() <= limitCount) { return pjp.proceed(); } else { - throw new RuntimeException("访问过于频繁,请稍后再试"); + throw new ServiceException("访问过于频繁,请稍后再试"); } - } catch (Throwable e) { - if (e instanceof RuntimeException) { - throw new RuntimeException(e.getLocalizedMessage()); + } catch (NullPointerException e) { + return pjp.proceed(); + } catch (Exception e) { + if (e instanceof ServiceException) { + throw new ServiceException(e.getLocalizedMessage()); } throw new RuntimeException("服务器异常,请稍后再试"); } } + //默认unknown常量值 private static final String UNKNOWN = "unknown"; + //获取ip public String getIpAddress() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ip = request.getHeader("x-forwarded-for"); From b574dfb04ffff7425e4938ad8a829ab9ff5fec66 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 21 Jun 2021 11:36:14 +0800 Subject: [PATCH 65/68] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=88=B8=E6=B4=BB=E5=8A=A8=E5=8F=91=E9=80=81=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=88=B8=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/coupon/CouponActivityExecute.java | 5 ++-- .../handler/impl/goods/GoodsExecute.java | 1 - .../impl/view/PageViewStatisticsExecute.java | 1 - .../sms/impl/SmsUtilAliImplService.java | 2 -- .../serviceimpl/SystemLogServiceImpl.java | 3 -- .../CouponActivityServiceImpl.java | 29 ++++++++++--------- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java index b4f6cc19..f960098f 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponActivityExecute.java @@ -51,7 +51,6 @@ public class CouponActivityExecute implements EveryMinuteExecute { //修改精准发券优惠券活动状态 couponActivityService.update(new LambdaUpdateWrapper() - .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name()) .eq(CouponActivity::getId,couponActivity.getId()) .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name())); } @@ -67,7 +66,7 @@ public class CouponActivityExecute implements EveryMinuteExecute { lambdaUpdateWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.NEW.name()) .le(CouponActivity::getStartTime, DateUtil.date()) - .set(CouponActivity::getActivityScope,PromotionStatusEnum.START.name()); + .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.START.name()); couponActivityService.update(lambdaUpdateWrapper); //关闭注册赠券优惠券活动 @@ -75,7 +74,7 @@ public class CouponActivityExecute implements EveryMinuteExecute { endWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name()) .le(CouponActivity::getEndTime, DateUtil.date()) - .set(CouponActivity::getActivityScope,PromotionStatusEnum.END.name()); + .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name()); couponActivityService.update(endWrapper); } } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java index d431d869..3bcdbf1e 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java @@ -39,7 +39,6 @@ public class GoodsExecute implements EveryDayExecute { new QueryWrapper() .between("create_time", DateUtil.yesterday(), new DateTime())); - System.out.println("评论数量" + list.size()); for (Map map : list) { goodsMapper.addGoodsCommentNum(Integer.parseInt(map.get("num").toString()), map.get("goods_id").toString()); } diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java index 74972785..22c0a9f4 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java @@ -186,7 +186,6 @@ class PageViewStatistics { calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); this.date = calendar.getTime(); - System.out.println(DateUtil.toString(date,DateUtil.STANDARD_FORMAT)); } } diff --git a/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java b/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java index 26b6e6d4..f22b9496 100644 --- a/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java +++ b/framework/src/main/java/cn/lili/common/sms/impl/SmsUtilAliImplService.java @@ -202,8 +202,6 @@ public class SmsUtilAliImplService implements SmsUtil, AliSmsUtil { public void addSmsSign(SmsSign smsSign) throws Exception { //设置参数添加短信签名 com.aliyun.dysmsapi20170525.Client client = this.createClient(); - System.out.println(smsSign.getBusinessLicense().substring(smsSign.getBusinessLicense().lastIndexOf(".") + 1)); - System.out.println(smsSign.getLicense().substring(smsSign.getLicense().lastIndexOf("."))); //营业执照 AddSmsSignRequest.AddSmsSignRequestSignFileList signFileList0 = new AddSmsSignRequest.AddSmsSignRequestSignFileList() .setFileContents(Base64Utils.encode(smsSign.getBusinessLicense())) diff --git a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java index 25aeaffc..bf5e55b2 100644 --- a/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/permission/serviceimpl/SystemLogServiceImpl.java @@ -70,9 +70,6 @@ public class SystemLogServiceImpl implements SystemLogService { } //时间有效性判定 if (searchVo.getConvertStartDate() != null && searchVo.getConvertEndDate() != null) { - System.out.println(DateUtil.toString(searchVo.getConvertStartDate(), DateUtil.STANDARD_FORMAT)); - System.out.println(DateUtil.toString(searchVo.getConvertEndDate(), DateUtil.STANDARD_FORMAT)); - //大于方法 Criteria gt = Criteria.where("createTime").gt(searchVo.getConvertStartDate()); //小于方法 diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 33b06d31..03f56f14 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -136,6 +136,10 @@ public class CouponActivityServiceImpl extends ServiceImpl memberCouponList = new LinkedList<>(); - //循环会员列表,添加优惠券 - MemberCoupon memberCoupon = new MemberCoupon(coupon); - for (Map map : memberList) { - memberCoupon.setMemberId(map.get("id").toString()); - memberCoupon.setMemberName(map.get("nick_name").toString()); - memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); - memberCoupon.setIsPlatform(coupon.getStoreId().equals("platform")); - //循环优惠券的领取数量 - for (int i = 1; i <= couponActivityItem.getNum(); i++) { + //循环优惠券的领取数量 + int j=couponActivityItem.getNum(); + for (int i = 1; i <= j; i++) { + //循环会员列表,添加优惠券 + for (Map map : memberList) { + MemberCoupon memberCoupon = new MemberCoupon(coupon); + memberCoupon.setMemberId(map.get("id").toString()); + memberCoupon.setMemberName(map.get("nick_name").toString()); + memberCoupon.setMemberCouponStatus(MemberCouponStatusEnum.NEW.name()); + memberCoupon.setIsPlatform(coupon.getStoreId().equals("platform")); memberCouponList.add(memberCoupon); } } @@ -216,12 +221,10 @@ public class CouponActivityServiceImpl extends ServiceImpl() - .select("id") - .select("nick_name")); + .select("id,nick_name")); } else { return memberService.listMaps(new QueryWrapper() - .select("id") - .select("nick_name") + .select("id,nick_name") .in("id", couponActivity.getActivityScopeInfo())); } } From 50911137cb8bbfefff3b11fd1dd217a4ca16743b Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 11:55:08 +0800 Subject: [PATCH 66/68] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E7=9B=B8=E5=85=B3=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/aop/limiter/LimitInterceptor.java | 7 +- .../java/cn/lili/common/enums/ResultCode.java | 78 +++++++++- .../order/cart/render/TradeBuilder.java | 47 ++++--- .../cart/render/impl/CheckDataRender.java | 86 ++++++++++- .../cart/render/impl/FullDiscountRender.java | 42 +++--- .../cart/render/impl/SkuFreightRender.java | 13 +- .../order/cart/service/CartService.java | 13 -- .../order/cart/service/CartServiceImpl.java | 133 +++++++++--------- .../order/serviceimpl/OrderServiceImpl.java | 21 +-- 9 files changed, 284 insertions(+), 156 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 59ea7a02..4a0cf9c6 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -73,12 +73,11 @@ public class LimitInterceptor { } else { throw new ServiceException("访问过于频繁,请稍后再试"); } - } catch (NullPointerException e) { + } + //如果从redis中执行都值判定为空,则这里跳过 + catch (NullPointerException e) { return pjp.proceed(); } catch (Exception e) { - if (e instanceof ServiceException) { - throw new ServiceException(e.getLocalizedMessage()); - } throw new RuntimeException("服务器异常,请稍后再试"); } } diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 90fd8a16..d6e4b16b 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -97,8 +97,8 @@ public enum ResultCode { USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"), USER_EDIT_ERROR(20015, "用户修改失败"), USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"), - USER_COLLECTION_EXIST(20017,"无法重复收藏"), - USER_GRADE_IS_DEFAULT(20018,"会员等级为默认会员等级"), + USER_COLLECTION_EXIST(20017, "无法重复收藏"), + USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"), DELETE_EXIST(2001, "无法重复收藏"), /** @@ -125,62 +125,97 @@ public enum ResultCode { * 购物车 */ CART_ERROR(30001, "读取结算页的购物车异常"), + CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动不存在错误"), + CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"), SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"), + /** * 订单 */ ORDER_ERROR(31001, "创建订单异常,请稍后重试"), + ORDER_NOT_EXIST(31002, "订单不存在"), + ORDER_DELIVERED_ERROR(31003, "订单状态错误,无法进行确认收货"), + ORDER_UPDATE_PRICE_ERROR(31004, "已支付的订单不能修改金额"), + ORDER_LOGISTICS_ERROR(31005, "物流错误"), + ORDER_DELIVER_ERROR(31006, "物流错误"), + ORDER_NOT_USER(31007, "非当前会员的订单"), + ORDER_TAKE_ERROR(31008, "当前订单无法核销"), + MEMBER_ADDRESS_NOT_EXIST(31009, "订单无收货地址,请先配置收货地址"), + ORDER_DELIVER_NUM_ERROR(31010, "没有待发货的订单"), /** * 支付 */ PAY_UN_WANTED(32000, "当前订单不需要付款,返回订单列表等待系统订单出库即可"), + PAY_SUCCESS(32001, "支付成功"), + PAY_INCONSISTENT_ERROR(32002, "付款金额和应付金额不一致"), + PAY_DOUBLE_ERROR(32003, "订单已支付,不能再次进行支付"), + PAY_CASHIER_ERROR(32004, "收银台信息获取错误"), + PAY_ERROR(32005, "支付业务异常,请稍后重试"), + PAY_BAN(32006, "当前订单不需要付款,请返回订单列表重新操作"), + PAY_PARTIAL_ERROR(32007, "该订单已部分支付,请前往订单中心进行支付"), + PAY_NOT_SUPPORT(32008, "支付暂不支持"), + PAY_CLIENT_TYPE_ERROR(32009, "错误的客户端"), + PAY_POINT_ENOUGH(32010, "积分不足,不能兑换"), + PAY_NOT_EXIST_ORDER(32011, "支付订单不存在"), /** * 售后 */ AFTER_SALES_NOT_PAY_ERROR(33001, "当前订单未支付,不能申请售后"), + AFTER_SALES_CANCEL_ERROR(33002, "当前售后单无法取消"), + AFTER_SALES_BAN(33003, "订单状态不允许申请售后,请联系平台或商家"), + AFTER_SALES_DOUBLE_ERROR(33004, "售后已审核,无法重复操作"), + AFTER_SALES_LOGISTICS_ERROR(33005, "物流公司错误,请重新选择"), + AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"), /** * 投诉 */ COMPLAINT_ORDER_ITEM_EMPTY_ERROR(33100, "订单不存在"), + COMPLAINT_SKU_EMPTY_ERROR(33101, "商品已下架,如需投诉请联系平台客服"), + COMPLAINT_ERROR(33102, "投诉异常,请稍后重试"), /** * 余额 */ WALLET_NOT_EXIT_ERROR(34000, "钱包不存在,请联系管理员"), + WALLET_INSUFFICIENT(34001, "余额不足以支付订单,请充值!"), + WALLET_WITHDRAWAL_INSUFFICIENT(34002, "可提现金额不足!"), + WALLET_ERROR_INSUFFICIENT(34003, "零钱提现失败!"), + WALLET_REMARK_ERROR(34004, "请填写审核备注!"), + WALLET_APPLY_ERROR(34005, "提现申请异常!"), /** @@ -197,52 +232,74 @@ public enum ResultCode { * 优惠券 */ COUPON_EDIT_STATUS_SUCCESS(41001, "修改状态成功!"), + COUPON_CANCELLATION_SUCCESS(41002, "会员优惠券作废成功"), + COUPON_EXPIRED(41003, "优惠券已使用/已过期,不能使用"), + COUPON_EDIT_STATUS_ERROR(41004, "优惠券修改状态失败!"), /** * 拼团 */ PINTUAN_MANUAL_OPEN_SUCCESS(42001, "手动开启拼团活动成功"), + PINTUAN_MANUAL_CLOSE_SUCCESS(42002, "手动关闭拼团活动成功"), + PINTUAN_ADD_SUCCESS(42003, "添加拼团活动成功"), + PINTUAN_EDIT_SUCCESS(42004, "修改拼团活动成功"), + PINTUAN_DELETE_SUCCESS(42005, "删除拼团活动成功"), + PINTUAN_MANUAL_OPEN_ERROR(42006, "手动开启拼团活动失败"), + PINTUAN_MANUAL_CLOSE_ERROR(42007, "手动关闭拼团活动失败"), + PINTUAN_ADD_ERROR(42008, "添加拼团活动失败"), + PINTUAN_EDIT_ERROR(42009, "修改拼团活动失败"), + PINTUAN_DELETE_ERROR(42010, "删除拼团活动失败"), /** * 满额活动 */ FULL_DISCOUNT_EDIT_SUCCESS(43001, "修改满优惠活动成功"), + FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"), /** * 店铺 */ STORE_NOT_EXIST(50001, "此店铺不存在"), + STORE_NAME_EXIST_ERROR(50002, "店铺名称已存在!"), + STORE_APPLY_DOUBLE_ERROR(50003, "已有店铺,无需重复申请!"), /** * 结算单 */ BILL_CHECK_ERROR(51001, "只有已出账结算单可以核对"), + BILL_COMPLETE_ERROR(51002, "只有已审核结算单可以支付"), /** * 文章 */ ARTICLE_CATEGORY_NAME_EXIST(60001, "文章分类名称已存在"), + ARTICLE_CATEGORY_PARENT_NOT_EXIST(60002, "文章分类父分类不存在"), + ARTICLE_CATEGORY_BEYOND_TWO(60003, "最多为二级分类,操作失败"), + ARTICLE_CATEGORY_DELETE_ERROR(60004, "该文章分类下存在子分类,不能删除"), + ARTICLE_CATEGORY_HAS_ARTICLE(60005, "该文章分类下存在文章,不能删除"), + ARTICLE_CATEGORY_NO_DELETION(60007, "默认文章分类不能进行删除"), + ARTICLE_NO_DELETION(60008, "默认文章不能进行删除"), @@ -250,8 +307,11 @@ public enum ResultCode { * 页面 */ PAGE_NOT_EXIST(61001, "页面不存在"), + PAGE_OPEN_DELETE_ERROR(61002, "当前页面为开启状态,无法删除"), + PAGE_DELETE_ERROR(61003, "当前页面为唯一页面,无法删除"), + PAGE_RELEASE_ERROR(61004, "页面已发布,无需重复提交"), /** @@ -268,39 +328,49 @@ public enum ResultCode { * 站内信 */ NOTICE_NOT_EXIST(80101, "当前消息模板不存在"), + NOTICE_ERROR(80102, "修改站内信异常,请稍后重试"), /** * OSS */ OSS_NOT_EXIST(80201, "OSS未配置"), + OSS_EXCEPTION(80202, "文件上传失败,请稍后重试"), /** * 验证码 */ VERIFICATION_SEND_SUCCESS(80301, "短信验证码,发送成功"), + VERIFICATION_ERROR(80302, "验证失败"), + VERIFICATION_SMS_ERROR(80303, "短信验证码错误,请重新校验"), + VERIFICATION_SMS_EXPIRED_ERROR(80304, "验证码已失效,请重新校验"), /** * 配置错误 */ ALIPAY_NOT_SETTING(80401, "支付宝支付未配置"), + ALIPAY_EXCEPTION(80402, "支付宝支付错误,请稍后重试"), + ALIPAY_PARAMS_EXCEPTION(80403, "支付宝参数异常"), /** * 微信相关异常 */ WECHAT_CONNECT_NOT_SETTING(80500, "微信联合登陆信息未配置"), + WECHAT_PAYMENT_NOT_SETTING(80501, "微信支付信息未配置"), + WECHAT_QRCODE_ERROR(80502, "微信二维码生成异常"), + WECHAT_MP_MESSAGE_ERROR(80503, "微信小程序小消息订阅异常"), - APP_VERSION_EXIST(80600, "APP版本已存在") - ; + APP_VERSION_EXIST(80600, "APP版本已存在"); + private final Integer code; private final String message; diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java index ba32de5a..d51ddd1c 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.stream.Collectors; /** - * TradeBuilder + * 交易构造&&创建 * * @author Chopper * @date2020-04-01 9:47 下午 @@ -24,36 +24,41 @@ import java.util.stream.Collectors; @Service @Slf4j public class TradeBuilder { - //购物车渲染 + + //购物车渲染步骤 @Autowired private List cartRenderSteps; + //交易 @Autowired private TradeService tradeService; + //购物车业务 + @Autowired + private CartService cartService; + + /** * 渲染整比交易 + * 0-> 校验商品, 1-》 满优惠渲染, 2->渲染优惠, 3->优惠券渲染, 4->计算运费, 5->计算价格, 6->分销渲染, 7->扩展操作 */ int[] defaultRender = {0, 1, 2, 4, 5, 6, 7}; /** * 购物车购物车渲染 + * 0-> 校验商品, 1-》 满优惠渲染, 2->渲染优惠, 5->计算价格 */ int[] cartRender = {0, 1, 2, 5}; - /** - * 0-> 校验商品 1-》 满优惠渲染 2->渲染优惠 3->优惠券渲染 4->计算运费 5->计算价格 6->分销渲染 7->扩展操作 - */ - @Autowired - private CartService cartService; - /** * 构造购物车 + * 购物车与结算信息不一致的地方主要是优惠券计算和运费计算,其他规则都是一致都 * * @param checkedWay 购物车类型 * @return 购物车展示信息 */ public TradeDTO buildCart(CartTypeEnum checkedWay) { + //读取对应购物车的商品信息 TradeDTO tradeDTO = cartService.readDTO(checkedWay); //购物车需要将交易中的优惠券取消掉 @@ -67,7 +72,7 @@ public class TradeBuilder { try { cartRenderSteps.get(index).render(tradeDTO); } catch (Exception e) { - log.error("购物车渲染异常:", e); + log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); } } return tradeDTO; @@ -80,28 +85,26 @@ public class TradeBuilder { * @return 购物车展示信息 */ public TradeDTO buildTrade(CartTypeEnum checkedWay) { + //读取对应购物车的商品信息 TradeDTO tradeDTO = cartService.readDTO(checkedWay); - tradeDTO.setNotSupportFreight(null); + //将购物车到sku未选择信息过滤 List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); - //拼团类型订单预处理 - if (checkedWay.equals(CartTypeEnum.PINTUAN)) { - for (CartSkuVO cartSkuVO : collect) { - cartSkuVO.setPintuanId(""); - } - } tradeDTO.setSkuList(collect); //按照计划进行渲染 for (int index : defaultRender) { try { cartRenderSteps.get(index).render(tradeDTO); } catch (Exception e) { - log.error("购物车渲染异常:", e); + log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); } } + //购物车信息接受 List cartVOList = new ArrayList<>(); - for (CartVO i : tradeDTO.getCartList()) { - i.setSkuList(i.getSkuList().stream().filter(j -> Boolean.TRUE.equals(j.getChecked())).collect(Collectors.toList())); - cartVOList.add(i); + //循环购物车信息 + for (CartVO cartVO : tradeDTO.getCartList()) { + //如果商品选中,则加入到对应购物车 + cartVO.setSkuList(cartVO.getSkuList().stream().filter(j -> Boolean.TRUE.equals(j.getChecked())).collect(Collectors.toList())); + cartVOList.add(cartVO); } tradeDTO.setCartList(cartVOList); return tradeDTO; @@ -111,12 +114,10 @@ public class TradeBuilder { * 创建一笔交易 * * @param checkedWay 购物车类型 - * @param parentOrderSn 是否为其他订单下的订单,如果是则为依赖订单的sn,否则为空 * @return 交易信息 */ - public Trade createTrade(CartTypeEnum checkedWay, String parentOrderSn) { + public Trade createTrade(CartTypeEnum checkedWay) { TradeDTO tradeDTO = this.buildTrade(checkedWay); - tradeDTO.setParentOrderSn(parentOrderSn); return tradeService.createTrade(tradeDTO); } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index f5a5476d..29757f33 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -1,18 +1,28 @@ package cn.lili.modules.order.cart.render.impl; +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; +import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; -import lombok.RequiredArgsConstructor; +import cn.lili.modules.order.order.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * 商品有效性校验 * @@ -26,10 +36,31 @@ public class CheckDataRender implements CartRenderStep { @Autowired private GoodsSkuService goodsSkuService; + @Autowired + private OrderService orderService; + @Override public void render(TradeDTO tradeDTO) { + //校验商品有效性 + checkData(tradeDTO); + //店铺分组数据初始化 + groupStore(tradeDTO); + //预校验 + preCalibration(tradeDTO); + + } + + /** + * 校验商品属性 + * + * @param tradeDTO + */ + private void checkData(TradeDTO tradeDTO) { + //循环购物车中的商品 for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + //缓存中的商品信息 GoodsSku dataSku = goodsSkuService.getGoodsSkuByIdFromCache(cartSkuVO.getGoodsSku().getId()); + //商品有效性判定 if (dataSku == null || dataSku.getUpdateTime().before(cartSkuVO.getGoodsSku().getUpdateTime())) { //设置购物车未选中 cartSkuVO.setChecked(false); @@ -39,6 +70,7 @@ public class CheckDataRender implements CartRenderStep { cartSkuVO.setErrorMessage("商品信息发生变化,已失效"); continue; } + // 商品上架状态判定 if (!GoodsAuthEnum.PASS.name().equals(dataSku.getIsAuth()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { //设置购物车未选中 cartSkuVO.setChecked(false); @@ -48,17 +80,59 @@ public class CheckDataRender implements CartRenderStep { cartSkuVO.setErrorMessage("商品已下架"); continue; } - //商品库存不足 - if (dataSku.getQuantity() <= 0) { + // 商品库存判定 + if (dataSku.getQuantity() < cartSkuVO.getNum()) { //设置购物车未选中 cartSkuVO.setChecked(false); - //设置购物车此sku商品已失效 - cartSkuVO.setInvalid(true); //设置失效消息 - cartSkuVO.setErrorMessage("商品库存不足"); + cartSkuVO.setErrorMessage("商品库存不足,现有库存数量[" + dataSku.getQuantity() + "]"); } //写入初始价格 cartSkuVO.getPriceDetailDTO().setGoodsPrice(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); } } + + /** + * 店铺分组 + * + * @param tradeDTO + */ + private void groupStore(TradeDTO tradeDTO) { + // 渲染的购物车 + List cartList = new ArrayList<>(); + + // 根据店铺分组 + Map> storeCollect = tradeDTO.getSkuList().parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); + for (Map.Entry> storeCart : storeCollect.entrySet()) { + if (!storeCart.getValue().isEmpty()) { + CartVO cartVO = new CartVO(storeCart.getValue().get(0)); + if (CharSequenceUtil.isEmpty(cartVO.getDeliveryMethod())) { + cartVO.setDeliveryMethod(DeliveryMethodEnum.LOGISTICS.name()); + } + cartVO.setSkuList(storeCart.getValue()); + storeCart.getValue().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).findFirst().ifPresent(cartSkuVO -> cartVO.setChecked(true)); + cartList.add(cartVO); + } + } + tradeDTO.setCartList(cartList); + } + + /** + * 订单预校验 + * 1、自己拼团自己创建都拼团判定 + * + * @param tradeDTO + */ + private void preCalibration(TradeDTO tradeDTO) { + //拼团判定,不能参与自己创建的拼团 + if (tradeDTO.getParentOrderSn() != null) { + //订单接受 + cn.lili.modules.order.order.entity.dos.Order parentOrder = orderService.getBySn(tradeDTO.getParentOrderSn()); + //参与活动判定 + if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { + throw new ServiceException("不能参与自己发起的拼团活动!"); + } + } + } + } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java index 33fa9b8c..0b728c64 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java @@ -1,15 +1,12 @@ package cn.lili.modules.order.cart.render.impl; -import cn.hutool.core.text.CharSequenceUtil; import cn.lili.modules.order.cart.entity.dto.TradeDTO; -import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.service.FullDiscountService; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.order.cart.render.CartRenderStep; -import lombok.RequiredArgsConstructor; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.service.FullDiscountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @@ -38,60 +35,63 @@ public class FullDiscountRender implements CartRenderStep { // 获取购物车中所有的商品 List cartSkuList = tradeDTO.getSkuList(); - // 渲染的购物车 - List cartList = new ArrayList<>(); - - // 确定有哪些商家 + // 店铺id集合 List storeIds = new ArrayList<>(); - // 根据店铺分组 - Map> storeCollect = cartSkuList.parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); + // 店铺集合 + List cartList = tradeDTO.getCartList(); + + + // 获取店铺id + Map> storeCollect = tradeDTO.getSkuList().parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); for (Map.Entry> storeCart : storeCollect.entrySet()) { if (!storeCart.getValue().isEmpty()) { storeIds.add(storeCart.getKey()); - CartVO cartVO = new CartVO(storeCart.getValue().get(0)); - if (CharSequenceUtil.isEmpty(cartVO.getDeliveryMethod())) { - cartVO.setDeliveryMethod(DeliveryMethodEnum.LOGISTICS.name()); - } - cartVO.setSkuList(storeCart.getValue()); - storeCart.getValue().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).findFirst().ifPresent(cartSkuVO -> cartVO.setChecked(true)); - cartList.add(cartVO); - } } + // 获取当前店铺进行到满减活动 List fullDiscounts = fullDiscountService.currentPromotion(storeIds); + //循环满减信息 for (FullDiscountVO fullDiscount : fullDiscounts) { + //判定参与活动的商品 if (fullDiscount.getPromotionGoodsList() != null || fullDiscount.getNumber() == -1) { + //循环店铺购物车 for (CartVO cart : cartList) { + //如果购物车中的店铺id与活动店铺id相等,则进行促销计算 if (fullDiscount.getStoreId().equals(cart.getStoreId())) { + //写入满减活动 cart.setFullDiscount(fullDiscount); List skuIds; + // 参与活动的sku判定 if (fullDiscount.getNumber() != -1) { skuIds = initFullDiscountGoods(fullDiscount, cartSkuList); } else { skuIds = cart.getSkuList().stream().map(i -> i.getGoodsSku().getId()).collect(Collectors.toList()); } + //记录参与满减活动的sku cart.setFullDiscountSkuIds(skuIds); } } } } - tradeDTO.setCartList(cartList); } /** * 获取参与满优惠的商品id * * @param fullDiscount 满优惠信息 - * @param cartSkuVOS 购物车商品sku信息 + * @param cartSkuVOS 购物车商品sku信息 * @return 参与满优惠的商品id */ public List initFullDiscountGoods(FullDiscountVO fullDiscount, List cartSkuVOS) { List goodsIds = new ArrayList<>(); + //判定参与活动的商品 for (PromotionGoods promotionGoods : fullDiscount.getPromotionGoodsList()) { + //sku 集合判定 for (CartSkuVO cartSkuVO : cartSkuVOS) { + //如果参加,则记录商品sku if (cartSkuVO.getGoodsSku().getId().equals(promotionGoods.getSkuId())) { goodsIds.add(promotionGoods.getSkuId()); } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java index b159eee0..633e700b 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java @@ -1,6 +1,8 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.util.NumberUtil; +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.TradeDTO; @@ -36,24 +38,24 @@ public class SkuFreightRender implements CartRenderStep { List cartSkuVOS = tradeDTO.getSkuList(); //会员收货地址问题处理 MemberAddress memberAddress = tradeDTO.getMemberAddress(); + //如果收货地址为空,则抛出异常 if (memberAddress == null) { - return; + throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } //循环渲染购物车商品运费价格 forSku: for (CartSkuVO cartSkuVO : cartSkuVOS) { + //获取sku运费模版 String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); - //免运费则跳出运费计算 if (Boolean.TRUE.equals(cartSkuVO.getIsFreeFreight()) || freightTemplateId == null) { continue; } - //寻找对应对商品运费计算模版 FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { //店铺支付运费则跳过 - if(freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())){ + if (freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())) { break; } FreightTemplateChild freightTemplateChild = null; @@ -68,7 +70,7 @@ public class SkuFreightRender implements CartRenderStep { break; } } - + //如果没有匹配到物流规则,则说明不支持配送 if (freightTemplateChild == null) { if (tradeDTO.getNotSupportFreight() == null) { tradeDTO.setNotSupportFreight(new ArrayList<>()); @@ -77,6 +79,7 @@ public class SkuFreightRender implements CartRenderStep { continue forSku; } + //物流规则模型创立 FreightTemplateChildDTO freightTemplateChildDTO = new FreightTemplateChildDTO(freightTemplateChild); freightTemplateChildDTO.setPricingMethod(freightTemplate.getPricingMethod()); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java index 09531030..2d997b3f 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java @@ -1,16 +1,12 @@ package cn.lili.modules.order.cart.service; -import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; -import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.TradeParams; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; -import java.util.List; - /** * 购物车业务层 * @@ -171,13 +167,4 @@ public interface CartService { * @return 交易信息 */ Trade createTrade(TradeParams tradeParams); - - /** - * 检查商品是否在配送范围 - * - * @param skuList 商品列表 - * @param memberAddress 配送地址 - */ - void checkAddressScope(List skuList, MemberAddress memberAddress); - } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index b14d949c..c317dfe1 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -10,7 +10,6 @@ import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; -import cn.lili.modules.goods.entity.enums.GoodsTypeEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; @@ -25,19 +24,17 @@ import cn.lili.modules.order.cart.render.TradeBuilder; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; import cn.lili.modules.promotion.service.MemberAddressService; import cn.lili.modules.promotion.service.MemberCouponService; +import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; -import cn.lili.modules.store.entity.dos.FreightTemplateChild; -import cn.lili.modules.store.entity.enums.FreightTemplateEnum; -import cn.lili.modules.store.entity.vos.FreightTemplateVO; -import cn.lili.modules.store.service.FreightTemplateService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -79,9 +76,10 @@ public class CartServiceImpl implements CartService { //ES商品 @Autowired private EsGoodsSearchService esGoodsSearchService; - //运费模板 + + //拼团服务 @Autowired - private FreightTemplateService freightTemplateService; + private PintuanService pintuanService; //交易 @Autowired private TradeBuilder tradeBuilder; @@ -136,10 +134,16 @@ public class CartServiceImpl implements CartService { promotionGoodsService.updatePromotion(cartSkuVO); //再设置加入购物车的数量 this.checkSetGoodsQuantity(cartSkuVO, skuId, num); + + //拼团判定 + checkPintuan(cartTypeEnum, cartSkuVO); + //计算购物车小计 cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); cartSkuVOS.add(cartSkuVO); } + + tradeDTO.setCartTypeEnum(cartTypeEnum); // 如购物车发生更改,则重置优惠券 tradeDTO.setStoreCoupons(null); @@ -501,61 +505,15 @@ public class CartServiceImpl implements CartService { //设置基础属性 tradeDTO.setClientType(tradeParams.getClient()); tradeDTO.setStoreRemark(tradeParams.getRemark()); - //过滤勾选商品 - List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); - //校验收获地址 - MemberAddress memberAddress = tradeDTO.getMemberAddress(); - this.checkAddressScope(collect, memberAddress); + tradeDTO.setParentOrderSn(tradeParams.getParentOrderSn()); + //将购物车信息写入缓存,后续逻辑调用校验 this.resetTradeDTO(tradeDTO); //构建交易 - Trade trade = tradeBuilder.createTrade(cartTypeEnum, tradeParams.getParentOrderSn()); + Trade trade = tradeBuilder.createTrade(cartTypeEnum); this.cleanChecked(tradeDTO); return trade; } - /** - * 检查商品是否在配送范围 - * - * @param skuList 商品列表 - * @param memberAddress 配送地址 - */ - @Override - public void checkAddressScope(List skuList, MemberAddress memberAddress) { - //如果收货地址为空,则抛出异常 - if (memberAddress == null) { - throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); - } - //循环购物车列表计算运费 - for (CartSkuVO cartSkuVO : skuList) { - GoodsSku goodsSku = cartSkuVO.getGoodsSku(); - //如果是虚拟商品无需运费 - if (goodsSku.getGoodsType() != null && goodsSku.getGoodsType().equals(GoodsTypeEnum.VIRTUAL_GOODS.name())) { - break; - } - //获取运费模板ID - String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); - FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); - //店铺支付运费则跳过 - if (freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())) { - break; - } - //收货地址判定 - forTemplates: - if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { - //获取市级别id - String addressId = memberAddress.getConsigneeAddressIdPath().split(",")[1]; - //获取匹配的收货地址 - for (FreightTemplateChild templateChild : freightTemplate.getFreightTemplateChildList()) { - //如果当前模版包含,则返回 - if (templateChild.getAreaId().contains(addressId)) { - break forTemplates; - } - } - throw new ServiceException(ResultCode.SHIPPING_NOT_APPLY, cartSkuVO.getGoodsSku().getGoodsName()); - - } - } - } /** * 获取购物车类型 @@ -576,6 +534,13 @@ public class CartServiceImpl implements CartService { return cartTypeEnum; } + /** + * 使用优惠券判定 + * + * @param tradeDTO 交易对象 + * @param memberCoupon 会员优惠券 + * @param cartTypeEnum 购物车 + */ private void useCoupon(TradeDTO tradeDTO, MemberCoupon memberCoupon, CartTypeEnum cartTypeEnum) { //如果是平台优惠券 if (Boolean.TRUE.equals(memberCoupon.getIsPlatform())) { @@ -583,24 +548,34 @@ public class CartServiceImpl implements CartService { Double cartPrice = 0d; for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { // 获取商品的促销信息 - Optional promotionOptional = cartSkuVO.getPromotions().parallelStream().filter(i -> (i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()) && cartTypeEnum.equals(CartTypeEnum.PINTUAN)) - || i.getPromotionType().equals(PromotionTypeEnum.SECKILL.name())).findAny(); + Optional promotionOptional = + cartSkuVO.getPromotions().parallelStream().filter(promotionGoods -> + (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()) && + cartTypeEnum.equals(CartTypeEnum.PINTUAN)) || + promotionGoods.getPromotionType().equals(PromotionTypeEnum.SECKILL.name())).findAny(); + //有促销金额则用促销金额,否则用商品原价 if (promotionOptional.isPresent()) { - cartPrice += CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum()); + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum())); } else { - cartPrice += CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum()); + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); } } + //如果购物车金额大于消费门槛则使用 if (memberCoupon.getConsumeThreshold() <= cartPrice) { tradeDTO.setPlatformCoupon(new MemberCouponDTO(memberCoupon)); + //选择平台优惠券,则将品台优惠券清空 tradeDTO.setStoreCoupons(new HashMap<>()); } - } else { + } + //否则为店铺优惠券 + else { + //过滤对应店铺购物车 CartSkuVO cartVO = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).findFirst().orElse(null); // 优惠券消费门槛 <= 商品购买时的成交价(单品) * 购买数量 if (cartVO != null && memberCoupon.getConsumeThreshold() <= CurrencyUtil.mul(cartVO.getPurchasePrice(), cartVO.getNum())) { tradeDTO.getStoreCoupons().put(memberCoupon.getStoreId(), new MemberCouponDTO(memberCoupon)); + //选择店铺优惠券,则将品台优惠券清空 tradeDTO.setPlatformCoupon(null); } } @@ -615,9 +590,12 @@ public class CartServiceImpl implements CartService { */ private boolean checkCoupon(MemberCoupon memberCoupon, TradeDTO tradeDTO) { List cartSkuVOS; + //如果是店铺优惠券,判定的内容 if (Boolean.FALSE.equals(memberCoupon.getIsPlatform())) { cartSkuVOS = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList()); - } else { + } + //否则为平台优惠券,筛选商品为全部商品 + else { cartSkuVOS = tradeDTO.getSkuList(); } @@ -635,8 +613,33 @@ public class CartServiceImpl implements CartService { return true; } - @Autowired - public void setTradeBuilder(TradeBuilder tradeBuilder) { - this.tradeBuilder = tradeBuilder; + /** + * 校验拼团信息 + * + * @param cartTypeEnum 购物车枚举 + * @param cartSkuVO 购物车信息 + */ + private void checkPintuan(CartTypeEnum cartTypeEnum, CartSkuVO cartSkuVO) { + + //拼团活动的话,需要对限购数量进行判定 + if (cartTypeEnum.equals(CartTypeEnum.PINTUAN)) { + //获取拼团信息 + List currentPromotion = cartSkuVO.getPromotions().stream().filter( + promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) + .collect(Collectors.toList()); + //拼团活动判定 + if (currentPromotion.size() > 0) { + //写入拼团信息 + cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId()); + } else { + throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR); + } + + Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId()); + Integer limitNum = pintuan.getLimitNum(); + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + } + } } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index cda73774..5a4a7503 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -134,35 +134,26 @@ public class OrderServiceImpl extends ServiceImpl implements //存放自订单/订单日志 List orderItems = new ArrayList<>(); List orderLogs = new ArrayList<>(); - //拼团判定,不能参与自己创建的拼团 - if (tradeDTO.getParentOrderSn() != null) { - Order parentOrder = this.getBySn(tradeDTO.getParentOrderSn()); - if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { - throw new ServiceException("不能参与自己发起的拼团活动!"); - } - } + //订单集合 List orderVOS = new ArrayList<>(); - //循环购物车商品集合 + //循环购物车 tradeDTO.getCartList().forEach(item -> { Order order = new Order(item, tradeDTO); - if (OrderTypeEnum.PINTUAN.name().equals(order.getOrderType())) { - Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && order.getGoodsNum() > limitNum) { - throw new ServiceException("购买数量超过拼团活动限制数量"); - } - } //构建orderVO对象 OrderVO orderVO = new OrderVO(); BeanUtil.copyProperties(order, orderVO); + //持久化DO orders.add(order); String message = "订单[" + item.getSn() + "]创建"; + //记录日志 orderLogs.add(new OrderLog(item.getSn(), UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), UserContext.getCurrentUser().getUsername(), message)); item.getSkuList().forEach( sku -> orderItems.add(new OrderItem(sku, item, tradeDTO)) ); + //写入子订单信息 orderVO.setOrderItems(orderItems); + //orderVO 记录 orderVOS.add(orderVO); }); tradeDTO.setOrderVO(orderVOS); From 337775013ef820ff357dde9e0ae5b2dd4a59d629 Mon Sep 17 00:00:00 2001 From: paulGao Date: Mon, 21 Jun 2021 14:02:31 +0800 Subject: [PATCH 67/68] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=BC=E5=9B=A2?= =?UTF-8?q?=E5=95=86=E5=93=81=E9=99=90=E8=B4=AD=E6=95=B0=E9=87=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=9B=E5=BB=BA=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=B5=81=E7=A8=8B=E8=BF=87=E5=90=8E=E6=B8=85=E9=99=A4?= =?UTF-8?q?=E7=BC=93=E5=AD=98key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/controller/trade/CartController.java | 26 ++++++++++++++----- .../lili/listener/OrderMessageListener.java | 7 +++++ .../cart/render/impl/SkuPromotionRender.java | 25 ++++++++++++++++++ .../order/cart/service/CartServiceImpl.java | 18 ++++++++----- .../order/serviceimpl/OrderServiceImpl.java | 8 +++--- 5 files changed, 67 insertions(+), 17 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java index fce86afd..b5ffaeea 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java +++ b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java @@ -50,8 +50,17 @@ public class CartController { public ResultMessage add(@NotNull(message = "产品id不能为空") String skuId, @NotNull(message = "购买数量不能为空") @Min(value = 1, message = "加入购物车数量必须大于0") Integer num, String cartType) { - cartService.add(skuId, num, cartType); - return ResultUtil.success(); + try { + // 读取选中的列表 + cartService.add(skuId, num, cartType); + return ResultUtil.success(); + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); + } catch (Exception e) { + log.error(ResultCode.CART_ERROR.message(), e); + throw new ServiceException(ResultCode.CART_ERROR); + } } @@ -150,8 +159,9 @@ public class CartController { try { // 读取选中的列表 return ResultUtil.data(this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way))); - } catch (ServiceException e) { - throw e; + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); throw new ServiceException(ResultCode.CART_ERROR); @@ -193,6 +203,9 @@ public class CartController { try { cartService.shippingMethod(selleId, shippingMethod, way); return ResultUtil.success(); + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); throw new ServiceException(ResultCode.CART_ERROR); @@ -228,8 +241,9 @@ public class CartController { try { // 读取选中的列表 return ResultUtil.data(this.cartService.createTrade(tradeParams)); - } catch (ServiceException e) { - throw e; + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.ORDER_ERROR.message(), e); throw new ServiceException(ResultCode.ORDER_ERROR); diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index 02371a0d..dfbb0c2f 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -44,6 +44,7 @@ public class OrderMessageListener implements RocketMQListener { case ORDER_CREATE: String key = new String(messageExt.getBody()); TradeDTO tradeDTO = (TradeDTO) cache.get(key); + boolean result = true; for (TradeEvent event : tradeEvent) { try { event.orderCreate(tradeDTO); @@ -52,8 +53,14 @@ public class OrderMessageListener implements RocketMQListener { tradeDTO.getSn(), event.getClass().getName(), e); + result = false; } } + // 如所有步骤顺利完成 + if (Boolean.TRUE.equals(result)) { + // 清除记录信息的trade cache key + cache.remove(key); + } break; //订单状态变更 case STATUS_CHANGE: diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java index c2683cc8..d2fa9eba 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java @@ -1,6 +1,7 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.date.DateUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.StringUtils; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; @@ -13,10 +14,14 @@ import cn.lili.modules.order.cart.entity.vo.PriceDetailVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.dos.Pintuan; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.GoodsSkuPromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceParamDTO; import cn.lili.modules.promotion.entity.dto.StorePromotionPriceDTO; +import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.PromotionPriceService; import org.springframework.beans.factory.annotation.Autowired; @@ -45,12 +50,16 @@ public class SkuPromotionRender implements CartRenderStep { @Autowired private PromotionGoodsService promotionGoodsService; + @Autowired + private PintuanService pintuanService; + @Override public void render(TradeDTO tradeDTO) { //主要渲染各个优惠的价格 this.renderSkuPromotion(tradeDTO); + this.checkPromotionLimit(tradeDTO); } @@ -289,4 +298,20 @@ public class SkuPromotionRender implements CartRenderStep { } return false; } + + private void checkPromotionLimit(TradeDTO tradeDTO) { + if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)) { + // 如果为拼团订单,则获取拼团活动ID + Optional pintuanId = tradeDTO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); + if (pintuanId.isPresent()) { + Pintuan pintuan = pintuanService.getPintuanById(pintuanId.get()); + Integer limitNum = pintuan.getLimitNum(); + for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException("购买数量超过拼团活动限制数量"); + } + } + } + } + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index c317dfe1..4f334cd1 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -149,6 +149,8 @@ public class CartServiceImpl implements CartService { tradeDTO.setStoreCoupons(null); tradeDTO.setPlatformCoupon(null); this.resetTradeDTO(tradeDTO); + } catch (ServiceException se) { + throw se; } catch (Exception e) { log.error("购物车渲染异常", e); throw new ServiceException(errorMessage); @@ -324,14 +326,16 @@ public class CartServiceImpl implements CartService { List storeIds = new ArrayList<>(); List esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids); for (EsGoodsIndex esGoodsIndex : esGoodsList) { - if (esGoodsIndex.getPromotionMap() != null) { - List couponIds = esGoodsIndex.getPromotionMap().keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); - if (!couponIds.isEmpty()) { - List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); - count = currentGoodsCanUse.size(); + if (esGoodsIndex != null) { + if (esGoodsIndex.getPromotionMap() != null) { + List couponIds = esGoodsIndex.getPromotionMap().keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); + if (!couponIds.isEmpty()) { + List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); + count = currentGoodsCanUse.size(); + } } + storeIds.add(esGoodsIndex.getStoreId()); } - storeIds.add(esGoodsIndex.getStoreId()); } List allScopeMemberCoupon = memberCouponService.getAllScopeMemberCoupon(tradeDTO.getMemberId(), storeIds); if (allScopeMemberCoupon != null && !allScopeMemberCoupon.isEmpty()) { @@ -628,7 +632,7 @@ public class CartServiceImpl implements CartService { promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) .collect(Collectors.toList()); //拼团活动判定 - if (currentPromotion.size() > 0) { + if (!currentPromotion.isEmpty()) { //写入拼团信息 cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId()); } else { diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 5a4a7503..32f86ed5 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -672,10 +672,10 @@ public class OrderServiceImpl extends ServiceImpl implements * @param list 需要更新拼团状态为成功的拼团订单列表 */ private void pintuanOrderSuccess(List list) { - list.stream().forEach(order -> { - if (order.getOrderType().equals(OrderTypeEnum.VIRTUAL)) { + list.forEach(order -> { + if (order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) { this.virtualOrderConfirm(order.getSn()); - } else if (order.getOrderType().equals(OrderTypeEnum.NORMAL)) { + } else if (order.getOrderType().equals(OrderTypeEnum.NORMAL.name())) { this.normalOrderConfirm(order.getSn()); } }); @@ -793,7 +793,7 @@ public class OrderServiceImpl extends ServiceImpl implements */ private void checkOrder(Order order) { //订单类型为拼团订单,检测购买数量是否超过了限购数量 - if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderPromotionType())) { + if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderType())) { Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); Integer limitNum = pintuan.getLimitNum(); if (limitNum != 0 && order.getGoodsNum() > limitNum) { From c7e4af6175a376f537f8d23f23e14c9b1dc34129 Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 14:14:07 +0800 Subject: [PATCH 68/68] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/admin/AdminApplication.java | 6 +- .../lili/controller/trade/CartController.java | 8 +- .../security/BuyerAuthenticationFilter.java | 4 +- .../cn/lili/security/BuyerSecurityConfig.java | 18 +-- .../cn/lili/buyer/test/cart/CartTest.java | 6 +- .../cn/lili/buyer/test/cart/FileTest.java | 2 +- .../controller/common/UploadController.java | 6 +- .../security/CommonSecurityConfig.java | 10 +- .../lili/event/impl/StockUpdateExecute.java | 4 +- .../lili/listener/GoodsMessageListener.java | 4 +- .../lili/listener/OrderMessageListener.java | 4 +- .../impl/order/CancelOrderTaskExecute.java | 4 +- .../impl/order/OrderEveryDayTaskExecute.java | 8 +- .../promotion/PromotionEverydayExecute.java | 4 +- .../trigger/AbstractDelayQueueListen.java | 14 +- .../BroadcastTimeTriggerExecutor.java | 2 +- .../PromotionTimeTriggerExecutor.java | 10 +- .../base/mybatisplus/MybatisPlusConfig.java | 12 +- .../common/aop/limiter/LimitInterceptor.java | 2 +- .../syslog/interceptor/SystemLogAspect.java | 2 +- .../cn/lili/common/cache/impl/RedisCache.java | 8 +- .../BaseElasticsearchService.java | 16 +- .../GlobalControllerExceptionHandler.java | 36 ++--- .../filter/XssHttpServletRequestWrapper.java | 24 +-- .../sms/impl/SmsUtilAliImplService.java | 10 +- .../java/cn/lili/common/token/TokenUtil.java | 10 +- .../base/generate/ManagerTokenGenerate.java | 2 +- .../base/generate/MemberTokenGenerate.java | 2 +- .../base/generate/StoreTokenGenerate.java | 2 +- .../utils/Base64DecodeMultipartFile.java | 2 +- .../cn/lili/common/utils/CheckMobileUtil.java | 8 +- .../java/cn/lili/common/utils/DateUtil.java | 10 +- .../utils/HibernateProxyTypeAdapter.java | 8 +- .../cn/lili/common/utils/HttpClientUtils.java | 70 ++++----- .../java/cn/lili/common/utils/PageUtil.java | 2 +- .../cn/lili/common/utils/PasswordUtil.java | 6 +- .../java/cn/lili/common/utils/SpelUtil.java | 16 +- .../lili/common/verification/ImageUtil.java | 24 +-- .../common/verification/SliderImageUtil.java | 30 ++-- .../service/impl/VerificationServiceImpl.java | 12 +- .../cn/lili/config/cache/RedisConfig.java | 18 +-- .../elasticsearch/ElasticsearchConfig.java | 6 +- .../config/interceptor/UrlConfiguration.java | 8 +- .../CreateTimeShardingTableAlgorithmBak.java | 6 +- .../lili/config/swagger/Swagger2Config.java | 28 ++-- .../cn/lili/config/thread/ThreadConfig.java | 10 +- .../websocket/WebSocketStompConfig.java | 8 +- .../java/cn/lili/generator/CodeGenerator.java | 18 +-- .../base/serviceimpl/RegionServiceImpl.java | 38 ++--- .../broadcast/entity/dos/Commodity.java | 4 +- .../broadcast/entity/dto/GoodsInfo.java | 4 +- .../serviceimpl/StudioServiceImpl.java | 6 +- .../broadcast/util/WechatLivePlayerUtil.java | 42 ++--- .../connect/request/AuthDefaultRequest.java | 10 +- .../connect/request/AuthWeiboRequest.java | 2 +- .../serviceimpl/ConnectServiceImpl.java | 12 +- .../modules/connect/util/AuthChecker.java | 4 +- .../modules/connect/util/Base64Utils.java | 6 +- .../modules/connect/util/ConnectUtil.java | 74 ++++----- .../cn/lili/modules/connect/util/IpUtils.java | 2 +- .../DistributionOrderServiceImpl.java | 6 +- .../plugin/impl/AliFileManagerPlugin.java | 4 +- .../serviceimpl/CategoryServiceImpl.java | 10 +- .../serviceimpl/GoodsGalleryServiceImpl.java | 4 +- .../goods/serviceimpl/GoodsServiceImpl.java | 28 ++-- .../serviceimpl/GoodsSkuServiceImpl.java | 22 +-- .../MemberNoticeSenterServiceImpl.java | 2 +- .../WechatMPMessageServiceImpl.java | 2 +- .../message/util/WechatMessageUtil.java | 4 +- .../message/util/WechatMpCodeUtil.java | 32 ++-- .../cart/render/impl/CartPriceRender.java | 14 +- .../cart/render/impl/CheckDataRender.java | 8 +- .../order/cart/render/impl/CouponRender.java | 2 +- .../cart/render/impl/FullDiscountRender.java | 12 +- .../cart/render/impl/SkuFreightRender.java | 2 +- .../cart/render/impl/SkuPromotionRender.java | 32 ++-- .../order/cart/service/CartServiceImpl.java | 22 +-- .../order/order/entity/dos/AfterSale.java | 4 +- .../order/entity/dto/OrderSearchParams.java | 20 +-- .../entity/vo/AfterSaleSearchParams.java | 6 +- .../order/order/entity/vo/OrderSimpleVO.java | 2 +- .../serviceimpl/AfterSaleServiceImpl.java | 2 +- .../serviceimpl/OrderPriceServiceImpl.java | 4 +- .../order/serviceimpl/OrderServiceImpl.java | 22 +-- .../ArticleCategoryServiceImpl.java | 10 +- .../modules/payment/kit/core/XmlHelper.java | 40 ++--- .../modules/payment/kit/core/kit/IpKit.java | 8 +- .../modules/payment/kit/core/kit/PayKit.java | 10 +- .../payment/kit/core/kit/QrCodeKit.java | 2 +- .../modules/payment/kit/core/kit/RsaKit.java | 6 +- .../payment/kit/core/kit/WxPayKit.java | 24 +-- .../payment/kit/plugin/alipay/AliPayApi.java | 4 +- .../kit/plugin/alipay/AliPayPlugin.java | 4 +- .../payment/kit/plugin/wechat/WechatApi.java | 4 +- .../kit/plugin/wechat/WechatPlugin.java | 26 ++-- .../serviceimpl/AdminUserServiceImpl.java | 2 +- .../serviceimpl/CouponServiceImpl.java | 28 ++-- .../serviceimpl/FullDiscountServiceImpl.java | 52 +++---- .../serviceimpl/PintuanServiceImpl.java | 50 +++--- .../serviceimpl/PointsGoodsServiceImpl.java | 4 +- .../PromotionGoodsServiceImpl.java | 12 +- .../PromotionPriceServiceImpl.java | 112 +++++++------- .../serviceimpl/PromotionServiceImpl.java | 30 ++-- .../serviceimpl/SeckillApplyServiceImpl.java | 24 +-- .../serviceimpl/SeckillServiceImpl.java | 24 +-- .../promotion/tools/PromotionTools.java | 14 +- .../serviceimpl/EsGoodsIndexServiceImpl.java | 14 +- .../serviceimpl/EsGoodsSearchServiceImpl.java | 12 +- .../aop/aspect/PageViewInterceptor.java | 8 +- .../statistics/model/vo/OrderOverviewVO.java | 2 +- .../IndexStatisticsServiceImpl.java | 6 +- .../OrderStatisticsDataServiceImpl.java | 6 +- .../statistics/util/StatisticsDateUtil.java | 2 +- .../statistics/util/StatisticsSuffix.java | 4 +- .../lili/modules/store/entity/dos/Bill.java | 6 +- .../store/entity/dto/BillSearchParams.java | 2 +- .../store/entity/vos/StoreSearchParams.java | 2 +- .../store/serviceimpl/BillServiceImpl.java | 26 ++-- .../InstantDelivery/dada/DadaPlugin.java | 30 ++-- .../serviceimpl/LogisticsServiceImpl.java | 14 +- .../lili/modules/system/utils/HttpUtils.java | 44 +++--- .../system/utils/SensitiveWordsFilter.java | 54 +++---- .../modules/system/utils/StringPointer.java | 4 +- .../goods/CategoryManagerController.java | 4 +- .../security/ManagerAuthenticationFilter.java | 28 ++-- .../lili/security/ManagerSecurityConfig.java | 18 +-- .../cn/lili/test/elasticsearch/EsTest.java | 146 +++++++++--------- .../cn/lili/test/order/OrderServiceTest.java | 12 +- .../cn/lili/test/promotion/CouponTest.java | 32 ++-- .../lili/test/promotion/FullDiscountTest.java | 2 +- .../security/StoreAuthenticationFilter.java | 2 +- .../cn/lili/security/StoreSecurityConfig.java | 18 +-- 132 files changed, 994 insertions(+), 994 deletions(-) diff --git a/admin/src/main/java/cn/lili/admin/AdminApplication.java b/admin/src/main/java/cn/lili/admin/AdminApplication.java index d88d42e3..68c232ba 100644 --- a/admin/src/main/java/cn/lili/admin/AdminApplication.java +++ b/admin/src/main/java/cn/lili/admin/AdminApplication.java @@ -37,11 +37,11 @@ public class AdminApplication { successHandler.setDefaultTargetUrl(this.adminServer.path("/")); http.authorizeRequests().antMatchers("/instances**").permitAll(); http.authorizeRequests( - (authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() // 授予公众对所有静态资产和登录页面的访问权限。 + (authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() //授予公众对所有静态资产和登录页面的访问权限。 .antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated() //其他所有请求都必须经过验证。 ).formLogin( - (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() // 配置登录和注销。 - ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) // 启用HTTP基本支持。这是Spring Boot Admin Client注册所必需的。 + (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() //配置登录和注销。 + ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) //启用HTTP基本支持。这是Spring Boot Admin Client注册所必需的。 .csrf().disable() .rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600)); } diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java index b5ffaeea..8150f750 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java +++ b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java @@ -51,11 +51,11 @@ public class CartController { @NotNull(message = "购买数量不能为空") @Min(value = 1, message = "加入购物车数量必须大于0") Integer num, String cartType) { try { - // 读取选中的列表 + //读取选中的列表 cartService.add(skuId, num, cartType); return ResultUtil.success(); } catch (ServiceException se) { - log.error(se.getMsg(), se); + log.info(se.getMsg(), se); return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); @@ -157,7 +157,7 @@ public class CartController { @GetMapping("/checked") public ResultMessage cartChecked(@NotNull(message = "读取选中列表") String way) { try { - // 读取选中的列表 + //读取选中的列表 return ResultUtil.data(this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way))); } catch (ServiceException se) { log.error(se.getMsg(), se); @@ -239,7 +239,7 @@ public class CartController { @PostMapping(value = "/create/trade", consumes = "application/json", produces = "application/json") public ResultMessage crateTrade(@RequestBody TradeParams tradeParams) { try { - // 读取选中的列表 + //读取选中的列表 return ResultUtil.data(this.cartService.createTrade(tradeParams)); } catch (ServiceException se) { log.error(se.getMsg(), se); diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java index 71fddde1..2b7134af 100755 --- a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java @@ -67,7 +67,7 @@ public class BuyerAuthenticationFilter extends BasicAuthenticationFilter { //从header中获取jwt String jwt = request.getHeader(SecurityEnum.HEADER_TOKEN.getValue()); try { - // 如果没有token 则return + //如果没有token 则return if (StrUtil.isBlank(jwt)) { chain.doFilter(request, response); return; @@ -99,7 +99,7 @@ public class BuyerAuthenticationFilter extends BasicAuthenticationFilter { String json = claims.get(SecurityEnum.USER_CONTEXT.getValue()).toString(); AuthUser authUser = new Gson().fromJson(json, AuthUser.class); - // 校验redis中是否有权限 + //校验redis中是否有权限 if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER) + jwt)) { //构造返回信息 List auths = new ArrayList<>(); diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java b/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java index 81815fe9..779e0d78 100644 --- a/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java @@ -48,35 +48,35 @@ public class BuyerSecurityConfig extends WebSecurityConfigurerAdapter { ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry = http .authorizeRequests(); - // 配置的url 不需要授权 + //配置的url 不需要授权 for (String url : ignoredUrlsProperties.getUrls()) { registry.antMatchers(url).permitAll(); } registry .and() - // 禁止网页iframe + //禁止网页iframe .headers().frameOptions().disable() .and() .logout() .permitAll() .and() .authorizeRequests() - // 任何请求 + //任何请求 .anyRequest() - // 需要身份认证 + //需要身份认证 .authenticated() .and() - // 允许跨域 + //允许跨域 .cors().configurationSource((CorsConfigurationSource) SpringContextUtil.getBean("corsConfigurationSource")).and() - // 关闭跨站请求防护 + //关闭跨站请求防护 .csrf().disable() - // 前后端分离采用JWT 不需要session + //前后端分离采用JWT 不需要session .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() - // 自定义权限拒绝处理类 + //自定义权限拒绝处理类 .exceptionHandling().accessDeniedHandler(accessDeniedHandler) .and() - // 添加JWT认证过滤器 + //添加JWT认证过滤器 .addFilter(new BuyerAuthenticationFilter(authenticationManager(), cache)); } diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java index 1cc333be..59f9a435 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java @@ -50,9 +50,9 @@ class CartTest { @Test void createTrade() { -// TradeDTO allTradeDTO = cartService.getAllTradeDTO(); -// Assert.assertNotNull(allTradeDTO); -// System.out.println(JsonUtil.objectToJson(allTradeDTO)); +// TradeDTO allTradeDTO = cartService.getAllTradeDTO(); +// Assert.assertNotNull(allTradeDTO); +// System.out.println(JsonUtil.objectToJson(allTradeDTO)); cartService.createTrade(new TradeParams()); } diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java index 8076a648..4003ad5a 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java @@ -42,7 +42,7 @@ class FileTest { } URL url = new URL(brand.getLogo()); InputStream inputStream = url.openStream(); - // 上传至第三方云服务或服务器 + //上传至第三方云服务或服务器 brand.setLogo(fileManagerPlugin.inputStreamUpload(inputStream, brand.getId() + ".png")); } catch (IOException e) { log.error("上传你文件出错",e); diff --git a/common-api/src/main/java/cn/lili/controller/common/UploadController.java b/common-api/src/main/java/cn/lili/controller/common/UploadController.java index 7f6d05cd..d2e84495 100644 --- a/common-api/src/main/java/cn/lili/controller/common/UploadController.java +++ b/common-api/src/main/java/cn/lili/controller/common/UploadController.java @@ -73,7 +73,7 @@ public class UploadController { } if (StringUtils.isNotBlank(base64)) { - // base64上传 + //base64上传 file = Base64DecodeMultipartFile.base64Convert(base64); } String result = ""; @@ -81,9 +81,9 @@ public class UploadController { File newFile = new File(); try { InputStream inputStream = file.getInputStream(); - // 上传至第三方云服务或服务器 + //上传至第三方云服务或服务器 result = fileManagerPlugin.inputStreamUpload(inputStream, fileKey); - // 保存数据信息至数据库 + //保存数据信息至数据库 newFile.setName(file.getOriginalFilename()); newFile.setFileSize(file.getSize()); newFile.setFileType(file.getContentType()); diff --git a/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java b/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java index 15ba8a7c..a3cd9e4c 100644 --- a/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java +++ b/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java @@ -48,18 +48,18 @@ public class CommonSecurityConfig extends WebSecurityConfigurerAdapter { .authorizeRequests(); registry .and() - // 禁止网页iframe + //禁止网页iframe .headers().frameOptions().disable() .and() .authorizeRequests() - // 任何请求 + //任何请求 .anyRequest() - // 需要身份认证 + //需要身份认证 .permitAll() .and() - // 允许跨域 + //允许跨域 .cors().configurationSource(corsConfigurationSource).and() - // 关闭跨站请求防护 + //关闭跨站请求防护 .csrf().disable(); } diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index c8449df3..7c54b374 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -161,7 +161,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { //促销库存key 集合 List promotionKey = new ArrayList<>(); - // 循环订单 + //循环订单 for (OrderItem orderItem : order.getOrderItems()) { skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId())); GoodsSku goodsSku = new GoodsSku(); @@ -221,7 +221,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { List goodsSkus = new ArrayList<>(); //sku库存key 集合 List skuKeys = new ArrayList<>(); - // 循环订单 + //循环订单 for (OrderItem orderItem : order.getOrderItems()) { skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId())); GoodsSku goodsSku = new GoodsSku(); diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index f02719b8..fa4132d0 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -112,7 +112,7 @@ public class GoodsMessageListener implements RocketMQListener { for (GoodsCompleteMessage goodsCompleteMessage : goodsCompleteMessageList) { Goods goods = goodsService.getById(goodsCompleteMessage.getGoodsId()); if (goods != null) { - // 更新商品购买数量 + //更新商品购买数量 if (goods.getBuyCount() == null) { goods.setBuyCount(0); } @@ -126,7 +126,7 @@ public class GoodsMessageListener implements RocketMQListener { } GoodsSku goodsSku = goodsSkuService.getById(goodsCompleteMessage.getSkuId()); if (goodsSku != null) { - // 更新商品购买数量 + //更新商品购买数量 if (goodsSku.getBuyCount() == null) { goodsSku.setBuyCount(0); } diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index dfbb0c2f..892139e5 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -56,9 +56,9 @@ public class OrderMessageListener implements RocketMQListener { result = false; } } - // 如所有步骤顺利完成 + //如所有步骤顺利完成 if (Boolean.TRUE.equals(result)) { - // 清除记录信息的trade cache key + //清除记录信息的trade cache key cache.remove(key); } break; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java index 82e5262a..1202c425 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java @@ -43,11 +43,11 @@ public class CancelOrderTaskExecute implements EveryMinuteExecute { Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name()); OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class); if (orderSetting != null && orderSetting.getAutoCancel() != null) { - // 订单自动取消时间 = 当前时间 - 自动取消时间分钟数 + //订单自动取消时间 = 当前时间 - 自动取消时间分钟数 DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.UNPAID.name()); - // 订单创建时间 <= 订单自动取消时间 + //订单创建时间 <= 订单自动取消时间 queryWrapper.le(Order::getCreateTime, cancelTime); List list = orderService.list(queryWrapper); List cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index 784dee61..223489e3 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -73,11 +73,11 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void completedOrder(OrderSetting orderSetting) { - // 订单自动收货时间 = 当前时间 - 自动收货时间天数 + //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.DELIVERED.name()); - // 订单发货时间 >= 订单自动收货时间 + //订单发货时间 >= 订单自动收货时间 queryWrapper.ge(Order::getLogisticsTime, receiveTime); List list = orderService.list(queryWrapper); List receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); @@ -98,9 +98,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void memberEvaluation(OrderSetting orderSetting) { - // 订单自动收货时间 = 当前时间 - 自动收货时间天数 + //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); - // 订单完成时间 <= 订单自动好评时间 + //订单完成时间 <= 订单自动好评时间 List orderItems = orderItemService.waitEvaluate(receiveTime); for (OrderItem orderItem : orderItems) { diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index b8f6686c..eb43758d 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -61,7 +61,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { @Autowired private PromotionGoodsService promotionGoodsService; - // 系统设置 + //系统设置 @Autowired private SettingService settingService; @@ -108,7 +108,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { List couponVOS = mongoTemplate.find(query, CouponVO.class); if (!couponVOS.isEmpty()) { List ids = new ArrayList<>(); - // // 关闭的优惠券活动 + // //关闭的优惠券活动 for (CouponVO vo : couponVOS) { vo.setPromotionStatus(PromotionStatusEnum.END.name()); if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { diff --git a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java index 6c539183..d76fcdaa 100644 --- a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java +++ b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java @@ -31,23 +31,23 @@ public abstract class AbstractDelayQueueListen { private void startDelayQueueMachine() { log.info("延时队列机器{}开始运作", setDelayQueueName()); - // 监听redis队列 + //监听redis队列 while (true) { try { - // 获取当前时间的时间戳 + //获取当前时间的时间戳 long now = System.currentTimeMillis() / 1000; - // 获取当前时间前需要执行的任务列表 + //获取当前时间前需要执行的任务列表 Set tuples = cache.zRangeByScore(setDelayQueueName(), 0, now); - // 如果任务不为空 + //如果任务不为空 if (!CollectionUtils.isEmpty(tuples)) { log.info("执行任务:{}", JSONUtil.toJsonStr(tuples)); for (DefaultTypedTuple tuple : tuples) { String jobId = (String) tuple.getValue(); - // 移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务 + //移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务 Long num = cache.zRemove(setDelayQueueName(), jobId); - // 如果移除成功, 则执行 + //如果移除成功, 则执行 if (num > 0) { ThreadPoolUtil.execute(() -> invoke(jobId)); } @@ -57,7 +57,7 @@ public abstract class AbstractDelayQueueListen { } catch (Exception e) { log.error("处理延时任务发生异常,异常原因为{}", e.getMessage(), e); } finally { - // 间隔一秒钟搞一次 + //间隔一秒钟搞一次 try { TimeUnit.SECONDS.sleep(5L); } catch (InterruptedException e) { diff --git a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java index ab42b58b..d6088916 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java @@ -29,7 +29,7 @@ public class BroadcastTimeTriggerExecutor implements TimeTriggerExecutor { BroadcastMessage broadcastMessage = JSONUtil.toBean(JSONUtil.parseObj(object), BroadcastMessage.class); if (broadcastMessage != null && broadcastMessage.getStudioId() != null) { log.info("直播间消费:{}", broadcastMessage); - // 修改直播间状态 + //修改直播间状态 studioService.updateStudioStatus(broadcastMessage); } } diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index 211c9bde..5abd9433 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -42,19 +42,19 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { @Override public void execute(Object object) { PromotionMessage promotionMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PromotionMessage.class); - // 促销延时信息 + //促销延时信息 if (promotionMessage != null && promotionMessage.getPromotionId() != null) { log.info("促销活动信息消费:{}", promotionMessage); - // 如果为促销活动开始,则需要发布促销活动结束的定时任务 + //如果为促销活动开始,则需要发布促销活动结束的定时任务 if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { if (!promotionService.updatePromotionStatus(promotionMessage)) { log.error("开始促销活动失败: {}", promotionMessage); return; } - // 促销活动开始后,设置促销活动结束的定时任务 + //促销活动开始后,设置促销活动结束的定时任务 promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); - // 结束时间(延时一分钟) + //结束时间(延时一分钟) long closeTime = promotionMessage.getEndTime().getTime() + 60000; TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); //添加延时任务 @@ -69,7 +69,7 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { PintuanOrderMessage pintuanOrderMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PintuanOrderMessage.class); if (pintuanOrderMessage != null && pintuanOrderMessage.getPintuanId() != null) { log.info("拼团订单信息消费:{}", pintuanOrderMessage); - // 拼团订单自动处理 + //拼团订单自动处理 orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn()); } } diff --git a/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java b/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java index 1e077800..7407971c 100644 --- a/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java +++ b/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java @@ -20,12 +20,12 @@ public class MybatisPlusConfig { return new PaginationInterceptor(); //阻断解析器,测试环境使用 -// PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); +// PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // -// List sqlParserList = new ArrayList<>(); -// // 攻击 SQL 阻断解析器、加入解析链 -// sqlParserList.add(new BlockAttackSqlParser()); -// paginationInterceptor.setSqlParserList(sqlParserList); -// return paginationInterceptor; +// List sqlParserList = new ArrayList<>(); +// //攻击 SQL 阻断解析器、加入解析链 +// sqlParserList.add(new BlockAttackSqlParser()); +// paginationInterceptor.setSqlParserList(sqlParserList); +// return paginationInterceptor; } } diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 4a0cf9c6..fd779456 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -67,7 +67,7 @@ public class LimitInterceptor { try { Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod); log.info("Access try count is {} for name={} and key = {}", count, name, key); - // 如果缓存里没有值,或者他的值小于限制频率 + //如果缓存里没有值,或者他的值小于限制频率 if (count.intValue() <= limitCount) { return pjp.proceed(); } else { diff --git a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java index 1009fa09..ea814963 100644 --- a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java +++ b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java @@ -102,7 +102,7 @@ public class SystemLogAspect { //请求参数 systemLogVO.setMapToParams(logParams); //响应参数 此处数据太大了,所以先注释掉 -// systemLogVO.setResponseBody(JSONUtil.toJsonStr(rvt)); +// systemLogVO.setResponseBody(JSONUtil.toJsonStr(rvt)); //请求IP systemLogVO.setIp(IpUtils.getIpAddress(request)); //IP地址 diff --git a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java index cc21e89b..85ca4838 100644 --- a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java +++ b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java @@ -170,7 +170,7 @@ public class RedisCache implements Cache { @Override public Long cumulative(Object key, Object value) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // add 方法对应 PFADD 命令 + //add 方法对应 PFADD 命令 return operations.add(key, value); } @@ -179,7 +179,7 @@ public class RedisCache implements Cache { public Long counter(Object key) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // add 方法对应 PFADD 命令 + //add 方法对应 PFADD 命令 return operations.size(key); } @@ -198,7 +198,7 @@ public class RedisCache implements Cache { @Override public Long mergeCounter(Object... key) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // 计数器合并累加 + //计数器合并累加 return operations.union(key[0], key); } @@ -223,7 +223,7 @@ public class RedisCache implements Cache { */ @Override public void incrementScore(String sortedSetName, String keyword) { - // x 的含义请见本方法的注释 + //x 的含义请见本方法的注释 double x = 1.0; this.redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, x); } diff --git a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java index a257a2ba..b5cbfe4e 100644 --- a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java +++ b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java @@ -44,7 +44,7 @@ public abstract class BaseElasticsearchService { static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); - // 默认缓冲限制为100MB,此处修改为30MB。 + //默认缓冲限制为100MB,此处修改为30MB。 builder.setHttpAsyncResponseConsumerFactory(new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } @@ -88,7 +88,7 @@ public abstract class BaseElasticsearchService { protected void createIndexRequest(String index) { try { CreateIndexRequest request = new CreateIndexRequest(index); - // Settings for this index + //Settings for this index request.settings(Settings.builder().put("index.number_of_shards", elasticsearchProperties.getIndex().getNumberOfShards()).put("index.number_of_replicas", elasticsearchProperties.getIndex().getNumberOfReplicas())); //创建索引 @@ -308,13 +308,13 @@ public abstract class BaseElasticsearchService { PutMappingRequest request = new PutMappingRequest(index) .source(source, XContentType.JSON); -// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, -// RequestOptions.DEFAULT); +// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, +// RequestOptions.DEFAULT); // -// boolean acknowledged = putMappingResponse.isAcknowledged(); -// if (acknowledged) { -// log.error("Succeed to put mapping"); -// } +// boolean acknowledged = putMappingResponse.isAcknowledged(); +// if (acknowledged) { +// log.error("Succeed to put mapping"); +// } CountDownLatch latch = new CountDownLatch(1); AtomicReference response = new AtomicReference(); client.indices().putMappingAsync( diff --git a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java index abac16d0..09f4838f 100644 --- a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java +++ b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java @@ -67,24 +67,24 @@ public class GlobalControllerExceptionHandler { return ResultUtil.error(ResultCode.ERROR); } -// /** -// * 通用的接口映射异常处理方 -// */ -// @Override -// protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { -// if (ex instanceof MethodArgumentNotValidException) { -// MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex; -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg(exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status); -// } -// if (ex instanceof MethodArgumentTypeMismatchException) { -// MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex; -// logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName() -// + ",信息:" + exception.getLocalizedMessage()); -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("参数转换失败"), status); -// } -// ex.printStackTrace(); -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("未知异常,请联系管理员"), status); -// } +// /** +// * 通用的接口映射异常处理方 +// */ +// @Override +// protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { +// if (ex instanceof MethodArgumentNotValidException) { +// MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex; +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg(exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status); +// } +// if (ex instanceof MethodArgumentTypeMismatchException) { +// MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex; +// logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName() +// + ",信息:" + exception.getLocalizedMessage()); +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("参数转换失败"), status); +// } +// ex.printStackTrace(); +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("未知异常,请联系管理员"), status); +// } /** * bean校验未通过异常 diff --git a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java index 990bd0a6..cdc533e4 100644 --- a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java +++ b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java @@ -80,7 +80,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { * @return */ private String cleanXSS2(String value) { - // 移除特殊标签 + //移除特殊标签 value = value.replaceAll("<", "<").replaceAll(">", ">"); value = value.replaceAll("\\(", "(").replaceAll("\\)", ")"); value = value.replaceAll("'", "'"); @@ -93,40 +93,40 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { private String cleanXSS(String value) { if (value != null) { //推荐使用ESAPI库来避免脚本攻击,value = ESAPI.encoder().canonicalize(value); -// // 避免空字符串 -// value = value.replaceAll(" ", ""); - // 避免script 标签 +// //避免空字符串 +// value = value.replaceAll(" ", ""); + //避免script 标签 Pattern scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); - // 避免src形式的表达式 + //避免src形式的表达式 scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); - // 删除单个的 标签 + //删除单个的 标签 scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); - // 删除单个的