From c6675b55023dff3c4f441ab0bb9493198949126e Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 16 一月 2026 18:22:41 +0800
Subject: [PATCH] 小程序 接口开发
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java | 264 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 255 insertions(+), 9 deletions(-)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
index bf94f58..f84dfc7 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.Jwt.JwtPayLoad;
+import com.doumee.config.Jwt.JwtTokenUtil;
import com.doumee.config.listener.event.VisitEvent;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.constants.ResponseStatus;
@@ -10,10 +12,9 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.LabelsMapper;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.ShopJoinMapper;
-import com.doumee.dao.business.ShopMapper;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.GoodsorderJoinMapper;
+import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.join.ProductLabelJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.Labels;
@@ -22,11 +23,11 @@
import com.doumee.dao.business.model.ShopScan;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
-import com.doumee.dao.web.dto.CouponDTO;
-import com.doumee.dao.web.dto.MemberDTO;
-import com.doumee.dao.web.dto.MultiFileDTO;
-import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
+import com.doumee.dao.web.dto.*;
import com.doumee.dao.web.dto.shop.*;
+import com.doumee.dao.web.request.MyCustomerRequest;
+import com.doumee.dao.web.request.SaleReportRequest;
+import com.doumee.dao.web.response.*;
import com.doumee.service.business.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -37,6 +38,7 @@
import org.apache.shiro.SecurityUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
+import org.apache.xpath.operations.Bool;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -85,10 +87,13 @@
private SystemDictDataBiz systemDictDataBiz;
@Autowired
- private MemberMapper memberMapper;
+ private MemberJoinMapper memberJoinMapper;
@Autowired
private SystemUserMapper systemUserMapper;
+
+ @Autowired
+ private GoodsorderJoinMapper goodsorderJoinMapper;
@Autowired
private ProductLabelJoinMapper productLabelJoinMapper;
@@ -109,6 +114,9 @@
@Autowired
private MultifileService multifileService;
+
+ @Autowired
+ private IntegralMapper integralMapper;
@Override
@@ -585,4 +593,242 @@
updateUserDto.setPassword(Utils.Secure.encryptPassword( shop.getCode()+"@123456", shop.getSalt()));
shopMapper.updateById(updateUserDto);
}
+
+
+ /**
+ * 鐢ㄦ埛涓嬪崟鏌ヨ鍙�夋嫨鐨勮嚜鎻愮粡閿�鍟�
+ * @param dto
+ * @return
+ */
+ @Override
+ public List<Shop> getShopList(ShopListDTO dto){
+ Boolean isArea = false;
+ if(Objects.nonNull(dto)&&StringUtils.isNotBlank(dto.getLat())
+ && StringUtils.isNotBlank(dto.getLgt())){
+ isArea = true;
+ }
+
+ List<Shop> shopList = shopJoinMapper.selectList(new MPJLambdaWrapper<Shop>()
+ .selectAll(Shop.class)
+ .select(" CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+dto.getLgt()+", "+dto.getLat()+" )) /1000,DECIMAL(15,2))",Shop::getDistance)
+ .leftJoin(Areas.class,Areas::getId,Shop::getAreaId)
+ .eq(Objects.nonNull(dto.getCityId()),Areas::getParentId,dto.getCityId())
+ .like(Objects.nonNull(dto.getShopName()),Shop::getName,dto.getShopName())
+ .orderByDesc(!isArea,Shop::getId)
+ .orderByAsc(isArea,Shop::getDistance)
+ );
+ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
+ for(Shop model:shopList){
+ model.setImgFullUrl(path+model.getImgurl());
+
+ }
+ return shopList;
+ }
+
+
+
+ /**
+ * 鏍规嵁openid鑾峰彇鏄惁缁戝畾浜嗗晢鎴�
+ * @param dto
+ * @return
+ */
+ @Override
+ public AccountResponse shopOpenidLogin(ShopLoginDTO dto){
+ Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, dto.getOpenid())
+ .eq(Shop::getIsdeleted,Constants.ZERO)
+ .last("limit 1")
+ );
+ AccountResponse accountResponse = new AccountResponse();
+ accountResponse.setOpenid(dto.getOpenid());
+ if(Objects.nonNull(shop)){
+ if(Objects.isNull(dto.getMemberId())
+ && ( Objects.isNull(shop.getMemberId())
+ || !Constants.equalsInteger(shop.getMemberId(),dto.getMemberId()))){
+ shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+ .set(Shop::getMemberId,dto.getMemberId())
+ .eq(Shop::getId,shop.getId())
+ );
+ }
+ JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+ String token = JwtTokenUtil.generateToken(payLoad);
+ accountResponse.setToken(token);
+ }
+ return accountResponse;
+ }
+
+
+ /**
+ * 鍟嗘埛璐﹀彿瀵嗙爜鐧诲綍
+ * @param dto
+ * @return
+ */
+ @Override
+ public AccountResponse shopPasswordLogin(ShopLoginDTO dto){
+ if(StringUtils.isBlank(dto.getUserName())
+ || StringUtils.isBlank(dto.getPassword())
+ || StringUtils.isBlank(dto.getOpenid())
+ ){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛鍚嶆垨瀵嗙爜涓嶈兘涓虹┖");
+ }
+ Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, dto.getUserName())
+ .eq(Shop::getIsdeleted,Constants.ZERO)
+ .last("limit 1")
+ );
+ if(shop==null){
+ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+ }
+ //鍔犲瘑瀵嗙爜
+ String pwd = Utils.Secure.encryptPassword( dto.getPassword(), shop.getSalt());
+ if(!pwd.equals(shop.getPassword())){
+ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+ }
+ //鍒涘缓token
+ JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId());
+ String token = JwtTokenUtil.generateToken(payLoad);
+ AccountResponse accountResponse = new AccountResponse();
+ accountResponse.setToken(token);
+ shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+ .set(Shop::getOpenId,dto.getOpenid())
+ .set(Shop::getMemberId,dto.getMemberId())
+ .eq(Shop::getId,shop.getId())
+ );
+ shopMapper.update(null,new UpdateWrapper<Shop>().lambda()
+ .set(Shop::getOpenId,null)
+ .eq(Shop::getOpenId,dto.getOpenid())
+ .ne(Shop::getId,shop.getId())
+ );
+ return accountResponse;
+ }
+
+
+
+
+ @Override
+ public ShopInfoResponse getShopInfo(Integer shopId){
+ ShopInfoResponse response = new ShopInfoResponse();
+ Shop shop = shopMapper.selectById(shopId);
+ if(Objects.isNull(shop)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
+ BeanUtils.copyProperties(shop,response);
+ response.setImgurl(path + shop.getImgurl());
+ response.setIdcardImg(path + shop.getIdcardImg());
+ response.setIdcardImgBack(path + shop.getIdcardImgBack());
+ response.setBusinessImg(path + shop.getBusinessImg());
+
+ return response;
+ }
+
+
+ @Override
+ public List<MyCustomerResponse> myCustomer(MyCustomerRequest request, Integer shopId){
+ List<Member> memberList = memberJoinMapper.selectJoinList(Member.class,
+ new MPJLambdaWrapper<Member>()
+ .selectAll(Member.class)
+ .eq(Member::getIsdeleted,Constants.ZERO)
+ .eq(Member::getBindShopId,shopId)
+ .and(StringUtils.isNotBlank(request.getMemberIfo()),i->i.like(Member::getPhone,request.getMemberIfo()).or().like(Member::getNickname,request.getMemberIfo()))
+ );
+ List<MyCustomerResponse> responseList = new ArrayList<>();
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+ String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
+ memberList.forEach(member -> {
+ MyCustomerResponse response = new MyCustomerResponse();
+ response.setNickName(member.getNickname());
+ response.setPhone(member.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));
+ response.setBindShopDate(member.getBindShopDate());
+ response.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?path + member.getImgurl():"");
+ responseList.add(response);
+ });
+ }
+ return responseList;
+ }
+
+
+
+ @Override
+ public SaleReportResponse saleReport(SaleReportRequest request,String shopId){
+ SaleReportResponse saleReportResponse = new SaleReportResponse();
+ saleReportResponse.setSaleTotal(BigDecimal.ZERO);
+ saleReportResponse.setOrderNum(Constants.ZERO);
+ saleReportResponse.setProfitTotal(BigDecimal.ZERO);
+
+ List<Goodsorder> goodsorderList = goodsorderJoinMapper.selectJoinList(Goodsorder.class,
+ new MPJLambdaWrapper<Goodsorder>()
+ .selectAll(Goodsorder.class)
+ .selectAs(Member::getPhone,Goodsorder::getPhone)
+ .selectAs(Member::getNickname,Goodsorder::getNickName)
+ .select(" select ifnull(sum(g.SHOP_SETTLEMENT),0) from goodsorder_detail g where t.id = g.ORDER_ID ",Goodsorder::getShopSettlement)
+ .leftJoin(Member.class,Member::getId,Goodsorder::getMemberId)
+ .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+ .eq(Goodsorder::getDistributionShopId,shopId)
+ //浠婃棩
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(t.CREATE_DATE) = DATE(NOW()) ")
+ //褰撴湀
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
+ //涓婃湀
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ")
+ //鍥哄畾鏈堜唤
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(t.CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ")
+ //鑷畾涔夋棩鏈�
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), " t.CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), " t.CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
+ .ne(Goodsorder::getStatus,Constants.OrderStatus.CLOSE.getKey())
+ .orderByDesc(Goodsorder::getId)
+ );
+ if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(goodsorderList)) {
+ saleReportResponse.setSaleTotal(goodsorderList.stream().map(i->i.getPrice().subtract(i.getMailPrice())).reduce(BigDecimal.ZERO, BigDecimal::add));
+ saleReportResponse.setOrderNum(goodsorderList.size());
+ if(Constants.equalsInteger(request.getQueryType(),Constants.ONE)){
+ List<SaleReportOrderResponse> list = new ArrayList<>();
+ goodsorderList.stream().forEach(goodsorder -> {
+ SaleReportOrderResponse response = new SaleReportOrderResponse();
+ response.setId(goodsorder.getId());
+ response.setCode(goodsorder.getCode());
+ response.setPrice(goodsorder.getPrice());
+ response.setMailPrice(goodsorder.getMailPrice());
+ response.setCreateDate(goodsorder.getCreateDate());
+ response.setNickName(goodsorder.getNickName());
+ response.setPhone(goodsorder.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
+ response.setShopSettlement(goodsorder.getShopSettlement());
+ list.add(response);
+ });
+
+ saleReportResponse.setSaleReportOrderResponseList(list);
+ }
+ }
+ List<Integral> integralList = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
+ .eq(Integral::getIsdeleted,Constants.ZERO)
+ .eq(Integral::getMemberId,shopId)
+ .eq(Integral::getUserType,Constants.TWO)
+ .eq(Integral::getType,Constants.ZERO)
+ .eq(Integral::getObjType,Constants.IntegralObjType.ORDER_DONE_AMOUNT.getKey())
+ //浠婃棩
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.ZERO), " DATE(CREATE_DATE) = DATE(NOW()) ")
+ //褰撴湀
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.ONE), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')")
+ //涓婃湀
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.TWO), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') ")
+ //鍥哄畾鏈堜唤
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.THREE)&&StringUtils.isNotBlank(request.getStartDate()), " DATE_FORMAT(CREATE_DATE, '%Y-%m') = DATE_FORMAT(DATE_SUB('"+request.getStartDate()+"', INTERVAL 1 MONTH), '%Y-%m') ")
+ //鑷畾涔夋棩鏈�
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getStartDate()), " CREATE_DATE >= '"+request.getStartDate()+" 00:00:00'")
+ .apply(Constants.equalsInteger(request.getDateType(),Constants.FOUR)&&StringUtils.isNotBlank(request.getEndDate()), " CREATE_DATE <= '"+request.getEndDate()+" 23:59:59'")
+ );
+ if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(integralList)) {
+ saleReportResponse.setProfitTotal(integralList.stream().map(i->i.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add));
+ }
+ return saleReportResponse;
+ }
+
+
+
+
+
+
+
}
--
Gitblit v1.9.3