xuhy
2024-12-23 65948198a6dc5e808440ac6874db6df8aab6d9ab
Merge remote-tracking branch 'origin/master'

# Conflicts:
# manage/src/main/resources/mapping/TLensWarehousingDetailMapper.xml
36个文件已修改
29个文件已添加
1862 ■■■■■ 已修改文件
applet/src/main/java/com/jilongda/applet/model/TAppUser.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/src/main/java/com/jilongda/common/pojo/BaseModel.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/pom.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/controller/TAppUserController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/controller/TCouponController.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/controller/TInventoryController.java 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/controller/TLensSeriesController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/controller/TWarehousingController.java 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/dto/FrameInventoryDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/dto/GetCurrentByParam.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/dto/GetCurrentByParamLens.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/mapper/TAppUserMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/mapper/TCouponMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/mapper/TCouponReceiveMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/mapper/TFrameGoodsMapper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/mapper/TInventoryMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/mapper/TLensGoodsMapper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TAppUser.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TCoupon.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TCouponReceive.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TFrameGoods.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TInventory.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TInventoryFrameDetail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/model/TLensGoods.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TAppUserCouponQuery.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TAppUserQuery.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TCouponQuery.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TFrameGoodsQuery.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TInventoryQuery.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TLensGoodsQuery.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/query/TOptometryQuery.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/TAppUserService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/TCouponReceiveService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/TCouponService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/TFrameGoodsService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/TInventoryService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/TLensGoodsService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TAppUserServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TCouponReceiveServiceImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TCouponServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TFrameGoodsServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TInventoryServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TLensGoodsServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/service/impl/TLensSeriesServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/utils/QRCodeUtil.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TAppUserCouponVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TAppUserVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TCouponInfoVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TCouponVO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TFrameGoodsVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TInventoryInfoVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TInventoryVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TLensGoodsDetailVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TLensGoodsVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TLensSeriesVO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/java/com/jilongda/manage/vo/TWarehousingLensVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TAppUserMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TCouponMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TCouponReceiveMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TFrameGoods.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TInventoryMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TLensGoods.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TLineUpMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manage/src/main/resources/mapping/TOptometristMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
optometry/src/main/java/com/jilongda/optometry/model/TAppUser.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
applet/src/main/java/com/jilongda/applet/model/TAppUser.java
@@ -57,9 +57,7 @@
    @TableField("gender")
    private Integer gender;
    @ApiModelProperty(value = "注册时间")
    @TableField("registerTime")
    private LocalDateTime registerTime;
    @ApiModelProperty(value = "状态 1=启用 0=禁用")
    @TableField("status")
common/src/main/java/com/jilongda/common/pojo/BaseModel.java
@@ -32,7 +32,7 @@
    /**
     * 新增执行
     */
    @ApiModelProperty(value = "记录创建人,前端忽略")
    @ApiModelProperty(value = "记录创建人(操作人),前端忽略")
    @TableField(value = "createBy", fill = FieldFill.INSERT)
    private String createBy;
manage/pom.xml
@@ -18,6 +18,21 @@
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.9</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
manage/src/main/java/com/jilongda/manage/controller/TAppUserController.java
@@ -1,9 +1,31 @@
package com.jilongda.manage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TCouponReceive;
import com.jilongda.manage.model.TOptometry;
import com.jilongda.manage.model.TOrder;
import com.jilongda.manage.query.TAppUserCouponQuery;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TOptometristQuery;
import com.jilongda.manage.service.TAppUserService;
import com.jilongda.manage.service.TCouponReceiveService;
import com.jilongda.manage.service.TOptometryService;
import com.jilongda.manage.service.TOrderService;
import com.jilongda.manage.vo.TAppUserCouponVO;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TOptometristVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal;
/**
 * <p>
@@ -14,8 +36,72 @@
 * @since 2024-12-09
 */
@RestController
@Api(tags = "用户管理")
@RequestMapping("/t-app-user")
public class TAppUserController {
    @Resource
    private TAppUserService appUserService;
    @Resource
    private TOrderService orderService;
    @Resource
    private TOptometryService tOptometryService;
    @Resource
    private TCouponReceiveService couponReceiveService;
    @ApiOperation(value = "用户列表")
    @PostMapping(value = "/pageList")
    public ApiResult<PageInfo<TAppUserVO>> pageList(@RequestBody TAppUserQuery query) {
        if (StringUtils.hasLength(query.getStartTime())){
            query.setStartTime(query.getStartTime()+" 00:00:00");
            query.setEndTime(query.getEndTime()+" 23:59:59");
        }
        PageInfo<TAppUserVO> appUserVOPageInfo = appUserService.pageList(query);
        return ApiResult.success(appUserVOPageInfo);
    }
    @ApiOperation(value = "启用/禁用")
    @GetMapping(value = "/updateState")
    public ApiResult updateState(Integer id) {
        TAppUser byId = appUserService.getById(id);
        if (byId.getStatus()==1){
            byId.setStatus(2);
        }else{
            byId.setStatus(1);
        }
        appUserService.updateById(byId);
        return ApiResult.success();
    }
    @ApiOperation(value = "用户详情")
    @GetMapping(value = "/getDetailById")
    public ApiResult<TAppUserVO> getDetailById(Integer id) {
        TAppUser byId = appUserService.getById(id);
        TAppUserVO tAppUserVO = new TAppUserVO();
        BeanUtils.copyProperties(byId, tAppUserVO);
        // 查询消费次数
        long l = orderService.count(new LambdaQueryWrapper<TOrder>()
                .eq(TOrder::getUserId, tAppUserVO.getId()));
        tAppUserVO.setSalesCount((int) l);
        // 查询验光次数
        int size = tOptometryService.lambdaQuery().eq(TOptometry::getUserId, tAppUserVO.getId())
                .eq(TOptometry::getStatus, 3).list().size();
        tAppUserVO.setOptometryCount(size);
        // 查询最后消费时间
        tAppUserVO.setSalesTime(orderService.lambdaQuery().eq(TOrder::getUserId, tAppUserVO.getId())
                .orderByDesc(TOrder::getCreateTime).last("limit 1").one().getCreateTime());
        // 查询最后验光时间
        tAppUserVO.setOptometryTime(tOptometryService.lambdaQuery().eq(TOptometry::getUserId, tAppUserVO.getId())
                .eq(TOptometry::getStatus, 3).orderByDesc(TOptometry::getCreateTime).last("limit 1").one().getCreateTime());
        // 查询订单总额
        BigDecimal reduce = orderService.lambdaQuery().eq(TOrder::getUserId, byId.getId()).list().stream().map(TOrder::getPayMoney)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        tAppUserVO.setSalesAmount(reduce);
        return ApiResult.success(tAppUserVO);
    }
    @ApiOperation(value = "用户详情-查看优惠券")
    @GetMapping(value = "/getCouponDetailById")
    public ApiResult<PageInfo<TAppUserCouponVO>> getCouponDetailById(@RequestBody TAppUserCouponQuery query) {
        PageInfo<TAppUserCouponVO> appUserVOPageInfo = couponReceiveService.pageList(query);
        return ApiResult.success(appUserVOPageInfo);
    }
}
manage/src/main/java/com/jilongda/manage/controller/TCouponController.java
@@ -1,9 +1,49 @@
package com.jilongda.manage.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.common.utils.UUIDUtil;
import com.jilongda.manage.dto.TModelDTO;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TCoupon;
import com.jilongda.manage.model.TCouponReceive;
import com.jilongda.manage.model.TModel;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TCouponQuery;
import com.jilongda.manage.service.TAppUserService;
import com.jilongda.manage.service.TCouponReceiveService;
import com.jilongda.manage.service.TCouponService;
import com.jilongda.manage.utils.QRCodeUtil;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TCouponInfoVO;
import com.jilongda.manage.vo.TCouponVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
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;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -14,8 +54,116 @@
 * @since 2024-12-09
 */
