diff --git a/chenhai-admin/src/main/java/com/chenhai/web/controller/auth/MultiAuthController.java b/chenhai-admin/src/main/java/com/chenhai/web/controller/auth/MultiAuthController.java index 6112818..ae2d780 100644 --- a/chenhai-admin/src/main/java/com/chenhai/web/controller/auth/MultiAuthController.java +++ b/chenhai-admin/src/main/java/com/chenhai/web/controller/auth/MultiAuthController.java @@ -26,6 +26,7 @@ public class MultiAuthController { /** * 微信小程序登录 - 保持原逻辑 */ + @PostMapping("/wechat/login") public AjaxResult wechatLogin(@Valid @RequestBody WechatLoginBody loginBody) { Map result = loginService.wechatLogin( diff --git a/chenhai-admin/src/main/java/com/chenhai/web/controller/muhu/CarouselAdsController.java b/chenhai-admin/src/main/java/com/chenhai/web/controller/muhu/CarouselAdsController.java index 0d2d30e..e54a422 100644 --- a/chenhai-admin/src/main/java/com/chenhai/web/controller/muhu/CarouselAdsController.java +++ b/chenhai-admin/src/main/java/com/chenhai/web/controller/muhu/CarouselAdsController.java @@ -32,7 +32,7 @@ public class CarouselAdsController extends BaseController * 查询轮播广告列表 */ // @PreAuthorize("@ss.hasPermi('muhu:ads:list')") - @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger') or @ss.hasRole('vet')") @GetMapping("/list") public TableDataInfo list(CarouselAds carouselAds) { @@ -45,7 +45,7 @@ public class CarouselAdsController extends BaseController * 导出轮播广告列表 */ // @PreAuthorize("@ss.hasPermi('muhu:ads:export')") - @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "轮播广告", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, CarouselAds carouselAds) @@ -59,10 +59,13 @@ public class CarouselAdsController extends BaseController * 获取轮播广告详细信息 */ // @PreAuthorize("@ss.hasPermi('muhu:ads:query')") - @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger') or @ss.hasRole('vet')") @GetMapping(value = "/{carouselId}") public AjaxResult getInfo(@PathVariable("carouselId") Long carouselId) { + // 先增加浏览量 + carouselAdsService.incrementViewCount(carouselId); + // 再查询详情 return success(carouselAdsService.selectCarouselAdsByCarouselId(carouselId)); } @@ -70,7 +73,7 @@ public class CarouselAdsController extends BaseController * 新增轮播广告 */ // @PreAuthorize("@ss.hasPermi('muhu:ads:add')") - @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasRole('muhu') or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "轮播广告", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody CarouselAds carouselAds) @@ -82,7 +85,7 @@ public class CarouselAdsController extends BaseController * 修改轮播广告 */ // @PreAuthorize("@ss.hasPermi('muhu:ads:edit')") - @PreAuthorize("@ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "轮播广告", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody CarouselAds carouselAds) @@ -94,7 +97,7 @@ public class CarouselAdsController extends BaseController * 删除轮播广告 */ // @PreAuthorize("@ss.hasPermi('muhu:ads:remove')") - @PreAuthorize("@ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "轮播广告", businessType = BusinessType.DELETE) @DeleteMapping("/{carouselIds}") public AjaxResult remove(@PathVariable Long[] carouselIds) diff --git a/chenhai-admin/src/main/java/com/chenhai/web/controller/vet/VetKnowledgeController.java b/chenhai-admin/src/main/java/com/chenhai/web/controller/vet/VetKnowledgeController.java index 3085cac..dbf30c2 100644 --- a/chenhai-admin/src/main/java/com/chenhai/web/controller/vet/VetKnowledgeController.java +++ b/chenhai-admin/src/main/java/com/chenhai/web/controller/vet/VetKnowledgeController.java @@ -43,7 +43,7 @@ public class VetKnowledgeController extends BaseController * 查询兽医文章列表 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:list') or @ss.hasRole('muhu') or @ss.hasRole('vet')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:list') or @ss.hasRole('muhu') or @ss.hasRole('vet') or @ss.hasRole('manger')") @GetMapping("/list") public TableDataInfo list(VetKnowledge vetKnowledge) { @@ -56,7 +56,7 @@ public class VetKnowledgeController extends BaseController * 导出兽医文章列表 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:export') or @ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:export') or @ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, VetKnowledge vetKnowledge) @@ -69,7 +69,7 @@ public class VetKnowledgeController extends BaseController /** * 获取兽医文章详细信息 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:query') or @ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:query') or @ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { @@ -80,20 +80,20 @@ public class VetKnowledgeController extends BaseController * 新增兽医文章 */ @SensitiveCheck - @PreAuthorize("@ss.hasPermi('vet:knowledge:add') or @ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:add') or @ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody VetKnowledge vetKnowledge) { vetKnowledge.setArticleStatus("0"); // 草稿 - vetKnowledge.setAuditStatus("0"); // 待审核 + vetKnowledge.setAuditStatus("1"); // 待审核 return toAjax(vetKnowledgeService.insertVetKnowledge(vetKnowledge)); } /** * 修改兽医文章 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:edit') or @ss.hasRole('muhu')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:edit') or @ss.hasRole('muhu') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody VetKnowledge vetKnowledge) @@ -104,7 +104,7 @@ public class VetKnowledgeController extends BaseController /** * 删除兽医文章 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:remove')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:remove') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) @@ -141,7 +141,7 @@ public class VetKnowledgeController extends BaseController /** * 发布文章 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:publish') or @ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:publish') or @ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.UPDATE) @PutMapping("/publish/{id}") public AjaxResult publish(@PathVariable Long id) { @@ -151,7 +151,7 @@ public class VetKnowledgeController extends BaseController /** * 上架文章 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:publish') or @ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:publish') or @ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.UPDATE) @PutMapping("/online/{id}") public AjaxResult online(@PathVariable Long id) { @@ -161,7 +161,7 @@ public class VetKnowledgeController extends BaseController /** * 下架文章 */ - @PreAuthorize("@ss.hasPermi('vet:knowledge:publish') or @ss.hasRole('muhu')or @ss.hasRole('manger')") + @PreAuthorize("@ss.hasPermi('vet:knowledge:publish') or @ss.hasRole('muhu')or @ss.hasRole('manger') or @ss.hasRole('vet')") @Log(title = "兽医文章", businessType = BusinessType.UPDATE) @PutMapping("/offline/{id}") public AjaxResult offline(@PathVariable Long id, @RequestParam(required = false) String auditComment) { diff --git a/chenhai-framework/src/main/java/com/chenhai/framework/web/service/SysLoginService.java b/chenhai-framework/src/main/java/com/chenhai/framework/web/service/SysLoginService.java index 56fd9e9..373bf88 100644 --- a/chenhai-framework/src/main/java/com/chenhai/framework/web/service/SysLoginService.java +++ b/chenhai-framework/src/main/java/com/chenhai/framework/web/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.chenhai.framework.web.service; +import com.chenhai.common.core.domain.entity.SysUserAuth; import com.chenhai.common.utils.*; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -278,25 +279,17 @@ public class SysLoginService throw new ServiceException("获取手机号失败"); } - // 4. 查询手机号是否已注册 - SysUser existingUser = userService.selectUserByPhone(phone); + // 4. 转换用户类型代码 + String targetUserTypeCode = "herdsman".equals(userType) ? "02" : "01"; - // 5. 用户不存在,创建新用户 - if (existingUser == null) { - String userTypeCode = "herdsman".equals(userType) ? "02" : "01"; - existingUser = createUserForWechat(phone, userTypeCode, nickName, avatarUrl, clientType); - } else { - // 6. 用户已存在,检查用户类型是否匹配 - String existingUserType = existingUser.getUserType(); - String expectedUserType = "herdsman".equals(userType) ? "02" : "01"; - - if (!existingUserType.equals(expectedUserType)) { - String existingTypeName = "01".equals(existingUserType) ? "兽医" : "牧户"; - String expectedTypeName = "01".equals(expectedUserType) ? "兽医" : "牧户"; - throw new ServiceException("该手机号已注册为" + existingTypeName + ",请使用" + expectedTypeName + "小程序"); - } + // 5. 查询该手机号指定类型的用户 + SysUser existingUser = userService.selectUserByPhoneAndType(phone, targetUserTypeCode); + + if (existingUser != null) { + // 6. 该类型用户已存在,更新信息 + log.info("该手机号已注册为{}用户,更新信息: phone={}, userId={}", + "02".equals(targetUserTypeCode) ? "牧户" : "兽医", phone, existingUser.getUserId()); - // 7. 用户类型匹配,更新用户信息 if (nickName != null) { existingUser.setNickName(nickName); } @@ -304,12 +297,31 @@ public class SysLoginService existingUser.setAvatar(avatarUrl); } userService.updateUser(existingUser); + + } else { + // 7. 该类型用户不存在,创建新用户 + log.info("手机号{}未注册为{}用户,创建新用户", + phone, "02".equals(targetUserTypeCode) ? "牧户" : "兽医"); + + existingUser = createUserForWechat(phone, targetUserTypeCode, nickName, avatarUrl, clientType); } - // 8. 绑定微信openid - userAuthService.bindAuth(existingUser.getUserId(), authType, openid, sessionKey); + // 8. 检查微信是否已绑定 - 使用 findUserByAuth 替代 + SysUser boundUser = userAuthService.findUserByAuth(authType, openid); + if (boundUser != null) { + if (!boundUser.getUserId().equals(existingUser.getUserId())) { + // 微信已绑定其他账号 + throw new ServiceException("该微信已绑定其他账号"); + } + // 已绑定当前用户,无需重复绑定 + log.info("微信已绑定当前用户: userId={}, openid={}", existingUser.getUserId(), openid); + } else { + // 9. 绑定微信openid + userAuthService.bindAuth(existingUser.getUserId(), authType, openid, sessionKey); + log.info("微信绑定成功: userId={}, openid={}", existingUser.getUserId(), openid); + } - // 9. 创建登录用户 + // 10. 创建登录用户 LoginUser loginUser = new LoginUser( existingUser.getUserId(), existingUser.getDeptId(), @@ -320,23 +332,23 @@ public class SysLoginService recordLoginInfo(loginUser.getUserId()); - // 10. 生成token + // 11. 生成token String token = tokenService.createToken(loginUser); - // 11. 清理Redis临时数据 + // 12. 清理Redis临时数据 redisCache.deleteObject("wechat:session:" + tempCode); Map result = new HashMap<>(); result.put("token", token); result.put("message", "绑定成功"); + result.put("userType", "02".equals(targetUserTypeCode) ? "herdsman" : "vet"); return result; } catch (Exception e) { - // 保持原异常处理方式:返回 AjaxResult.error 的字符串 + log.error("微信绑定失败: {}", e.getMessage(), e); throw new ServiceException("绑定失败: " + e.getMessage()); } } - /** * 手机号+密码登录 - 多端登录新增 */ @@ -434,10 +446,13 @@ public class SysLoginService // 2. 验证密码强度 validatePassword(password); - // 3. 检查手机号是否已注册 - checkPhoneRegistered(phone); + // 3. 检查该手机号是否已注册为兽医 + SysUser existingVet = userService.selectUserByPhoneAndType(phone, "01"); // 兽医类型 + if (existingVet != null) { + throw new ServiceException("该手机号已注册为兽医账号"); + } - // 4. 创建牧户用户 + // 4. 创建兽医用户(允许手机号已注册为牧户) SysUser user = createVetUser(phone, password, clientType); // 5. 创建登录用户 @@ -504,6 +519,10 @@ public class SysLoginService if (authUser != null) { throw new ServiceException("该手机号已注册"); } + SysUser existingVet = userService.selectUserByPhoneAndType(phone, "01"); + if (existingVet != null) { + throw new ServiceException("该手机号已注册为兽医账号"); + } } /** diff --git a/chenhai-system/src/main/java/com/chenhai/muhu/domain/CarouselAds.java b/chenhai-system/src/main/java/com/chenhai/muhu/domain/CarouselAds.java index fb5d3af..712fc79 100644 --- a/chenhai-system/src/main/java/com/chenhai/muhu/domain/CarouselAds.java +++ b/chenhai-system/src/main/java/com/chenhai/muhu/domain/CarouselAds.java @@ -149,6 +149,10 @@ public class CarouselAds extends BaseEntity @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd") private Date updatedAt; + /** 浏览量 */ + @Excel(name = "浏览量") + private Long viewCount; + public void setAdsType(String adsType) { this.adsType = adsType; @@ -469,6 +473,16 @@ public class CarouselAds extends BaseEntity return updatedAt; } + public void setViewCount(Long viewCount) + { + this.viewCount = viewCount; + } + + public Long getViewCount() + { + return viewCount; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -504,6 +518,7 @@ public class CarouselAds extends BaseEntity .append("createdAt", getCreatedAt()) .append("updatedAt", getUpdatedAt()) .append("adsType",getAdsType()) + .append("viewCount", getViewCount()) .toString(); } } diff --git a/chenhai-system/src/main/java/com/chenhai/muhu/domain/DisasterWarning.java b/chenhai-system/src/main/java/com/chenhai/muhu/domain/DisasterWarning.java index 024feaa..4d6c51c 100644 --- a/chenhai-system/src/main/java/com/chenhai/muhu/domain/DisasterWarning.java +++ b/chenhai-system/src/main/java/com/chenhai/muhu/domain/DisasterWarning.java @@ -62,6 +62,9 @@ public class DisasterWarning extends BaseEntity @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd") private Date createdTime; + /** 关键词搜索(非数据库字段) */ + private String keyword; + public void setId(Long id) { this.id = id; @@ -172,6 +175,14 @@ public class DisasterWarning extends BaseEntity return createdTime; } + public String getKeyword() { + return keyword; + } + + public void setKeyword(String keyword) { + this.keyword = keyword; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/chenhai-system/src/main/java/com/chenhai/muhu/domain/MuhuConsultationForms.java b/chenhai-system/src/main/java/com/chenhai/muhu/domain/MuhuConsultationForms.java index 6988149..01925b3 100644 --- a/chenhai-system/src/main/java/com/chenhai/muhu/domain/MuhuConsultationForms.java +++ b/chenhai-system/src/main/java/com/chenhai/muhu/domain/MuhuConsultationForms.java @@ -83,8 +83,8 @@ public class MuhuConsultationForms extends BaseEntity @Excel(name = "头像") private String avatar; - /** 今日回复总数(非数据库字段,用于统计) */ - private Long todayReplyCount; + /** 今日回复总数(所有问诊单的今日回复总和) */ + private Long totalTodayReplyCount; public void setFormId(Long formId) { @@ -246,12 +246,12 @@ public class MuhuConsultationForms extends BaseEntity return avatar; } - public Long getTodayReplyCount() { - return todayReplyCount; + public Long getTotalTodayReplyCount() { + return totalTodayReplyCount; } - public void setTodayReplyCount(Long todayReplyCount) { - this.todayReplyCount = todayReplyCount; + public void setTotalTodayReplyCount(Long totalTodayReplyCount) { + this.totalTodayReplyCount = totalTodayReplyCount; } @@ -274,7 +274,6 @@ public class MuhuConsultationForms extends BaseEntity .append("replyCount", getReplyCount()) .append("createdTime", getCreatedTime()) .append("avatar", getAvatar()) - .append("todayReplyCount", getTodayReplyCount()) .toString(); } } diff --git a/chenhai-system/src/main/java/com/chenhai/muhu/mapper/CarouselAdsMapper.java b/chenhai-system/src/main/java/com/chenhai/muhu/mapper/CarouselAdsMapper.java index 66102b3..f5fa1b4 100644 --- a/chenhai-system/src/main/java/com/chenhai/muhu/mapper/CarouselAdsMapper.java +++ b/chenhai-system/src/main/java/com/chenhai/muhu/mapper/CarouselAdsMapper.java @@ -1,6 +1,7 @@ package com.chenhai.muhu.mapper; import com.chenhai.muhu.domain.CarouselAds; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -59,4 +60,12 @@ public interface CarouselAdsMapper * @return 结果 */ public int deleteCarouselAdsByCarouselIds(Long[] carouselIds); + + /** + * 增加浏览量 + * + * @param carouselId 轮播广告主键 + * @return 结果 + */ + public int incrementViewCount(@Param("carouselId") Long carouselId); } diff --git a/chenhai-system/src/main/java/com/chenhai/muhu/service/ICarouselAdsService.java b/chenhai-system/src/main/java/com/chenhai/muhu/service/ICarouselAdsService.java index c558b79..d0f4ba9 100644 --- a/chenhai-system/src/main/java/com/chenhai/muhu/service/ICarouselAdsService.java +++ b/chenhai-system/src/main/java/com/chenhai/muhu/service/ICarouselAdsService.java @@ -59,4 +59,12 @@ public interface ICarouselAdsService * @return 结果 */ public int deleteCarouselAdsByCarouselId(Long carouselId); + + /** + * 增加浏览量 + * + * @param carouselId 轮播广告主键 + * @return 结果 + */ + public int incrementViewCount(Long carouselId); } diff --git a/chenhai-system/src/main/java/com/chenhai/muhu/service/impl/CarouselAdsServiceImpl.java b/chenhai-system/src/main/java/com/chenhai/muhu/service/impl/CarouselAdsServiceImpl.java index 1d4ca98..376721f 100644 --- a/chenhai-system/src/main/java/com/chenhai/muhu/service/impl/CarouselAdsServiceImpl.java +++ b/chenhai-system/src/main/java/com/chenhai/muhu/service/impl/CarouselAdsServiceImpl.java @@ -6,6 +6,7 @@ import com.chenhai.muhu.mapper.CarouselAdsMapper; import com.chenhai.muhu.service.ICarouselAdsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -92,4 +93,17 @@ public class CarouselAdsServiceImpl implements ICarouselAdsService { return carouselAdsMapper.deleteCarouselAdsByCarouselId(carouselId); } + + /** + * 增加浏览量 + * + * @param carouselId 轮播广告主键 + * @return 结果 + */ + @Override + @Transactional + public int incrementViewCount(Long carouselId) + { + return carouselAdsMapper.incrementViewCount(carouselId); + } } diff --git a/chenhai-system/src/main/java/com/chenhai/system/domain/SysMedicineRecommendation.java b/chenhai-system/src/main/java/com/chenhai/system/domain/SysMedicineRecommendation.java index fb2fdd4..cc48f80 100644 --- a/chenhai-system/src/main/java/com/chenhai/system/domain/SysMedicineRecommendation.java +++ b/chenhai-system/src/main/java/com/chenhai/system/domain/SysMedicineRecommendation.java @@ -146,6 +146,12 @@ public class SysMedicineRecommendation extends BaseEntity @Excel(name = "纬度") private BigDecimal latitude; + /** 排序字段 */ + private String orderByColumn; + + /** 排序方向 */ + private String orderDirection; + public void setId(Long id) { this.id = id; @@ -494,6 +500,22 @@ public class SysMedicineRecommendation extends BaseEntity return searchKeywords; } + public String getOrderByColumn() { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) { + this.orderByColumn = orderByColumn; + } + + public String getOrderDirection() { + return orderDirection; + } + + public void setOrderDirection(String orderDirection) { + this.orderDirection = orderDirection; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/chenhai-system/src/main/java/com/chenhai/system/mapper/SysUserMapper.java b/chenhai-system/src/main/java/com/chenhai/system/mapper/SysUserMapper.java index 140f7ef..b89e025 100644 --- a/chenhai-system/src/main/java/com/chenhai/system/mapper/SysUserMapper.java +++ b/chenhai-system/src/main/java/com/chenhai/system/mapper/SysUserMapper.java @@ -156,4 +156,15 @@ public interface SysUserMapper public SysUser checkEmailUnique(String email); public int updateUserAreaCode(@Param("userId") Long userId, @Param("areaCode") String areaCode); + + /** + * 根据手机号和用户类型查询用户 + */ + SysUser selectUserByPhoneAndType(@Param("phonenumber") String phone, + @Param("userType") String userType); + + /** + * 查询手机号已注册的类型列表 + */ + List selectUserTypesByPhone(@Param("phonenumber") String phone); } diff --git a/chenhai-system/src/main/java/com/chenhai/system/service/ISysUserService.java b/chenhai-system/src/main/java/com/chenhai/system/service/ISysUserService.java index 3147935..a8e936e 100644 --- a/chenhai-system/src/main/java/com/chenhai/system/service/ISysUserService.java +++ b/chenhai-system/src/main/java/com/chenhai/system/service/ISysUserService.java @@ -232,4 +232,14 @@ public interface ISysUserService public String importUser(List userList, Boolean isUpdateSupport, String operName); public int updateUserAreaCode(Long userId, String areaCode); + + /** + * 根据手机号和用户类型查询用户 + */ + SysUser selectUserByPhoneAndType(String phone, String userType); + + /** + * 查询手机号已注册的所有类型 + */ + List selectUserTypesByPhone(String phone); } diff --git a/chenhai-system/src/main/java/com/chenhai/system/service/impl/SysUserServiceImpl.java b/chenhai-system/src/main/java/com/chenhai/system/service/impl/SysUserServiceImpl.java index 93994cf..01a540b 100644 --- a/chenhai-system/src/main/java/com/chenhai/system/service/impl/SysUserServiceImpl.java +++ b/chenhai-system/src/main/java/com/chenhai/system/service/impl/SysUserServiceImpl.java @@ -579,4 +579,20 @@ public class SysUserServiceImpl implements ISysUserService public int updateUserAreaCode(Long userId, String areaCode) { return userMapper.updateUserAreaCode(userId, areaCode); } + + @Override + public SysUser selectUserByPhoneAndType(String phone, String userType) { + if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(userType)) { + return null; + } + return userMapper.selectUserByPhoneAndType(phone, userType); + } + + @Override + public List selectUserTypesByPhone(String phone) { + if (StringUtils.isEmpty(phone)) { + return new ArrayList<>(); + } + return userMapper.selectUserTypesByPhone(phone); + } } diff --git a/chenhai-system/src/main/java/com/chenhai/vet/domain/MerchantInfo.java b/chenhai-system/src/main/java/com/chenhai/vet/domain/MerchantInfo.java index ae5b80f..151ac96 100644 --- a/chenhai-system/src/main/java/com/chenhai/vet/domain/MerchantInfo.java +++ b/chenhai-system/src/main/java/com/chenhai/vet/domain/MerchantInfo.java @@ -85,7 +85,9 @@ public class MerchantInfo extends BaseEntity @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date offlineTime; - + /** 产品数量 */ + @Excel(name = "产品数量") + private Long productCount; public void setShopId(Long shopId) { @@ -238,7 +240,13 @@ public class MerchantInfo extends BaseEntity this.businessLicenseImage = businessLicenseImage; } + public Long getProductCount() { + return productCount; + } + public void setProductCount(Long productCount) { + this.productCount = productCount; + } @Override public String toString() { @@ -251,15 +259,16 @@ public class MerchantInfo extends BaseEntity .append("createdAt", getCreatedAt()) .append("updatedAt", getUpdatedAt()) .append("isActive", getIsActive()) - .append("auditStatus", getAuditStatus()) - .append("auditOpinion", getAuditOpinion()) - .append("auditUserId", getAuditUserId()) - .append("auditTime", getAuditTime()) - .append("shopStatus", getShopStatus()) - .append("publishTime", getPublishTime()) - .append("offlineTime", getOfflineTime()) - .append("shopLogo", getShopLogo()) - .append("businessLicenseImage", getBusinessLicenseImage()) + .append("auditStatus", getAuditStatus()) + .append("auditOpinion", getAuditOpinion()) + .append("auditUserId", getAuditUserId()) + .append("auditTime", getAuditTime()) + .append("shopStatus", getShopStatus()) + .append("publishTime", getPublishTime()) + .append("offlineTime", getOfflineTime()) + .append("shopLogo", getShopLogo()) + .append("businessLicenseImage", getBusinessLicenseImage()) + .append("productCount", getProductCount()) .toString(); } } diff --git a/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetKnowledgeServiceImpl.java b/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetKnowledgeServiceImpl.java index d1110c9..2877dd0 100644 --- a/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetKnowledgeServiceImpl.java +++ b/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetKnowledgeServiceImpl.java @@ -55,7 +55,7 @@ public class VetKnowledgeServiceImpl implements IVetKnowledgeService vetKnowledge.setArticleStatus("0"); // 草稿 } if (vetKnowledge.getAuditStatus() == null) { - vetKnowledge.setAuditStatus("0"); // 待审核 + vetKnowledge.setAuditStatus("1"); // 待审核 } return vetKnowledgeMapper.insertVetKnowledge(vetKnowledge); } diff --git a/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetProductServiceImpl.java b/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetProductServiceImpl.java index 31407b8..65acc35 100644 --- a/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetProductServiceImpl.java +++ b/chenhai-system/src/main/java/com/chenhai/vet/service/impl/VetProductServiceImpl.java @@ -378,27 +378,40 @@ public class VetProductServiceImpl implements IVetProductService @Transactional public int insertVetProduct(VetProduct vetProduct) { - // 如果已经传入了shopId,就不需要查询 - if (vetProduct.getShopId() == null) { - // 设置默认值 - vetProduct.setStatus("0"); - vetProduct.setAuditStatus("0"); - vetProduct.setIsDeleted(0); - vetProduct.setCreatedAt(new Date()); - vetProduct.setUpdatedAt(new Date()); - - // 设置当前用户ID并查询店铺ID - try { - Long userId = SecurityUtils.getUserId(); - vetProduct.setUserId(userId); + // 设置默认值 + vetProduct.setStatus("0"); + vetProduct.setAuditStatus("0"); + vetProduct.setIsDeleted(0); + vetProduct.setCreatedAt(new Date()); + vetProduct.setUpdatedAt(new Date()); + + // 设置当前用户ID + try { + Long userId = SecurityUtils.getUserId(); + vetProduct.setUserId(userId); + } catch (Exception e) { + throw new RuntimeException("获取用户信息失败"); + } + + // 关键修改:如果前端已经传入了shopId,直接使用,不再查询 + if (vetProduct.getShopId() != null) { + + // 验证该店铺是否属于当前用户(可选) + // 这里可以添加验证逻辑,确保用户只能给自己店铺添加产品 + } else { + // 如果前端没有传入shopId,则查询用户的默认店铺 + + try { // 查询用户的店铺 MerchantInfo merchantQuery = new MerchantInfo(); - merchantQuery.setUserId(userId); // 这里直接调用setter方法 + merchantQuery.setUserId(vetProduct.getUserId()); List merchantList = merchantInfoMapper.selectMerchantInfoList(merchantQuery); if (merchantList != null && !merchantList.isEmpty()) { - vetProduct.setShopId(merchantList.get(0).getShopId()); + // 如果有多个店铺,默认使用第一个 + Long shopId = merchantList.get(0).getShopId(); + vetProduct.setShopId(shopId); } else { throw new RuntimeException("用户未关联任何店铺,无法创建产品"); } @@ -410,7 +423,6 @@ public class VetProductServiceImpl implements IVetProductService return vetProductMapper.insertVetProduct(vetProduct); } - /** * 管理员查询所有兽医产品信息列表(用于审核) */ diff --git a/chenhai-system/src/main/resources/mapper/muhu/CarouselAdsMapper.xml b/chenhai-system/src/main/resources/mapper/muhu/CarouselAdsMapper.xml index 3912bba..724c464 100644 --- a/chenhai-system/src/main/resources/mapper/muhu/CarouselAdsMapper.xml +++ b/chenhai-system/src/main/resources/mapper/muhu/CarouselAdsMapper.xml @@ -37,10 +37,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select carousel_id, title, subtitle, image_url, alt_text, image_size, bg_color, text_color, button_text, button_class, link_type, link_url, link_params, sort_order, display_type, is_active, start_time, end_time, is_always_valid, caption_position, caption_style, button_style, display_count, click_count, status, review_notes, reviewed_by, reviewed_at, created_by, created_at, updated_at, ads_type from muhu_carousel_ads + select carousel_id, title, subtitle, image_url, alt_text, image_size, bg_color, text_color, button_text, button_class, link_type, link_url, link_params, sort_order, display_type, is_active, start_time, end_time, is_always_valid, caption_position, caption_style, button_style, display_count, click_count, status, review_notes, reviewed_by, reviewed_at, created_by, created_at, updated_at, ads_type, view_count from muhu_carousel_ads @@ -119,6 +121,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" created_at, updated_at, ads_type, + view_count, #{title}, @@ -152,6 +155,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{createdAt}, #{updatedAt}, #{adsType}, + #{viewCount}, @@ -189,6 +193,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" created_at = #{createdAt}, updated_at = #{updatedAt}, ads_type = #{adsType} + view_count = #{viewCount}, where carousel_id = #{carouselId} @@ -203,4 +208,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{carouselId} + + + + update muhu_carousel_ads + set view_count = ifnull(view_count, 0) + 1 + where carousel_id = #{carouselId} + \ No newline at end of file diff --git a/chenhai-system/src/main/resources/mapper/muhu/DisasterWarningMapper.xml b/chenhai-system/src/main/resources/mapper/muhu/DisasterWarningMapper.xml index 35a0212..bbfc71e 100644 --- a/chenhai-system/src/main/resources/mapper/muhu/DisasterWarningMapper.xml +++ b/chenhai-system/src/main/resources/mapper/muhu/DisasterWarningMapper.xml @@ -35,6 +35,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and affected_regions = #{affectedRegions} and last_updated = #{lastUpdated} and created_time = #{createdTime} + + + AND ( + title LIKE CONCAT('%', #{keyword}, '%') + OR brief_content LIKE CONCAT('%', #{keyword}, '%') + OR detail_content LIKE CONCAT('%', #{keyword}, '%') + OR response_measures LIKE CONCAT('%', #{keyword}, '%') + OR warning_code LIKE CONCAT('%', #{keyword}, '%') + OR affected_regions LIKE CONCAT('%', #{keyword}, '%') + OR warning_type LIKE CONCAT('%', #{keyword}, '%') + OR warning_level LIKE CONCAT('%', #{keyword}, '%') + ) + diff --git a/chenhai-system/src/main/resources/mapper/muhu/MuhuConsultationFormsMapper.xml b/chenhai-system/src/main/resources/mapper/muhu/MuhuConsultationFormsMapper.xml index 7805698..6df4470 100644 --- a/chenhai-system/src/main/resources/mapper/muhu/MuhuConsultationFormsMapper.xml +++ b/chenhai-system/src/main/resources/mapper/muhu/MuhuConsultationFormsMapper.xml @@ -21,8 +21,8 @@ - - + + @@ -68,19 +68,46 @@ + select u.user_id, u.dept_id, u.user_name, u.nick_name, u.user_type, + u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, + u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, + u.area_code, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, + d.leader, d.status as dept_status, + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, + r.status as role_status, + a.id as sys_area_id, a.name as sys_area_name, a.code as sys_area_code, + a.parent_code, a.type, a.sort, a.status, a.name_path, a.code_path, a.deleted + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + left join sys_area a on u.area_code = a.code + where u.phonenumber = #{phonenumber} + and u.user_type = #{userType} + and u.del_flag = '0' + + + + + \ No newline at end of file diff --git a/chenhai-system/src/main/resources/mapper/vet/MerchantInfoMapper.xml b/chenhai-system/src/main/resources/mapper/vet/MerchantInfoMapper.xml index d61a979..7fb3e15 100644 --- a/chenhai-system/src/main/resources/mapper/vet/MerchantInfoMapper.xml +++ b/chenhai-system/src/main/resources/mapper/vet/MerchantInfoMapper.xml @@ -22,10 +22,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - select shop_id, shop_name, shop_address, phone, user_id, created_at, updated_at, is_active ,shop_logo, business_license_image, audit_status, audit_opinion, audit_user_id, audit_time, shop_status, publish_time, offline_time from merchant_info + select + m.shop_id, + m.shop_name, + m.shop_address, + m.phone, + m.user_id, + m.created_at, + m.updated_at, + m.is_active, + m.shop_logo, + m.business_license_image, + m.audit_status, + m.audit_opinion, + m.audit_user_id, + m.audit_time, + m.shop_status, + m.publish_time, + m.offline_time, + (select count(*) from vet_product p where p.shop_id = m.shop_id and p.is_deleted = 0) as product_count + from merchant_info m