无关风月
2025-02-28 2f8e70ad2884d2b6b7443dfae0af11ae9cfc8b99
manage/src/main/java/com/jilongda/manage/controller/TWarehousingController.java
@@ -8,33 +8,43 @@
import com.jilongda.common.enums.WarehousingTypeEnum;
import com.jilongda.common.security.JwtTokenUtils;
import com.jilongda.common.utils.CodeGenerateUtils;
import com.jilongda.common.utils.UUIDUtil;
import com.jilongda.manage.dto.GetCurrentByParam;
import com.jilongda.manage.dto.GetCurrentByParamLens;
import com.jilongda.manage.dto.TWarehousingDTO;
import com.jilongda.manage.model.TFrameWarehousingDetail;
import com.jilongda.manage.model.TWarehousing;
import com.jilongda.manage.dto.TWarehousingLensDTO;
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.TWarehousingService;
import com.jilongda.manage.vo.TFrameWarehousingDetailVO;
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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * <p>
 * 镜架/镜片出库入库表 前端控制器
 * 镜架-镜片出库入库表 前端控制器
 * </p>
 *
 * @author 无关风月
 * @since 2024-12-09
 */
@Api(tags = "镜架/镜片出库入库")
@Api(tags = "镜架-镜片出库入库")
@RestController
@RequestMapping("/t-warehousing")
public class TWarehousingController {
@@ -43,7 +53,93 @@
    private TWarehousingService warehousingService;
    @Autowired
    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、型号名称、色号名称、材质id查询当前库存")
    @PostMapping(value = "/getCurrentByParamFrame")
    public ApiResult<Integer> getCurrentByParamFrame(@RequestBody GetCurrentByParam getCurrentByParam) {
        // 根据型号名称 查询型号列表ids
        List<Integer> collect = modelService.lambdaQuery()
                .eq(StringUtils.hasLength(getCurrentByParam.getModel()),TModel::getName, getCurrentByParam.getModel())
                .eq(Objects.nonNull(getCurrentByParam.getMaterialId()),TModel::getMaterialId,getCurrentByParam.getMaterialId())
                .eq(StringUtils.hasLength(getCurrentByParam.getColor()),TModel::getColor,getCurrentByParam.getColor())
                .eq(Objects.nonNull(getCurrentByParam.getBrandId()),TModel::getBrandId,getCurrentByParam.getBrandId())
                .list().stream().map(TModel::getId).collect(Collectors.toList());
        if (collect.isEmpty())collect.add(-1);
        List<TFrameGoods> one = frameGoodsService.lambdaQuery().in(TFrameGoods::getModelId, collect)
                .eq(TFrameGoods::getColor, getCurrentByParam.getColor())
                .eq(TFrameGoods::getStoreId, getCurrentByParam.getStoreId()).list();
        if (one.isEmpty())return ApiResult.success(0);
        Integer temp = one.stream()
                .mapToInt(TFrameGoods::getTotal)
                .sum();
        return ApiResult.success(temp);
    }
    @ApiOperation(value = "镜片-根据系列id、球/非球、品牌id、折射率、ballMirror、columnMirror查询当前库存")
    @PostMapping(value = "/getCurrentByParamLens")
    public ApiResult<Integer> getCurrentByParamLens(@RequestBody GetCurrentByParamLens dto) {
        List<TLensGoods> one = lensGoodsService.lambdaQuery().eq(TLensGoods::getSeriesId, dto.getSeriesId())
                .eq(dto.getLensType()!=null,TLensGoods::getLensType, dto.getLensType())
                .eq(StringUtils.hasLength(dto.getRefractiveIndex()),TLensGoods::getRefractiveIndex, dto.getRefractiveIndex())
                .eq(StringUtils.hasLength(dto.getBallMirror()),TLensGoods::getBallMirror, dto.getBallMirror())
                .eq(StringUtils.hasLength(dto.getColumnMirror()),TLensGoods::getColumnMirror, dto.getColumnMirror())
                .eq(dto.getStoreId()!=null,TLensGoods::getStoreId, dto.getStoreId())
                .list();
        if (one.isEmpty())return ApiResult.success(0);
        Integer temp = one.stream()
                .mapToInt(TLensGoods::getTotal)
                .sum();
       return ApiResult.success(temp);
    }
    @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));
    }
    @ApiOperation(value = "镜片库存分页列表-启用禁用")
    @PostMapping(value = "/updateStateLens")
    public ApiResult updateStateLens(Integer id) {
        TLensGoods byId = lensGoodsService.getById(id);
        if (byId.getStatus()==1){
            byId.setStatus(2);
        }else {
            byId.setStatus(1);
        }
        lensGoodsService.updateById(byId);
        return ApiResult.success();
    }
    @ApiOperation(value = "镜架库存分页列表-启用禁用")
    @PostMapping(value = "/updateStateFrame")
    public ApiResult updateStateFrame(Integer id) {
        TFrameGoods byId = frameGoodsService.getById(id);
        if (byId.getStatus()==1){
            byId.setStatus(2);
        }else {
            byId.setStatus(1);
        }
        frameGoodsService.updateById(byId);
        return ApiResult.success();
    }
    /**
     * 出入库单列表
     */