@RestController
@Api(tags = "优惠券管理")
@RequestMapping("/t-coupon")
public class TCouponController {
    @Resource
    private TCouponService couponService;
    @Resource
    private TCouponReceiveService couponReceiveService;
    @Resource
    private TAppUserService appUserService;
    @ApiOperation(value = "优惠券列表")
    @PostMapping(value = "/pageList")
    public ApiResult<PageInfo<TCouponVO>> pageList(@RequestBody TCouponQuery query) {
        PageInfo<TCouponVO> appUserVOPageInfo = couponService.pageList(query);
        return ApiResult.success(appUserVOPageInfo);
    }
    @ApiOperation(value = "添加优惠券")
    @PostMapping(value = "/add")
    public ApiResult<String> add( @RequestBody TCoupon dto) throws Exception {
        couponService.save(dto);
        switch (dto.getType()){
            case 2:
                // 全局发放
                List<Integer> collect = appUserService.lambdaQuery().list().stream()
                        .map(TAppUser::getId).collect(Collectors.toList());
                List<TCouponReceive> tCouponReceives = new ArrayList<>();
                for (Integer i : collect) {
                    TCouponReceive tCouponReceive = new TCouponReceive();
                    tCouponReceive.setCouponId(dto.getId());
                    tCouponReceive.setUserId(i);
                    tCouponReceive.setType(2);
                    tCouponReceive.setAmount(dto.getAmount());
                    tCouponReceive.setStoreId(dto.getStoreId());
                    if (dto.getTime()!=0){
                        tCouponReceive.setEndTime(LocalDateTime.now().plusDays(dto.getTime()));
                    }
                    tCouponReceive.setAmountCondition(dto.getAmountCondition());
                    tCouponReceive.setStatus(1);
                    tCouponReceives.add(tCouponReceive);
                }
                couponReceiveService.saveBatch(tCouponReceives);
                break;
            case 3:
                List<TCouponReceive> tCouponReceives1 = new ArrayList<>();
                for (Integer userId : dto.getUserIds()) {
                    TCouponReceive tCouponReceive = new TCouponReceive();
                    tCouponReceive.setCouponId(dto.getId());
                    tCouponReceive.setUserId(userId);
                    tCouponReceive.setType(2);
                    tCouponReceive.setAmount(dto.getAmount());
                    tCouponReceive.setStoreId(dto.getStoreId());
                    if (dto.getTime()!=0){
                        tCouponReceive.setEndTime(LocalDateTime.now().plusDays(dto.getTime()));
                    }
                    tCouponReceive.setAmountCondition(dto.getAmountCondition());
                    tCouponReceive.setStatus(1);
                    tCouponReceives1.add(tCouponReceive);
                }
                couponReceiveService.saveBatch(tCouponReceives1);
                break;
            case 4:
                String code = "{\"id\": "+dto.getId()+ "}";
                BufferedImage blueImage = QRCodeUtil.createImage(code);
                MultipartFile blueFile = convert(blueImage, new Date().getTime() + UUIDUtil.getRandomCode(3) + ".PNG");
                // todo 没有云存储
//                String s = OssUploadUtil.ossUpload("img/", blueFile);
                break;
        }
        return ApiResult.success();
    }
    @ApiOperation(value = "修改优惠券")
    @PostMapping(value = "/update")
    public ApiResult<String> update( @RequestBody TCoupon dto) throws Exception {
        couponService.updateById(dto);
        return ApiResult.success();
    }
    @ApiOperation(value = "优惠券详情")
    @PostMapping(value = "/getDetail")
    public ApiResult<TCouponInfoVO> getDetail(Integer id) {
        TCouponInfoVO tCouponInfoVO = new TCouponInfoVO();
        TCoupon byId = couponService.getById(id);
        BeanUtils.copyProperties(byId, tCouponInfoVO);
        int size = couponReceiveService.list(new LambdaQueryWrapper<TCouponReceive>()
                .eq(TCouponReceive::getCouponId, id)).size();
        tCouponInfoVO.setGrantCout(size);
        int size1 = couponReceiveService.list(new LambdaQueryWrapper<TCouponReceive>()
                .eq(TCouponReceive::getCouponId, id)
                .eq(TCouponReceive::getStatus, 2)).size();
        tCouponInfoVO.setUseCount(size1);
        return ApiResult.success(tCouponInfoVO);
    }
    public static MultipartFile convert(BufferedImage bufferedImage, String fileName) throws IOException {
        // 将 BufferedImage 转换为字节数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "png", baos);
        byte[] bytes = baos.toByteArray();
        // 创建 ByteArrayResource
        ByteArrayResource resource = new ByteArrayResource(bytes);
        // 创建 MockMultipartFile
        MockMultipartFile multipartFile = new MockMultipartFile(
                "file",
                fileName,
                "image/png",
                resource.getInputStream()
        );
        return multipartFile;
    }
}
manage/src/main/java/com/jilongda/manage/controller/TInventoryController.java
@@ -1,9 +1,29 @@
package com.jilongda.manage.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.dto.FrameInventoryDTO;
import com.jilongda.manage.dto.GetCurrentByParam;
import com.jilongda.manage.dto.GetCurrentByParamLens;
import com.jilongda.manage.model.*;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.query.TInventoryQuery;
import com.jilongda.manage.service.*;
import com.jilongda.manage.utils.LoginInfoUtil;
import com.jilongda.manage.vo.TFrameGoodsVO;
import com.jilongda.manage.vo.TInventoryInfoVO;
import com.jilongda.manage.vo.TInventoryVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -14,8 +34,137 @@
 * @since 2024-12-09
 */
