diff --git a/DB/version4.2.5toMASTER.sql b/DB/version4.2.5toMASTER.sql index a57e2b6c..1a211ecd 100644 --- a/DB/version4.2.5toMASTER.sql +++ b/DB/version4.2.5toMASTER.sql @@ -1,3 +1,6 @@ + +/** 优惠券活动增加领取周期字段 **/ +ALTER TABLE li_coupon_activity ADD coupon_frequency_enum varchar(255) COMMENT '领取周期'; -- 会员优惠券标识 CREATE TABLE `li_member_coupon_sign` ( `id` bigint NOT NULL, diff --git a/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java index cbc01db4..31048556 100644 --- a/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/distribution/DistributionGoodsBuyerController.java @@ -54,22 +54,22 @@ public class DistributionGoodsBuyerController { @PreventDuplicateSubmissions @ApiOperation(value = "选择分销商品") @ApiImplicitParams({ - @ApiImplicitParam(name = "distributionGoodsId", value = "分销ID", required = true, dataType = "String", paramType = "path"), + @ApiImplicitParam(name = "distributionGoodsId", value = "分销ID", required = true, dataType = "String", paramType = "path"), @ApiImplicitParam(name = "checked", value = "是否选择", required = true, dataType = "boolean", paramType = "query") }) @GetMapping(value = "/checked/{distributionGoodsId}") public ResultMessage distributionCheckGoods( - @NotNull(message = "分销商品不能为空") @PathVariable("distributionGoodsId") String distributionGoodsId,Boolean checked) { - Boolean result=false; - if(checked){ - result=distributionSelectedGoodsService.add(distributionGoodsId); - }else { - result=distributionSelectedGoodsService.delete(distributionGoodsId); + @NotNull(message = "分销商品不能为空") @PathVariable("distributionGoodsId") String distributionGoodsId, Boolean checked) { + Boolean result = false; + if (checked) { + result = distributionSelectedGoodsService.add(distributionGoodsId); + } else { + result = distributionSelectedGoodsService.delete(distributionGoodsId); } //判断操作结果 - if(result){ + if (result) { return ResultUtil.success(ResultCode.SUCCESS); - }else{ + } else { throw new ServiceException(ResultCode.ERROR); } diff --git a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java index 951e56ec..480b8823 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java +++ b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java @@ -65,4 +65,10 @@ public class FootprintController { return ResultUtil.data(footprintService.getFootprintNum()); } + + @GetMapping("/history") + @ApiOperation(value = "获取会员的历史足迹") + public ResultMessage> getMemberHistory(FootPrintQueryParams params) { + return ResultUtil.data(footprintService.footPrintPage(params)); + } } diff --git a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java index 08251f15..1dfcb000 100644 --- a/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/order/OrderBuyerController.java @@ -128,5 +128,4 @@ public class OrderBuyerController { return ResultUtil.data(orderService.invoice(orderSn)); } - } diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java index 5a9e86b5..8615bf34 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/MemberBuyerController.java @@ -3,6 +3,8 @@ package cn.lili.controller.passport; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.AuthUser; +import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; @@ -264,4 +266,18 @@ public class MemberBuyerController { return ResultUtil.data(this.memberService.refreshToken(refreshToken)); } + @GetMapping("/getImUser") + @ApiOperation(value = "获取用户信息") + public ResultMessage getImUser() { + AuthUser authUser = UserContext.getCurrentUser(); + return ResultUtil.data(memberService.getById(authUser.getId())); + } + + @GetMapping("/getImUserDetail/{memberId}") + @ApiImplicitParam(name = "memberId", value = "店铺Id", required = true, dataType = "String", paramType = "path") + @ApiOperation(value = "获取用户信息") + public ResultMessage getImUserDetail(@PathVariable String memberId) { + return ResultUtil.data(memberService.getById(memberId)); + } + } diff --git a/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java index 6e6a7ca7..35bdfbd2 100644 --- a/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/store/StoreBuyerController.java @@ -1,11 +1,13 @@ package cn.lili.controller.store; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.goods.entity.vos.StoreGoodsLabelVO; import cn.lili.modules.goods.service.StoreGoodsLabelService; +import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dto.StoreBankDTO; import cn.lili.modules.store.entity.dto.StoreCompanyDTO; import cn.lili.modules.store.entity.dto.StoreOtherInfoDTO; @@ -57,6 +59,20 @@ public class StoreBuyerController { return ResultUtil.data(storeService.findByConditionPage(entity, page)); } + @GetMapping("/store") + @ApiOperation(value = "im-获取店铺信息") + public ResultMessage getStoreUser() { + AuthUser authUser = UserContext.getCurrentUser(); + return ResultUtil.data(storeService.getById(authUser.getStoreId())); + } + + @GetMapping("/store/{storeId}") + @ApiImplicitParam(name = "storeId", value = "店铺Id", required = true, dataType = "String", paramType = "path") + @ApiOperation(value = "im-店铺ID获取店铺信息") + public ResultMessage getStoreUserDetail(@PathVariable String storeId) { + return ResultUtil.data(storeService.getById(storeId)); + } + @ApiOperation(value = "通过id获取店铺信息") @ApiImplicitParam(name = "id", value = "店铺ID", required = true, paramType = "path") @GetMapping(value = "/get/detail/{id}") diff --git a/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java index 96892d48..ccd14038 100644 --- a/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java @@ -1,8 +1,8 @@ package cn.lili.event.impl; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; -import cn.lili.common.utils.StringUtils; import cn.lili.event.MemberRegisterEvent; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; @@ -46,7 +46,7 @@ public class RegisteredCouponActivityExecute implements MemberRegisterEvent { .build()); //邀请人赠券 String memberId = (String) cache.get(CachePrefix.INVITER.getPrefix() + member.getId()); - if (StringUtils.isNotEmpty(memberId)) { + if (CharSequenceUtil.isNotEmpty(memberId)) { //邀请人 Member inviter = memberService.getById(memberId); couponActivityService.trigger(CouponActivityTrigger.builder() 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 7e7966c7..1693f24e 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -193,6 +193,7 @@ public enum ResultCode { ORDER_NOT_USER(31007, "非当前会员的订单"), ORDER_TAKE_ERROR(31008, "当前订单无法核销"), MEMBER_ADDRESS_NOT_EXIST(31009, "订单无收货地址,请先配置收货地址"), + STORE_ADDRESS_NOT_EXIST(31009,"订单没有自提地址,请先选择自提地址"), ORDER_DELIVER_NUM_ERROR(31010, "没有待发货的订单"), ORDER_NOT_SUPPORT_DISTRIBUTION(31011, "购物车中包含不支持配送的商品,请重新选择收货地址,或者重新选择商品"), ORDER_NOT_EXIST_VALID(31041, "购物车中无有效商品,请检查购物车内商品,或者重新选择商品"), @@ -447,6 +448,7 @@ public enum ResultCode { ALIPAY_EXCEPTION(70003, "支付宝支付错误,请稍后重试"), ALIPAY_PARAMS_EXCEPTION(70004, "支付宝参数异常"), LOGISTICS_NOT_SETTING(70005, "您还未配置快递查询"), + LOGISTICS_CHECK_SETTING(70005, "操作失败,请检查您的快递鸟配置"), ORDER_SETTING_ERROR(70006, "系统订单配置异常"), ALI_SMS_SETTING_ERROR(70007, "您还未配置阿里云短信"), SMS_SIGN_EXIST_ERROR(70008, "短信签名已存在"), diff --git a/framework/src/main/java/cn/lili/modules/connect/config/AuthConfig.java b/framework/src/main/java/cn/lili/modules/connect/config/AuthConfig.java index 4378893c..b75b1e5a 100644 --- a/framework/src/main/java/cn/lili/modules/connect/config/AuthConfig.java +++ b/framework/src/main/java/cn/lili/modules/connect/config/AuthConfig.java @@ -77,11 +77,7 @@ public class AuthConfig { /** * 针对国外服务可以单独设置代理 * HttpConfig config = new HttpConfig(); -<<<<<<< HEAD - * config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("106.124.130.167", 10080))); -======= * config.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10080))); ->>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7 * config.setTimeout(15000); * * @since 1.15.5 diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/vos/DraftGoodsVO.java b/framework/src/main/java/cn/lili/modules/goods/entity/vos/DraftGoodsVO.java index ecb45353..6593342e 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/vos/DraftGoodsVO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/vos/DraftGoodsVO.java @@ -5,6 +5,7 @@ import cn.lili.modules.goods.entity.dos.Wholesale; import cn.lili.modules.goods.entity.dto.GoodsParamsDTO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import java.util.List; @@ -14,6 +15,7 @@ import java.util.List; * @author pikachu * @since 2020-02-26 23:24:13 */ +@EqualsAndHashCode(callSuper = true) @Data public class DraftGoodsVO extends DraftGoods { diff --git a/framework/src/main/java/cn/lili/modules/im/entity/enums/MessageResultType.java b/framework/src/main/java/cn/lili/modules/im/entity/enums/MessageResultType.java index ba54b5d5..c557a45e 100644 --- a/framework/src/main/java/cn/lili/modules/im/entity/enums/MessageResultType.java +++ b/framework/src/main/java/cn/lili/modules/im/entity/enums/MessageResultType.java @@ -16,6 +16,7 @@ public enum MessageResultType { * 未读消息 * 历史消息 * 系统提示 + * 下线提醒 */ FRIENDS, ADD_FRIENDS, @@ -23,6 +24,7 @@ public enum MessageResultType { READ_MESSAGE, UN_READ, HISTORY, - SYSTEM_TIPS + SYSTEM_TIPS, + OFFLINE } diff --git a/framework/src/main/java/cn/lili/modules/im/entity/vo/MessageVO.java b/framework/src/main/java/cn/lili/modules/im/entity/vo/MessageVO.java index 420091e1..120abc1a 100644 --- a/framework/src/main/java/cn/lili/modules/im/entity/vo/MessageVO.java +++ b/framework/src/main/java/cn/lili/modules/im/entity/vo/MessageVO.java @@ -2,6 +2,7 @@ package cn.lili.modules.im.entity.vo; import cn.lili.modules.im.entity.enums.MessageResultType; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; /** @@ -12,6 +13,7 @@ import lombok.Data; * 2021-12-30 15:51 */ @Data +@Builder @AllArgsConstructor public class MessageVO { diff --git a/framework/src/main/java/cn/lili/modules/kdBrid/serviceImpl/KdNiaoServiceImpl.java b/framework/src/main/java/cn/lili/modules/kdBrid/serviceImpl/KdNiaoServiceImpl.java index 23b4eba8..482fcf2d 100644 --- a/framework/src/main/java/cn/lili/modules/kdBrid/serviceImpl/KdNiaoServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/kdBrid/serviceImpl/KdNiaoServiceImpl.java @@ -194,10 +194,11 @@ public class KdNiaoServiceImpl implements KdNiaoService { params.put("DataType", "2"); // 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数 String result = sendPost(ReqURL, params); - + if(CharSequenceUtil.isEmpty(result) || CharSequenceUtil.isBlank(result)){ + throw new ServiceException(ResultCode.LOGISTICS_CHECK_SETTING); + } //根据公司业务处理返回的信息...... JSONObject obj = JSONObject.parseObject(result); - log.info("电子面单响应:{}",result); if(!"100".equals(obj.getString("ResultCode"))){ return obj.getString("Reason"); diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java index ed32fb2f..355df4a3 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -15,6 +16,7 @@ import lombok.NoArgsConstructor; * @author Chopper * @since 2020/11/17 7:22 下午 */ +@EqualsAndHashCode(callSuper = true) @Data @TableName("li_foot_print") @ApiModel(value = "浏览历史") diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberEvaluation.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberEvaluation.java index 90be3361..9ec652d2 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberEvaluation.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/MemberEvaluation.java @@ -1,9 +1,9 @@ package cn.lili.modules.member.entity.dos; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.SwitchEnum; import cn.lili.common.security.sensitive.Sensitive; import cn.lili.common.security.sensitive.enums.SensitiveStrategy; -import cn.lili.common.utils.StringUtils; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.member.entity.dto.MemberEvaluationDTO; import cn.lili.modules.order.order.entity.dos.Order; @@ -131,7 +131,7 @@ public class MemberEvaluation extends BaseEntity { //设置订单编号 this.orderNo = order.getSn(); //是否包含图片 - this.haveImage = StringUtils.isNotEmpty(memberEvaluationDTO.getImages()); + this.haveImage = CharSequenceUtil.isNotEmpty(memberEvaluationDTO.getImages()); //默认开启评价 this.status = SwitchEnum.OPEN.name(); } diff --git a/framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java b/framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java index 1ff93589..f4842ddf 100644 --- a/framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java +++ b/framework/src/main/java/cn/lili/modules/member/service/StoreLogisticsService.java @@ -89,5 +89,4 @@ public interface StoreLogisticsService extends IService { */ List getCloseStoreLogistics(String storeId); - } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java index 609654f4..730890ac 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.text.CharSequenceUtil; 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.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.modules.member.entity.dos.Clerk; @@ -20,7 +19,6 @@ import cn.lili.modules.member.service.*; import cn.lili.mybatis.util.PageUtil; 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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -60,9 +58,8 @@ public class ClerkServiceImpl extends ServiceImpl implements clerkVOQueryWrapper.eq(StringUtils.isNotEmpty(clerkQueryDTO.getDepartmentId()), "li_clerk.department_id", clerkQueryDTO.getDepartmentId()); clerkVOQueryWrapper.like(StringUtils.isNotEmpty(clerkQueryDTO.getClerkName()), "li_clerk.clerk_name", clerkQueryDTO.getClerkName()); clerkVOQueryWrapper.like(StringUtils.isNotEmpty(clerkQueryDTO.getMobile()), "m.mobile", clerkQueryDTO.getMobile()); - IPage clerkPage = this.baseMapper.selectClerkPage(PageUtil.initPage(page), clerkVOQueryWrapper); - return clerkPage; + return this.baseMapper.selectClerkPage(PageUtil.initPage(page), clerkVOQueryWrapper); /*Page clerkPage = page(initPage, initWrapper); 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 a35c8433..4060e39c 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 @@ -42,7 +42,6 @@ import cn.lili.modules.store.service.StoreService; import cn.lili.mybatis.util.PageUtil; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MemberTagsEnum; -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.conditions.update.UpdateWrapper; @@ -189,8 +188,7 @@ public class MemberServiceImpl extends ServiceImpl impleme @Override public Token usernameStoreLogin(String username, String password) { -// Member member = this.findMember(username); - Member member = this.getOne(new LambdaQueryWrapper().eq(Member::getMobile,username)); + Member member = this.findMember(username); //判断用户是否存在 if (member == null || !member.getDisabled()) { throw new ServiceException(ResultCode.USER_NOT_EXIST); 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 3dc52820..2134109c 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 @@ -73,7 +73,7 @@ public class MemberSignServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MemberSign::getMemberId, authUser.getId()); List signSize = this.baseMapper.getTodayMemberSign(queryWrapper); - if (signSize.size() > 0) { + if (signSize.isEmpty()) { throw new ServiceException(ResultCode.MEMBER_SIGN_REPEAT); } //当前签到天数的前一天日期 diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java index 281fbca4..254e178b 100644 --- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/StoreLogisticsServiceImpl.java @@ -45,7 +45,7 @@ public class StoreLogisticsServiceImpl extends ServiceImpl lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreLogistics::getLogisticsId, logisticsId); lambdaQueryWrapper.eq(StoreLogistics::getStoreId, storeId); @@ -58,15 +58,15 @@ public class StoreLogisticsServiceImpl extends ServiceImpl().eq(StoreLogistics::getStoreId,storeId).eq(StoreLogistics::getLogisticsId,logisticsId)); + return this.getOne(new LambdaQueryWrapper().eq(StoreLogistics::getStoreId, storeId).eq(StoreLogistics::getLogisticsId, logisticsId)); } @Override public List getOpenStoreLogistics(String storeId) { List openStoreLogistics = this.baseMapper.getOpenStoreLogistics(storeId); - for(StoreLogisticsVO storeLogisticsVO:openStoreLogistics){ + for (StoreLogisticsVO storeLogisticsVO : openStoreLogistics) { storeLogisticsVO.setSelected("1"); } return openStoreLogistics; @@ -78,19 +78,19 @@ public class StoreLogisticsServiceImpl extends ServiceImpl lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreLogistics::getLogisticsId, logisticsId); lambdaQueryWrapper.eq(StoreLogistics::getStoreId, storeId); - StoreLogistics storeLogistics=null; + StoreLogistics storeLogistics = null; if (this.getOne(lambdaQueryWrapper) == null) { - storeLogistics=new StoreLogistics(storeLogisticsCustomerDTO); - storeLogistics.setStoreId(storeId); - storeLogistics.setLogisticsId(logisticsId); - this.save(storeLogistics); - return storeLogistics; - } + storeLogistics = new StoreLogistics(storeLogisticsCustomerDTO); + storeLogistics.setStoreId(storeId); + storeLogistics.setLogisticsId(logisticsId); + this.save(storeLogistics); + return storeLogistics; + } return null; } diff --git a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java index 22d9b33d..c6724bc4 100644 --- a/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/aftersale/serviceimpl/AfterSaleServiceImpl.java @@ -455,7 +455,10 @@ public class AfterSaleServiceImpl extends ServiceImpl()); this.setCouponList(new ArrayList<>()); this.setGiftList(new ArrayList<>()); 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 e04782a4..61ebe0ac 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 @@ -36,10 +36,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -108,29 +105,36 @@ public class CheckDataRender implements CartRenderStep { //缓存中的商品信息 GoodsSku dataSku = goodsSkuService.getGoodsSkuByIdFromCache(cartSkuVO.getGoodsSku().getId()); - Map promotionMap = promotionGoodsService.getCurrentGoodsPromotion(dataSku, tradeDTO.getCartTypeEnum().name()); - //商品有效性判定 - if (dataSku == null || dataSku.getUpdateTime().after(cartSkuVO.getGoodsSku().getUpdateTime())) { - //商品失效,将商品移除并重新填充商品 - cartSkuVOS.remove(cartSkuVO); - //设置新商品 - CartSkuVO newCartSkuVO = new CartSkuVO(dataSku,promotionMap); - newCartSkuVO.setCartType(tradeDTO.getCartTypeEnum()); - newCartSkuVO.setNum(cartSkuVO.getNum()); - newCartSkuVO.setSubTotal(CurrencyUtil.mul(newCartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); - cartSkuVOS.add(newCartSkuVO); - continue; - } + + //商品上架状态判定 - if (!GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { - //设置购物车未选中 - cartSkuVO.setChecked(false); - //设置购物车此sku商品已失效 - cartSkuVO.setInvalid(true); - //设置失效消息 - cartSkuVO.setErrorMessage("商品已下架"); + boolean checkGoodsStatus = dataSku == null || !GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable()); + //商品有效性判定 + boolean checkGoodsValid = dataSku != null && dataSku.getUpdateTime() != null && dataSku.getUpdateTime().after(cartSkuVO.getGoodsSku().getUpdateTime()); + + Map promotionMap = dataSku != null ? promotionGoodsService.getCurrentGoodsPromotion(dataSku, tradeDTO.getCartTypeEnum().name()) : null; + + log.info("dataSku: {}, goodsSku: {}", dataSku, cartSkuVO.getGoodsSku()); + if (checkGoodsStatus || checkGoodsValid) { + if (checkGoodsStatus) { + //设置购物车未选中 + cartSkuVO.setChecked(false); + //设置购物车此sku商品已失效 + cartSkuVO.setInvalid(true); + //设置失效消息 + cartSkuVO.setErrorMessage("商品已下架"); + } + if (checkGoodsValid) { + CartSkuVO newCartSkuVO = new CartSkuVO(dataSku,promotionMap); + newCartSkuVO.setCartType(tradeDTO.getCartTypeEnum()); + newCartSkuVO.setNum(cartSkuVO.getNum()); + newCartSkuVO.setSubTotal(CurrencyUtil.mul(newCartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); + cartSkuVO = newCartSkuVO; + log.info("商品信息已更新,更新后的商品信息为:{}", cartSkuVO); + } continue; } + //商品库存判定 if (dataSku.getQuantity() < cartSkuVO.getNum()) { //设置购物车未选中 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 a25fef51..795a0360 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 @@ -116,6 +116,9 @@ public class SkuFreightRender implements CartRenderStep { } } } + }else{ + //自提清空不配送商品 + tradeDTO.setNotSupportFreight(null); } } 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 c0970787..82c1805c 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 @@ -492,12 +492,11 @@ public class CartServiceImpl implements CartService { if (CharSequenceUtil.isNotEmpty(way)) { cartTypeEnum = CartTypeEnum.valueOf(way); } - TradeDTO tradeDTO = this.getCheckedTradeDTO(cartTypeEnum); - for (CartVO cartVO : tradeDTO.getCartList()) { - cartVO.setDeliveryMethod(DeliveryMethodEnum.valueOf(deliveryMethod).name()); + TradeDTO tradeDTO = this.readDTO(cartTypeEnum); + for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + cartSkuVO.setDeliveryMethod(DeliveryMethodEnum.valueOf(deliveryMethod).name()); } this.resetTradeDTO(tradeDTO); - TradeDTO neTradeDTO = (TradeDTO) cache.get(this.getOriginKey(cartTypeEnum)); } /** 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 dd480e32..0db1700c 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 @@ -1,6 +1,7 @@ package cn.lili.modules.order.order.entity.vo; import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.enums.DeliverStatusEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; @@ -69,10 +70,11 @@ public class AllowOperation implements Serializable { //新订单,允许支付 this.pay = status.equals(OrderStatusEnum.UNPAID.name()) && payStatus.equals(PayStatusEnum.UNPAID.name()); - //可编辑订单收件人信息=实物订单 && 订单未发货 && 订单未取消 + //可编辑订单收件人信息=实物订单 && 订单未发货 && 订单未取消 && 订单不是自提 this.editConsignee = order.getOrderType().equals(OrderTypeEnum.NORMAL.name()) && order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name()) - && !status.equals(OrderStatusEnum.CANCELLED.name()); + && !status.equals(OrderStatusEnum.CANCELLED.name()) + && !order.getDeliveryMethod().equals(DeliveryMethodEnum.SELF_PICK_UP.name()); //是否允许被发货 this.ship = editConsignee && status.equals(OrderStatusEnum.UNDELIVERED.name()); @@ -83,7 +85,8 @@ public class AllowOperation implements Serializable { //是否允许查看物流信息 this.showLogistics = order.getDeliverStatus().equals(DeliverStatusEnum.DELIVERED.name()) && status.equals(OrderStatusEnum.DELIVERED.name()); - this.take = order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()); + //虚拟订单 或 自提订单可以核销 + this.take = (order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) || (order.getDeliveryMethod().equals(DeliveryMethodEnum.SELF_PICK_UP.name()) && order.getOrderStatus().equals(OrderStatusEnum.STAY_PICKED_UP.name())); } /** 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 9ecb22ac..260cf4ff 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 @@ -1002,12 +1002,12 @@ public class OrderServiceImpl extends ServiceImpl implements if (order == null) { throw new ServiceException(ResultCode.ORDER_NOT_EXIST); } - //判断是否为虚拟订单 - if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) { + //判断是否为虚拟订单 或 自提订单 + if (!order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name()) && !order.getDeliveryMethod().equals(DeliveryMethodEnum.SELF_PICK_UP.name())) { throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); } - //判断虚拟订单状态 - if (!order.getOrderStatus().equals(OrderStatusEnum.TAKE.name())) { + //判断虚拟订单状态 或 待自提 + if (!order.getOrderStatus().equals(OrderStatusEnum.TAKE.name()) && !order.getOrderStatus().equals(OrderStatusEnum.STAY_PICKED_UP.name())) { throw new ServiceException(ResultCode.ORDER_TAKE_ERROR); } //判断验证码是否正确 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 199eaf65..954ddb3f 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 @@ -1 +1 @@ -package cn.lili.modules.order.order.serviceimpl; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; 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.CartVO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.TradeMapper; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.KanjiaActivityService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.OrderTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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 java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 交易业务层实现 * * @author Chopper * @since 2020/11/17 7:39 下午 */ @Service public class TradeServiceImpl extends ServiceImpl implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //优惠券预处理 couponPretreatment(tradeDTO); //积分预处理 pointPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //砍价订单处理 kanjiaPretreatment(tradeDTO); //写入缓存,给消费者调用 cache.put(key, JSONUtil.toJsonStr(tradeDTO)); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO 购物车视图 */ private void createTradeCheck(TradeDTO tradeDTO) { if(tradeDTO.getStoreAddress() == null){ //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } //订单配送区域校验 if (tradeDTO.getNotSupportFreight() != null && !tradeDTO.getNotSupportFreight().isEmpty()) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> stringBuilder.append(sku.getGoodsSku().getGoodsName())); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } if (tradeDTO.getCartList().stream().noneMatch(CartVO::getChecked)) { throw new ServiceException(ResultCode.ORDER_NOT_EXIST_VALID); } } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO 购物车视图 */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(tradeDTO.getMemberId(), ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } /** * 创建交易,积分处理 * * @param tradeDTO 购物车视图 */ private void pointPretreatment(TradeDTO tradeDTO) { //需要支付积分 if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO().getPayPoint(), PointTypeEnum.REDUCE.name(), tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 创建交易、砍价处理 * * @param tradeDTO 购物车视图 */ private void kanjiaPretreatment(TradeDTO tradeDTO) { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { String kanjiaId = tradeDTO.getSkuList().get(0).getKanjiaId(); kanjiaActivityService.endKanjiaActivity(kanjiaId); } } } \ No newline at end of file +package cn.lili.modules.order.order.serviceimpl; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.entity.enums.PointTypeEnum; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; 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.dos.Order; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.TradeMapper; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.KanjiaActivityService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.OrderTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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 java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 交易业务层实现 * * @author Chopper * @since 2020/11/17 7:39 下午 */ @Service public class TradeServiceImpl extends ServiceImpl implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //优惠券预处理 couponPretreatment(tradeDTO); //积分预处理 pointPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //砍价订单处理 kanjiaPretreatment(tradeDTO); //写入缓存,给消费者调用 cache.put(key, JSONUtil.toJsonStr(tradeDTO)); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + OrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO 购物车视图 */ private void createTradeCheck(TradeDTO tradeDTO) { if(tradeDTO.getStoreAddress() == null){ //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } //订单配送区域校验 if (tradeDTO.getNotSupportFreight() != null && !tradeDTO.getNotSupportFreight().isEmpty()) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> stringBuilder.append(sku.getGoodsSku().getGoodsName())); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } if (tradeDTO.getCartList().stream().noneMatch(CartVO::getChecked)) { throw new ServiceException(ResultCode.ORDER_NOT_EXIST_VALID); } if(tradeDTO.getCartList().stream().allMatch(item -> item.getDeliveryMethod().equals(DeliveryMethodEnum.SELF_PICK_UP.name()))){ throw new ServiceException(ResultCode.STORE_ADDRESS_NOT_EXIST); } } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO 购物车视图 */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(tradeDTO.getMemberId(), ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } /** * 创建交易,积分处理 * * @param tradeDTO 购物车视图 */ private void pointPretreatment(TradeDTO tradeDTO) { //需要支付积分 if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO().getPayPoint(), PointTypeEnum.REDUCE.name(), tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 创建交易、砍价处理 * * @param tradeDTO 购物车视图 */ private void kanjiaPretreatment(TradeDTO tradeDTO) { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { String kanjiaId = tradeDTO.getSkuList().get(0).getKanjiaId(); kanjiaActivityService.endKanjiaActivity(kanjiaId); } } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java b/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java index 3e3d059e..5f8d9dd7 100644 --- a/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java +++ b/framework/src/main/java/cn/lili/modules/payment/kit/RefundSupport.java @@ -4,8 +4,6 @@ import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SpringContextUtil; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; -import cn.lili.modules.order.order.entity.dos.OrderItem; -import cn.lili.modules.order.order.service.OrderItemService; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.payment.entity.RefundLog; @@ -35,11 +33,6 @@ public class RefundSupport { */ @Autowired private OrderService orderService; - /** - * 子订单 - */ - @Autowired - private OrderItemService orderItemService; /** * 售后退款 @@ -64,31 +57,10 @@ public class RefundSupport { Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); payment.refund(refundLog); - this.updateReturnGoodsNumber(afterSale); - //记录退款流水 storeFlowService.refundOrder(afterSale); } - /** - * 功能描述: 修改子订单中已售后退款商品数量 - * - * @return void - * @Author ftyy - * @Date 17:33 2021/11/18 - * @Param [afterSale] - **/ - private void updateReturnGoodsNumber(AfterSale afterSale) { - //根据商品id及订单sn获取子订单 - OrderItem orderItem = orderItemService.getByOrderSnAndSkuId(afterSale.getOrderSn(), afterSale.getSkuId()); - - orderItem.setReturnGoodsNumber(afterSale.getNum() + orderItem.getReturnGoodsNumber()); - - //修改子订单订单中的退货数量 - orderItemService.updateById(orderItem); - } - - /** * 退款通知 * 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 e92e2486..2f5be2d7 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 @@ -23,6 +23,7 @@ import javax.validation.constraints.NotNull; @ApiModel(value = "优惠券活动实体类") public class CouponActivity extends BasePromotions { + private static final long serialVersionUID = 4230258450334305951L; /** * @see CouponActivityTypeEnum */ diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/MemberCouponVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/MemberCouponVO.java index 06f06a19..1aace9f9 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/MemberCouponVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/MemberCouponVO.java @@ -5,6 +5,7 @@ import cn.lili.modules.promotion.entity.dos.MemberCoupon; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; /** * MemberCouponVO @@ -15,6 +16,7 @@ import lombok.EqualsAndHashCode; */ @EqualsAndHashCode(callSuper = true) @Data +@NoArgsConstructor public class MemberCouponVO extends MemberCoupon { private static final long serialVersionUID = -5533168813075444962L; @@ -30,7 +32,4 @@ public class MemberCouponVO extends MemberCoupon { this.reason = reason; } - public MemberCouponVO(){ - - } } 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 2c63d63d..a53d9d7e 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 @@ -7,7 +7,7 @@ import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dto.GoodsSkuDTO; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.search.PromotionGoodsSearchParams; -import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.Date; @@ -60,7 +60,7 @@ public interface PromotionGoodsService extends IService { * @param pageVo 分页参数 * @return 促销商品列表 */ - IPage pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo); + Page pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo); /** * 获取促销商品信息 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 28aedbdc..03f36a30 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 @@ -29,7 +29,7 @@ import cn.lili.mybatis.util.PageUtil; 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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; @@ -115,7 +115,7 @@ public class PromotionGoodsServiceImpl extends ServiceImpl pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo) { + public Page pageFindAll(PromotionGoodsSearchParams searchParams, PageVO pageVo) { return this.page(PageUtil.initPage(pageVo), searchParams.queryWrapper()); } 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 e28262f7..728b3e74 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 @@ -257,10 +257,6 @@ public class SeckillApplyServiceImpl extends ServiceImpl>>>>>> origin/master * 更新秒杀活动时间 * * @param seckill 秒杀活动 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 14a386f7..73293f9f 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 @@ -135,10 +135,6 @@ public class SeckillServiceImpl extends AbstractPromotionsServiceImpl>>>>>> origin/master * 通用促销更新 * 调用顺序: * 1. checkStatus 检查促销状态 diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java index bda58afb..56211660 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsIndexServiceImpl.java @@ -214,15 +214,15 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements List> brandList = new ArrayList<>(); if (CollUtil.isNotEmpty(brandIds)) { - brandList = this.brandService.getBrandsMapsByCategory(brandIds, "id,name,logo"); + brandList = this.brandService.getBrandsMapsByCategory(CollUtil.distinct(brandIds), "id,name,logo"); } List> categoryList = new ArrayList<>(); - if (CollUtil.isNotEmpty(categoryList)) { - categoryList = this.categoryService.listMapsByIdsOrderByLevel(categoryPaths, "id,name"); + if (CollUtil.isNotEmpty(categoryPaths)) { + categoryList = this.categoryService.listMapsByIdsOrderByLevel(CollUtil.distinct(categoryPaths), "id,name"); } List> storeCategoryList = new ArrayList<>(); - if (CollUtil.isNotEmpty(storeCategoryList)) { - storeCategoryList = this.storeGoodsLabelService.listMapsByStoreIds(storeCategoryPaths, "id,label_name"); + if (CollUtil.isNotEmpty(storeCategoryPaths)) { + storeCategoryList = this.storeGoodsLabelService.listMapsByStoreIds(CollUtil.distinct(storeCategoryPaths), "id,label_name"); } for (GoodsSkuDTO goodsSku : skuIPage.getRecords()) { @@ -913,8 +913,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements if (CollUtil.isNotEmpty(categoryList) && CharSequenceUtil.isNotEmpty(goodsSku.getCategoryPath())) { StringBuilder categoryNamePath = new StringBuilder(); categoryList.stream().filter(o -> goodsSku.getCategoryPath().contains(o.get("id").toString())).forEach(p -> categoryNamePath.append(p.get("name")).append(",")); - categoryNamePath.deleteCharAt(categoryNamePath.length() - 1); - index.setCategoryNamePath(categoryNamePath.toString()); + if (CharSequenceUtil.isNotEmpty(categoryNamePath)) { + categoryNamePath.deleteCharAt(categoryNamePath.length() - 1); + index.setCategoryNamePath(categoryNamePath.toString()); + } } //商品品牌索引 if (CollUtil.isNotEmpty(brandList) && CharSequenceUtil.isNotEmpty(goodsSku.getBrandId())) { @@ -928,8 +930,10 @@ public class EsGoodsIndexServiceImpl extends BaseElasticsearchService implements if (CollUtil.isNotEmpty(storeCategoryList) && CharSequenceUtil.isNotEmpty(goodsSku.getStoreCategoryPath())) { StringBuilder storeCategoryNamePath = new StringBuilder(); storeCategoryList.stream().filter(o -> goodsSku.getStoreCategoryPath().contains(o.get("id").toString())).forEach(p -> storeCategoryNamePath.append(p.get("label_name").toString()).append(",")); - storeCategoryNamePath.deleteCharAt(storeCategoryNamePath.length() - 1); - index.setStoreCategoryNamePath(storeCategoryNamePath.toString()); + if (CharSequenceUtil.isNotEmpty(storeCategoryNamePath)) { + storeCategoryNamePath.deleteCharAt(storeCategoryNamePath.length() - 1); + index.setStoreCategoryNamePath(storeCategoryNamePath.toString()); + } } return index; } diff --git a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java index 80ed1f54..330f17ed 100644 --- a/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java @@ -120,8 +120,6 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { @Override public List getEsGoodsBySkuIds(List skuIds, PageVO pageVo) { NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder(); - NativeSearchQuery build = searchQueryBuilder.build(); - build.setIds(skuIds); if (pageVo != null) { int pageNumber = pageVo.getPageNumber() - 1; if (pageNumber < 0) { @@ -131,6 +129,8 @@ public class EsGoodsSearchServiceImpl implements EsGoodsSearchService { //分页 searchQueryBuilder.withPageable(pageable); } + NativeSearchQuery build = searchQueryBuilder.build(); + build.setIds(skuIds); return restTemplate.multiGet(build, EsGoodsIndex.class, restTemplate.getIndexCoordinatesFor(EsGoodsIndex.class)); } diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java index efb479ad..20445779 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreDetailServiceImpl.java @@ -15,7 +15,10 @@ import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.search.utils.EsIndexUtil; import cn.lili.modules.store.entity.dos.Store; import cn.lili.modules.store.entity.dos.StoreDetail; -import cn.lili.modules.store.entity.dto.*; +import cn.lili.modules.store.entity.dto.StoreAfterSaleAddressDTO; +import cn.lili.modules.store.entity.dto.StoreDeliverGoodsAddressDTO; +import cn.lili.modules.store.entity.dto.StoreSettingDTO; +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 cn.lili.modules.store.entity.vos.StoreManagementCategoryVO; @@ -25,7 +28,6 @@ import cn.lili.modules.store.service.StoreDetailService; import cn.lili.modules.store.service.StoreService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.GoodsTagsEnum; -import cn.lili.rocketmq.tags.MemberTagsEnum; import cn.lili.rocketmq.tags.StoreTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -100,6 +102,7 @@ public class StoreDetailServiceImpl extends ServiceImpl lambdaUpdateWrapper = Wrappers.lambdaUpdate(); - lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorName,storeDeliverGoodsAddressDto.getSalesConsignorName()); - lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorMobile,storeDeliverGoodsAddressDto.getSalesConsignorMobile()); - lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorAddressId,storeDeliverGoodsAddressDto.getSalesConsignorAddressId()); - lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorAddressPath,storeDeliverGoodsAddressDto.getSalesConsignorAddressPath()); - lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorDetail,storeDeliverGoodsAddressDto.getSalesConsignorDetail()); - lambdaUpdateWrapper.eq(StoreDetail::getStoreId,storeId); + lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorName, storeDeliverGoodsAddressDto.getSalesConsignorName()); + lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorMobile, storeDeliverGoodsAddressDto.getSalesConsignorMobile()); + lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorAddressId, storeDeliverGoodsAddressDto.getSalesConsignorAddressId()); + lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorAddressPath, storeDeliverGoodsAddressDto.getSalesConsignorAddressPath()); + lambdaUpdateWrapper.set(StoreDetail::getSalesConsignorDetail, storeDeliverGoodsAddressDto.getSalesConsignorDetail()); + lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId); + + + this.removeCache(storeId); return this.update(lambdaUpdateWrapper); } @@ -175,6 +182,7 @@ public class StoreDetailServiceImpl extends ServiceImpl lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(StoreDetail::getStockWarning, stockWarning); lambdaUpdateWrapper.eq(StoreDetail::getStoreId, storeId); + this.removeCache(storeId); return this.update(lambdaUpdateWrapper); } @@ -249,4 +260,14 @@ public class StoreDetailServiceImpl extends ServiceImpl> getSku(@NotNull(message = "商品ID不能为空") @PathVariable("goodsId") String goodsId, - @NotNull(message = "SKU ID不能为空") @PathVariable("skuId") String skuId) { - try { - // 读取选中的列表 - Map map = goodsSkuService.getGoodsSkuDetail(goodsId, skuId); - return ResultUtil.data(map); - } catch (ServiceException se) { - log.info(se.getMsg(), se); - throw se; - } catch (Exception e) { - log.error(ResultCode.GOODS_ERROR.message(), e); - return ResultUtil.error(ResultCode.GOODS_ERROR); - } - - } - - -} diff --git a/im-api/src/main/java/cn/lili/controller/im/ImManagerController.java b/im-api/src/main/java/cn/lili/controller/im/ImManagerController.java deleted file mode 100644 index 794032ba..00000000 --- a/im-api/src/main/java/cn/lili/controller/im/ImManagerController.java +++ /dev/null @@ -1,175 +0,0 @@ -package cn.lili.controller.im; - -import cn.lili.common.enums.ResultCode; -import cn.lili.common.enums.ResultUtil; -import cn.lili.common.exception.ServiceException; -import cn.lili.common.security.AuthUser; -import cn.lili.common.security.context.UserContext; -import cn.lili.common.security.enums.UserEnums; -import cn.lili.common.security.token.Token; -import cn.lili.common.utils.StringUtils; -import cn.lili.common.vo.PageVO; -import cn.lili.common.vo.ResultMessage; -import cn.lili.common.vo.SearchVO; -import cn.lili.modules.permission.entity.dos.AdminUser; -import cn.lili.modules.permission.entity.dto.AdminUserDTO; -import cn.lili.modules.permission.entity.vo.AdminUserVO; -import cn.lili.modules.permission.service.AdminUserService; -import cn.lili.modules.permission.service.DepartmentService; -import cn.lili.mybatis.util.PageUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.List; - -@Slf4j -@RestController -@Api(tags = "管理员") -@RequestMapping("/im/manager/im/passport/user") -@Validated -public class ImManagerController { - @Autowired - private AdminUserService adminUserService; - @Autowired - private DepartmentService departmentService; - - @PostMapping(value = "/login") - @ApiOperation(value = "登录管理员") - public ResultMessage login(@NotNull(message = "用户名不能为空") String username, - @NotNull(message = "密码不能为空") String password) { - return ResultUtil.data(adminUserService.login(username, password)); - } - - @ApiOperation(value = "注销接口") - @PostMapping("/logout") - public ResultMessage logout() { - this.adminUserService.logout(UserEnums.MANAGER); - return ResultUtil.success(); - } - - @ApiOperation(value = "刷新token") - @GetMapping("/refresh/{refreshToken}") - public ResultMessage refreshToken(@NotNull(message = "刷新token不能为空") @PathVariable String refreshToken) { - return ResultUtil.data(this.adminUserService.refreshToken(refreshToken)); - } - - - @GetMapping(value = "/info") - @ApiOperation(value = "获取当前登录用户接口") - public ResultMessage getUserInfo() { - AuthUser tokenUser = UserContext.getCurrentUser(); - if (tokenUser != null) { - AdminUserVO adminUser = new AdminUserVO(adminUserService.findByUsername(tokenUser.getUsername())); - if (StringUtils.isNotEmpty(adminUser.getDepartmentId())) { - adminUser.setDepartmentTitle(departmentService.getById(adminUser.getDepartmentId()).getTitle()); - } - adminUser.setPassword(null); - return ResultUtil.data(adminUser); - } - throw new ServiceException(ResultCode.USER_NOT_LOGIN); - } - - @PutMapping(value = "/edit") - @ApiOperation(value = "修改用户自己资料", notes = "用户名密码不会修改") - public ResultMessage editOwner(AdminUser adminUser) { - - AuthUser tokenUser = UserContext.getCurrentUser(); - if (tokenUser != null) { - //查询当前管理员 - AdminUser oldAdminUser = adminUserService.findByUsername(tokenUser.getUsername()); - oldAdminUser.setAvatar(adminUser.getAvatar()); - oldAdminUser.setNickName(adminUser.getNickName()); - if (!adminUserService.updateById(oldAdminUser)) { - throw new ServiceException(ResultCode.USER_EDIT_ERROR); - } - return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS); - } - throw new ServiceException(ResultCode.USER_NOT_LOGIN); - } - - @PutMapping(value = "/admin/edit") - @ApiOperation(value = "超级管理员修改其他管理员资料") - public ResultMessage edit(@Valid AdminUser adminUser, - @RequestParam(required = false) List roles) { - if (!adminUserService.updateAdminUser(adminUser, roles)) { - throw new ServiceException(ResultCode.USER_EDIT_ERROR); - } - return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS); - } - - /** - * 修改密码 - * - * @param password - * @param newPassword - * @return - */ - @PutMapping(value = "/editPassword") - @ApiOperation(value = "修改密码") - public ResultMessage editPassword(String password, String newPassword) { - adminUserService.editPassword(password, newPassword); - return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS); - } - - @PostMapping(value = "/resetPassword/{ids}") - @ApiOperation(value = "重置密码") - public ResultMessage resetPassword(@PathVariable List ids) { - adminUserService.resetPassword(ids); - return ResultUtil.success(ResultCode.USER_EDIT_SUCCESS); - } - - @GetMapping - @ApiOperation(value = "多条件分页获取用户列表") - public ResultMessage> getByCondition(AdminUserDTO user, - SearchVO searchVo, - PageVO pageVo) { - IPage page = adminUserService.adminUserPage(PageUtil.initPage(pageVo), PageUtil.initWrapper(user, searchVo)); - - return ResultUtil.data(page); - } - - - @PostMapping - @ApiOperation(value = "添加用户") - public ResultMessage register(@Valid AdminUserDTO adminUser, - @RequestParam(required = false) List roles) { - int rolesMaxSize = 10; - try { - if (roles != null && roles.size() >= rolesMaxSize) { - throw new ServiceException(ResultCode.PERMISSION_BEYOND_TEN); - } - adminUserService.saveAdminUser(adminUser, roles); - } catch (Exception e) { - log.error("添加用户错误", e); - } - return ResultUtil.success(); - } - - @PutMapping(value = "/enable/{userId}") - @ApiOperation(value = "禁/启 用 用户") - public ResultMessage disable(@ApiParam("用户唯一id标识") @PathVariable String userId, Boolean status) { - AdminUser user = adminUserService.getById(userId); - if (user == null) { - throw new ServiceException(ResultCode.USER_NOT_EXIST); - } - user.setStatus(status); - adminUserService.updateById(user); - return ResultUtil.success(); - } - - @DeleteMapping(value = "/{ids}") - @ApiOperation(value = "批量通过ids删除") - public ResultMessage delAllByIds(@PathVariable List ids) { - adminUserService.deleteCompletely(ids); - return ResultUtil.success(); - } - -} diff --git a/im-api/src/main/java/cn/lili/controller/im/ImUserController.java b/im-api/src/main/java/cn/lili/controller/im/ImUserController.java index b3b56937..d39e0e59 100644 --- a/im-api/src/main/java/cn/lili/controller/im/ImUserController.java +++ b/im-api/src/main/java/cn/lili/controller/im/ImUserController.java @@ -5,7 +5,6 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.member.entity.dos.FootPrint; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dto.FootPrintQueryParams; import cn.lili.modules.member.service.FootprintService; diff --git a/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java b/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java index 6e7f8de8..97db2ad9 100644 --- a/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java +++ b/im-api/src/main/java/cn/lili/controller/im/WebSocketServer.java @@ -1,6 +1,6 @@ package cn.lili.controller.im; -import cn.lili.cache.Cache; +import cn.hutool.json.JSONUtil; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; @@ -12,11 +12,10 @@ import cn.lili.modules.im.entity.vo.MessageOperation; import cn.lili.modules.im.entity.vo.MessageVO; import cn.lili.modules.im.service.ImMessageService; import cn.lili.modules.im.service.ImTalkService; -import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.store.service.StoreService; import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; @@ -35,53 +34,46 @@ import java.util.concurrent.ConcurrentHashMap; @ServerEndpoint(value = "/lili/webSocket/{accessToken}", configurator = CustomSpringConfigurator.class) @Scope("prototype") @Slf4j +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class WebSocketServer { /** * 消息服务 */ - @Autowired - private ImMessageService imMessageService; + private final ImMessageService imMessageService; - /** - * im用户服务 - */ - @Autowired - private MemberService memberService; + private final ImTalkService imTalkService; - @Autowired - private StoreService storeService; - - @Autowired - private ImTalkService imTalkService; - - - @Autowired - private Cache cache; /** * 在线人数 * PS 注意,只能单节点,如果多节点部署需要自行寻找方案 */ private static ConcurrentHashMap sessionPools = new ConcurrentHashMap<>(); + /** * 建立连接 * * @param session */ @OnOpen - public void onOpen(@PathParam("accessToken") String accessToken, Session session) throws IOException { - AuthUser authUser = UserContext.getAuthUser(accessToken); - Object message = null; - if (UserEnums.STORE.equals(authUser.getRole())) { - message = storeService.getById(authUser.getStoreId()); - sessionPools.put(authUser.getStoreId(), session); + public void onOpen(@PathParam("accessToken") String accessToken, Session session) { - } else if (UserEnums.MEMBER.equals(authUser.getRole())) { - message = memberService.getById(authUser.getId()); - sessionPools.put(authUser.getId(), session); + + AuthUser authUser = UserContext.getAuthUser(accessToken); + + String sessionId = UserEnums.STORE.equals(authUser.getRole()) ? authUser.getStoreId() : authUser.getId(); + //如果已有会话,则进行下线提醒。 + if (sessionPools.containsKey(sessionId)) { + log.info("用户重复登陆,旧用户下线"); + Session oldSession = sessionPools.get(sessionId); + sendMessage(oldSession, MessageVO.builder().messageResultType(MessageResultType.OFFLINE).result("用户异地登陆").build()); + try { + oldSession.close(); + } catch (Exception e) { + e.printStackTrace(); + } } - MessageVO messageVO = new MessageVO(MessageResultType.FRIENDS, message); - sendMessage(authUser.getId(), messageVO); + sessionPools.put(sessionId, session); } /** @@ -89,8 +81,9 @@ public class WebSocketServer { */ @OnClose public void onClose(@PathParam("accessToken") String accessToken) { - log.info("断开连接:{}", accessToken); - sessionPools.remove(UserContext.getAuthUser(accessToken).getId()); + AuthUser authUser = UserContext.getAuthUser(accessToken); + log.info("用户断开断开连接:{}", JSONUtil.toJsonStr(authUser)); + sessionPools.remove(authUser); } /** @@ -101,7 +94,7 @@ public class WebSocketServer { */ @OnMessage public void onMessage(@PathParam("accessToken") String accessToken, String msg) { - log.error(msg); + log.info("发送消息:{}", msg); MessageOperation messageOperation = JSON.parseObject(msg, MessageOperation.class); operation(accessToken, messageOperation); } @@ -123,9 +116,9 @@ public class WebSocketServer { ImMessage imMessage = new ImMessage(messageOperation); imMessageService.save(imMessage); //修改最后消息信息 - imTalkService.update(new LambdaUpdateWrapper().eq(ImTalk::getId,messageOperation.getTalkId()).set(ImTalk::getLastTalkMessage,messageOperation.getContext()) - .set(ImTalk::getLastTalkTime,imMessage.getCreateTime()) - .set(ImTalk::getLastMessageType,imMessage.getMessageType())); + imTalkService.update(new LambdaUpdateWrapper().eq(ImTalk::getId, messageOperation.getTalkId()).set(ImTalk::getLastTalkMessage, messageOperation.getContext()) + .set(ImTalk::getLastTalkTime, imMessage.getCreateTime()) + .set(ImTalk::getLastMessageType, imMessage.getMessageType())); //发送消息 sendMessage(messageOperation.getTo(), new MessageVO(MessageResultType.MESSAGE, imMessage)); break; @@ -148,15 +141,25 @@ public class WebSocketServer { /** * 发送消息 * - * @param key 密钥 + * @param sessionId sessionId + * @param message 消息对象 + */ + private void sendMessage(String sessionId, MessageVO message) { + Session session = sessionPools.get(sessionId); + sendMessage(session, message); + } + + /** + * 发送消息 + * + * @param session 会话 * @param message 消息对象 */ - private void sendMessage(String key, MessageVO message) { - Session session = sessionPools.get(key); + private void sendMessage(Session session, MessageVO message) { if (session != null) { try { session.getBasicRemote().sendText(JSON.toJSONString(message, true)); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } } @@ -170,16 +173,8 @@ public class WebSocketServer { */ @OnError public void onError(Session session, Throwable throwable) { - throwable.printStackTrace(); + log.error("socket异常: {}", session.getId(), throwable); } - /** - * 获取店铺id - * - * @return - */ - private String storeKey(String storeId) { - return "STORE_" + storeId; - } } diff --git a/im-api/src/main/java/cn/lili/controller/orders/ImOrderComtroller.java b/im-api/src/main/java/cn/lili/controller/orders/ImOrderComtroller.java deleted file mode 100644 index 4b057f6c..00000000 --- a/im-api/src/main/java/cn/lili/controller/orders/ImOrderComtroller.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.lili.controller.orders; - -import cn.lili.common.enums.ResultUtil; -import cn.lili.common.vo.ResultMessage; -import cn.lili.modules.im.entity.dto.ImQueryParams; -import cn.lili.modules.member.entity.dto.FootPrintQueryParams; -import cn.lili.modules.order.order.entity.dos.Order; -import cn.lili.modules.order.order.entity.dto.OrderSearchParams; -import cn.lili.modules.order.order.entity.vo.OrderSimpleVO; -import cn.lili.modules.order.order.service.OrderService; -import cn.lili.modules.search.entity.dos.EsGoodsIndex; -import cn.lili.mybatis.util.PageUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * IM端,订单接口 - * - * @author chc - * @since 2022/6/2114:46 - */ -@Slf4j -@Api(tags = "IM端,订单接口") -@RestController -@RequestMapping("/im/orders/orders") -public class ImOrderComtroller { - - @Autowired - private OrderService orderService; - - @GetMapping("") - @ApiOperation(value = "获取会员订单列表") - public ResultMessage> getMemberHistory(OrderSearchParams params) { - return ResultUtil.data(orderService.queryByParams(params)); - } -} diff --git a/im-api/src/main/java/cn/lili/controller/im/QAStoreController.java b/im-api/src/main/java/cn/lili/controller/store/im/QAStoreController.java similarity index 98% rename from im-api/src/main/java/cn/lili/controller/im/QAStoreController.java rename to im-api/src/main/java/cn/lili/controller/store/im/QAStoreController.java index b7be12dc..d2dc9bd2 100644 --- a/im-api/src/main/java/cn/lili/controller/im/QAStoreController.java +++ b/im-api/src/main/java/cn/lili/controller/store/im/QAStoreController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.im; +package cn.lili.controller.store.im; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.PageVO; diff --git a/im-api/src/main/java/cn/lili/controller/seat/SeatLogin.java b/im-api/src/main/java/cn/lili/controller/store/seat/SeatLogin.java similarity index 97% rename from im-api/src/main/java/cn/lili/controller/seat/SeatLogin.java rename to im-api/src/main/java/cn/lili/controller/store/seat/SeatLogin.java index d6d59877..1c7dcab6 100644 --- a/im-api/src/main/java/cn/lili/controller/seat/SeatLogin.java +++ b/im-api/src/main/java/cn/lili/controller/store/seat/SeatLogin.java @@ -1,4 +1,4 @@ -package cn.lili.controller.seat; +package cn.lili.controller.store.seat; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; diff --git a/im-api/src/main/java/cn/lili/controller/seat/SeatSettingStoreController.java b/im-api/src/main/java/cn/lili/controller/store/seat/SeatSettingStoreController.java similarity index 97% rename from im-api/src/main/java/cn/lili/controller/seat/SeatSettingStoreController.java rename to im-api/src/main/java/cn/lili/controller/store/seat/SeatSettingStoreController.java index b5d6d69a..68d4ec51 100644 --- a/im-api/src/main/java/cn/lili/controller/seat/SeatSettingStoreController.java +++ b/im-api/src/main/java/cn/lili/controller/store/seat/SeatSettingStoreController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.seat; +package cn.lili.controller.store.seat; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; diff --git a/im-api/src/main/java/cn/lili/controller/seat/SeatStoreController.java b/im-api/src/main/java/cn/lili/controller/store/seat/SeatStoreController.java similarity index 96% rename from im-api/src/main/java/cn/lili/controller/seat/SeatStoreController.java rename to im-api/src/main/java/cn/lili/controller/store/seat/SeatStoreController.java index e6b4552d..07c2ed8e 100644 --- a/im-api/src/main/java/cn/lili/controller/seat/SeatStoreController.java +++ b/im-api/src/main/java/cn/lili/controller/store/seat/SeatStoreController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.seat; +package cn.lili.controller.store.seat; import cn.lili.common.enums.ResultUtil; import cn.lili.common.security.context.UserContext; diff --git a/im-api/src/main/java/cn/lili/controller/seat/SeatStoreManagerController.java b/im-api/src/main/java/cn/lili/controller/store/seat/SeatStoreManagerController.java similarity index 96% rename from im-api/src/main/java/cn/lili/controller/seat/SeatStoreManagerController.java rename to im-api/src/main/java/cn/lili/controller/store/seat/SeatStoreManagerController.java index 40f46b08..ee33241e 100644 --- a/im-api/src/main/java/cn/lili/controller/seat/SeatStoreManagerController.java +++ b/im-api/src/main/java/cn/lili/controller/store/seat/SeatStoreManagerController.java @@ -1,4 +1,4 @@ -package cn.lili.controller.seat; +package cn.lili.controller.store.seat; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; 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 8a6c749a..9862fa33 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 @@ -1,7 +1,9 @@ package cn.lili.controller.goods; import cn.lili.common.aop.annotation.DemoSite; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.security.OperationalJudgment; import cn.lili.common.security.context.UserContext; import cn.lili.common.vo.ResultMessage; @@ -16,6 +18,8 @@ import cn.lili.modules.goods.entity.vos.GoodsVO; import cn.lili.modules.goods.entity.vos.StockWarningVO; import cn.lili.modules.goods.service.GoodsService; import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.statistics.aop.PageViewPoint; +import cn.lili.modules.statistics.aop.enums.PageViewEnum; import cn.lili.modules.store.entity.dos.StoreDetail; import cn.lili.modules.store.service.StoreDetailService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -24,11 +28,14 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; 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.web.bind.annotation.*; import javax.validation.Valid; +import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -39,6 +46,7 @@ import java.util.stream.Collectors; * @since 2020-02-23 15:18:56 */ @RestController +@Slf4j @Api(tags = "店铺端,商品接口") @RequestMapping("/store/goods/goods") public class GoodsStoreController { @@ -174,4 +182,27 @@ public class GoodsStoreController { return ResultUtil.success(); } + @ApiOperation(value = "通过id获取商品信息") + @ApiImplicitParams({ + @ApiImplicitParam(name = "goodsId", value = "商品ID", required = true, paramType = "path"), + @ApiImplicitParam(name = "skuId", value = "skuId", required = true, paramType = "path") + }) + @GetMapping(value = "/sku/{goodsId}/{skuId}") + @PageViewPoint(type = PageViewEnum.SKU, id = "#id") + public ResultMessage> getSku(@NotNull(message = "商品ID不能为空") @PathVariable("goodsId") String goodsId, + @NotNull(message = "SKU ID不能为空") @PathVariable("skuId") String skuId) { + try { + // 读取选中的列表 + Map map = goodsSkuService.getGoodsSkuDetail(goodsId, skuId); + return ResultUtil.data(map); + } catch (ServiceException se) { + log.info(se.getMsg(), se); + throw se; + } catch (Exception e) { + log.error(ResultCode.GOODS_ERROR.message(), e); + return ResultUtil.error(ResultCode.GOODS_ERROR); + } + + } + } diff --git a/seller-api/src/main/java/cn/lili/controller/member/FootprintStoreController.java b/seller-api/src/main/java/cn/lili/controller/member/FootprintStoreController.java new file mode 100644 index 00000000..e879a65b --- /dev/null +++ b/seller-api/src/main/java/cn/lili/controller/member/FootprintStoreController.java @@ -0,0 +1,39 @@ +package cn.lili.controller.member; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.security.context.UserContext; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.member.entity.dto.FootPrintQueryParams; +import cn.lili.modules.member.service.FootprintService; +import cn.lili.modules.search.entity.dos.EsGoodsIndex; +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 chc + * @since 2022/6/2114:46 + */ +@RestController +@Api(tags = "商家端,浏览历史接口") +@RequestMapping("/store/member/footprint") +public class FootprintStoreController { + + /** + * 会员足迹 + */ + @Autowired + private FootprintService footprintService; + + @ApiOperation(value = "分页获取") + @GetMapping + public ResultMessage> getByPage(FootPrintQueryParams params) { + return ResultUtil.data(footprintService.footPrintPage(params)); + } +} diff --git a/seller-api/src/main/java/cn/lili/controller/member/StoreUserController.java b/seller-api/src/main/java/cn/lili/controller/member/StoreUserController.java index 3c0c51b5..3cae66aa 100644 --- a/seller-api/src/main/java/cn/lili/controller/member/StoreUserController.java +++ b/seller-api/src/main/java/cn/lili/controller/member/StoreUserController.java @@ -8,6 +8,8 @@ import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.store.entity.dos.Store; +import cn.lili.modules.store.service.StoreService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +31,9 @@ public class StoreUserController { @Autowired private MemberService memberService; + @Autowired + private StoreService storeService; + @GetMapping(value = "/info") @ApiOperation(value = "获取当前登录用户接口") @@ -42,5 +47,16 @@ public class StoreUserController { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } + @GetMapping(value = "") + @ApiOperation(value = "获取当前登录店铺接口") + public ResultMessage getStoreInfo() { + AuthUser tokenUser = UserContext.getCurrentUser(); + if (tokenUser != null) { + Store store = storeService.getById(tokenUser.getStoreId()); + return ResultUtil.data(store); + } + throw new ServiceException(ResultCode.USER_NOT_LOGIN); + } + } diff --git a/xxl-job/XXLJOB-README.md b/xxl-job/XXLJOB-README.md index c16125db..755554ca 100644 --- a/xxl-job/XXLJOB-README.md +++ b/xxl-job/XXLJOB-README.md @@ -1,40 +1,4 @@ -<<<<<<< HEAD -======= -

- -

XXL-JOB

-

- XXL-JOB, a distributed task scheduling framework. -
- -- Home Page -- -
-
- - - - - - - - - - - - - - - - - - - - - -

-

- ->>>>>>> ae0c4aea12996d3d72eca7c6ccdc97922373e4d7 ## Introduction XXL-JOB is a distributed task scheduling framework. It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand.