Browse Source

feat:新增产品分类与产品关联后台配置

master
tanzs 1 week ago
parent
commit
271ce790d6
22 changed files with 477 additions and 224 deletions
  1. +2
    -2
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appbanner/entity/AppBanner.java
  2. +0
    -46
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/controller/AppUserController.java
  3. +2
    -2
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/entity/AppUser.java
  4. +0
    -11
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/service/IAppUserService.java
  5. +0
    -36
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/service/impl/AppUserServiceImpl.java
  6. +2
    -2
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/notice/entity/AppNotice.java
  7. +0
    -105
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/controller/AppProductController.java
  8. +215
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/controller/ProductController.java
  9. +8
    -6
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/entity/AppProduct.java
  10. +64
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/entity/Product.java
  11. +1
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategory/controller/AppCategoryController.java
  12. +44
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategory/controller/ProductCategoryController.java
  13. +2
    -2
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategory/entity/AppCategory.java
  14. +2
    -2
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/entity/AppProductCategoryJoin.java
  15. +9
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/mapper/AppProductCategoryJoinMapper.java
  16. +5
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/mapper/xml/AppProductCategoryJoinMapper.xml
  17. +1
    -1
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/service/impl/AppProductCategoryJoinServiceImpl.java
  18. +2
    -2
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/store/entity/AppStore.java
  19. +73
    -0
      jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/user/controller/UserController.java
  20. +1
    -2
      jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/contoller/MUserController.java
  21. +10
    -0
      jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/service/UserService.java
  22. +34
    -5
      jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/service/impl/UserServiceImpl.java

+ 2
- 2
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appbanner/entity/AppBanner.java View File

@ -30,9 +30,9 @@ public class AppBanner implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**图片地址*/
@Excel(name = "图片地址", width = 15)
@ApiModelProperty(value = "图片地址")


+ 0
- 46
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/controller/AppUserController.java View File