@RestController
@Api(tags = "盘点管理")
@RequestMapping("/t-inventory")
public class TInventoryController {
    @Resource
    private TInventoryService inventoryService;
    @Resource
    private TInventoryFrameDetailService inventoryFrameDetailService;
    @Resource
    private TInventoryLensDetailService inventoryLensDetailService;
    @Resource
    private LoginInfoUtil loginInfoUtil;
    @Resource
    private TFrameGoodsService frameGoodsService;
    @Resource
    private TLensGoodsService lensGoodsService;
    @Resource
    private TLensSeriesService lensSeriesService;
    @Resource
    private TModelService modelService;
    @Resource
    private TStoreService storeService;
    @ApiOperation(value = "盘点分页列表")
    @PostMapping(value = "/pageList")
    public ApiResult<PageInfo<TInventoryVO>> pageList(@RequestBody TInventoryQuery query) {
        if (StringUtils.hasLength(query.getStartTime())){
            query.setStartTime(query.getStartTime()+" 00:00:00");
            query.setEndTime(query.getEndTime()+" 23:59:59");
        }
        return ApiResult.success(inventoryService.pageList(query));
    }
    @ApiOperation(value = "镜架添加盘点")
    @PostMapping(value = "/addFrameInventory")
    public ApiResult<PageInfo<TInventoryVO>> addFrameInventory(@RequestBody TInventoryQuery query) {
        if (StringUtils.hasLength(query.getStartTime())){
            query.setStartTime(query.getStartTime()+" 00:00:00");
            query.setEndTime(query.getEndTime()+" 23:59:59");
        }
        return ApiResult.success(inventoryService.pageList(query));
    }
    @ApiOperation(value = "镜片添加盘点")
    @PostMapping(value = "/addLensInventory")
    public ApiResult addLensInventory(@RequestBody FrameInventoryDTO query) {
        TInventory tInventory = new TInventory();
        BeanUtils.copyProperties(query, tInventory);
        inventoryService.save(tInventory);
        for (TInventoryFrameDetail tInventoryFrameDetail : query.getList()) {
            tInventoryFrameDetail.setInventoryId(tInventory.getId());
        }
        inventoryFrameDetailService.saveBatch(query.getList());
        return ApiResult.success();
    }
    @ApiOperation(value = "镜架-根据品牌id查询对应库存")
    @PostMapping(value = "/getCountByBrandId")
    public ApiResult getCountByBrandId(Integer id) {
        List<Integer> collect = modelService.lambdaQuery().eq(TModel::getBrandId, id)
                .list().stream().map(TModel::getId).distinct().collect(Collectors.toList());
        if (collect.isEmpty())collect.add(-1);
        List<TFrameGoods> list = frameGoodsService.lambdaQuery().in(TFrameGoods::getModelId, collect).list();
        if (list.isEmpty())return ApiResult.success("0");
        int i = 0;
        for (TFrameGoods tFrameGoods : list) {
            i+=tFrameGoods.getTotal();
        }
        return ApiResult.success(i);
    }
    @ApiOperation(value = "镜架-根据材质id查询对应库存")
    @PostMapping(value = "/getCountByMaterialId")
    public ApiResult getCountByMaterialId(Integer id) {
        List<Integer> collect = modelService.lambdaQuery().eq(TModel::getMaterialId, id)
                .list().stream().map(TModel::getId).distinct().collect(Collectors.toList());
        if (collect.isEmpty())collect.add(-1);
        List<TFrameGoods> list = frameGoodsService.lambdaQuery().in(TFrameGoods::getModelId, collect).list();
        if (list.isEmpty())return ApiResult.success("0");
        int i = 0;
        for (TFrameGoods tFrameGoods : list) {
            i+=tFrameGoods.getTotal();
        }
        return ApiResult.success(i);
    }
    @ApiOperation(value = "镜架-根据品牌id、型号名称、色号名称、材质id查询当前库存")
    @PostMapping(value = "/getCurrentByParamFrame")
    public ApiResult<Integer> getCurrentByParamFrame(@RequestBody GetCurrentByParam getCurrentByParam) {
        // 根据型号名称 查询型号列表ids
        List<Integer> collect = modelService.lambdaQuery().eq(TModel::getName, getCurrentByParam.getModel())
                .eq(TModel::getColor,getCurrentByParam.getColor())
                .eq(TModel::getMaterialId,getCurrentByParam.getMaterialId())
                .eq(TModel::getBrandId,getCurrentByParam.getBrandId())
                .list().stream().map(TModel::getId).collect(Collectors.toList());
        TFrameGoods one = frameGoodsService.lambdaQuery().in(TFrameGoods::getModelId, collect)
                .eq(TFrameGoods::getColor, getCurrentByParam.getColor()).one();
        if (one!=null){
            return ApiResult.success(one.getTotal());
        }
        return ApiResult.success(0);
    }
    @ApiOperation(value = "镜片-根据品牌id、型号名称、色号名称、材质id查询当前库存")
    @PostMapping(value = "/getCurrentByParamLens")
    public ApiResult<Integer> getCurrentByParamLens(@RequestBody GetCurrentByParamLens dto) {
        TLensGoods one = lensGoodsService.lambdaQuery().in(TLensGoods::getSeriesId, dto.getSeriesId())
                .eq(dto.getLensType()!=null,TLensGoods::getLensType, dto.getLensType())
                .eq(dto.getRefractiveIndex()!=null,TLensGoods::getRefractiveIndex, dto.getRefractiveIndex())
                .eq(dto.getBallMirror()!=null,TLensGoods::getBallMirror, dto.getBallMirror())
                .eq(dto.getColumnMirror()!=null,TLensGoods::getColumnMirror, dto.getColumnMirror())
                .one();
        if (one!=null){
            return ApiResult.success(one.getTotal());
        }
        return ApiResult.success(0);
    }
    @ApiOperation(value = "查看详情")
    @GetMapping(value = "/getDetailById")
    public ApiResult<TInventoryInfoVO> getDetailById(Integer id) {
        TInventoryInfoVO tInventoryInfoVO = new TInventoryInfoVO();
        TInventory byId = inventoryService.getById(id);
        switch (byId.getType()){
            case 1:
                List<TInventoryFrameDetail> list = inventoryFrameDetailService.lambdaQuery().eq(TInventoryFrameDetail::getInventoryId, id).list();
                tInventoryInfoVO.setFrameList(list);
                break;
            case 2:
                List<TInventoryLensDetail> list2 = inventoryLensDetailService.lambdaQuery().eq(TInventoryLensDetail::getInventoryId, id).list();
                tInventoryInfoVO.setLensList(list2);
                break;
        }
        TStore byId1 = storeService.getById(byId.getStoreId());
        if (byId1!=null)tInventoryInfoVO.setStore(byId1.getName());
        return ApiResult.success(tInventoryInfoVO);
    }
}
manage/src/main/java/com/jilongda/manage/controller/TLensSeriesController.java
@@ -1,6 +1,8 @@
package com.jilongda.manage.controller;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;
import com.jilongda.common.basic.ApiResult;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TLensSeries;
@@ -15,6 +17,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>
@@ -69,5 +74,57 @@
        lensSeriesService.updateById(byId);
        return ApiResult.success();
    }
    @ApiOperation(value = "通过品牌id查询镜片系列列表")
    @GetMapping(value = "/seriesList")
    public ApiResult<List<TLensSeries>> seriesList(Integer brandId) {
        return ApiResult.success(lensSeriesService.lambdaQuery().eq(TLensSeries::getBrandId,brandId).list());
    }
    @ApiOperation(value = "通过系列id查询球/非球 返回参数1为球 2非球 3双飞")
    @GetMapping(value = "/lensTypeList")
    public ApiResult<List<Integer>> lensTypeList(Integer id) {
        TLensSeries byId = lensSeriesService.getById(id);
        List<Integer> integers = new ArrayList<>();
        if (StringUtils.hasLength(byId.getSphere())){
            integers.add(1);
        }
        if (StringUtils.hasLength(byId.getAsphericSurface())){
            integers.add(2);
        }
        if (StringUtils.hasLength(byId.getDoubleNon())){
            integers.add(3);
        }
        return ApiResult.success(integers);
    }
    @ApiOperation(value = "根据系列id + 球/非球查询折射率列表 球/非球入参数1为球 2非球 3双飞")
    @GetMapping(value = "/refractiveIndexList")
    public ApiResult<List<String>> refractiveIndexList(Integer id, Integer lensType) {
        TLensSeries byId = lensSeriesService.getById(id);
        if (lensType==1){
            String sphere = byId.getSphere();
            // 将字符串化为jsonArray
            if (StringUtils.hasLength(sphere)) {
                JSONObject.parseArray(sphere);
            } else {
                return ApiResult.success(new ArrayList<String>());
            }
        }
        if (lensType==2){
            String asphericSurface = byId.getAsphericSurface();
            if (StringUtils.hasLength(asphericSurface)) {
                JSONObject.parseArray(asphericSurface);
            } else {
                return ApiResult.success(new ArrayList<String>());
            }
        }
        if (lensType==3){
            String doubleNon = byId.getDoubleNon();
            if (StringUtils.hasLength(doubleNon)) {
                JSONObject.parseArray(doubleNon);
            } else {
                return ApiResult.success(new ArrayList<String>());
            }
        }
        return ApiResult.success(new ArrayList<String>());
    }
}
manage/src/main/java/com/jilongda/manage/controller/TWarehousingController.java
@@ -8,20 +8,17 @@
import com.jilongda.common.enums.WarehousingTypeEnum;
import com.jilongda.common.security.JwtTokenUtils;
import com.jilongda.common.utils.CodeGenerateUtils;
import com.jilongda.manage.dto.GetCurrentByParam;
import com.jilongda.manage.dto.GetCurrentByParamLens;
import com.jilongda.manage.dto.TWarehousingDTO;
import com.jilongda.manage.dto.TWarehousingLensDTO;
import com.jilongda.manage.model.TFrameWarehousingDetail;
import com.jilongda.manage.model.TLensWarehousingDetail;
import com.jilongda.manage.model.TWarehousing;
import com.jilongda.manage.model.*;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.query.TLensGoodsQuery;
import com.jilongda.manage.query.TWarehousingDetailLensQuery;
import com.jilongda.manage.query.TWarehousingDetailQuery;
import com.jilongda.manage.service.TFrameWarehousingDetailService;
import com.jilongda.manage.service.TLensWarehousingDetailService;
import com.jilongda.manage.service.TWarehousingService;
import com.jilongda.manage.vo.TFrameWarehousingDetailVO;
import com.jilongda.manage.vo.TLensWarehousingDetailVO;
import com.jilongda.manage.vo.TWarehousingLensVO;
import com.jilongda.manage.vo.TWarehousingVO;
import com.jilongda.manage.service.*;
import com.jilongda.manage.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
@@ -30,7 +27,9 @@
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -51,7 +50,62 @@
    private TFrameWarehousingDetailService frameWarehousingDetailService;
    @Autowired
    private TLensWarehousingDetailService lensWarehousingDetailService;
    @Autowired
    private TFrameGoodsService frameGoodsService;
    @Autowired
    private TLensGoodsService lensGoodsService;
    @Autowired
    private TModelService modelService;
    @Autowired
    private TLensSeriesService lensSeriesService;
    @Autowired
    private TStoreService storeService;
    @Autowired
    private TBrandService brandService;
    /**
     * 通过型号查询色号列表
     */
    @ApiOperation(value = "镜架-根据品牌id、型号名称、色号名称查询当前库存")
    @PostMapping(value = "/getCurrentByParamFrame")
    public ApiResult<Integer> getCurrentByParamFrame(@RequestBody GetCurrentByParam getCurrentByParam) {
        // 根据型号名称 查询型号列表ids
        List<Integer> collect = modelService.lambdaQuery().eq(TModel::getName, getCurrentByParam.getModel())
                .eq(TModel::getMaterialId,getCurrentByParam.getMaterialId())
                .eq(TModel::getColor,getCurrentByParam.getColor())
                .eq(TModel::getBrandId,getCurrentByParam.getBrandId())
                .list().stream().map(TModel::getId).collect(Collectors.toList());
        TFrameGoods one = frameGoodsService.lambdaQuery().in(TFrameGoods::getModelId, collect)
                .eq(TFrameGoods::getColor, getCurrentByParam.getColor()).one();
        if (one!=null){
            return ApiResult.success(one.getTotal());
        }
        return ApiResult.success(0);
    }
    @ApiOperation(value = "镜片-根据品牌id、型号名称、色号名称、材质id查询当前库存")
    @PostMapping(value = "/getCurrentByParamLens")
    public ApiResult<Integer> getCurrentByParamLens(@RequestBody GetCurrentByParamLens dto) {
        TLensGoods one = lensGoodsService.lambdaQuery().in(TLensGoods::getSeriesId, dto.getSeriesId())
                .eq(dto.getLensType()!=null,TLensGoods::getLensType, dto.getLensType())
                .eq(dto.getRefractiveIndex()!=null,TLensGoods::getRefractiveIndex, dto.getRefractiveIndex())
                .eq(dto.getBallMirror()!=null,TLensGoods::getBallMirror, dto.getBallMirror())
                .eq(dto.getColumnMirror()!=null,TLensGoods::getColumnMirror, dto.getColumnMirror())
                .one();
        if (one!=null){
            return ApiResult.success(one.getTotal());
        }
        return ApiResult.success(0);
    }
    @ApiOperation(value = "镜架库存分页列表")
    @PostMapping(value = "/frameReceiptList")
    public ApiResult<PageInfo<TFrameGoodsVO>> frameReceiptList(@RequestBody TFrameGoodsQuery query) {
        return ApiResult.success(frameGoodsService.lensReceiptList(query));
    }
    @ApiOperation(value = "镜片库存分页列表")
    @PostMapping(value = "/lensReceiptList")
    public ApiResult<PageInfo<TLensGoodsVO>> lensReceiptList(@RequestBody TLensGoodsQuery query) {
        return ApiResult.success(lensGoodsService.lensReceiptList(query));
    }
    /**
     * 出入库单列表
     */
