server/service/src/main/java/com/doumee/dao/business/model/Shop.java
@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -120,7 +122,7 @@ @ApiModelProperty(value = "æå±å ³èSç ", example = "1") @ExcelColumn(name="æå±å ³èSç ") private String scode; @ApiModelProperty(value = "注åå°" ) @ApiModelProperty(value = "注åå°(IAM)" ) @ExcelColumn(name="注åå°") private String regAddr; @ApiModelProperty(value = "æ³äººèº«ä»½è¯å·" ) @@ -188,6 +190,19 @@ @ApiModelProperty(value = "é¨é¨çº§å«è·¯å¾", example = "1") @ExcelColumn(name="é¨é¨çº§å«è·¯å¾") private String namePath; @ApiModelProperty(value = "ç»åº¦", example = "1") @ExcelColumn(name="ç»åº¦") private BigDecimal longitude; @ApiModelProperty(value = "纬度", example = "1") @ExcelColumn(name="纬度") private BigDecimal latitude; @ApiModelProperty(value = "å°å") @ExcelColumn(name="å°å") private String address; @ApiModelProperty(value = "ç¶çº§é¨é¨çº§å«è·¯å¾", example = "1") @TableField(exist = false) private String parentIdPath; @@ -215,4 +230,13 @@ @ApiModelProperty(value = "ä¸çº§é¨é¨éå", example = "1") @TableField(exist = false) private List<Shop> childList; @ApiModelProperty(value = "è·ç¦» ", example = "1") @TableField(exist = false) private BigDecimal distance; @ApiModelProperty(value = "é¨åºå¯¼è´å表 ", example = "1") @TableField(exist = false) private List<Users> usersList; } server/service/src/main/java/com/doumee/dao/business/model/Users.java
@@ -134,8 +134,8 @@ @ExcelColumn(name="æå¡å®¢æ·æ°") private Integer costomerNum; @ApiModelProperty(value = "ä»ä¸å¹´æ(yyyy-MM)") @ExcelColumn(name="ä»ä¸å¹´æ(yyyy-MM)") @ApiModelProperty(value = "ä»ä¸å¹´ä»½") @ExcelColumn(name="ä»ä¸å¹´æ") private String jobDate; @ApiModelProperty(value = "å®£ä¼ è¯") @@ -145,6 +145,10 @@ @ApiModelProperty(value = "个人äºç»´ç å¾çå°å") @ExcelColumn(name="个人äºç»´ç å¾çå°å") private String qrcodeImg; @ApiModelProperty(value = "ä¼ä¸äºç»´ç å¾çå°å") @ExcelColumn(name="ä¼ä¸äºç»´ç å¾çå°å") private String companyQrcodeImg; @ApiModelProperty(value = "é®ç®±") @ExcelColumn(name="é®ç®±") @@ -179,7 +183,15 @@ @ApiModelProperty(value = "宿´å¤´åå½") @TableField(exist = false) private String imgurlFull; @ApiModelProperty(value = "个人äºç»´ç å¾çå°å") @ApiModelProperty(value = "个人äºç»´ç å¾ç宿´å°å") @TableField(exist = false) private String qrcodeImgFull; @ApiModelProperty(value = "é¨åºå°å") @TableField(exist = false) private String shopAddress; @ApiModelProperty(value = "ä¼ä¸äºç»´ç å¾ç宿´å°å") @TableField(exist = false) private String companyQrcodeImgFull; } server/service/src/main/java/com/doumee/dao/web/reqeust/ShopQueryByLLDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package com.doumee.dao.web.reqeust; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/12/7 11:19 */ @Data public class ShopQueryByLLDTO { @ApiModelProperty(value = "ç»åº¦") private String longitude; @ApiModelProperty(value = "纬度") private String latitude; } server/service/src/main/java/com/doumee/service/business/ShopService.java
@@ -5,6 +5,7 @@ import com.doumee.dao.admin.request.UpdateShopSortDTO; import com.doumee.dao.business.model.Shop; import com.doumee.dao.business.vo.ShopTreeVo; import com.doumee.dao.web.reqeust.ShopQueryByLLDTO; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -110,4 +111,18 @@ void dealShopNamePath(); List<Shop> listByParent(String parentId); /** * æ ¹æ®ç»çº¬åº¦ è·åé¨åºå表 * @param pageWrap * @return */ PageData<Shop> queryShopByLL(PageWrap<Shop> pageWrap); /** * é¨åºè¯¦æ * @param id * @return */ Shop shopDetail(Long id,Long memberId); } server/service/src/main/java/com/doumee/service/business/UsersService.java
@@ -105,4 +105,6 @@ void bindingOpenid(String code,Long userId); String importBatch(MultipartFile file); Users usersDetail(Long userId); } server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -259,14 +259,13 @@ @Override public AccountResponse wxLogin(String code){ // try { try { //è·åå¾®ä¿¡æææ°æ® // WxMaJscode2SessionResult session = WxMiniConfig.wxCustomerService.getUserService().getSessionInfo(code); // String openId = session.getOpenid(); // if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) { // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"è·åopenid失败ï¼è¯·è系管çå"); // } String openId = code; WxMaJscode2SessionResult session = WxMiniConfig.wxCustomerService.getUserService().getSessionInfo(code); String openId = session.getOpenid(); if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) { throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"è·åopenid失败ï¼è¯·è系管çå"); } Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("OPENID", openId)); if (member == null) { member = new Member(); @@ -281,13 +280,13 @@ String token = JwtTokenUtil.generateToken(payLoad); AccountResponse accountResponse = new AccountResponse(); accountResponse.setToken(token); // accountResponse.setSessionKey(session.getSessionKey()); accountResponse.setSessionKey(session.getSessionKey()); accountResponse.setMember(member); return accountResponse; // } catch (WxErrorException e) { // e.printStackTrace(); // } // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信ç»å½å¼å¸¸ï¼è¯·è系管çå"); } catch (WxErrorException e) { e.printStackTrace(); } throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信ç»å½å¼å¸¸ï¼è¯·è系管çå"); } @Override server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -1,5 +1,6 @@ package com.doumee.service.business.impl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.annotation.excel.ExcelImporter; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; @@ -12,15 +13,15 @@ import com.doumee.dao.admin.request.FcodeImport; import com.doumee.dao.admin.request.ShopImport; import com.doumee.dao.admin.request.UpdateShopSortDTO; import com.doumee.dao.business.CategoryMapper; import com.doumee.dao.business.CategorySegMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.SegmentsMapper; import com.doumee.dao.business.ShopMapper; import com.doumee.dao.business.UsersMapper; import com.doumee.dao.business.join.ShopJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.business.vo.ShopTree; import com.doumee.dao.business.vo.ShopTreeVo; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.web.reqeust.ShopQueryByLLDTO; import com.doumee.service.business.ShopService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -41,7 +42,6 @@ import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * å¿é¦ç»ç»ä¿¡æ¯è¡¨Serviceå®ç° @@ -55,10 +55,17 @@ private RedisTemplate<String, Object> redisTemplate; @Autowired private ShopJoinMapper shopMapper; @Autowired private SegmentsMapper segmentsMapper; @Autowired private CategorySegMapper categorySegMapper; @Autowired private UsersMapper usersMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private MemberMapper memberMapper; @Override public Long create(Shop shop) { @@ -858,4 +865,79 @@ } } } @Override public PageData<Shop> queryShopByLL(PageWrap<Shop> pageWrap) { if(Objects.isNull(pageWrap.getModel()) || Objects.isNull(pageWrap.getModel().getLatitude()) || Objects.isNull(pageWrap.getModel().getLongitude())){ return null; } IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE," + " CONVERT (ST_Distance_Sphere (point ("+pageWrap.getModel().getLongitude()+", "+pageWrap.getModel().getLatitude()+" ), point ( LONGITUDE, LATITUDE )) /1000,decimal(15,2)) as distance ") .eq("isdeleted",Constants.ZERO) .isNotNull("LATITUDE") .isNotNull("LONGITUDE") .eq("ATTRIBUTE",Constants.ONE) .orderByAsc(" distance "); Utils.MP.blankToNull(pageWrap.getModel()); PageData<Shop> pageData = PageData.from(shopMapper.selectPage(page, queryWrapper)); String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) + StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode()); for (Shop shop:pageData.getRecords()) { //æ¥è¯¢é¨åºä¸å¯¼è´æ°æ® List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId()) .eq(Users::getIsdeleted,Constants.ZERO) .eq(Users::getStatus,Constants.ONE) .eq(Users::getType,Constants.ZERO) ); for (Users users:usersList) { if(StringUtils.isNotBlank(users.getImgurl())){ users.setImgurlFull(prefix + users.getImgurl()); } } shop.setUsersList(usersList); } return pageData; } @Override public Shop shopDetail(Long id,Long memberId) { Member member = memberMapper.selectById(memberId); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"æªæ¥è¯¢å°ç¨æ·ä¿¡æ¯"); } QueryWrapper<Shop> queryWrapper = new QueryWrapper<Shop>(); //å¦æäººåæ²¡æç»çº¬åº¦ä¿¡æ¯ï¼å䏿¥è¯¢è·ç¦» if(Objects.nonNull(member.getLatitude())&&Objects.nonNull(member.getLongitude())){ queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE," + " CONVERT (ST_Distance_Sphere (point ("+member.getLongitude()+", "+member.getLatitude()+" ), point ( LONGITUDE, LATITUDE )) /1000,decimal(15,2)) as distance "); } queryWrapper.eq("id",id); Shop shop = shopMapper.selectOne(queryWrapper); if(Objects.isNull(shop)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) + StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode()); List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId()) .eq(Users::getIsdeleted,Constants.ZERO) .eq(Users::getStatus,Constants.ONE) .eq(Users::getType,Constants.ZERO) ); for (Users users:usersList) { if(StringUtils.isNotBlank(users.getImgurl())){ users.setImgurlFull(prefix + users.getImgurl()); } } shop.setUsersList(usersList); return shop; } } server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -600,5 +600,40 @@ return null; } @Override public Users usersDetail(Long userId){ Users users = usersMapper.selectById(userId); if(Objects.isNull(users)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) + StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode()); if(StringUtils.isNotBlank(users.getImgurl())){ users.setImgurlFull(prefix + users.getImgurl()); } if(StringUtils.isNotBlank(users.getQrcodeImg())){ users.setQrcodeImgFull(prefix + users.getQrcodeImg()); } if(StringUtils.isNotBlank(users.getCompanyQrcodeImg())){ users.setCompanyQrcodeImgFull(prefix + users.getCompanyQrcodeImg()); } if(Objects.nonNull(users.getDepartmentId())){ Shop shop = shopMapper.selectById(users.getDepartmentId()); if(Objects.nonNull(shop)){ users.setShopName(shop.getName()); if(StringUtils.isNotBlank(shop.getAddress())){ users.setShopAddress(shop.getAddress()); }else{ users.setShopAddress(shop.getProvinceName()+shop.getCityName()+shop.getAreaName()+shop.getTown()+shop.getRegAddr()); } } } return users; } } server/web/src/main/java/com/doumee/api/web/CustomerApi.java
@@ -4,19 +4,22 @@ import com.doumee.config.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.CustomerLog; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Shop; import com.doumee.dao.business.model.Users; import com.doumee.dao.web.reqeust.*; import com.doumee.dao.web.response.AccountResponse; import com.doumee.dao.web.response.BjParamConfigResponse; import com.doumee.service.business.BjParamService; import com.doumee.service.business.CustomerService; import com.doumee.service.business.MemberService; import com.doumee.service.business.*; 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.apache.shiro.authz.annotation.RequiresPermissions; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -48,6 +51,12 @@ @Autowired private ZbomCRMService zbomCRMService; @Autowired private ShopService shopService; @Autowired private UsersService usersService; @ApiOperation(value = "客æ·ç«¯å°ç¨åºç»é", notes = "客æ·ç«¯å°ç¨åº") @GetMapping("/wxLoginCustomer") @@ -146,5 +155,37 @@ return ApiResponse.success("æä½æå"); } @LoginRequired @ApiOperation("é¨åºå表") @PostMapping("/shopPage") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), }) public ApiResponse<PageData<Shop>> shopPage (@RequestBody PageWrap<Shop> pageWrap) { return ApiResponse.success(shopService.queryShopByLL(pageWrap)); } @LoginRequired @ApiOperation("é¨åºè¯¦æ ") @GetMapping("/shopDetail") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @ApiImplicitParam(paramType = "query", dataType = "Long", name = "shopId", value = "é¨åºä¸»é®", required = true) }) public ApiResponse<Shop> shopDetail (@RequestParam Long shopId) { Long memberId = this.getMemberId(); return ApiResponse.success(shopService.shopDetail(shopId,memberId)); } @LoginRequired @ApiOperation("导è´è¯¦æ ") @GetMapping("/usersDetail") @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "ç¨æ·tokenå¼", required = true), @ApiImplicitParam(paramType = "query", dataType = "Long", name = "userId", value = "导è´ä¸»é®", required = true) }) public ApiResponse<Users> usersDetail (@RequestParam Long userId) { return ApiResponse.success(usersService.usersDetail(userId)); } }