mitao
2024-05-20 5835635d91ef50f0d475ebb0ff31485a877ae765
Merge branch 'dev-mitao'
20个文件已修改
6个文件已删除
20个文件已添加
1483 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ListStatusDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CompanyAddSysUserDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CompanySysUserReq.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CompanyUserListVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/SysUserRoleDTO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TRepairShopAdd.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TRepairShopAddDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/BasePage.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/pojo/AuctionSalesroom.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsBrandController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsCategoryController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsFlavorTypeController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsGroupPurchaseController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsInfoTitleController.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsSeckillController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsSeriesController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsSkuController.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/GoodsInfoTitleDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/GoodsInfoTitleValueDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/GoodsSkuDTO.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/GoodsSku.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/query/GoodsInfoTitleQuery.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/query/GoodsSkuQuery.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsBrandVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsCategoryVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsFlavorTypeVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsInfoTitleVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsSeriesVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsSkuVO.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrandService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsCategoryService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsFlavorTypeService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsInfoTitleService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsInfoTitleValueService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeriesService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsCategoryServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsFlavorTypeServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsInfoTitleServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsInfoTitleValueServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeriesServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ListStatusDTO.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.system.api.domain.dto;
import com.ruoyi.common.core.enums.ListingStatusEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品上下架状态对象", description = "商品上下架状态对象")
public class ListStatusDTO {
    @ApiModelProperty(value = "id")
    @NotNull(message = "id不能为空")
    private Long id;
    @ApiModelProperty(value = "上架状态 上架中 已下架", notes = "参数传文字")
    @NotNull(message = "上架状态不能为空")
    private ListingStatusEnum listingStatus;
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
@@ -4,21 +4,14 @@
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
import com.ruoyi.system.api.model.*;
import java.util.List;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class SysUserFallbackFactory implements FallbackFactory<SysUserClient> {
    @Override
    public SysUserClient create(Throwable cause) {
        return new SysUserClient(){
            @Override
            public R<List<CompanyUserListVo>> getSysUserFromCompanyId(CompanySysUserReq companySysUserReq) {
                return R.fail("公司获取关联已有账号失败:" + cause.getMessage());
            }
            @Override
            public R<SysUser> getSysUser(Long userId) {
@@ -31,25 +24,9 @@
            }
            @Override
            public R<List<Integer>> companySaveSysUser(CompanyAddSysUserDto dto) {
                return R.fail("添加用户失败:" + cause.getMessage());
            }
            @Override
            public R<List<Integer>> addTRepairSysUser(TRepairShopAddDto dto) {
                return R.fail("添加修理厂用户失败:" + cause.getMessage());
            }
            @Override
            public R<List<SysUser>> getUserList(List<Integer> userIds) {
                return R.fail("通过用户id集合查询用户失败:" + cause.getMessage());
            }
            @Override
            public R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(CompanySysUserReq companySysUserReq) {
                return R.fail("公司获取账号失败:" + cause.getMessage());
            }
            @Override
            public R<Integer> isAdmin(Long userId) {
                return R.fail("获取角色信息失败:" + cause.getMessage());
@@ -73,11 +50,6 @@
            @Override
            public R<List<SysUser>> queryUserByPhoneList(List<String> phoneList) {
                return R.fail("通过手机号集合查询用户失败:" + cause.getMessage());
            }
            @Override
            public R<Boolean> addUserRole(List<SysUserRoleDTO> dtoList) {
                return R.fail("默认批量添加修理厂失败:" + cause.getMessage());
            }
            @Override
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -5,21 +5,15 @@
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.factory.SysUserFallbackFactory;
import com.ruoyi.system.api.model.*;
import java.util.List;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.management.relation.Role;
import java.util.List;
@FeignClient(contextId = "sysUserClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysUserFallbackFactory.class)
public interface SysUserClient {
    @PostMapping("/user/getSysUserFromCompanyId")
    R<List<CompanyUserListVo>> getSysUserFromCompanyId(@RequestBody CompanySysUserReq companySysUserReq);
    @PostMapping("/user/getSysUser")
    R<SysUser> getSysUser(Long userId);
@@ -27,18 +21,8 @@
    @PostMapping("/user/updateSysUser")
    R<Boolean>  updateSysUser(@RequestBody SysUser sysUser);
    @PostMapping("/user/companySaveSysUser")
    R<List<Integer>> companySaveSysUser(@RequestBody CompanyAddSysUserDto dto);
    @PostMapping("/user/addTRepairSysUser")
    R<List<Integer>> addTRepairSysUser(@RequestBody TRepairShopAddDto dto);
    @PostMapping("/user/getUserList")
    R<List<SysUser>> getUserList(@RequestBody List<Integer> userIds);
    @PostMapping("/user/getSysUserFromCompanyIdOne")
    R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(@RequestBody CompanySysUserReq companySysUserReq);
    @PostMapping("/user/isAdmin")
    R<Integer> isAdmin(Long userId);
@@ -70,14 +54,6 @@
     */
    @PostMapping("/user/queryUserByPhoneList")
    R<List<SysUser>>  queryUserByPhoneList(@RequestBody List<String> phoneList);
    /**
     * 默认批量添加修理厂
     * @param dtoList
     * @return
     */
    @PostMapping("/user/addUserRole")
    R<Boolean>  addUserRole(@RequestBody List<SysUserRoleDTO> dtoList);
    /**
     * 通过手机号查询用户
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CompanyAddSysUserDto.java
File was deleted
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CompanySysUserReq.java
File was deleted
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/CompanyUserListVo.java
File was deleted
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/SysUserRoleDTO.java
File was deleted
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TRepairShopAdd.java
File was deleted
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TRepairShopAddDto.java
File was deleted
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/BasePage.java
@@ -2,6 +2,8 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.DecimalMin;
/**
 * <p></p>
@@ -10,16 +12,20 @@
 * @date 2020/8/24 16:39
 */
@ApiModel(value = "基础查询列表dto")
public class BasePage {
public class BasePage implements Serializable {
    private static final long serialVersionUID = -6677391205868835849L;
    /**
     * 分页参数,当前页码
     */
    @ApiModelProperty(value = "分页参数,当前页码")
    @DecimalMin(value = "1", message = "当前页码最小为1")
    private Integer pageCurr = 1;
    /**
     * 分页参数,每页数量
     */
    @ApiModelProperty(value = "分页参数,每页数量,默认为10")
    @DecimalMin(value = "1", message = "每页数量最低为1")
    private Integer pageSize = 10;
    public Integer getPageCurr() {
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/pojo/AuctionSalesroom.java
@@ -71,8 +71,8 @@
    @ApiModelProperty(value = "拍卖状态 0=预展中 1=拍卖中 2=已结束")
    private AuctionStartStatusEnum status;
    @ApiModelProperty(value = "拍卖场二维码")
    private String auctionSalesroomQrcode;
    @ApiModelProperty(value = "拍卖场编码")
    private String auctionSalesroomNo;
    @ApiModelProperty(value = "创建者")
    @TableField(value = "create_by", fill = FieldFill.INSERT)
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsBrandController.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.goods.controller.mamagement;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 品牌表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/mgt/goods-brand")
@RequiredArgsConstructor
public class MgtGoodsBrandController {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsCategoryController.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.goods.controller.mamagement;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 商品分类表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/mgt/goods-category")
public class MgtGoodsCategoryController {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsFlavorTypeController.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.goods.controller.mamagement;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 香型表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/mgt/goods-flavor-type")
public class MgtGoodsFlavorTypeController {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsGroupPurchaseController.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.goods.controller.mamagement;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 商品团购表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/mgt/goods-group-purchase")
public class MgtGoodsGroupPurchaseController {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsInfoTitleController.java
New file
@@ -0,0 +1,78 @@
package com.ruoyi.goods.controller.mamagement;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.goods.domain.dto.GoodsInfoTitleDTO;
import com.ruoyi.goods.domain.query.GoodsInfoTitleQuery;
import com.ruoyi.goods.domain.vo.GoodsInfoTitleVO;
import com.ruoyi.goods.service.IGoodsInfoTitleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 商品信息标题表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/mgt/goods-info-title")
@Api(value = "管理后台商品信息标题相关接口", tags = {"管理后台接口"})
public class MgtGoodsInfoTitleController {
    private final IGoodsInfoTitleService goodsInfoTitleService;
    /**
     * 获取商品信息标题列表的分页数据。
     *
     * @param query 商品信息标题查询条件对象,通过验证后传入。
     * @return 返回一个包含商品信息标题分页数据的结果对象。
     */
    @ApiOperation("获取商品信息标题列表的分页数据")
    @PostMapping("/page")
    public R<PageDTO<GoodsInfoTitleVO>> getGoodsInfoTitlePage(
            @Validated @RequestBody GoodsInfoTitleQuery query) {
        return R.ok(goodsInfoTitleService.getGoodsInfoTitlePage(query));
    }
    /**
     * 添加/编辑商品信息标题。 该接口用于接收商品信息标题的数据,并将其保存。
     *
     * @param dto 商品信息标题数据传输对象,经过验证确保数据的合法性。
     * @return 返回操作结果,如果操作成功,返回一个成功的标识。
     */
    @ApiOperation("添加/编辑 商品信息标题")
    @PostMapping("/save")
    public R<Void> saveGoodsInfoTitle(@Validated @RequestBody GoodsInfoTitleDTO dto) {
        goodsInfoTitleService.saveGoodsInfoTitle(dto);
        return R.ok();
    }
    /**
     * 删除商品信息标题
     *
     * @param id 商品信息标题的ID,用于指定要删除的商品信息标题。
     * @return 返回一个表示操作结果的R<Void>对象,如果操作成功,R对象的status为200;否则根据具体情况进行相应处理。
     */
    @ApiOperation("删除商品信息标题")
    @DeleteMapping("/{id}")
    public R<Void> deleteGoodsInfoTitle(@PathVariable("id") Long id) {
        goodsInfoTitleService.deleteGoodsInfoTitle(id);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsSeckillController.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.goods.controller.mamagement;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 商品秒杀表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/mgt/goods-seckill")
public class MgtGoodsSeckillController {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsSeriesController.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.goods.controller.mamagement;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 系列表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@RestController
@RequestMapping("/mgt/goods-series")
public class MgtGoodsSeriesController {
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/mamagement/MgtGoodsSkuController.java
New file
@@ -0,0 +1,167 @@
package com.ruoyi.goods.controller.mamagement;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.goods.domain.dto.GoodsSkuDTO;
import com.ruoyi.goods.domain.query.GoodsInfoTitleQuery;
import com.ruoyi.goods.domain.query.GoodsSkuQuery;
import com.ruoyi.goods.domain.vo.GoodsBrandVO;
import com.ruoyi.goods.domain.vo.GoodsCategoryVO;
import com.ruoyi.goods.domain.vo.GoodsFlavorTypeVO;
import com.ruoyi.goods.domain.vo.GoodsInfoTitleVO;
import com.ruoyi.goods.domain.vo.GoodsSeriesVO;
import com.ruoyi.goods.domain.vo.GoodsSkuVO;
import com.ruoyi.goods.service.IGoodsBrandService;
import com.ruoyi.goods.service.IGoodsCategoryService;
import com.ruoyi.goods.service.IGoodsFlavorTypeService;
import com.ruoyi.goods.service.IGoodsInfoTitleService;
import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
import com.ruoyi.goods.service.IGoodsSeriesService;
import com.ruoyi.goods.service.IGoodsSkuService;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 商品表 前端控制器
 * </p>
 *
 * @author mitao
 * @since 2024-05-16
 */
@Slf4j
@RestController
@RequestMapping("/mgt/goods-sku")
@RequiredArgsConstructor
@Api(value = "管理后台商品相关接口", tags = {"管理后台接口"})
public class MgtGoodsSkuController {
    private final IGoodsSkuService goodsSkuService;
    private final IGoodsBrandService goodsBrandService;
    private final IGoodsSeriesService goodsSeriesService;
    private final IGoodsCategoryService goodsCategoryService;
    private final IGoodsInfoTitleService goodsInfoTitleService;
    private final IGoodsFlavorTypeService goodsFlavorTypeService;
    private final IGoodsInfoTitleValueService goodsInfoTitleValueService;
    /**
     * 获取商品分类列表的接口 该接口不需要接收任何参数,调用后返回商品分类的列表信息。
     *
     * @return R<List < GoodsCategoryVO>> 返回类型为R的封装结果,其中包含商品分类的列表信息。
     * List<GoodsCategoryVO>是商品分类的实体列表,GoodsCategoryVO是商品分类的视图对象。
     */
    @ApiOperation(value = "获取商品分类列表", notes = "获取商品分类列表")
    @GetMapping("/category/list")
    public R<List<GoodsCategoryVO>> getGoodsCategoryList() {
        return R.ok(goodsCategoryService.getGoodsCategoryList());
    }
    /**
     * 获取商品系列列表的接口
     * 该接口不需要任何请求参数,调用后返回商品系列的列表信息。
     *
     * @return R<List < GoodsSeriesVO>> 返回类型为R的封装结果,其中包含商品系列的列表信息。
     *         List<GoodsSeriesVO>是商品系列的实体列表,GoodsSeriesVO是商品系列的视图对象。
     */
    @ApiOperation(value = "获取商品系列列表", notes = "获取商品系列列表")
    @GetMapping("/series/list")
    public R<List<GoodsSeriesVO>> getGoodsSeriesList() {
        return R.ok(goodsSeriesService.getGoodsSeriesList());
    }
    /**
     * 获取商品品牌列表的接口 该接口不需要接收任何参数,调用后返回商品品牌的列表信息。
     *
     * @return R<List < GoodsBrandVO>> 返回类型为R包装的GoodsBrandVO对象列表,R是框架定义的结果包装类, 其中包含了操作状态码和操作结果信息。
     */
    @ApiOperation(value = "获取商品品牌列表", notes = "获取商品品牌列表")
    @GetMapping("/brand/list")
    public R<List<GoodsBrandVO>> getGoodsBrandList() {
        return R.ok(goodsBrandService.getGoodsBrandList());
    }
    /**
     * 获取商品香型列表
     * <p>
     * 该接口用于查询商品的香型列表信息。 不需要传入任何参数,返回商品香型的列表。
     *
     * @return R<List < GoodsFlavorTypeVO>> 包含商品香型列表的响应对象。
     */
    @GetMapping("/flavor/list")
    public R<List<GoodsFlavorTypeVO>> getGoodsFlavorTypeList() {
        return R.ok(goodsFlavorTypeService.getGoodsFlavorTypeList());
    }
    /**
     * 获取商品信息标题列表的分页数据。
     *
     * @param query 商品信息标题查询条件对象,通过验证后传入。
     * @return 返回商品信息标题列表的分页数据响应对象。
     */
    @ApiOperation(value = "获取商品信息标题列表的分页数据", notes = "获取商品信息标题列表的分页数据")
    @PostMapping("/title/page")
    public R<PageDTO<GoodsInfoTitleVO>> getGoodsInfoTitlePage(
            @Validated @RequestBody GoodsInfoTitleQuery query) {
        return R.ok(goodsInfoTitleService.getGoodsInfoTitlePage(query));
    }
    /**
     * 添加/编辑商品
     *
     * @param dto 商品SKU数据传输对象,经过验证的请求体参数,用于传递商品信息。
     * @return R<Void>
     */
    @ApiOperation(value = "添加/编辑商品", notes = "添加商品")
    @PostMapping("/save")
    public R<Void> saveGoods(@Validated @RequestBody GoodsSkuDTO dto) {
        try {
            goodsSkuService.saveGoods(dto);
        } catch (JsonProcessingException e) {
            log.error("JSON转换异常", e);
            return R.fail();
        }
        return R.ok();
    }
    /**
     * 获取商品列表的分页数据
     *
     * @param query 商品分页查询条件
     * @return 返回商品分页数据的响应对象
     */
    @ApiOperation(value = "获取商品列表的分页数据", notes = "获取商品列表的分页数据")
    @PostMapping("/page")
    public R<PageDTO<GoodsSkuVO>> getGoodsPage(@Validated @RequestBody GoodsSkuQuery query) {
        return R.ok(goodsSkuService.getGoodsPage(query));
    }
    /**
     * 更新商品状态,实现商品的下架或上架。
     *
     * @param dto 包含需要更新状态的商品信息的数据传输对象,类型为 ListStatusDTO。
     * @return 返回一个表示操作结果的 R<Void> 对象,如果操作成功,则 R<Void>.ok() 方法返回一个成功标记。
     */
    @ApiOperation(value = "下架/上架 商品")
    @PutMapping("/upd-status")
    public R<Void> updStatus(@RequestBody ListStatusDTO dto) {
        goodsSkuService.updStatus(dto);
        return R.ok();
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/GoodsInfoTitleDTO.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.goods.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品信息标题数据传输对象", description = "商品信息标题数据传输对象")
public class GoodsInfoTitleDTO {
    @ApiModelProperty(value = "商品信息标题id")
    @NotNull(message = "商品信息标题id不能为空")
    private Long id;
    @ApiModelProperty(value = "标题名称")
    @NotBlank(message = "标题名称不能为空")
    private String titleName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/GoodsInfoTitleValueDTO.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.goods.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品信息数据传输对象", description = "商品信息数据传输对象")
public class GoodsInfoTitleValueDTO implements Serializable {
    private static final long serialVersionUID = -6419722448469655827L;
    @ApiModelProperty(value = "商品信息标题id")
    @NotNull(message = "商品信息标题id不能为空")
    private Long goodsInfoTitleId;
    @ApiModelProperty(value = "内容")
    private String content;
    @ApiModelProperty(value = "排序")
    private Integer sortNum;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/GoodsSkuDTO.java
New file
@@ -0,0 +1,102 @@
package com.ruoyi.goods.domain.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品sku数据传输对象", description = "商品sku数据传输对象")
public class GoodsSkuDTO implements Serializable {
    private static final long serialVersionUID = 1717246837055584271L;
    @ApiModelProperty(value = "商品id", notes = "更新必传")
    private Long id;
    @ApiModelProperty(value = "商品名称")
    @NotBlank(message = "商品名称不能为空")
    private String skuName;
    @ApiModelProperty(value = "商品年份")
    @NotBlank(message = "商品年份不能为空")
    private String years;
    @ApiModelProperty(value = "商品分类id")
    @NotNull(message = "商品分类id不能为空")
    private Long categoryId;
    @ApiModelProperty(value = "商品系列id")
    @NotNull(message = "商品系列id不能为空")
    private Long seriesId;
    @ApiModelProperty(value = "商品品牌id")
    @NotNull(message = "商品品牌id不能为空")
    private Long brandId;
    @ApiModelProperty(value = "商品香型id")
    @NotNull(message = "商品香型id不能为空")
    private Long flavorTypeId;
    @ApiModelProperty(value = "商品价格")
    @NotNull(message = "商品价格不能为空")
    private BigDecimal price;
    @ApiModelProperty(value = "库存")
    @NotNull(message = "库存不能为空")
    private Integer stock;
    @ApiModelProperty(value = "单位")
    @NotBlank(message = "单位不能为空")
    private String unit;
    @ApiModelProperty(value = "规格")
    private String spec;
    @ApiModelProperty(value = "规格单位")
    private String specUnit;
    @ApiModelProperty(value = "封面图")
    @NotBlank(message = "封面图不能为空")
    private String coverPic;
    @ApiModelProperty(value = "详情图,不超过五张图片,多张照片使用英文逗号拼接")
    @NotBlank(message = "详情图不能为空")
    private String album;
    @ApiModelProperty(value = "分享标题")
    @NotBlank(message = "分享标题不能为空")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    @NotBlank(message = "分享图片不能为空")
    private String sharePic;
    @ApiModelProperty(value = "商品信息")
    @NotEmpty(message = "商品信息不能为空")
    @Valid
    private List<GoodsInfoTitleValueDTO> goodsInfoTitleValueDTOList;
    @ApiModelProperty(value = "商品描述")
    @NotBlank(message = "商品描述不能为空")
    private String description;
    @ApiModelProperty(value = "商品说明")
    @NotBlank(message = "商品说明不能为空")
    private String detail;
    @ApiModelProperty(value = "排序")
    private Integer sortNum;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/pojo/GoodsSku.java
@@ -61,6 +61,9 @@
    @ApiModelProperty(value = "库存")
    private Integer stock;
    @ApiModelProperty(value = "已售数量")
    private Integer soldQuantity;
    @ApiModelProperty(value = "单位")
    private String unit;
@@ -74,7 +77,7 @@
    private String coverPic;
    @ApiModelProperty(value = "详情图,不超过五张图片")
    private String alubm;
    private String album;
    @ApiModelProperty(value = "分享标题")
    private String shareTitle;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/query/GoodsInfoTitleQuery.java
New file
@@ -0,0 +1,22 @@
package com.ruoyi.goods.domain.query;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "商品信息标题查询对象", description = "商品信息标题查询对象")
public class GoodsInfoTitleQuery extends BasePage {
    private static final long serialVersionUID = -5680812329761912738L;
    @ApiModelProperty(value = "标题名称")
    private String titleName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/query/GoodsSkuQuery.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.goods.domain.query;
import com.ruoyi.common.core.enums.ListingStatusEnum;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "商品sku查询对象", description = "商品sku查询对象")
public class GoodsSkuQuery extends BasePage {
    private static final long serialVersionUID = 1936789008079678538L;
    @ApiModelProperty(value = "商品名称")
    private String skuName;
    @ApiModelProperty(value = "上架状态 上架中 已下架", notes = "参数传文字")
    private ListingStatusEnum listingStatus;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsBrandVO.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.goods.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品品牌视图对象", description = "商品品牌视图对象")
public class GoodsBrandVO implements Serializable {
    private static final long serialVersionUID = -3410809707312808498L;
    @ApiModelProperty(value = "品牌id")
    private Long id;
    @ApiModelProperty(value = "品牌名称")
    private String brandName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsCategoryVO.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.goods.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品分类视图对象", description = "商品分类视图对象")
public class GoodsCategoryVO implements Serializable {
    private static final long serialVersionUID = 5709489391987782043L;
    @ApiModelProperty(value = "商品分类id")
    private Long id;
    @ApiModelProperty(value = "分类名称")
    private String categoryName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsFlavorTypeVO.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.goods.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "香型视图对象", description = "香型视图对象")
public class GoodsFlavorTypeVO implements Serializable {
    private static final long serialVersionUID = -9190780555638450511L;
    @ApiModelProperty(value = "香型id")
    private Long id;
    @ApiModelProperty(value = "香型名称")
    private String flavorTypeName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsInfoTitleVO.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.goods.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品信息标题视图对象", description = "商品信息标题视图对象")
public class GoodsInfoTitleVO implements Serializable {
    private static final long serialVersionUID = 1305732550790329483L;
    @ApiModelProperty(value = "商品信息标题id")
    private Long id;
    @ApiModelProperty(value = "标题名称")
    private String titleName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsSeriesVO.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.goods.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品系列视图对象", description = "商品系列视图对象")
public class GoodsSeriesVO implements Serializable {
    private static final long serialVersionUID = -4711563700322753898L;
    @ApiModelProperty(value = "系列id")
    private Long id;
    @ApiModelProperty(value = "系列名称")
    private String seriesName;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/GoodsSkuVO.java
New file
@@ -0,0 +1,87 @@
package com.ruoyi.goods.domain.vo;
import com.ruoyi.common.core.enums.ListingStatusEnum;
import com.ruoyi.goods.domain.dto.GoodsInfoTitleValueDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品sku视图对象", description = "商品sku视图对象")
public class GoodsSkuVO implements Serializable {
    private static final long serialVersionUID = 6605575092116471441L;
    @ApiModelProperty(value = "商品id", notes = "更新必传")
    private Long id;
    @ApiModelProperty(value = "商品名称")
    private String skuName;
    @ApiModelProperty(value = "商品年份")
    private String years;
    @ApiModelProperty(value = "商品分类id")
    private Long categoryId;
    @ApiModelProperty(value = "商品系列id")
    private Long seriesId;
    @ApiModelProperty(value = "商品品牌id")
    private Long brandId;
    @ApiModelProperty(value = "商品香型id")
    private Long flavorTypeId;
    @ApiModelProperty(value = "商品价格")
    private BigDecimal price;
    @ApiModelProperty(value = "库存")
    private Integer stock;
    @ApiModelProperty(value = "已售数量")
    private Integer soldQuantity;
    @ApiModelProperty(value = "单位")
    private String unit;
    @ApiModelProperty(value = "规格")
    private String spec;
    @ApiModelProperty(value = "规格单位")
    private String specUnit;
    @ApiModelProperty(value = "封面图")
    private String coverPic;
    @ApiModelProperty(value = "详情图,不超过五张图片,多张照片使用英文逗号拼接")
    private String album;
    @ApiModelProperty(value = "分享标题")
    private String shareTitle;
    @ApiModelProperty(value = "分享图片")
    private String sharePic;
    @ApiModelProperty(value = "商品信息")
    private List<GoodsInfoTitleValueDTO> goodsInfoTitleValueDTOList;
    @ApiModelProperty(value = "商品描述")
    private String description;
    @ApiModelProperty(value = "商品说明")
    private String detail;
    @ApiModelProperty(value = "排序")
    private Integer sortNum;
    @ApiModelProperty(value = "上架状态 0=上架中 1= 已下架")
    private ListingStatusEnum listingStatus;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrandService.java
@@ -1,7 +1,9 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsBrand;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.pojo.GoodsBrand;
import com.ruoyi.goods.domain.vo.GoodsBrandVO;
import java.util.List;
/**
 * <p>
@@ -13,4 +15,5 @@
 */
public interface IGoodsBrandService extends IService<GoodsBrand> {
    List<GoodsBrandVO> getGoodsBrandList();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsCategoryService.java
@@ -1,7 +1,9 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsCategory;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.pojo.GoodsCategory;
import com.ruoyi.goods.domain.vo.GoodsCategoryVO;
import java.util.List;
/**
 * <p>
@@ -13,4 +15,5 @@
 */
public interface IGoodsCategoryService extends IService<GoodsCategory> {
    List<GoodsCategoryVO> getGoodsCategoryList();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsFlavorTypeService.java
@@ -1,7 +1,9 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsFlavorType;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.pojo.GoodsFlavorType;
import com.ruoyi.goods.domain.vo.GoodsFlavorTypeVO;
import java.util.List;
/**
 * <p>
@@ -13,4 +15,5 @@
 */
public interface IGoodsFlavorTypeService extends IService<GoodsFlavorType> {
    List<GoodsFlavorTypeVO> getGoodsFlavorTypeList();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsInfoTitleService.java
@@ -1,7 +1,11 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitle;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.goods.domain.dto.GoodsInfoTitleDTO;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitle;
import com.ruoyi.goods.domain.query.GoodsInfoTitleQuery;
import com.ruoyi.goods.domain.vo.GoodsInfoTitleVO;
/**
 * <p>
@@ -13,4 +17,27 @@
 */
public interface IGoodsInfoTitleService extends IService<GoodsInfoTitle> {
    /**
     * 获取商品信息标题的分页数据。
     *
     * @param query 查询条件,包含当前页、每页大小和标题名称等条件。
     * @return 返回商品信息标题的分页DTO,包含分页信息和转换后的VO对象列表。
     */
    PageDTO<GoodsInfoTitleVO> getGoodsInfoTitlePage(GoodsInfoTitleQuery query);
    /**
     * 保存或更新商品信息标题。
     *
     * @param dto 商品信息标题数据传输对象,包含商品标题的信息。 如果dto中的id为空,则认为是新纪录,执行保存操作; 如果id不为空,则认为是更新现有纪录。
     * @return 无返回值。
     */
    void saveGoodsInfoTitle(GoodsInfoTitleDTO dto);
    /**
     * 删除商品信息标题
     *
     * @param id 商品信息的唯一标识符
     * @return 无返回值
     */
    void deleteGoodsInfoTitle(Long id);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsInfoTitleValueService.java
@@ -1,7 +1,7 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitleValue;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitleValue;
/**
 * <p>
@@ -13,4 +13,10 @@
 */
public interface IGoodsInfoTitleValueService extends IService<GoodsInfoTitleValue> {
    /**
     * 根据商品SKU ID移除相关记录。
     *
     * @param id 商品SKU的唯一标识符。
     */
    void removeByGoodsSkuId(Long id);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeriesService.java
@@ -1,7 +1,9 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsSeries;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.domain.pojo.GoodsSeries;
import com.ruoyi.goods.domain.vo.GoodsSeriesVO;
import java.util.List;
/**
 * <p>
@@ -13,4 +15,5 @@
 */
public interface IGoodsSeriesService extends IService<GoodsSeries> {
    List<GoodsSeriesVO> getGoodsSeriesList();
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -1,7 +1,13 @@
package com.ruoyi.goods.service;
import com.ruoyi.goods.domain.pojo.GoodsSku;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.goods.domain.dto.GoodsSkuDTO;
import com.ruoyi.goods.domain.pojo.GoodsSku;
import com.ruoyi.goods.domain.query.GoodsSkuQuery;
import com.ruoyi.goods.domain.vo.GoodsSkuVO;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
/**
 * <p>
@@ -13,4 +19,27 @@
 */
public interface IGoodsSkuService extends IService<GoodsSku> {
    /**
     * 保存商品SKU信息。
     *
     * @param dto 商品SKU的DTO(数据传输对象),包含要保存或更新的商品SKU的详细信息。
     * @throws JsonProcessingException 当处理JSON数据时发生错误。
     */
    void saveGoods(GoodsSkuDTO dto) throws JsonProcessingException;
    /**
     * 获取商品SKU分页数据
     *
     * @param query 查询条件,包括SKU名称、上架状态、页码和页大小
     * @return 分页数据对象,包含商品SKU的信息
     */
    PageDTO<GoodsSkuVO> getGoodsPage(GoodsSkuQuery query);
    /**
     * 更新商品SKU的状态。
     *
     * @param dto 数据传输对象,包含需要更新的SKU的ID和新的上架状态。 其中,ID用于指定要更新的具体SKU,listingStatus用于指定新的上架状态。
     * @return 无返回值。
     */
    void updStatus(ListStatusDTO dto);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrandServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.goods.domain.pojo.GoodsBrand;
import com.ruoyi.goods.domain.vo.GoodsBrandVO;
import com.ruoyi.goods.mapper.GoodsBrandMapper;
import com.ruoyi.goods.service.IGoodsBrandService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +20,17 @@
@Service
public class GoodsBrandServiceImpl extends ServiceImpl<GoodsBrandMapper, GoodsBrand> implements IGoodsBrandService {
    /**
     * 获取商品品牌列表。
     * <p>此方法通过调用{@code list()}方法获取原始列表,并使用BeanUtils的{@code copyList}方法将其复制为{@code
     * GoodsBrandVO}类型的列表后返回。</p>
     *
     * @return 返回一个{@code GoodsBrandVO}类型的列表,包含商品品牌信息。
     */
    @Override
    public List<GoodsBrandVO> getGoodsBrandList() {
        // 将原始列表转换为GoodsBrandVO类型的列表
        return BeanUtils.copyList(this.list(), GoodsBrandVO.class);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsCategoryServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.goods.domain.pojo.GoodsCategory;
import com.ruoyi.goods.domain.vo.GoodsCategoryVO;
import com.ruoyi.goods.mapper.GoodsCategoryMapper;
import com.ruoyi.goods.service.IGoodsCategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +20,16 @@
@Service
public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper, GoodsCategory> implements IGoodsCategoryService {
    /**
     * 获取商品类别列表的副本。
     * <p>此方法不接受任何参数,它会调用 {@code list()} 方法获取当前类别列表的副本,并将其转换为 {@code GoodsCategoryVO} 类型的列表后返回。</p>
     *
     * @return 返回一个 {@code List<GoodsCategoryVO>},包含当前商品类别的所有信息的副本。
     */
    @Override
    public List<GoodsCategoryVO> getGoodsCategoryList() {
        // 使用BeanUtils的copyList方法将当前列表转换为GoodsCategoryVO类型的列表并返回
        return BeanUtils.copyList(this.list(), GoodsCategoryVO.class);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsFlavorTypeServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.goods.domain.pojo.GoodsFlavorType;
import com.ruoyi.goods.domain.vo.GoodsFlavorTypeVO;
import com.ruoyi.goods.mapper.GoodsFlavorTypeMapper;
import com.ruoyi.goods.service.IGoodsFlavorTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +20,15 @@
@Service
public class GoodsFlavorTypeServiceImpl extends ServiceImpl<GoodsFlavorTypeMapper, GoodsFlavorType> implements IGoodsFlavorTypeService {
    /**
     * 获取商品口味类型的列表。
     * <p>此方法通过调用 {@code list()} 方法获取原始列表,并使用 {@code BeanUtils.copyList} 方法将每个元素转换为
     * {@code GoodsFlavorTypeVO} 类型,最终返回转换后的列表。</p>
     *
     * @return 返回一个 {@code List<GoodsFlavorTypeVO>},包含转换后的商品口味类型信息。
     */
    @Override
    public List<GoodsFlavorTypeVO> getGoodsFlavorTypeList() {
        return BeanUtils.copyList(this.list(), GoodsFlavorTypeVO.class);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsInfoTitleServiceImpl.java
@@ -1,9 +1,16 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.goods.domain.dto.GoodsInfoTitleDTO;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitle;
import com.ruoyi.goods.domain.query.GoodsInfoTitleQuery;
import com.ruoyi.goods.domain.vo.GoodsInfoTitleVO;
import com.ruoyi.goods.mapper.GoodsInfoTitleMapper;
import com.ruoyi.goods.service.IGoodsInfoTitleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +24,49 @@
@Service
public class GoodsInfoTitleServiceImpl extends ServiceImpl<GoodsInfoTitleMapper, GoodsInfoTitle> implements IGoodsInfoTitleService {
    /**
     * 获取商品信息标题的分页数据。
     *
     * @param query 查询条件,包含当前页、每页大小和标题名称等条件。
     * @return 返回商品信息标题的分页DTO,包含分页信息和转换后的VO对象列表。
     */
    @Override
    public PageDTO<GoodsInfoTitleVO> getGoodsInfoTitlePage(GoodsInfoTitleQuery query) {
        // 根据查询条件进行查询,包括标题名称的模糊查询,并分页
        Page<GoodsInfoTitle> page = this.lambdaQuery()
                .like(StringUtils.isNotEmpty(query.getTitleName()), GoodsInfoTitle::getTitleName,
                        query.getTitleName())
                .page(new Page<GoodsInfoTitle>(query.getPageCurr(), query.getPageSize()));
        // 将查询结果转换为VO对象的分页DTO返回
        return PageDTO.of(page, GoodsInfoTitleVO.class);
    }
    /**
     * 保存或更新商品信息标题。
     *
     * @param dto 商品信息标题数据传输对象,包含商品标题的信息。 如果dto中的id为空,则认为是新纪录,执行保存操作; 如果id不为空,则认为是更新现有纪录。
     * @return 无返回值。
     */
    @Override
    public void saveGoodsInfoTitle(GoodsInfoTitleDTO dto) {
        // 将DTO对象复制为GoodsInfoTitle实体对象
        GoodsInfoTitle goodsInfoTitle = BeanUtils.copyBean(dto, GoodsInfoTitle.class);
        // 判断DTO中的ID是否为空,决定是进行保存还是更新操作
        if (StringUtils.isNull(dto.getId())) {
            this.save(goodsInfoTitle); // 保存新纪录
        } else {
            this.updateById(goodsInfoTitle); // 更新现有纪录
        }
    }
    /**
     * 删除商品信息标题
     *
     * @param id 商品信息的唯一标识符
     * @return 无返回值
     */
    @Override
    public void deleteGoodsInfoTitle(Long id) {
        this.removeById(id);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsInfoTitleValueServiceImpl.java
@@ -1,9 +1,9 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitleValue;
import com.ruoyi.goods.mapper.GoodsInfoTitleValueMapper;
import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +17,16 @@
@Service
public class GoodsInfoTitleValueServiceImpl extends ServiceImpl<GoodsInfoTitleValueMapper, GoodsInfoTitleValue> implements IGoodsInfoTitleValueService {
    /**
     * 根据商品SKU ID移除相应的商品信息标题值。
     *
     * @param id 商品SKU的唯一标识符。
     *           <p>
     *           本方法通过使用Lambda更新表达式,设置条件为商品SKU ID与传入的ID相等,然后执行移除操作。
     */
    @Override
    public void removeByGoodsSkuId(Long id) {
        this.lambdaUpdate().eq(GoodsInfoTitleValue::getGoodsSkuId, id).remove();
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeriesServiceImpl.java
@@ -1,9 +1,12 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.goods.domain.pojo.GoodsSeries;
import com.ruoyi.goods.domain.vo.GoodsSeriesVO;
import com.ruoyi.goods.mapper.GoodsSeriesMapper;
import com.ruoyi.goods.service.IGoodsSeriesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import org.springframework.stereotype.Service;
/**
@@ -17,4 +20,18 @@
@Service
public class GoodsSeriesServiceImpl extends ServiceImpl<GoodsSeriesMapper, GoodsSeries> implements IGoodsSeriesService {
    /**
     * 获取商品系列列表的视图对象。
     *
     * <p>此方法不接受任何参数,它会调用 {@code list()} 方法获取原始列表,
     * 然后使用 {@code BeanUtils.copyList} 将这些实体转换为视图对象。</p>
     *
     * @return 返回一个 {@link List} 类型的商品系列视图对象列表。每个视图对象代表一个商品系列的简要信息。
     */
    @Override
    public List<GoodsSeriesVO> getGoodsSeriesList() {
        // 使用BeanUtils工具类将实体列表转换为视图对象列表
        return BeanUtils.copyList(this.list(), GoodsSeriesVO.class);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -1,10 +1,31 @@
package com.ruoyi.goods.service.impl;
import com.ruoyi.goods.domain.pojo.GoodsSku;
import com.ruoyi.goods.mapper.GoodsSkuMapper;
import com.ruoyi.goods.service.IGoodsSkuService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.Checker;
import com.ruoyi.common.core.utils.page.CollUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.goods.domain.dto.GoodsInfoTitleValueDTO;
import com.ruoyi.goods.domain.dto.GoodsSkuDTO;
import com.ruoyi.goods.domain.pojo.GoodsInfoTitleValue;
import com.ruoyi.goods.domain.pojo.GoodsSku;
import com.ruoyi.goods.domain.query.GoodsSkuQuery;
import com.ruoyi.goods.domain.vo.GoodsSkuVO;
import com.ruoyi.goods.mapper.GoodsSkuMapper;
import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
import com.ruoyi.goods.service.IGoodsSkuService;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
 * <p>
@@ -15,6 +36,126 @@
 * @since 2024-05-16
 */
@Service
@Slf4j
@RequiredArgsConstructor
public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> implements IGoodsSkuService {
    private final IGoodsInfoTitleValueService goodsInfoTitleValueService;
    private static final ObjectMapper objectMapper = new ObjectMapper();
    /**
     * 保存商品SKU信息。
     *
     * @param dto 商品SKU的DTO(数据传输对象),包含要保存或更新的商品SKU的详细信息。
     * @throws JsonProcessingException 当处理JSON数据时发生错误。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveGoods(GoodsSkuDTO dto) throws JsonProcessingException {
        // 使用BeanUtils将DTO对象复制到GoodsSku实体对象
        GoodsSku goodsSku = BeanUtils.copyBean(dto, GoodsSku.class);
        // 分割并处理专辑图片字符串,将其转换为JSON格式
        String albumStr = processAlbumString(goodsSku.getAlbum());
        goodsSku.setAlbum(albumStr);
        // 根据ID判断是进行新增还是更新操作
        if (Objects.isNull(dto.getId())) {
            this.save(goodsSku);
        } else {
            this.updateById(goodsSku);
        }
        // 处理商品额外信息,如规格、属性等
        processGoodsInfoTitleValue(dto, goodsSku);
    }
    /**
     * 处理相册字符串。 该方法将输入的相册字符串分割为字符串数组,并将其序列化为JSON字符串形式返回。 如果输入的相册字符串为空或仅包含空白字符,则返回空字符串。
     *
     * @param album 输入的相册字符串,可能包含多个相册名称,各相册名称之间以逗号分隔。
     * @return 返回序列化后的相册名称数组的JSON字符串。如果输入为空,则返回空字符串。
     * @throws JsonProcessingException 如果在序列化过程中发生错误,则抛出此异常。
     */
    private String processAlbumString(String album) throws JsonProcessingException {
        if (StringUtils.isEmpty(album)) {
            return ""; // 返回空字符串,避免后续处理出现问题
        }
        String[] albumArr = album.split(",");
        return objectMapper.writeValueAsString(albumArr);
    }
    /**
     * 处理商品信息标题和值的逻辑。 将DTO列表复制到实体列表中,校验其完整性和正确性,然后关联SKU ID,并最后保存到数据库。
     *
     * @param dto      包含商品信息标题和值的DTO对象
     * @param goodsSku 商品SKU实体,用于关联商品额外信息
     * @throws ServiceException 如果校验失败或数据处理出现异常,则抛出服务异常
     */
    private void processGoodsInfoTitleValue(GoodsSkuDTO dto, GoodsSku goodsSku)
            throws ServiceException {
        List<GoodsInfoTitleValueDTO> goodsInfoTitleValueDTOList = dto.getGoodsInfoTitleValueDTOList();
        // 复制DTO列表到实体列表
        List<GoodsInfoTitleValue> goodsInfoTitleValues = BeanUtils.copyList(
                goodsInfoTitleValueDTOList, GoodsInfoTitleValue.class);
        // 校验商品额外信息的完整性和正确性
        CollUtils.check(goodsInfoTitleValues, new Checker<GoodsInfoTitleValue>() {
            @Override
            public void check(GoodsInfoTitleValue data) {
                if (StringUtils.isNull(data.getGoodsInfoTitleId())) {
                    throw new ServiceException("商品信息标题id不能为空");
                }
                if (StringUtils.isEmpty(data.getContent())) {
                    throw new ServiceException("商品信息内容不能为空");
                }
            }
        });
        // 给每个商品额外信息关联上SKU ID
        for (GoodsInfoTitleValue goodsInfoTitleValue : goodsInfoTitleValues) {
            goodsInfoTitleValue.setGoodsSkuId(goodsSku.getId());
        }
        // 先清除旧的商品信息,再批量保存新的商品信息
        goodsInfoTitleValueService.removeByGoodsSkuId(goodsSku.getId());
        goodsInfoTitleValueService.saveBatch(goodsInfoTitleValues);
    }
    /**
     * 获取商品SKU分页数据
     *
     * @param query 查询条件,包括SKU名称、上架状态、页码和页大小
     * @return 分页数据对象,包含商品SKU的信息
     */
    @Override
    public PageDTO<GoodsSkuVO> getGoodsPage(GoodsSkuQuery query) {
        Page<GoodsSku> page = this.lambdaQuery()
                .select(GoodsSku::getId, GoodsSku::getSkuName, GoodsSku::getPrice,
                        GoodsSku::getStock, GoodsSku::getSoldQuantity, GoodsSku::getSortNum,
                        GoodsSku::getListingStatus)
                .like(StringUtils.isNotEmpty(query.getSkuName()), GoodsSku::getSkuName,
                        query.getSkuName())
                .eq(StringUtils.isNotNull(query.getListingStatus()
                ), GoodsSku::getListingStatus, query.getListingStatus())
                .page(new Page<GoodsSku>(query.getPageCurr(), query.getPageSize()));
        return PageDTO.of(page, GoodsSkuVO.class);
    }
    /**
     * 更新商品SKU的状态。
     *
     * @param dto 数据传输对象,包含需要更新的SKU的ID和新的上架状态。 其中,ID用于指定要更新的具体SKU,listingStatus用于指定新的上架状态。
     * @return 无返回值。
     */
    @Override
    public void updStatus(ListStatusDTO dto) {
        this.lambdaUpdate()
                .eq(GoodsSku::getId, dto.getId())
                .set(GoodsSku::getListingStatus, dto.getListingStatus())
                .update();
    }
}
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -16,13 +16,7 @@
import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.domain.SysRole;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.CompanyAddSysUserDto;
import com.ruoyi.system.api.model.CompanySysUserReq;
import com.ruoyi.system.api.model.CompanyUserListVo;
import com.ruoyi.system.api.model.LoginUser;
import com.ruoyi.system.api.model.SysUserRoleDTO;
import com.ruoyi.system.api.model.TRepairShopAdd;
import com.ruoyi.system.api.model.TRepairShopAddDto;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
@@ -34,7 +28,6 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -228,53 +221,7 @@
        return R.ok(list);
    }
    @PostMapping("/getSysUserFromCompanyId")
    public R<List<CompanyUserListVo>> getSysUserFromCompanyId(@RequestBody CompanySysUserReq companySysUserReq) {
        LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if (companySysUserReq.getUserIds().size() == 0) {
            List<Integer> userIds = companySysUserReq.getUserIds();
            userIds.add(-1);
            companySysUserReq.setUserIds(userIds);
        }
        sysUserLambdaQueryWrapper.in(SysUser::getUserId, companySysUserReq.getUserIds());
        if (companySysUserReq.getName() != null && !"".equals(companySysUserReq.getName())) {
            sysUserLambdaQueryWrapper.like(SysUser::getUserName, companySysUserReq.getName()).or().like(SysUser::getPhonenumber, companySysUserReq.getName());
        }
        sysUserLambdaQueryWrapper.eq(SysUser::getRoleType,2);
        List<SysUser> list = userService.list(sysUserLambdaQueryWrapper);
        ArrayList<CompanyUserListVo> companyUserListVos = new ArrayList<>();
        for (SysUser sysUser : list) {
            CompanyUserListVo companyUserListVo = new CompanyUserListVo();
            companyUserListVo.setId(sysUser.getUserId());
            companyUserListVo.setPassword(sysUser.getPassword());
            companyUserListVo.setPhoneNumber(sysUser.getPhonenumber());
            companyUserListVo.setUserName(sysUser.getUserName());
            companyUserListVo.setNickName(sysUser.getNickName());
            companyUserListVos.add(companyUserListVo);
        }
        return R.ok(companyUserListVos);
    }
    @PostMapping("/getSysUserFromCompanyIdOne")
    public R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(@RequestBody CompanySysUserReq companySysUserReq) {
        LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
        sysUserLambdaQueryWrapper.eq(SysUser::getRoleType, 2);
        if (companySysUserReq.getName() != null && !"".equals(companySysUserReq.getName())) {
            sysUserLambdaQueryWrapper.like(SysUser::getPhonenumber, companySysUserReq.getName());
        }
        List<SysUser> list = userService.list(sysUserLambdaQueryWrapper);
        ArrayList<CompanyUserListVo> companyUserListVos = new ArrayList<>();
        for (SysUser sysUser : list) {
            CompanyUserListVo companyUserListVo = new CompanyUserListVo();
            companyUserListVo.setId(sysUser.getUserId());
            companyUserListVo.setPassword(sysUser.getPassword());
            companyUserListVo.setPhoneNumber(sysUser.getPhonenumber());
            companyUserListVo.setUserName(sysUser.getUserName());
            companyUserListVo.setNickName(sysUser.getNickName());
            companyUserListVos.add(companyUserListVo);
        }
        return R.ok(companyUserListVos);
    }
    @PostMapping("/isAdmin")
    public R<Integer> isAdmin(@RequestBody Long userId){
        SysUserRole one = sysUserRoleService.getOne(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
@@ -305,86 +252,6 @@
            return R.ok();
        }
    }
    @PostMapping("/companySaveSysUser")
    public R<List<Integer>> companySaveSysUser(@RequestBody CompanyAddSysUserDto dto) {
        List<CompanyUserListVo> list = dto.getList();
        ArrayList<Integer> userIds = new ArrayList<>();
        try {
            for (CompanyUserListVo companyUserListVo : list) {
                    List<Long> ids = userService.getSysUserFromPhone(companyUserListVo.getPhoneNumber());
                SysUser sysUser = new SysUser();
                    if (ids.size() > 0) {
                        sysUser.setRoleType(2);
                        sysUser.setObjectId(dto.getCompanyId());
                        if(companyUserListVo.getPassword()!=null){
                            sysUser.setPassword(SecurityUtils.encryptPassword(companyUserListVo.getPassword()));
                        }
                        sysUser.setPhonenumber(companyUserListVo.getPhoneNumber());
                        sysUser.setUserName(companyUserListVo.getPhoneNumber());
                        sysUser.setNickName(companyUserListVo.getNickName());
                        sysUser.setUserId(ids.get(0).longValue());
                        userService.updateUser(sysUser);
                        userIds.add(ids.get(0).intValue());
                    } else {
                        sysUser.setRoleType(2);
                        sysUser.setObjectId(dto.getCompanyId());
                        if(companyUserListVo.getPassword()!=null){
                            sysUser.setPassword(SecurityUtils.encryptPassword(companyUserListVo.getPassword()));
                        }
                        sysUser.setPhonenumber(companyUserListVo.getPhoneNumber());
                        sysUser.setUserName(companyUserListVo.getPhoneNumber());
                        sysUser.setNickName(companyUserListVo.getNickName());
                        sysUser.setCreateBy(SecurityUtils.getUsername());
                        sysUser.setCreateTime(new Date());
                        userService.insertUser(sysUser);
                        SysUserRole sysUserRole = new SysUserRole();
                        sysUserRole.setRoleId(20l);
                        sysUserRole.setUserId(sysUser.getUserId());
                        sysUserRoleService.insertSysUserRole(sysUserRole);
                        userIds.add(sysUser.getUserId().intValue());
                    }
            }
            return R.ok(userIds);
        } catch (Exception e) {
            e.printStackTrace();
            return R.ok(new ArrayList<>());
        }
    }
    @PostMapping("/addTRepairSysUser")
    public R<List<Integer>> addTRepairSysUser(@RequestBody TRepairShopAddDto dto) {
        List<TRepairShopAdd> list = dto.getList();
        ArrayList<Integer> userIds = new ArrayList<>();
        try {
            for (TRepairShopAdd add : list) {
                List<Long> ids = userService.getSysUserFromPhone(add.getPhonenumber());
                if (ids.size() > 0) {
                    userIds.add(ids.get(0).intValue());
                } else {
                    SysUser sysUser = new SysUser();
                    sysUser.setPhonenumber(add.getPhonenumber());
                    sysUser.setCreateTime(new Date());
                    sysUser.setCreateBy(SecurityUtils.getUsername());
                    sysUser.setPassword(SecurityUtils.encryptPassword(add.getPwd()));
                    sysUser.setRoleType(4);
                    sysUser.setObjectId(dto.getRepairId());
                    sysUser.setUserName(add.getPhonenumber());
                    sysUser.setNickName(add.getPhonenumber());
                    userService.insertUser(sysUser);
                    userIds.add(sysUser.getUserId().intValue());
                }
            }
            return R.ok(userIds);
        } catch (Exception e) {
            e.printStackTrace();
            return R.ok(new ArrayList<>());
        }
    }
    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:user:export")
@@ -594,23 +461,6 @@
                .in(SysUser::getPhonenumber, phoneList)
                .ne(SysUser::getDelFlag,2));
        return R.ok(list);
    }
    /**
     * 默认批量添加修理厂
     * @param dtoList
     * @return
     */
    @PostMapping("/addUserRole")
    public R<Boolean> addUserRole(@RequestBody List<SysUserRoleDTO> dtoList){
        List<SysUserRole> userRoles = new ArrayList<>();
        for (SysUserRoleDTO userRoleDTO : dtoList) {
            SysUserRole userRole = new SysUserRole();
            userRole.setRoleId(userRoleDTO.getRoleId());
            userRole.setUserId(userRoleDTO.getUserId());
            userRoles.add(userRole);
        }
        return R.ok(sysUserRoleService.saveBatch(userRoles));
    }
    /**