@@ -78,11 +132,38 @@
    /**
     * 库存明细记录列表
     */
    @ApiOperation(value = "镜片库存明细记录列表")
    @ApiOperation(value = "镜片库存明细记录列表--库存详情")
    @PostMapping(value = "/detailLensList")
    public ApiResult<PageInfo<TLensWarehousingDetailVO>> detailLensList(@RequestBody TWarehousingDetailLensQuery query) {
        PageInfo<TLensWarehousingDetailVO> frameWarehousingDetailVOPageInfo = warehousingService.detailListLens(query);
        return ApiResult.success(frameWarehousingDetailVOPageInfo);
    public ApiResult<TLensGoodsDetailVO> detailLensList(Integer id) {
        TLensGoodsDetailVO tLensGoodsDetailVO = new TLensGoodsDetailVO();
        TLensGoods byId = lensGoodsService.getById(id);
        TStore byId1 = storeService.getById(byId.getStoreId());
        if (byId1!=null){
            tLensGoodsDetailVO.setStoreName(byId1.getName());
        }
        TLensSeries byId2 = lensSeriesService.getById(byId.getSeriesId());
        if (byId2!=null){
            Integer brandId = byId2.getBrandId();
            TBrand byId3 = brandService.getById(brandId);
            String t1 = "";
            switch (byId.getLensType()){
                case 1:
                    t1="球面";
                    break;
                case 2:
                    t1="非球面";
                    break;
                case 3:
                    t1="双非";
                    break;
            }
            tLensGoodsDetailVO.setTitle(byId3.getName()+byId2.getName()+t1+" "+byId.getRefractiveIndex());
        }
        // 查询这个商品的库存明细
        List<TLensWarehousingDetail> list = lensWarehousingDetailService.lambdaQuery().eq(TLensWarehousingDetail::getSeriesId, byId.getSeriesId())
                .eq(TLensWarehousingDetail::getRefractiveIndex, byId.getRefractiveIndex()).list();
        tLensGoodsDetailVO.setList(list);
        return ApiResult.success(tLensGoodsDetailVO);
    }
    /**
@@ -90,7 +171,7 @@
     */
    @ApiOperation(value = "添加镜架出库,入库,作废,退货")
    @PostMapping(value = "/outBound")
    public ApiResult<Integer> outBound(@Validated @RequestBody TWarehousingDTO dto) {
    public ApiResult outBound(@Validated @RequestBody TWarehousingDTO dto) {
        // 获取当前用户
        String username = JwtTokenUtils.getUsername();
        dto.setCreateBy(username);
@@ -104,7 +185,48 @@
            detail.setWarehousingId(dto.getId());
            detail.setCode(WarehousingConstant.OUT_BOUND+CodeGenerateUtils.generateVolumeSn());
        });
        if (dto.getStatus()==1||dto.getStatus()==3){
            List<TFrameGoods> list1 = new ArrayList<>();
            for (TFrameWarehousingDetail frameWarehousingDetail : frameWarehousingDetails) {
                TFrameGoods one = frameGoodsService.lambdaQuery().eq(TFrameGoods::getModelId, frameWarehousingDetail.getModelId())
                        .eq(TFrameGoods::getColor, frameWarehousingDetail.getColor()).one();
                if (one!=null){
                    if (one.getTotal()-frameWarehousingDetail.getTotal()<0){
                        return ApiResult.failed("库存不足");
                    }
                    // 增加对应库存
                    one.setTotal(one.getTotal()-frameWarehousingDetail.getTotal());
                    list1.add(one);
                }
            }
            if (!list1.isEmpty())frameGoodsService.updateBatchById(list1);
        }
        frameWarehousingDetailService.saveBatch(frameWarehousingDetails);
        if (dto.getStatus()==2 || dto.getStatus()==4){
            List<TFrameGoods> list1 = new ArrayList<>();
            List<TFrameGoods> list2 = new ArrayList<>();
            for (TFrameWarehousingDetail frameWarehousingDetail : frameWarehousingDetails) {
                TFrameGoods one = frameGoodsService.lambdaQuery().eq(TFrameGoods::getModelId, frameWarehousingDetail.getModelId())
                        .eq(TFrameGoods::getColor, frameWarehousingDetail.getColor()).one();
                if (one!=null){
                    // 增加对应库存
                    one.setTotal(one.getTotal()+frameWarehousingDetail.getTotal());
                    list1.add(one);
                }else {
                    // 新增
                    TFrameGoods tFrameGoods = new TFrameGoods();
                    tFrameGoods.setColor(frameWarehousingDetail.getColor());
                    tFrameGoods.setTotal(frameWarehousingDetail.getTotal());
                    tFrameGoods.setModelId(frameWarehousingDetail.getModelId());
                    tFrameGoods.setStoreId(dto.getStoreId());
                    list2.add(tFrameGoods);
                }
            }
            if (!list1.isEmpty())frameGoodsService.updateBatchById(list1);
            if (!list2.isEmpty())frameGoodsService.saveBatch(list2);
        }
        return ApiResult.success(dto.getId());
    }
    /**
@@ -112,7 +234,7 @@
     */
    @ApiOperation(value = "添加镜片出库,入库,作废,退货")
    @PostMapping(value = "/outBoundLens")
    public ApiResult<String> outBoundLens(@Validated @RequestBody TWarehousingLensDTO dto) {
    public ApiResult outBoundLens(@Validated @RequestBody TWarehousingLensDTO dto) {
        // 获取当前用户
        String username = JwtTokenUtils.getUsername();
        dto.setCreateBy(username);
@@ -125,8 +247,60 @@
            detail.setWarehousingId(dto.getId());
            detail.setCode(WarehousingConstant.OUT_BOUND+CodeGenerateUtils.generateVolumeSn());
        });
        if (dto.getStatus()==1||dto.getStatus()==3){
            List<TLensGoods> list1 = new ArrayList<>();
            for (TLensWarehousingDetail frameWarehousingDetail : frameWarehousingDetails) {
                TLensGoods one = lensGoodsService.lambdaQuery().eq(TLensGoods::getSeriesId, frameWarehousingDetail.getSeriesId())
                        .eq(TLensGoods::getRefractiveIndex, frameWarehousingDetail.getRefractiveIndex())
                        .eq(TLensGoods::getLensType, frameWarehousingDetail.getType())
                        .eq(TLensGoods::getBallMirror, frameWarehousingDetail.getBallMirror())
                        .eq(TLensGoods::getColumnMirror, frameWarehousingDetail.getColumnMirror())
                        .one();
                if (one!=null){
                    if (one.getTotal()-frameWarehousingDetail.getTotal()<0){
                        return ApiResult.failed("库存不足");
                    }
                    // 减少对应库存
                    one.setTotal(one.getTotal()-frameWarehousingDetail.getTotal());
                    list1.add(one);
                }
            }
            if (!list1.isEmpty())lensGoodsService.updateBatchById(list1);
        }
        lensWarehousingDetailService.saveBatch(frameWarehousingDetails);
        return ApiResult.success();
        if (dto.getStatus()==2 || dto.getStatus()==4){
            List<TLensGoods> list1 = new ArrayList<>();
            List<TLensGoods> list2 = new ArrayList<>();
            for (TLensWarehousingDetail frameWarehousingDetail : frameWarehousingDetails) {
                TLensGoods one = lensGoodsService.lambdaQuery().eq(TLensGoods::getSeriesId, frameWarehousingDetail.getSeriesId())
                        .eq(TLensGoods::getRefractiveIndex, frameWarehousingDetail.getRefractiveIndex())
                        .eq(TLensGoods::getBallMirror, frameWarehousingDetail.getBallMirror())
                        .eq(TLensGoods::getLensType, frameWarehousingDetail.getType())
                        .eq(TLensGoods::getColumnMirror, frameWarehousingDetail.getColumnMirror())
                        .one();
                if (one!=null){
                    // 增加对应库存
                    one.setTotal(one.getTotal()+frameWarehousingDetail.getTotal());
                    list1.add(one);
                }else {
                    // 新增
                    TLensGoods tFrameGoods = new TLensGoods();
                    tFrameGoods.setLensType(frameWarehousingDetail.getType());
                    tFrameGoods.setSeriesId(frameWarehousingDetail.getSeriesId());
                    tFrameGoods.setBallMirror(frameWarehousingDetail.getBallMirror());
                    tFrameGoods.setColumnMirror(frameWarehousingDetail.getColumnMirror());
                    tFrameGoods.setRefractiveIndex(frameWarehousingDetail.getRefractiveIndex());
                    tFrameGoods.setTotal(frameWarehousingDetail.getTotal());
                    tFrameGoods.setStoreId(dto.getStoreId());
                    list2.add(tFrameGoods);
                }
            }
            if (!list1.isEmpty())lensGoodsService.updateBatchById(list1);
            if (!list2.isEmpty())lensGoodsService.saveBatch(list2);
        }
        return ApiResult.success(dto.getId());
    }
    /**
manage/src/main/java/com/jilongda/manage/dto/FrameInventoryDTO.java
New file
@@ -0,0 +1,20 @@
package com.jilongda.manage.dto;
import com.jilongda.manage.model.TInventory;
import com.jilongda.manage.model.TInventoryFrameDetail;
import com.jilongda.manage.model.TModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ApiModel(value = "镜架型号DTO")
public class FrameInventoryDTO extends TInventory {
    @ApiModelProperty(value = "镜架明细")
    private List<TInventoryFrameDetail> list;
}
manage/src/main/java/com/jilongda/manage/dto/GetCurrentByParam.java
New file
@@ -0,0 +1,23 @@
package com.jilongda.manage.dto;
import com.jilongda.manage.model.TModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ApiModel(value = "镜架查询当前库存DTO")
public class GetCurrentByParam {
    @ApiModelProperty(value = "镜架型号名称")
    private String model;
    @ApiModelProperty(value = "色号")
    private String color;
    @ApiModelProperty(value = "品牌id")
    private Integer brandId;
    @ApiModelProperty(value = "材质id")
    private Integer materialId;
}
manage/src/main/java/com/jilongda/manage/dto/GetCurrentByParamLens.java
New file
@@ -0,0 +1,24 @@
package com.jilongda.manage.dto;
import com.jilongda.manage.model.TModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "镜片查询当前库存DTO")
public class GetCurrentByParamLens {
    @ApiModelProperty(value = "系列id")
    private Integer seriesId;
    @ApiModelProperty(value = "1球2非球3双非")
    private Integer lensType;
    @ApiModelProperty(value = "品牌id")
    private Integer brandId;
    @ApiModelProperty(value = "折射率")
    private String refractiveIndex;
    @ApiModelProperty(value = "球镜")
    private String ballMirror;
    @ApiModelProperty(value = "柱镜")
    private String columnMirror;
}
manage/src/main/java/com/jilongda/manage/mapper/TAppUserMapper.java
@@ -1,7 +1,13 @@
package com.jilongda.manage.mapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TAppUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.vo.TAppUserVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +19,6 @@
 */
public interface TAppUserMapper extends BaseMapper<TAppUser> {
    List<TAppUserVO> pageList(@Param("query")TAppUserQuery query, @Param("pageInfo")PageInfo<TAppUserVO> pageInfo);
}
manage/src/main/java/com/jilongda/manage/mapper/TCouponMapper.java
@@ -1,7 +1,15 @@
package com.jilongda.manage.mapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TCoupon;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TCouponQuery;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TCouponVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +21,6 @@
 */
public interface TCouponMapper extends BaseMapper<TCoupon> {
    List<TCouponVO> pageList(@Param("query")TCouponQuery query,@Param("pageInfo") PageInfo<TCouponVO> pageInfo);
}
manage/src/main/java/com/jilongda/manage/mapper/TCouponReceiveMapper.java
@@ -1,7 +1,15 @@
package com.jilongda.manage.mapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TCouponReceive;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jilongda.manage.query.TAppUserCouponQuery;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.vo.TAppUserCouponVO;
import com.jilongda.manage.vo.TAppUserVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +21,7 @@
 */