@@ -51,6 +147,11 @@
    @PostMapping(value = "/inventoryReceiptList")
    public ApiResult<PageInfo<TWarehousingVO>> inventoryReceiptList(@RequestBody TWarehousingDetailQuery query) {
        return ApiResult.success(warehousingService.inventoryReceiptList(query));
    }
    @ApiOperation(value = "镜片出入库单列表")
    @PostMapping(value = "/inventoryReceiptLensList")
    public ApiResult<PageInfo<TWarehousingLensVO>> inventoryReceiptLensList(@RequestBody TWarehousingDetailLensQuery query) {
        return ApiResult.success(warehousingService.inventoryReceiptLensList(query));
    }
    /**
@@ -62,13 +163,66 @@
        PageInfo<TFrameWarehousingDetailVO> frameWarehousingDetailVOPageInfo = warehousingService.detailList(query);
        return ApiResult.success(frameWarehousingDetailVOPageInfo);
    }
    @ApiOperation(value = "镜片出入库记录列表")
    @PostMapping(value = "/detailLensList")
    public ApiResult<PageInfo<TLensWarehousingDetailVO>> detailLensList(@RequestBody TWarehousingDetailLensQuery query) {
        if (query.getSeriesId()!=null){
            TLensSeries series = lensSeriesService.getById(query.getSeriesId());
            if (series!=null){
                query.setSeries(series.getName());
            }
        }
        if (query.getBrandId()!=null){
            TBrand brand = brandService.getById(query.getBrandId());
            if (brand!=null){
                query.setBrand(brand.getName());
            }
        }
        return ApiResult.success(warehousingService.detailListLens(query));
    }
    /**
     * 库存明细记录列表
     */
    @ApiOperation(value = "镜片库存明细记录列表--库存详情")
    @PostMapping(value = "/detailLensListDetail")
    public ApiResult<TLensGoodsDetailVO> detailLensListDetail(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<TLensGoods> list = lensGoodsService.lambdaQuery().eq(TLensGoods::getSeriesId, byId.getSeriesId())
                .eq(TLensGoods::getRefractiveIndex, byId.getRefractiveIndex()).list();
        tLensGoodsDetailVO.setList(list);
        return ApiResult.success(tLensGoodsDetailVO);
    }
    /**
     * 添加镜架出库,入库,作废,退货
     */
    @ApiOperation(value = "添加镜架出库,入库,作废,退货")
    @PostMapping(value = "/outBound")
    public ApiResult<String> outBound(@Validated @RequestBody TWarehousingDTO dto) {
    public ApiResult outBound(@Validated @RequestBody TWarehousingDTO dto) {
        // 获取当前用户
        String username = JwtTokenUtils.getUsername();
        dto.setCreateBy(username);
@@ -82,8 +236,131 @@
            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::getStoreId, dto.getStoreId())
                        .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);
                }else {
                    return ApiResult.failed("库存不足");
                }
            }
            if (!list1.isEmpty())frameGoodsService.updateBatchById(list1);
        }
        frameWarehousingDetailService.saveBatch(frameWarehousingDetails);
        return ApiResult.success();
        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::getStoreId, dto.getStoreId())
                        .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());
    }
    /**
     * 添加镜片出库,入库,作废,退货
     */
    @ApiOperation(value = "添加镜片出库,入库,作废,退货")
    @PostMapping(value = "/outBoundLens")
    public ApiResult outBoundLens(@Validated @RequestBody TWarehousingLensDTO dto) {
        // 获取当前用户
        String username = JwtTokenUtils.getUsername();
        dto.setCreateBy(username);
        dto.setCreateTime(LocalDateTime.now());
        dto.setType(WarehousingTypeEnum.LENS.getCode());
        warehousingService.save(dto);
        // 添加明细
        List<TLensWarehousingDetail> frameWarehousingDetails = dto.getLensWarehousingDetails();
        frameWarehousingDetails.forEach(detail -> {
            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())
                        .eq(TLensGoods::getStoreId, dto.getStoreId())
                        .one();
                if (one!=null){
                    if (one.getTotal()-frameWarehousingDetail.getTotal()<0){
                        return ApiResult.failed("库存不足");
                    }
                    // 减少对应库存
                    one.setTotal(one.getTotal()-frameWarehousingDetail.getTotal());
                    list1.add(one);
                }else {
                    return ApiResult.failed("库存不足");
                }
            }
            if (!list1.isEmpty())lensGoodsService.updateBatchById(list1);
        }
        lensWarehousingDetailService.saveBatch(frameWarehousingDetails);
        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::getStoreId, dto.getStoreId())
                        .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());
    }
    /**
@@ -98,10 +375,31 @@
        List<TFrameWarehousingDetail> list = frameWarehousingDetailService.list(Wrappers.lambdaQuery(TFrameWarehousingDetail.class)
                .eq(TFrameWarehousingDetail::getWarehousingId, id));
        vo.setFrameWarehousingDetails(list);
        TStore store = storeService.getById(warehousing.getStoreId());
        if (store!=null){
            vo.setStoreName(store.getName());
        }
        // 统计数量
        vo.setTotalNum(list.stream().mapToInt(TFrameWarehousingDetail::getTotal).sum());
        return ApiResult.success(vo);
    }
    @ApiOperation(value = "镜片查询详情")
    @GetMapping(value = "/getDetailLensById")
    public ApiResult<TWarehousingLensVO> getDetailLensById(@RequestParam Integer id) {
        TWarehousing warehousing = warehousingService.getById(id);
        TWarehousingLensVO vo = new TWarehousingLensVO();
        BeanUtils.copyProperties(warehousing, vo);
        List<TLensWarehousingDetail> list = lensWarehousingDetailService.list(Wrappers.lambdaQuery(TLensWarehousingDetail.class)
                .eq(TLensWarehousingDetail::getWarehousingId, id));
        TStore store = storeService.getById(warehousing.getStoreId());
        if (store!=null){
            vo.setStoreName(store.getName());
        }
        vo.setLensWarehousingDetails(list);
        // 统计数量
        vo.setTotalNum(list.stream().mapToInt(TLensWarehousingDetail::getTotal).sum());
        return ApiResult.success(vo);
    }
}