@ -6,13 +6,9 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.util.StrUtil;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.sysMiniapp.appuser.entity.AppUser;
import org.jeecg.modules.sysMiniapp.appuser.service.IAppUserService;
@ -23,8 +19,6 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
@ -72,46 +66,6 @@ public class AppUserController extends JeecgController<AppUser, IAppUserService>
return Result.OK(pageList);
}
/**
* 添加
*
* @param appUser
* @return
*/
@AutoLog(value = "应用用户表-添加")
@ApiOperation(value="应用用户表-添加", notes="应用用户表-添加")
@RequiresPermissions("appuser:app_user:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody AppUser appUser) {
String salt = oConvertUtils.randomGen(8);
appUser.setPasswordSalt(salt);
String passwordEncode = PasswordUtil.encrypt(appUser.getNickName(), appUser.getPassword(), salt);
appUser.setPassword(passwordEncode);
appUserService.save(appUser);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param appUser
* @return
*/
@AutoLog(value = "应用用户表-编辑")
@ApiOperation(value="应用用户表-编辑", notes="应用用户表-编辑")
@RequiresPermissions("appuser:app_user:edit")
@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody AppUser appUser) {
// 修改密码
if (StrUtil.isNotBlank(appUser.getPassword()) || StrUtil.isNotBlank(appUser.getNickName())){
String passwordEncode = PasswordUtil.encrypt(appUser.getNickName(), appUser.getPassword(), appUser.getPasswordSalt());
appUser.setPassword(passwordEncode);
}
appUserService.updateById(appUser);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*


+ 2
- 2
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/entity/AppUser.java View File

@ -30,9 +30,9 @@ public class AppUser implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**用户名*/
@Excel(name = "用户名", width = 15)
@ApiModelProperty(value = "用户名")


+ 0
- 11
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/service/IAppUserService.java View File

@ -1,6 +1,5 @@
package org.jeecg.modules.sysMiniapp.appuser.service;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.sysMiniapp.appuser.entity.AppUser;
import com.baomidou.mybatisplus.extension.service.IService;
@ -11,14 +10,4 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @Version: V1.0
*/
public interface IAppUserService extends IService<AppUser> {
/**
* 通过用户名查询用户信息
* @param userName
* @return
*/
AppUser getUserByName(String userName);
Result<?> checkUserIsEffective(AppUser appUser);
}

+ 0
- 36
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/appuser/service/impl/AppUserServiceImpl.java View File

@ -1,14 +1,8 @@
package org.jeecg.modules.sysMiniapp.appuser.service.impl;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.sysMiniapp.appuser.entity.AppUser;
import org.jeecg.modules.sysMiniapp.appuser.mapper.AppUserMapper;
import org.jeecg.modules.sysMiniapp.appuser.service.IAppUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -21,34 +15,4 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
*/
@Service
public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> implements IAppUserService {
@Autowired
private AppUserMapper appUserMapper;
@Autowired
private BaseCommonService baseCommonService;
@Override
@Cacheable(cacheNames= CacheConstant.SYS_USERS_CACHE, key="#userName")
public AppUser getUserByName(String userName) {
return appUserMapper.getUserByName(userName);
}
@Override
public Result<?> checkUserIsEffective(AppUser appUser) {
Result<?> result = new Result<Object>();
//情况1根据用户信息查询该用户不存在
if (appUser == null) {
result.error500("用户名或密码错误,请检查后重试!");
baseCommonService.addLog("用户登录失败,用户不存在!【小程序端】", CommonConstant.LOG_TYPE_1, null);
return result;
}
//情况3根据用户信息查询该用户已冻结
if (CommonConstant.STATUS_0.equals(appUser.getStatus())) {
baseCommonService.addLog("用户登录失败,用户名:" + appUser.getNickName() + "已冻结!【小程序端】", CommonConstant.LOG_TYPE_1, null);
result.error500("该用户已冻结,请联系管理员解冻");
return result;
}
return result;
}
}

+ 2
- 2
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/notice/entity/AppNotice.java View File

@ -30,9 +30,9 @@ public class AppNotice implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**标题*/
@Excel(name = "标题", width = 15)
@ApiModelProperty(value = "标题")


+ 0
- 105
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/controller/AppProductController.java View File

@ -1,16 +1,11 @@
package org.jeecg.modules.sysMiniapp.product.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.sysMiniapp.product.entity.AppProduct;
import org.jeecg.modules.sysMiniapp.product.service.IAppProductService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
@ -18,8 +13,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
@ -36,104 +29,6 @@ public class AppProductController extends JeecgController<AppProduct, IAppProduc
@Autowired
private IAppProductService appProductService;
/**
* 分页列表查询
*
* @param appProduct
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "产品管理-分页列表查询")
@ApiOperation(value="产品管理-分页列表查询", notes="产品管理-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<AppProduct>> queryPageList(AppProduct appProduct,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<AppProduct> queryWrapper = QueryGenerator.initQueryWrapper(appProduct, req.getParameterMap());
Page<AppProduct> page = new Page<AppProduct>(pageNo, pageSize);
IPage<AppProduct> pageList = appProductService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param appProduct
* @return
*/
@AutoLog(value = "产品管理-添加")
@ApiOperation(value="产品管理-添加", notes="产品管理-添加")
@RequiresPermissions("product:app_product:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody AppProduct appProduct) {
appProductService.save(appProduct);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param appProduct
* @return
*/
@AutoLog(value = "产品管理-编辑")
@ApiOperation(value="产品管理-编辑", notes="产品管理-编辑")
@RequiresPermissions("product:app_product:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody AppProduct appProduct) {
appProductService.updateById(appProduct);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "产品管理-通过id删除")
@ApiOperation(value="产品管理-通过id删除", notes="产品管理-通过id删除")
@RequiresPermissions("product:app_product:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
appProductService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "产品管理-批量删除")
@ApiOperation(value="产品管理-批量删除", notes="产品管理-批量删除")
@RequiresPermissions("product:app_product:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.appProductService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "产品管理-通过id查询")
@ApiOperation(value="产品管理-通过id查询", notes="产品管理-通过id查询")
@GetMapping(value = "/queryById")
public Result<AppProduct> queryById(@RequestParam(name="id",required=true) String id) {
AppProduct appProduct = appProductService.getById(id);
if(appProduct==null) {
return Result.error("未找到对应数据");
}
return Result.OK(appProduct);
}
/**
* 导出excel


+ 215
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/controller/ProductController.java View File

@ -0,0 +1,215 @@
package org.jeecg.modules.sysMiniapp.product.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.sysMiniapp.product.entity.AppProduct;
import org.jeecg.modules.sysMiniapp.product.service.IAppProductService;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.entity.AppProductCategoryJoin;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.mapper.AppProductCategoryJoinMapper;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.service.IAppProductCategoryJoinService;
import org.jeecg.modules.sysMiniapp.product.entity.Product;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @Description: 产品管理
* @Author: jeecg-boot
* @Date: 2025-02-16
* @Version: V1.0
*/
@Api(tags="产品管理")
@RestController
@RequestMapping("/product/appProduct")
@Slf4j
public class ProductController extends JeecgController<AppProduct, IAppProductService> {
@Autowired
private IAppProductService appProductService;
@Autowired
private IAppProductCategoryJoinService appProductCategoryJoinService;
@Autowired
private AppProductCategoryJoinMapper appProductCategoryJoinMapper;
/**
* 分页列表查询
*
* @param appProduct
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "产品管理-分页列表查询")
@ApiOperation(value="产品管理-分页列表查询", notes="产品管理-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<AppProduct>> queryPageList(AppProduct appProduct,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<AppProduct> queryWrapper = QueryGenerator.initQueryWrapper(appProduct, req.getParameterMap());
Page<AppProduct> page = new Page<AppProduct>(pageNo, pageSize);
IPage<AppProduct> pageList = appProductService.page(page, queryWrapper);
pageList.getRecords().forEach(item -> {
List<Integer> categoryList = appProductCategoryJoinMapper.getProductCategorysByProductId(item.getId());
if (oConvertUtils.isNotEmpty(categoryList)) {
item.setCategoryId(StringUtils.join(categoryList.toArray(), SymbolConstant.COMMA));
} else {
item.setCategoryId("");
}
});
return Result.OK(pageList);
}
/**
* 添加
*
* @param product
* @return
*/
@AutoLog(value = "产品管理-添加")
@ApiOperation(value="产品管理-添加", notes="产品管理-添加")
@RequiresPermissions("product:app_product:add")
@PostMapping(value = "/add")
@Transactional
public Result<String> add(@RequestBody Product product) {
List<String> categoryList = Arrays.asList(product.getCategoryId().split(","));
AppProduct appProduct = new AppProduct();
BeanUtils.copyProperties(product, appProduct);
appProductService.save(appProduct);
// 新增关联表
List<AppProductCategoryJoin> joinList = new ArrayList<AppProductCategoryJoin>();
for (String category : categoryList){
AppProductCategoryJoin appProductCategoryJoin = new AppProductCategoryJoin();
appProductCategoryJoin.setProductId(appProduct.getId());
appProductCategoryJoin.setCategoryId(Integer.valueOf(category));
joinList.add(appProductCategoryJoin);
}
appProductCategoryJoinService.saveOrUpdateBatch(joinList);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param product
* @return
*/
@AutoLog(value = "产品管理-编辑")
@ApiOperation(value="产品管理-编辑", notes="产品管理-编辑")
@RequiresPermissions("product:app_product:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
@Transactional
public Result<String> edit(@RequestBody Product product) {
AppProduct appProduct = new AppProduct();
BeanUtils.copyProperties(product, appProduct);
appProductService.updateById(appProduct);
// 查询已有的分类关联
LambdaQueryWrapper<AppProductCategoryJoin> query = new LambdaQueryWrapper<>();
query.eq(AppProductCategoryJoin::getProductId,appProduct.getId());
List<AppProductCategoryJoin> existingJoins = appProductCategoryJoinService.list(query);
Set<Integer> existingCategoryIds = existingJoins.stream()
.map(AppProductCategoryJoin::getCategoryId)
.collect(Collectors.toSet());
// 用户提交的分类ID列表
List<String> categoryList = Arrays.asList(product.getCategoryId().split(","));
Set<Integer> newCategoryIds = categoryList.stream()
.map(Integer::valueOf)
.collect(Collectors.toSet());
// 需要删除的关联
List<AppProductCategoryJoin> toDelete = existingJoins.stream()
.filter(join -> !newCategoryIds.contains(join.getCategoryId()))
.collect(Collectors.toList());
// 需要新增的关联
List<AppProductCategoryJoin> toAdd = newCategoryIds.stream()
.filter(categoryId -> !existingCategoryIds.contains(categoryId))
.map(categoryId -> {
AppProductCategoryJoin join = new AppProductCategoryJoin();
join.setProductId(appProduct.getId());
join.setCategoryId(categoryId);
return join;
})
.collect(Collectors.toList());
// 执行删除和新增
if (!toDelete.isEmpty()) {
appProductCategoryJoinService.removeBatchByIds(toDelete);
}
if (!toAdd.isEmpty()) {
appProductCategoryJoinService.saveBatch(toAdd);
}
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "产品管理-通过id删除")
@ApiOperation(value="产品管理-通过id删除", notes="产品管理-通过id删除")
@RequiresPermissions("product:app_product:delete")
@DeleteMapping(value = "/delete")
@Transactional
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
appProductService.removeById(id);
// 删除关联表中的数据
LambdaQueryWrapper<AppProductCategoryJoin> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AppProductCategoryJoin::getProductId, id);
appProductCategoryJoinService.remove(queryWrapper);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "产品管理-批量删除")
@ApiOperation(value="产品管理-批量删除", notes="产品管理-批量删除")
@RequiresPermissions("product:app_product:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
@Transactional
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
// 将逗号分隔的ID转换为列表
List<String> idList = Arrays.asList(ids.split(","));
// 批量删除产品
appProductService.removeByIds(idList);
// 批量删除关联表中的数据
LambdaQueryWrapper<AppProductCategoryJoin> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(AppProductCategoryJoin::getProductId, idList);
appProductCategoryJoinService.remove(queryWrapper);
return Result.OK("批量删除成功!");
}
}

+ 8
- 6
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/entity/AppProduct.java View File

@ -3,6 +3,7 @@ package org.jeecg.modules.sysMiniapp.product.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -29,17 +30,13 @@ public class AppProduct implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**产品名称*/
@Excel(name = "产品名称", width = 15)
@ApiModelProperty(value = "产品名称")
private java.lang.String name;
/**产品分类*/
@Excel(name = "产品分类", width = 15)
@ApiModelProperty(value = "产品分类")
private java.lang.Integer categoryId;
/**产品内容*/
@Excel(name = "产品内容", width = 15)
@ApiModelProperty(value = "产品内容")
@ -67,4 +64,9 @@ public class AppProduct implements Serializable {
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**
* 多分类ids临时用不持久化数据库(数据库字段不存在)
*/
@TableField(exist = false)
private String categoryId;
}

+ 64
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/product/entity/Product.java View File

@ -0,0 +1,64 @@
package org.jeecg.modules.sysMiniapp.product.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
/**
* @Description: 产品管理
* @Author: jeecg-boot
* @Date: 2025-02-16
* @Version: V1.0
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="app_product对象", description="产品管理")
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@ApiModelProperty(value = "主键")
private Integer id;
/**产品名称*/
@ApiModelProperty(value = "产品名称")
private String name;
/**产品分类*/
@ApiModelProperty(value = "产品分类")
private String categoryId;
/**产品内容*/
@ApiModelProperty(value = "产品内容")
private String content;
/**产品合同模板*/
@ApiModelProperty(value = "产品合同模板")
private String pdf;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
}

+ 1
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategory/controller/AppCategoryController.java View File

@ -3,6 +3,7 @@ package org.jeecg.modules.sysMiniapp.productCategory.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.sysMiniapp.productCategory.entity.AppCategory;


+ 44
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategory/controller/ProductCategoryController.java View File

@ -0,0 +1,44 @@
package org.jeecg.modules.sysMiniapp.productCategory.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.sysMiniapp.productCategory.entity.AppCategory;
import org.jeecg.modules.sysMiniapp.productCategory.service.IAppCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Description: 产品分类管理
* @Author: jeecg-boot
* @Date: 2025-02-16
* @Version: V1.0
*/
@Api(tags="产品分类管理")
@RestController
@RequestMapping("/productCategory/appCategory")
@Slf4j
public class ProductCategoryController extends JeecgController<AppCategory, IAppCategoryService> {
@Autowired
private IAppCategoryService appCategoryService;
@RequestMapping(value = "/queryList", method = RequestMethod.GET)
public Result<List<AppCategory>> queryList(@RequestParam(name="ids",required=false) String ids) {
Result<List<AppCategory>> result = new Result<List<AppCategory>>();
LambdaQueryWrapper<AppCategory> query = new LambdaQueryWrapper<>();
if(oConvertUtils.isNotEmpty(ids)){
query.in(AppCategory::getId, ids.split(","));
}
//此处查询忽略时间条件
List<AppCategory> ls = appCategoryService.list(query);
result.setSuccess(true);
result.setResult(ls);
return result;
}
}

+ 2
- 2
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategory/entity/AppCategory.java View File

@ -29,9 +29,9 @@ public class AppCategory implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**名称*/
@Excel(name = "名称", width = 15)
@ApiModelProperty(value = "名称")


+ 2
- 2
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/entity/AppProductCategoryJoin.java View File

@ -29,9 +29,9 @@ public class AppProductCategoryJoin implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**产品 id*/
@Excel(name = "产品 id", width = 15)
@ApiModelProperty(value = "产品 id")


+ 9
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/mapper/AppProductCategoryJoinMapper.java View File

@ -1,8 +1,11 @@
package org.jeecg.modules.sysMiniapp.productCategoryJoin.mapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.entity.AppProductCategoryJoin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @Description: 产品分类关联表
* @Author: jeecg-boot
@ -11,4 +14,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface AppProductCategoryJoinMapper extends BaseMapper<AppProductCategoryJoin> {
/**
* 通过产品 id 获取产品分类 ids
* @param productId
* @return
*/
List<Integer> getProductCategorysByProductId(@Param("productId") Integer productId);
}

+ 5
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/mapper/xml/AppProductCategoryJoinMapper.xml View File

@ -2,4 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.sysMiniapp.productCategoryJoin.mapper.AppProductCategoryJoinMapper">
<!--通过用户id获取租户ids-->
<select id="getProductCategorysByProductId" resultType="java.lang.Integer">
SELECT category_id FROM app_product_category_join
WHERE product_id = #{productId}
</select>
</mapper>

+ 1
- 1
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/productCategoryJoin/service/impl/AppProductCategoryJoinServiceImpl.java View File

@ -1,8 +1,8 @@
package org.jeecg.modules.sysMiniapp.productCategoryJoin.service.impl;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.service.IAppProductCategoryJoinService;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.entity.AppProductCategoryJoin;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.mapper.AppProductCategoryJoinMapper;
import org.jeecg.modules.sysMiniapp.productCategoryJoin.service.IAppProductCategoryJoinService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;


+ 2
- 2
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/store/entity/AppStore.java View File

@ -30,9 +30,9 @@ public class AppStore implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "主键")
private java.lang.String id;
private java.lang.Integer id;
/**门店名称*/
@Excel(name = "门店名称", width = 15)
@ApiModelProperty(value = "门店名称")


+ 73
- 0
jeecg-module-demo/src/main/java/org/jeecg/modules/sysMiniapp/user/controller/UserController.java View File

@ -0,0 +1,73 @@
package org.jeecg.modules.sysMiniapp.user.controller;
import cn.hutool.core.util.StrUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.sysMiniapp.appuser.entity.AppUser;
import org.jeecg.modules.sysMiniapp.appuser.service.IAppUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*;
/**
* @Description: 应用用户表
* @Author: jeecg-boot
* @Date: 2025-02-16
* @Version: V1.0
*/
@Api(tags="应用用户表")
@RestController
@RequestMapping("/appuser/appUser")
@Slf4j
public class UserController extends JeecgController<AppUser, IAppUserService> {
@Autowired
private IAppUserService appUserService;
/**
* 添加
*
* @param appUser
* @return
*/
@AutoLog(value = "应用用户表-添加")
@ApiOperation(value="应用用户表-添加", notes="应用用户表-添加")
@RequiresPermissions("appuser:app_user:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody AppUser appUser) {
String salt = oConvertUtils.randomGen(8);
appUser.setPasswordSalt(salt);
String passwordEncode = PasswordUtil.encrypt(appUser.getNickName(), appUser.getPassword(), salt);
appUser.setPassword(passwordEncode);
appUserService.save(appUser);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param appUser
* @return
*/
@AutoLog(value = "应用用户表-编辑")
@ApiOperation(value="应用用户表-编辑", notes="应用用户表-编辑")
@RequiresPermissions("appuser:app_user:edit")
@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody AppUser appUser) {
// 修改密码
if (StrUtil.isNotBlank(appUser.getPassword()) || StrUtil.isNotBlank(appUser.getNickName())){
String passwordEncode = PasswordUtil.encrypt(appUser.getNickName(), appUser.getPassword(), appUser.getPasswordSalt());
appUser.setPassword(passwordEncode);
}
appUserService.updateById(appUser);
return Result.OK("编辑成功!");
}
}

jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/contoller/UserController.java → jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/contoller/MUserController.java View File

@ -3,7 +3,6 @@ import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.boot.starter.lock.annotation.JRepeat;
import org.jeecg.common.api.vo.Result;
import org.jeecg.config.shiro.IgnoreAuth;
import org.jeecg.modules.miniapp.user.domain.WxLoginInfo;
@ -22,7 +21,7 @@ import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("/miniapp/user")
@Slf4j
public class UserController {
public class MUserController {
@Autowired
UserService userService;

+ 10
- 0
jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/service/UserService.java View File

@ -2,6 +2,7 @@ package org.jeecg.modules.miniapp.user.service;
import com.alibaba.fastjson.JSONObject;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.sysMiniapp.appuser.entity.AppUser;
import org.jeecg.modules.miniapp.user.domain.WxLoginInfo;
import javax.servlet.http.HttpServletRequest;
@ -31,4 +32,13 @@ public interface UserService {
* @return
*/
Result<Object> logout(HttpServletRequest request);
/**
* 通过用户名查询用户信息
* @param userName
* @return
*/
AppUser getUserByName(String userName);
Result<?> checkUserIsEffective(AppUser appUser);
}

+ 34
- 5
jeecg-module-miniapp/src/main/java/org/jeecg/modules/miniapp/user/service/impl/UserServiceImpl.java View File

@ -9,8 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CacheConstant;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.IpUtils;
import org.jeecg.common.util.PasswordUtil;
@ -18,10 +18,12 @@ import org.jeecg.common.util.RedisUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.sysMiniapp.appuser.entity.AppUser;
import org.jeecg.modules.sysMiniapp.appuser.mapper.AppUserMapper;
import org.jeecg.modules.sysMiniapp.appuser.service.IAppUserService;
import org.jeecg.modules.miniapp.user.domain.WxLoginInfo;
import org.jeecg.modules.miniapp.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
@ -34,7 +36,7 @@ import java.util.Date;
*/
@Service
@Slf4j
public class UserServiceImpl extends JeecgController<AppUser, IAppUserService> implements UserService {
public class UserServiceImpl implements UserService {
@Autowired
private WxMaService wxMaService;
@ -45,6 +47,9 @@ public class UserServiceImpl extends JeecgController<AppUser, IAppUserService> i
@Autowired
private IAppUserService appUserService;
@Autowired
private AppUserMapper appUserMapper;
@Autowired
private BaseCommonService baseCommonService;
@ -86,8 +91,8 @@ public class UserServiceImpl extends JeecgController<AppUser, IAppUserService> i
}
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
//1. 校验用户是否有效
AppUser appUser = appUserService.getUserByName(username);
result = (Result<JSONObject>) appUserService.checkUserIsEffective(appUser);
AppUser appUser = getUserByName(username);
result = (Result<JSONObject>) checkUserIsEffective(appUser);
if(!result.isSuccess()) {
return result;
}
@ -150,7 +155,7 @@ public class UserServiceImpl extends JeecgController<AppUser, IAppUserService> i
return Result.error("退出登录失败!");
}
String username = JwtUtil.getUsername(token);
AppUser appUser = appUserService.getUserByName(username);
AppUser appUser = getUserByName(username);
if(appUser!=null) {
//update-begin--Author:wangshuai Date:20200714 for登出日志没有记录人员
baseCommonService.addLog("用户名: "+appUser.getNickName()+",退出成功!", CommonConstant.LOG_TYPE_1, null);
@ -168,6 +173,30 @@ public class UserServiceImpl extends JeecgController<AppUser, IAppUserService> i
}
}
@Override
@Cacheable(cacheNames= CacheConstant.SYS_USERS_CACHE, key="#userName")
public AppUser getUserByName(String userName) {
return appUserMapper.getUserByName(userName);
}
@Override
public Result<?> checkUserIsEffective(AppUser appUser) {
Result<?> result = new Result<Object>();
//情况1根据用户信息查询该用户不存在
if (appUser == null) {
result.error500("用户名或密码错误,请检查后重试!");
baseCommonService.addLog("用户登录失败,用户不存在!【小程序端】", CommonConstant.LOG_TYPE_1, null);
return result;
}
//情况3根据用户信息查询该用户已冻结
if (CommonConstant.STATUS_0.equals(appUser.getStatus())) {
baseCommonService.addLog("用户登录失败,用户名:" + appUser.getNickName() + "已冻结!【小程序端】", CommonConstant.LOG_TYPE_1, null);
result.error500("该用户已冻结,请联系管理员解冻");
return result;
}
return result;
}
/**
* 登录失败超出次数5 返回true
* @param username


Loading…
Cancel
Save