public interface TCouponReceiveMapper extends BaseMapper<TCouponReceive> {
    List<TAppUserCouponVO> pageList(@Param("query")TAppUserCouponQuery query, @Param("pageInfo")PageInfo<TAppUserCouponVO> pageInfo);
}
manage/src/main/java/com/jilongda/manage/mapper/TFrameGoodsMapper.java
New file
@@ -0,0 +1,29 @@
package com.jilongda.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.query.TOptometryQuery;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TFrameGoodsVO;
import com.jilongda.manage.vo.TOptometryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
public interface TFrameGoodsMapper extends BaseMapper<TFrameGoods> {
    List<TFrameGoodsVO> lensReceiptList(@Param("query")TFrameGoodsQuery query, @Param("pageInfo")PageInfo<TFrameGoodsVO> pageInfo);
}
manage/src/main/java/com/jilongda/manage/mapper/TInventoryMapper.java
@@ -1,7 +1,15 @@
package com.jilongda.manage.mapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TInventory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jilongda.manage.query.TInventoryQuery;
import com.jilongda.manage.query.TLensGoodsQuery;
import com.jilongda.manage.vo.TInventoryVO;
import com.jilongda.manage.vo.TLensGoodsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +21,5 @@
 */
public interface TInventoryMapper extends BaseMapper<TInventory> {
    List<TInventoryVO> pageList(@Param("query")TInventoryQuery query, @Param("pageInfo")PageInfo<TInventoryVO> pageInfo);
}
manage/src/main/java/com/jilongda/manage/mapper/TLensGoodsMapper.java
New file
@@ -0,0 +1,28 @@
package com.jilongda.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TLensGoods;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.query.TLensGoodsQuery;
import com.jilongda.manage.vo.TFrameGoodsVO;
import com.jilongda.manage.vo.TLensGoodsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
public interface TLensGoodsMapper extends BaseMapper<TLensGoods> {
    List<TLensGoodsVO> lensReceiptList(@Param("query")TLensGoodsQuery query,  @Param("pageInfo")PageInfo<TLensGoodsVO> pageInfo);
}
manage/src/main/java/com/jilongda/manage/model/TAppUser.java
@@ -55,10 +55,14 @@
    @ApiModelProperty(value = "性别1男2女3保密")
    @TableField("gender")
    private Integer gender;
    @ApiModelProperty(value = "状态 1=启用 0=禁用")
    @TableField("status")
    private Integer status;
    @ApiModelProperty(value = "头像")
    @TableField("avatar")
    private String avatar;
    @ApiModelProperty(value = "注册时间")
    @TableField("registerTime")
    private LocalDateTime registerTime;
}
manage/src/main/java/com/jilongda/manage/model/TCoupon.java
@@ -7,6 +7,7 @@
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.List;
import com.jilongda.common.pojo.BaseModel;
import io.swagger.annotations.ApiModel;
@@ -46,11 +47,11 @@
    @TableField("amount")
    private BigDecimal amount;
    @ApiModelProperty(value = "门店id 字段为null表示全部")
    @ApiModelProperty(value = "门店id 空字符串表示不限门店")
    @TableField("storeId")
    private Integer storeId;
    private String storeId;
    @ApiModelProperty(value = "有效期(天)最高365")
    @ApiModelProperty(value = " 有效期(天)最高365 0表示无期限")
    @TableField("time")
    private Integer time;
@@ -62,5 +63,7 @@
    @TableField("grantStatus")
    private Integer grantStatus;
    @ApiModelProperty(value = "指定发放时传 用户id集合")
    @TableField(exist = false)
    private List<Integer> userIds;
}
manage/src/main/java/com/jilongda/manage/model/TCouponReceive.java
@@ -52,11 +52,14 @@
    @ApiModelProperty(value = "门店id 字段为null表示全部")
    @TableField("storeId")
    private Integer storeId;
    private String storeId;
    @ApiModelProperty(value = "有效期截止日期")
    @TableField("endTime")
    private LocalDateTime endTime;
    @ApiModelProperty(value = "使用时间")
    @TableField("useTime")
    private LocalDateTime useTime;
    @ApiModelProperty(value = "优惠条件金额 为0则表示通用券")
    @TableField("amountCondition")
manage/src/main/java/com/jilongda/manage/model/TFrameGoods.java
New file
@@ -0,0 +1,45 @@
package com.jilongda.manage.model;
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 com.jilongda.common.pojo.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_frame_goods")
@ApiModel(value="TFrameGoods对象", description="用户表")
public class TFrameGoods extends BaseModel {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "色号")
    @TableField("color")
    private String color;
    @ApiModelProperty(value = "库存")
    @TableField("total")
    private Integer total;
    @ApiModelProperty(value = "型号id")
    @TableField("modelId")
    private Integer modelId;
    @ApiModelProperty(value = "门店id")
    @TableField("storeId")
    private Integer storeId;
    @ApiModelProperty(value = "1启用2禁用")
    @TableField("status")
    private Integer status;
}
manage/src/main/java/com/jilongda/manage/model/TInventory.java
@@ -33,7 +33,7 @@
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "1型号2品牌3材质4球/柱镜5折射率6系列")
    @ApiModelProperty(value = "盘点类型1型号2品牌3材质4球/柱镜5折射率6系列")
    @TableField("status")
    private Integer status;
manage/src/main/java/com/jilongda/manage/model/TInventoryFrameDetail.java
@@ -33,7 +33,7 @@
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "盘点表id")
    @ApiModelProperty(value = "盘点表id 前端忽略")
    @TableField("inventoryId")
    private Integer inventoryId;
manage/src/main/java/com/jilongda/manage/model/TLensGoods.java
New file
@@ -0,0 +1,55 @@
package com.jilongda.manage.model;
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 com.jilongda.common.pojo.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * <p>
 * 用户表
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_lens_goods")
@ApiModel(value="TLensGoods对象", description="用户表")
public class TLensGoods extends BaseModel {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "系列id")
    @TableField("seriesId")
    private Integer seriesId;
    @ApiModelProperty(value = "球镜")
    @TableField("ballMirror")
    private String ballMirror;
    @ApiModelProperty(value = "柱镜")
    @TableField("columnMirror")
    private String columnMirror;
    @ApiModelProperty(value = "折射率")
    @TableField("refractiveIndex")
    private String refractiveIndex;
    @ApiModelProperty(value = "库存")
    @TableField("total")
    private Integer total;
    @ApiModelProperty(value = "门店id")
    @TableField("storeId")
    private Integer storeId;
    @ApiModelProperty(value = "1启用2禁用")
    @TableField("status")
    private Integer status;
    @ApiModelProperty(value = "1球2非球3双非")
    @TableField("lensType")
    private Integer lensType;
}
manage/src/main/java/com/jilongda/manage/query/TAppUserCouponQuery.java
New file
@@ -0,0 +1,20 @@
package com.jilongda.manage.query;
import com.jilongda.common.pojo.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
@ApiModel(value = "用户详情-查看优惠券")
public class TAppUserCouponQuery extends BasePage {
    @ApiModelProperty(value = "用户id")
    private Integer id;
}
manage/src/main/java/com/jilongda/manage/query/TAppUserQuery.java
New file
@@ -0,0 +1,27 @@
package com.jilongda.manage.query;
import com.jilongda.common.pojo.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "用户管理查询条件")
public class TAppUserQuery extends BasePage {
    @ApiModelProperty(value = "微信昵称")
    private String name;
    @ApiModelProperty(value = "手机号")
    private String phone;
    @ApiModelProperty(value = "姓名")
    private String realName;
    @ApiModelProperty(value = "注册起始时间 例:2022-11-11")
    private String startTime;
    @ApiModelProperty(value = "注册结束时间 例:2022-11-11")
    private String endTime;
}
manage/src/main/java/com/jilongda/manage/query/TCouponQuery.java
New file
@@ -0,0 +1,17 @@
package com.jilongda.manage.query;
import com.jilongda.common.pojo.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "用户管理查询条件")
public class TCouponQuery extends BasePage {
    @ApiModelProperty(value = "优惠券名称")
    private String name;
    @ApiModelProperty(value = "发放方式 发放方式 1注册发放 2全局发放 3指定发放 4扫码发放")
    private String type;
    @ApiModelProperty(value = "发放状态1发放中 2暂停发放 只有发放方式为1和4的时候存储")
    private String grantStatus;
}
manage/src/main/java/com/jilongda/manage/query/TFrameGoodsQuery.java
New file
@@ -0,0 +1,34 @@
package com.jilongda.manage.query;
import com.jilongda.common.dto.TimeRangePageDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "镜架库存Query")
public class TFrameGoodsQuery extends TimeRangePageDTO {
    @ApiModelProperty(value = "品牌id")
    private String brandId;
    @ApiModelProperty(value = "供应商")
    private String supplierId;
    @ApiModelProperty(value = "色号")
    private String color;
    @ApiModelProperty(value = "店铺id")
    private Integer storeId;
    @ApiModelProperty(value = "镜架型号")
    private String model;
    @ApiModelProperty(value = "材质id")
    private String materialId;
    @ApiModelProperty(value = "状态1启用 2禁用")
    private Integer status;
    @ApiModelProperty(value = "是否低库存 1是2否")
    private Integer isWarning;
    @ApiModelProperty(value = "库存起始数量")
    private Integer startCount;
    @ApiModelProperty(value = "库存结束数量")
    private Integer endCount;
}
manage/src/main/java/com/jilongda/manage/query/TInventoryQuery.java
New file
@@ -0,0 +1,23 @@
package com.jilongda.manage.query;
import com.jilongda.common.dto.TimeRangePageDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "盘点Query")
public class TInventoryQuery extends TimeRangePageDTO {
    @ApiModelProperty(value = "盘点品类 1镜架2镜片")
    private Integer type;
    @ApiModelProperty(value = "盘点类型 1型号2品牌3材质4球/柱镜5折射率6系列 123属于镜架 456属于镜片")
    private Integer status;
    @ApiModelProperty(value = "店铺id")
    private Integer storeId;
    @ApiModelProperty(value = "操作人")
    private String createBy;
    @ApiModelProperty(value = "盘点日期起始时间2022-11-11")
    private String startTime;
    @ApiModelProperty(value = "盘点日期结束时间2023-11-11")
    private String endTime;
}
manage/src/main/java/com/jilongda/manage/query/TLensGoodsQuery.java
New file
@@ -0,0 +1,28 @@
package com.jilongda.manage.query;
import com.jilongda.common.dto.TimeRangePageDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "镜片库存Query")
public class TLensGoodsQuery extends TimeRangePageDTO {
    @ApiModelProperty(value = "品牌id")
    private String brandId;
    @ApiModelProperty(value = "系列id")
    private String seriesId;
    @ApiModelProperty(value = "1球2非球3双非")
    private Integer lensType;
    @ApiModelProperty(value = "店铺id")
    private Integer storeId;
    @ApiModelProperty(value = "折射率")
    private String refractiveIndex;
    @ApiModelProperty(value = "库存类型 1库存 2非库存")
    private Integer type;
    @ApiModelProperty(value = "状态1启用 2禁用")
    private Integer status;
    @ApiModelProperty(value = "是否低库存 1是2否")
    private Integer isWarning;
}
manage/src/main/java/com/jilongda/manage/query/TOptometryQuery.java
@@ -21,6 +21,8 @@
    private Integer storeId;
    @ApiModelProperty(value = "验光师id")
    private Integer optometristId;
    @ApiModelProperty(value = "用户id")
    private Integer userId;
    @ApiModelProperty(value = "开始时间 前端忽略")
    private String startTime;
    @ApiModelProperty(value = "结束时间 前端忽略")
manage/src/main/java/com/jilongda/manage/service/TAppUserService.java
@@ -1,7 +1,10 @@
package com.jilongda.manage.service;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TAppUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.vo.TAppUserVO;
/**
 * <p>
@@ -13,4 +16,5 @@
 */
public interface TAppUserService extends IService<TAppUser> {
    PageInfo<TAppUserVO> pageList(TAppUserQuery query);
}
manage/src/main/java/com/jilongda/manage/service/TCouponReceiveService.java
@@ -1,7 +1,10 @@
package com.jilongda.manage.service;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TCouponReceive;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jilongda.manage.query.TAppUserCouponQuery;
import com.jilongda.manage.vo.TAppUserCouponVO;
/**
 * <p>
@@ -13,4 +16,6 @@
 */
public interface TCouponReceiveService extends IService<TCouponReceive> {
    PageInfo<TAppUserCouponVO> pageList(TAppUserCouponQuery query);
}
manage/src/main/java/com/jilongda/manage/service/TCouponService.java
@@ -1,7 +1,10 @@
package com.jilongda.manage.service;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TCoupon;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jilongda.manage.query.TCouponQuery;
import com.jilongda.manage.vo.TCouponVO;
/**
 * <p>
@@ -13,4 +16,5 @@
 */
public interface TCouponService extends IService<TCoupon> {
    PageInfo<TCouponVO> pageList(TCouponQuery query);
}
manage/src/main/java/com/jilongda/manage/service/TFrameGoodsService.java
New file
@@ -0,0 +1,24 @@
package com.jilongda.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TFrameGoodsVO;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
public interface TFrameGoodsService extends IService<TFrameGoods> {
    PageInfo<TFrameGoodsVO> lensReceiptList(TFrameGoodsQuery query);
}
manage/src/main/java/com/jilongda/manage/service/TInventoryService.java
@@ -1,7 +1,10 @@
package com.jilongda.manage.service;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TInventory;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jilongda.manage.query.TInventoryQuery;
import com.jilongda.manage.vo.TInventoryVO;
/**
 * <p>
@@ -13,4 +16,6 @@
 */
public interface TInventoryService extends IService<TInventory> {
    PageInfo<TInventoryVO> pageList(TInventoryQuery query);
}
manage/src/main/java/com/jilongda/manage/service/TLensGoodsService.java
New file
@@ -0,0 +1,23 @@
package com.jilongda.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TLensGoods;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.query.TLensGoodsQuery;
import com.jilongda.manage.vo.TLensGoodsVO;
/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
public interface TLensGoodsService extends IService<TLensGoods> {
    PageInfo<TLensGoodsVO> lensReceiptList(TLensGoodsQuery query);
}
manage/src/main/java/com/jilongda/manage/service/impl/TAppUserServiceImpl.java
@@ -1,10 +1,20 @@
package com.jilongda.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.mapper.TOrderMapper;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.mapper.TAppUserMapper;
import com.jilongda.manage.model.TOrder;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.service.TAppUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TOptometryVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -17,4 +27,18 @@
@Service
public class TAppUserServiceImpl extends ServiceImpl<TAppUserMapper, TAppUser> implements TAppUserService {
    @Autowired
    private TOrderMapper orderMapper;
    @Override
    public PageInfo<TAppUserVO> pageList(TAppUserQuery query) {
        PageInfo<TAppUserVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TAppUserVO> list = this.baseMapper.pageList(query,pageInfo);
        for (TAppUserVO tAppUserVO : list) {
            Long l = orderMapper.selectCount(new LambdaQueryWrapper<TOrder>()
                    .eq(TOrder::getUserId, tAppUserVO.getId()));
            tAppUserVO.setSalesCount(l.intValue());
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
manage/src/main/java/com/jilongda/manage/service/impl/TCouponReceiveServiceImpl.java
@@ -1,10 +1,25 @@
package com.jilongda.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.mapper.TCouponMapper;
import com.jilongda.manage.mapper.TStoreMapper;
import com.jilongda.manage.model.TCouponReceive;
import com.jilongda.manage.mapper.TCouponReceiveMapper;
import com.jilongda.manage.model.TStore;
import com.jilongda.manage.query.TAppUserCouponQuery;
import com.jilongda.manage.service.TCouponReceiveService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jilongda.manage.service.TCouponService;
import com.jilongda.manage.service.TStoreService;
import com.jilongda.manage.vo.TAppUserCouponVO;
import com.jilongda.manage.vo.TStoreVO;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
 * <p>
@@ -17,4 +32,30 @@
@Service
public class TCouponReceiveServiceImpl extends ServiceImpl<TCouponReceiveMapper, TCouponReceive> implements TCouponReceiveService {
    @Resource
    private TCouponMapper couponMapper;
    @Resource
    private TStoreMapper storeMapper;
    @Resource
    private TCouponReceiveMapper couponReceiveMapper;
    @Override
    public PageInfo<TAppUserCouponVO> pageList(TAppUserCouponQuery query) {
        PageInfo<TAppUserCouponVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TAppUserCouponVO> list = couponReceiveMapper.pageList(query,pageInfo);
        for (TAppUserCouponVO tAppUserCouponVO : list) {
            StringBuilder stringBuilder = new StringBuilder();
            if (StringUtils.hasLength(tAppUserCouponVO.getStoreId())) {
                List<TStore> tStores = storeMapper.selectList(new LambdaQueryWrapper<TStore>()
                        .in(TStore::getId, Arrays.asList(tAppUserCouponVO.getStoreId().split(","))));
                for (TStore tStoreVO : tStores) {
                    stringBuilder.append(tStoreVO.getName()).append(",");
                }
                tAppUserCouponVO.setStoreName(stringBuilder.substring(0, stringBuilder.length() - 1));
            } else {
                tAppUserCouponVO.setStoreName("不限");
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
manage/src/main/java/com/jilongda/manage/service/impl/TCouponServiceImpl.java
@@ -1,10 +1,26 @@
package com.jilongda.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.mapper.TCouponReceiveMapper;
import com.jilongda.manage.mapper.TStoreMapper;
import com.jilongda.manage.model.TCoupon;
import com.jilongda.manage.mapper.TCouponMapper;
import com.jilongda.manage.model.TCouponReceive;
import com.jilongda.manage.model.TOrder;
import com.jilongda.manage.model.TStore;
import com.jilongda.manage.query.TCouponQuery;
import com.jilongda.manage.service.TCouponService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TCouponVO;
import org.apache.ibatis.annotations.ResultType;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
 * <p>
@@ -17,4 +33,38 @@
@Service
public class TCouponServiceImpl extends ServiceImpl<TCouponMapper, TCoupon> implements TCouponService {
    @Resource
    private TStoreMapper storeMapper;
    @Resource
    private TCouponReceiveMapper couponReceiveMapper;
    @Override
    public PageInfo<TCouponVO> pageList(TCouponQuery query) {
        PageInfo<TCouponVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TCouponVO> list = this.baseMapper.pageList(query,pageInfo);
        StringBuilder stringBuilder = new StringBuilder();
        for (TCouponVO tAppUserCouponVO : list) {
            if (StringUtils.hasLength(tAppUserCouponVO.getStoreId())) {
                List<TStore> tStores = storeMapper.selectList(new LambdaQueryWrapper<TStore>()
                        .in(TStore::getId, Arrays.asList(tAppUserCouponVO.getStoreId().split(","))));
                for (TStore tStoreVO : tStores) {
                    stringBuilder.append(tStoreVO.getName()).append(",");
                }
                tAppUserCouponVO.setStoreName(stringBuilder.substring(0, stringBuilder.length() - 1));
            } else {
                tAppUserCouponVO.setStoreName("不限");
            }
            // 查询发放数量和使用数量
            int size = couponReceiveMapper.selectList(new LambdaQueryWrapper<TCouponReceive>()
                    .eq(TCouponReceive::getCouponId, tAppUserCouponVO.getId())).size();
            tAppUserCouponVO.setGrantCout(size);
            int size1 = couponReceiveMapper.selectList(new LambdaQueryWrapper<TCouponReceive>()
                    .eq(TCouponReceive::getCouponId, tAppUserCouponVO.getId())
                    .eq(TCouponReceive::getStatus, 2)).size();
            tAppUserCouponVO.setUseCount(size1);
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
manage/src/main/java/com/jilongda/manage/service/impl/TFrameGoodsServiceImpl.java
New file
@@ -0,0 +1,54 @@
package com.jilongda.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.mapper.SecSettingMapper;
import com.jilongda.manage.mapper.TAppUserMapper;
import com.jilongda.manage.mapper.TFrameGoodsMapper;
import com.jilongda.manage.mapper.TOrderMapper;
import com.jilongda.manage.model.SecSetting;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TOrder;
import com.jilongda.manage.query.TAppUserQuery;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.service.TAppUserService;
import com.jilongda.manage.service.TFrameGoodsService;
import com.jilongda.manage.vo.TAppUserVO;
import com.jilongda.manage.vo.TFrameGoodsVO;
import com.jilongda.manage.vo.TOptometryVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
@Service
public class TFrameGoodsServiceImpl extends ServiceImpl<TFrameGoodsMapper, TFrameGoods> implements TFrameGoodsService {
    @Resource
    private SecSettingMapper secSettingMapper;
    @Override
    public PageInfo<TFrameGoodsVO> lensReceiptList(TFrameGoodsQuery query) {
        PageInfo<TFrameGoodsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TFrameGoodsVO> list = this.baseMapper.lensReceiptList(query,pageInfo);
        SecSetting secSetting = secSettingMapper.selectOne(null);
        for (TFrameGoodsVO tFrameGoodsVO : list) {
            if (tFrameGoodsVO.getTotal()<secSetting.getFrameThreshold()){
                tFrameGoodsVO.setIsWarning(1);
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
manage/src/main/java/com/jilongda/manage/service/impl/TInventoryServiceImpl.java
@@ -1,10 +1,17 @@
package com.jilongda.manage.service.impl;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.model.SecSetting;
import com.jilongda.manage.model.TInventory;
import com.jilongda.manage.mapper.TInventoryMapper;
import com.jilongda.manage.query.TInventoryQuery;
import com.jilongda.manage.service.TInventoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jilongda.manage.vo.TInventoryVO;
import com.jilongda.manage.vo.TLensGoodsVO;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -17,4 +24,11 @@
@Service
public class TInventoryServiceImpl extends ServiceImpl<TInventoryMapper, TInventory> implements TInventoryService {
    @Override
    public PageInfo<TInventoryVO> pageList(TInventoryQuery query) {
        PageInfo<TInventoryVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TInventoryVO> list = this.baseMapper.pageList(query, pageInfo);
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
manage/src/main/java/com/jilongda/manage/service/impl/TLensGoodsServiceImpl.java
New file
@@ -0,0 +1,49 @@
package com.jilongda.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.mapper.SecSettingMapper;
import com.jilongda.manage.mapper.TFrameGoodsMapper;
import com.jilongda.manage.mapper.TLensGoodsMapper;
import com.jilongda.manage.model.SecSetting;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TLensGoods;
import com.jilongda.manage.query.TFrameGoodsQuery;
import com.jilongda.manage.query.TLensGoodsQuery;
import com.jilongda.manage.service.TFrameGoodsService;
import com.jilongda.manage.service.TLensGoodsService;
import com.jilongda.manage.vo.TFrameGoodsVO;
import com.jilongda.manage.vo.TLensGoodsVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
@Service
public class TLensGoodsServiceImpl extends ServiceImpl<TLensGoodsMapper, TLensGoods> implements TLensGoodsService {
    @Resource
    private SecSettingMapper secSettingMapper;
    @Override
    public PageInfo<TLensGoodsVO> lensReceiptList(TLensGoodsQuery query) {
        PageInfo<TLensGoodsVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TLensGoodsVO> list = this.baseMapper.lensReceiptList(query, pageInfo);
        SecSetting secSetting = secSettingMapper.selectOne(null);
        for (TLensGoodsVO tFrameGoodsVO : list) {
            if (tFrameGoodsVO.getTotal() < secSetting.getLensThreshold()) {
                tFrameGoodsVO.setIsWarning(1);
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
manage/src/main/java/com/jilongda/manage/service/impl/TLensSeriesServiceImpl.java
@@ -1,8 +1,10 @@
package com.jilongda.manage.service.impl;
import com.jilongda.common.basic.PageInfo;
import com.jilongda.manage.mapper.TSupplierMapper;
import com.jilongda.manage.model.TLensSeries;
import com.jilongda.manage.mapper.TLensSeriesMapper;
import com.jilongda.manage.model.TSupplier;
import com.jilongda.manage.query.TLensSeriesQuery;
import com.jilongda.manage.service.TLensSeriesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,6 +12,7 @@
import com.jilongda.manage.vo.TOptometristVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -23,10 +26,16 @@
@Service
public class TLensSeriesServiceImpl extends ServiceImpl<TLensSeriesMapper, TLensSeries> implements TLensSeriesService {
    @Resource
    private TSupplierMapper supplierMapper;
    @Override
    public PageInfo<TLensSeriesVO> pageList(TLensSeriesQuery query) {
        PageInfo<TLensSeriesVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TLensSeriesVO> list = this.baseMapper.pageList(query,pageInfo);
        for (TLensSeriesVO tLensSeriesVO : list) {
            TSupplier tSupplier = supplierMapper.selectById(tLensSeriesVO.getSupplierId());
            if (tSupplier!=null)tLensSeriesVO.setSupplier(tSupplier.getName());
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
manage/src/main/java/com/jilongda/manage/utils/QRCodeUtil.java
New file
@@ -0,0 +1,50 @@
package com.jilongda.manage.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.awt.image.BufferedImage;
import java.util.Hashtable;
/**
 * @author chengst
 * @date 2019/11/4
 **/
public class QRCodeUtil {
    private final static String CHARSET = "utf-8";
    private final static int QRSIZEE = 300;
    // 二维码颜色
    private static final int BLACK = 0xFF000000;
    // 二维码颜色
    private static final int WHITE = 0xFFFFFFFF;
    public static BufferedImage createImage(String content){
        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
        hints.put(EncodeHintType.MARGIN, 1);
        BitMatrix bitMatrix = null;
        try {
            bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRSIZEE, QRSIZEE,hints);
        }catch (Exception e){
            e.printStackTrace();
        }
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, bitMatrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }
}
manage/src/main/java/com/jilongda/manage/vo/TAppUserCouponVO.java
New file
@@ -0,0 +1,23 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TCouponReceive;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel(value = "用户VO")
public class TAppUserCouponVO extends TCouponReceive {
    @ApiModelProperty(value = "优惠券名称")
    private String couponName;
    @ApiModelProperty(value = "门店名称")
    private String storeName;
}
manage/src/main/java/com/jilongda/manage/vo/TAppUserVO.java
New file
@@ -0,0 +1,28 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TOptometrist;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel(value = "用户VO")
public class TAppUserVO extends TAppUser {
    @ApiModelProperty(value = "消费次数")
    private Integer salesCount;
    @ApiModelProperty(value = "验光次数")
    private Integer optometryCount;
    @ApiModelProperty(value = "最后消费时间")
    private LocalDateTime salesTime;
    @ApiModelProperty(value = "最后验光时间")
    private LocalDateTime optometryTime;
    @ApiModelProperty(value = "消费总金额")
    private BigDecimal salesAmount;
}
manage/src/main/java/com/jilongda/manage/vo/TCouponInfoVO.java
New file
@@ -0,0 +1,21 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TCoupon;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "优惠券详情VO")
public class TCouponInfoVO extends TCoupon {
    @ApiModelProperty(value = "门店名称")
    private String storeName;
    @ApiModelProperty(value = "领取数量")
    private Integer grantCout;
    @ApiModelProperty(value = "使用数量")
    private Integer useCount;
}
manage/src/main/java/com/jilongda/manage/vo/TCouponVO.java
New file
@@ -0,0 +1,25 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TAppUser;
import com.jilongda.manage.model.TCoupon;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@ApiModel(value = "优惠券VO")
public class TCouponVO extends TCoupon {
    @ApiModelProperty(value = "门店名称")
    private String storeName;
    @ApiModelProperty(value = "发放数量")
    private Integer grantCout;
    @ApiModelProperty(value = "使用数量")
    private Integer useCount;
}
manage/src/main/java/com/jilongda/manage/vo/TFrameGoodsVO.java
New file
@@ -0,0 +1,33 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TFrameWarehousingDetail;
import com.jilongda.manage.model.TWarehousing;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "镜架库存VO")
public class TFrameGoodsVO extends TFrameGoods {
    @ApiModelProperty(value = "品牌名称")
    private String brand;
    @ApiModelProperty(value = "供应商名称")
    private String supplier;
    @ApiModelProperty(value = "材质名称")
    private String material;
    @ApiModelProperty(value = "型号名称")
    private String model;
    @ApiModelProperty(value = "单价/副")
    private String sales;
    @ApiModelProperty(value = "成本价/副")
    private String cost;
    @ApiModelProperty(value = "店铺名称")
    private String store;
    @ApiModelProperty(value = "是否低库存")
    private Integer isWarning;
}
manage/src/main/java/com/jilongda/manage/vo/TInventoryInfoVO.java
New file
@@ -0,0 +1,21 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TInventory;
import com.jilongda.manage.model.TInventoryFrameDetail;
import com.jilongda.manage.model.TInventoryLensDetail;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "盘点详情VO")
public class TInventoryInfoVO extends TInventory {
    @ApiModelProperty(value = "店铺名称")
    private String store;
    @ApiModelProperty(value = "镜片盘点明细")
    private List<TInventoryLensDetail> lensList;
    @ApiModelProperty(value = "镜片盘点明细")
    private List<TInventoryFrameDetail> frameList;
}
manage/src/main/java/com/jilongda/manage/vo/TInventoryVO.java
New file
@@ -0,0 +1,14 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TInventory;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "盘点VO")
public class TInventoryVO extends TInventory {
    @ApiModelProperty(value = "店铺名称")
    private String store;
}
manage/src/main/java/com/jilongda/manage/vo/TLensGoodsDetailVO.java
New file
@@ -0,0 +1,21 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TLensGoods;
import com.jilongda.manage.model.TLensWarehousingDetail;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "镜片库存详情VO")
public class TLensGoodsDetailVO{
    @ApiModelProperty(value = "品牌名称+系列名称+球/飞球+折射率")
    private String title;
    @ApiModelProperty(value = "门店名称")
    private String storeName;
    @ApiModelProperty(value = "库存数据")
    private List<TLensWarehousingDetail> list;
}
manage/src/main/java/com/jilongda/manage/vo/TLensGoodsVO.java
New file
@@ -0,0 +1,27 @@
package com.jilongda.manage.vo;
import com.jilongda.manage.model.TFrameGoods;
import com.jilongda.manage.model.TLensGoods;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "镜片库存VO")
public class TLensGoodsVO extends TLensGoods {
    @ApiModelProperty(value = "品牌名称")
    private String brand;
    @ApiModelProperty(value = "系列名称")
    private String series;
    @ApiModelProperty(value = "单价/片")
    private String sale;
    @ApiModelProperty(value = "成本/片")
    private String cost;
    @ApiModelProperty(value = "库存类型 1库存 2非库存")
    private Integer type;
    @ApiModelProperty(value = "是否低库存")
    private Integer isWarning;
}
manage/src/main/java/com/jilongda/manage/vo/TLensSeriesVO.java
@@ -16,5 +16,7 @@
    private String typeName;
    @ApiModelProperty(value = "折射率")
    private String refractiveIndex;
    @ApiModelProperty(value = "供应商名称")
    private String supplier;
}
manage/src/main/java/com/jilongda/manage/vo/TWarehousingLensVO.java
@@ -10,11 +10,13 @@
import java.util.List;
@Data
@ApiModel(value = "镜架/镜片出库入库VO")
@ApiModel(value = "镜片出库入库VO")
public class TWarehousingLensVO extends TWarehousing {
    @ApiModelProperty(value = "出库/入库合计数量")
    private Integer totalNum=0;
    @ApiModelProperty(value = "门店名称")
    private String storeName;
    @ApiModelProperty(value = "出库/入库明细")
    private List<TLensWarehousingDetail> lensWarehousingDetails;
manage/src/main/resources/mapping/TAppUserMapper.xml
@@ -22,5 +22,24 @@
    <sql id="Base_Column_List">
        id, name, phone, realName, age, gender, registerTime, createTime, updateTime, createBy, updateBy, isDelete
    </sql>
    <select id="pageList" resultType="com.jilongda.manage.vo.TAppUserVO">
        select * from
            t_app_user
        where 1=1
        <if test="query.name != null and query.name != ''">
            and name like concat('%',#{query.name},'%')
        </if>
        <if test="query.phone != null and query.phone != ''">
            and phone like concat('%',#{query.phone},'%')
        </if>
        <if test="query.realName != null and query.realName != ''">
            and realName like concat('%',#{query.realName},'%')
        </if>
          <if test="query.startTime != null and query.startTime != ''">
              and (createTime between #{query.startTime} and #{query.endTime})
        </if>
        and isDelete =  ${@com.jilongda.common.enums.DisabledEnum@NO.getCode()}
    </select>
</mapper>
manage/src/main/resources/mapping/TCouponMapper.xml
@@ -23,5 +23,19 @@
    <sql id="Base_Column_List">
        id, name, type, amount, storeId, time, amountCondition, createTime, updateTime, createBy, updateBy, isDelete, grantStatus
    </sql>
    <select id="pageList" resultType="com.jilongda.manage.vo.TCouponVO">
        select t1.* from
            t_coupon t1
        where 1=1
        <if test="query.name != null and query.name != ''">
            and t1.name like concat('%',#{query.name},'%')
        </if>
        <if test="query.type != null and query.type != ''">
            and t1.type =#{query.type}
        </if>
        <if test="query.grantStatus != null and query.grantStatus != ''">
            and t1.grantStatus =#{query.grantStatus}
        </if>
    </select>
</mapper>
manage/src/main/resources/mapping/TCouponReceiveMapper.xml
@@ -24,5 +24,12 @@
    <sql id="Base_Column_List">
        id, couponId, userId, type, amount, storeId, endTime, amountCondition, status, createTime, updateTime, createBy, updateBy, isDelete
    </sql>
    <select id="pageList" resultType="com.jilongda.manage.vo.TAppUserCouponVO">
        select t1.* ,t2.name as couponName from
            t_coupon_receive t1
        left join t_coupon t2 on t1.couponId = t2.id
        where t1.userId = #{query.id}
        and t1.isDelete =  ${@com.jilongda.common.enums.DisabledEnum@NO.getCode()}
    </select>
</mapper>
manage/src/main/resources/mapping/TFrameGoods.xml
New file
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jilongda.manage.mapper.TFrameGoodsMapper">
    <select id="lensReceiptList" resultType="com.jilongda.manage.vo.TFrameGoodsVO">
        select t1.*,t2.name as model,t5.name as supplier,t3.name as material,t4.name as store,
               t2.sale as sale,t2.cost as cost,t6.name as brand,t7.frameThreshold
        from
            t_frame_goods t1
        left join t_model t2 on t1.modelId=t2.id
        left join t_material t3 on t2.materialId = t3.id
        left join t_store t4 on t1.storeId = t4.id
        left join t_supplier t5 on t2.supplierId = t5.id
        left join t_brand t6 on t2.brandId=t6.id
        left join sec_setting t7 on 1=1
        where 1=1
        <if test="query.brandId != null ">
            and t2.brandId = #{query.brandId}
        </if>
        <if test="query.supplierId != null ">
            and t2.supplierId = #{query.supplierId}
        </if>
        <if test="query.color != null and query.color != ''">
            and t1.color = #{query.color}
        </if>
        <if test="query.storeId != null ">
            and t1.storeId = #{query.storeId}
        </if>
        <if test="query.model != null and query.model != ''">
            and t2.name = #{query.model}
        </if>
        <if test="query.materialId != null ">
            and t2.materialId = #{query.materialId}
        </if>
        <if test="query.status != null ">
            and t1.status = #{query.status}
        </if>
        <if test="query.isWarning != null and query.isWarning = 1">
            and t1.total &lt; t7.frameThreshold
        </if>
        <if test="query.isWarning != null and query.isWarning = 2">
            and t1.total >= t7.frameThreshold
        </if>
        <if test="query.startCount != null and query.endCount != null">
            and t1.total between #{query.startCount} and #{query.endCount}
        </if>
        and t1.isDelete =  ${@com.jilongda.common.enums.DisabledEnum@NO.getCode()}
        order by t1.id
    </select>
</mapper>
manage/src/main/resources/mapping/TInventoryMapper.xml
@@ -20,5 +20,28 @@
    <sql id="Base_Column_List">
        id, status, type, storeId, remark, createTime, updateTime, createBy, updateBy, isDelete
    </sql>
    <select id="pageList" resultType="com.jilongda.manage.vo.TInventoryVO">
        select t1.*,t2.name as store from
            t_inventory t1
                    left join t_store t2 on t1.storeId = t2.id
        where 1=1
        <if test="query.status != null ">
            and t1.status = #{query.status}
        </if>
          <if test="query.createBy != null ">
            and t1.createBy = #{query.createBy}
        </if>
        <if test="query.type != null ">
            and t1.type = #{query.type}
        </if>
        <if test="query.storeId != null ">
            and t1.storeId = #{query.storeId}
        </if>
        <if test="query.startTime != null and query.startTime != ''">
            and t1.createTime between #{query.startTime} and #{query.endTime}
        </if>
        and t1.isDelete =  ${@com.jilongda.common.enums.DisabledEnum@NO.getCode()}
    </select>
</mapper>
manage/src/main/resources/mapping/TLensGoods.xml
New file
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jilongda.manage.mapper.TLensGoodsMapper">
    <select id="lensReceiptList" resultType="com.jilongda.manage.vo.TLensGoodsVO">
        select t1.*,t2.name as series,t4.name as store,
        t2.sale as sale,t2.cost as cost,t6.name as brand,t7.frameThreshold
        from
        t_lens_goods t1
        left join t_lens_series t2 on t1.seriesId=t2.id
        left join t_store t4 on t1.storeId = t4.id
        left join t_brand t6 on t2.brandId=t6.id
        left join sec_setting t7 on 1=1
        where 1=1
        <if test="query.brandId != null ">
            and t2.brandId = #{query.brandId}
        </if>
        <if test="query.seriesId != null ">
            and t2.id = #{query.seriesId}
        </if>
        <if test="query.lensType != null ">
            and t1.lensType = #{query.lensType}
        </if>
        <if test="query.storeId != null ">
            and t1.storeId = #{query.storeId}
        </if>
        <if test="query.refractiveIndex != null and query.refractiveIndex != ''">
            and t1.refractiveIndex = #{query.refractiveIndex}
        </if>
        <if test="query.type != null ">
            and t2.type = #{query.type}
        </if>
        <if test="query.isWarning != null and query.isWarning = 1">
            and t1.total &lt; t7.lensThreshold
        </if>
        <if test="query.isWarning != null and query.isWarning = 2">
            and t1.total >= t7.lensThreshold
        </if>
        and t1.isDelete =  ${@com.jilongda.common.enums.DisabledEnum@NO.getCode()}
        order by t1.id
    </select>
</mapper>
manage/src/main/resources/mapping/TLineUpMapper.xml
@@ -40,6 +40,8 @@
            <if test="query.storeId != null">
                and s.id = #{query.storeId}
            </if>
            and t1.isDelete =  ${@com.jilongda.common.enums.DisabledEnum@NO.getCode()}
        </where>
        order by t.createTime desc
    </select>
manage/src/main/resources/mapping/TOptometristMapper.xml
@@ -37,6 +37,9 @@
            <if test="query.name != null and query.name != ''">
                and t2.`name` like  concat('%',#{query.name},'%')
            </if>
            <if test="query.userId != null and query.userId != ''">
                and t2.id like  concat('%',#{query.userId},'%')
            </if>
            <if test="query.realName != null and query.realName != ''">
                and t1.`name` like  concat('%',#{query.realName},'%')
            </if>
optometry/src/main/java/com/jilongda/optometry/model/TAppUser.java
@@ -53,9 +53,6 @@
    @TableField("gender")
    private Integer gender;
    @ApiModelProperty(value = "注册时间")
    @TableField("registerTime")
    private LocalDateTime registerTime;
    @ApiModelProperty(value = "创建时间")
    @TableField("createTime")