futian.liu
2023-12-02 b8ec2530b16d89056909ff2ececdf41340b51fff
部门分发详情,明细
9个文件已添加
4个文件已删除
4个文件已修改
782 ■■■■ 已修改文件
consum-base/src/main/java/com/consum/base/controller/UsingFormBackController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/dto/UserAndTenantInfoDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/dto/UsingFormBackDetailDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/query/UsingFormBackQry.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/request/UseInfo.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/request/baseGoodModel.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/BaseGoodsTemplateInfo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/DetailVO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/FormProcureDetailVO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/UseInfo.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackDetailListVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackDetailVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackGoodsTemplateInfo.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackModelInfo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/UsingFormBackService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/impl/UsingFormBackServiceImpl.java 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/controller/UsingFormBackController.java
@@ -1,13 +1,18 @@
package com.consum.base.controller;
import com.consum.base.BaseController;
import com.consum.base.core.utils.PageUtil;
import com.consum.base.pojo.query.UsingFormBackQry;
import com.consum.base.pojo.request.UsingFormBackParam;
import com.consum.base.pojo.response.UsingFormBackDetailVO;
import com.consum.base.service.UsingFormBackService;
import com.consum.model.po.FinSysTenantUser;
import com.walker.web.ResponseValue;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
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;
@@ -28,13 +33,51 @@
    @ApiOperation(value = "部门物品退回单新增接口", notes = "部门物品退回单新增接口")
    @RequestMapping("/add")
    @PostMapping("/add")
    public ResponseValue add(@RequestBody UsingFormBackParam usingFormBackParam) {
        FinSysTenantUser sysInfo = getSysInfo();
        String tenantId = sysInfo.getTenantId();
        String tenantName = sysInfo.getTenantName();
        if (sysInfo == null) {
            return ResponseValue.error("请先登录");
        }
        usingFormBackService.add(usingFormBackParam, sysInfo);
        return null;
        return ResponseValue.success();
    }
    @ApiOperation(value = "部门物品退回单查询接口", notes = "部门物品退回单查询接口")
    @GetMapping("/list")
    public ResponseValue query(UsingFormBackQry usingFormBackParam) {
        FinSysTenantUser sysInfo = getSysInfo();
        if (sysInfo == null) {
            return ResponseValue.error("请先登录");
        }
        PageUtil page = usingFormBackService.selectPageByList(usingFormBackParam);
        return ResponseValue.success(page);
    }
    @ApiOperation(value = "部门物品退回单详情接口", notes = "部门物品退回单详情接口")
    @GetMapping("/detail")
    public ResponseValue detail(Long id) {
        FinSysTenantUser sysInfo = getSysInfo();
        if (sysInfo == null) {
            return ResponseValue.error("请先登录");
        }
        UsingFormBackDetailVO detail = usingFormBackService.getDetail(id);
        return ResponseValue.success(detail);
    }
    @ApiOperation(value = "部门物品退回明细查询接口", notes = "部门物品退回明细查询接口")
    @GetMapping("/list/detail")
    public ResponseValue queryListDetail(UsingFormBackQry usingFormBackParam) {
        FinSysTenantUser sysInfo = getSysInfo();
        if (sysInfo == null) {
            return ResponseValue.error("请先登录");
        }
        PageUtil result = usingFormBackService.selectPageByDetail(usingFormBackParam);
        return ResponseValue.success(result);
    }
}
consum-base/src/main/java/com/consum/base/pojo/dto/UserAndTenantInfoDTO.java
File was deleted
consum-base/src/main/java/com/consum/base/pojo/dto/UsingFormBackDetailDTO.java
New file
@@ -0,0 +1,33 @@
package com.consum.base.pojo.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author asus
 * @version 1.0
 * @description: 退回单详情
 * @date 2023/12/1 18:22
 */
@NoArgsConstructor
@Data
public class UsingFormBackDetailDTO {
    private Long id;
    private String departmentName;
    private String procureDoc;
    private String businessFormCode;
    private Integer counts;
    private String goodsUserName;
    private String classification;
    private String operatorName;
    private String categoryName;
    private String agencyName;
    private String unit;
    private Long dealTime;
    private String baseGoodsTemplateName;
    private String baseGoodsModelsName;
    private Integer useCount;
    private Long baseGoodsModelsId;
    private Long baseGoodsTemplateId;
}
consum-base/src/main/java/com/consum/base/pojo/query/UsingFormBackQry.java
New file
@@ -0,0 +1,76 @@
package com.consum.base.pojo.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author asus
 * @version 1.0
 * @description: 物品退回查询条件
 * @date 2023/12/1 15:32
 */
@Data
@ApiModel
public class UsingFormBackQry {
    @ApiModelProperty(value = "主键")
    private Long id;
    /**
     * 退回单号
     */
    @ApiModelProperty(value = "退回单号")
    private String businessFormCode;
    /**
     * 分发部门id
     */
    @ApiModelProperty(value = "分发部门id")
    private Long departmentId;
    /**
     * 物品模版名称
     */
    @ApiModelProperty(value = "物品模版名称")
    private String goodsTemplateName;
    /**
     * 物品模版id
     */
    @ApiModelProperty(value = "物品模版id")
    private String goodsTemplateId;
    /**
     * 开始时间
     */
    @ApiModelProperty(value = "开始时间")
    private Long startTime;
    /**
     * 结束时间
     */
    @ApiModelProperty(value = "结束时间")
    private Long endTime;
    /**
     * 规格型号id
     */
    @ApiModelProperty(value = "规格型号id")
    private Long baseGoodsModelsId;
    /**
     * 机构
     */
    @ApiModelProperty(value = "机构")
    private Long agencyId;
    /**
     * 创建人
     */
    @ApiModelProperty(value = "创建人")
    private String createName;
    /**
     * 页码
     */
    @ApiModelProperty(value = "页码")
    private Integer pageNum;
    /**
     * 页大小
     */
    @ApiModelProperty(value = "页大小")
    private Integer pageSize;
}
consum-base/src/main/java/com/consum/base/pojo/request/UseInfo.java
File was deleted
consum-base/src/main/java/com/consum/base/pojo/request/baseGoodModel.java
@@ -2,7 +2,6 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import lombok.Data;
/**
@@ -16,20 +15,17 @@
public class baseGoodModel {
    @ApiModelProperty(value = "商品模型id")
    private String baseGoodsModelsId;
    @ApiModelProperty(value = "商品模型名称")
    private String baseGoodsModelsName;
    private Long baseGoodsModelsId;
    @ApiModelProperty(value = "单位")
    private String unit;
    @ApiModelProperty(value = "物品类型 A,B,C")
    private String goodType;
    private String classification;
    private Long goodsTemplatesId;
    private String modelName;
    private Long modelUserId;
    private Long nowUserPhone;
    private String classification;
    private String nowUserName;
    private Integer userUseCount;
@@ -37,5 +33,4 @@
    private Integer counts;
    private List<UseInfo> useInfo;
}
consum-base/src/main/java/com/consum/base/pojo/response/BaseGoodsTemplateInfo.java
New file
@@ -0,0 +1,16 @@
package com.consum.base.pojo.response;
import lombok.Data;
/**
 * @author asus
 * @version 1.0
 * @description: 物品信息
 * @date 2023/12/1 17:16
 */
@Data
public class BaseGoodsTemplateInfo {
    private String baseGoodsTemplateName;
    private Integer count;
}
consum-base/src/main/java/com/consum/base/pojo/response/DetailVO.java
File was deleted
consum-base/src/main/java/com/consum/base/pojo/response/FormProcureDetailVO.java
File was deleted
consum-base/src/main/java/com/consum/base/pojo/response/UseInfo.java
New file
@@ -0,0 +1,20 @@
package com.consum.base.pojo.response;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
 * @author asus
 * @version 1.0
 * @description: 退回物品使用信息
 * @date 2023/12/2 9:34
 */
@Data
@ApiModel
public class UseInfo {
    private String useName;
    private Integer returnNum;
    private Integer useUnm;
}
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackDetailListVO.java
New file
@@ -0,0 +1,27 @@
package com.consum.base.pojo.response;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author asus
 * @version 1.0
 * @description: 退回明细
 * @date 2023/12/2 11:52
 */
@NoArgsConstructor
@Data
@ApiModel
public class UsingFormBackDetailListVO {
    private Long id;
    private String departmentName;
    private Long dealTime;
    private String businessFormCode;
    private String operatorName;
    private Integer counts;
    private String baseGoodsTemplateName;
    private String baseGoodsModelsName;
    private String agencyName;
}
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackDetailVO.java
New file
@@ -0,0 +1,38 @@
package com.consum.base.pojo.response;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author asus
 * @version 1.0
 * @description: 退回单详情
 * @date 2023/12/1 18:22
 */
@NoArgsConstructor
@Data
public class UsingFormBackDetailVO {
    private Long id;
    private String businessFormCode;
    private String agencyName;
    private String departmentName;
    private String operatorName;
    private Long dealTime;
    private String procureDoc;
    private List<UsingFormBackGoodsTemplateInfo> goodsTemplateInfoList;
//    private Integer counts;
//    private String goodsUserName;
//    private String classification;
//
//    private String categoryName;
//
//    private String unit;
//
//    private String baseGoodsTemplateName;
//    private String baseGoodsModelsName;
//    private Integer useCount;
}
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackGoodsTemplateInfo.java
New file
@@ -0,0 +1,25 @@
package com.consum.base.pojo.response;
import io.swagger.annotations.ApiModel;
import java.util.List;
import lombok.Data;
/**
 * @author asus
 * @version 1.0
 * @description: 退回物品模板信息
 * @date 2023/12/2 9:18
 */
@Data
@ApiModel
public class UsingFormBackGoodsTemplateInfo {
    private Long id;
    private String categoryName;
    private String baseGoodsTemplateName;
    private String type;
    private String businessFormCode;
    private List<UsingFormBackModelInfo> modelInfoList;
}
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackModelInfo.java
New file
@@ -0,0 +1,22 @@
package com.consum.base.pojo.response;
import io.swagger.annotations.ApiModel;
import java.util.List;
import lombok.Data;
/**
 * @author asus
 * @version 1.0
 * @description: 退回物品型号信息
 * @date 2023/12/2 9:24
 */
@Data
@ApiModel
public class UsingFormBackModelInfo {
    private Long id;
    private String baseGoodsModelsName;
    private String unit;
    private List<UseInfo> useInfoList;
}
consum-base/src/main/java/com/consum/base/pojo/response/UsingFormBackVO.java
New file
@@ -0,0 +1,24 @@
package com.consum.base.pojo.response;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author asus
 * @version 1.0
 * @description: TODO
 * @date 2023/12/1 17:12
 */
@NoArgsConstructor
@Data
public class UsingFormBackVO {
    private Long id;
    private String departmentName;
    private Long dealTime;
    private String businessFormCode;
    private String operatorName;
    private List<BaseGoodsTemplateInfo> goodsTemplateInfoList;
}
consum-base/src/main/java/com/consum/base/service/UsingFormBackService.java
@@ -1,6 +1,9 @@
package com.consum.base.service;
import com.consum.base.core.utils.PageUtil;
import com.consum.base.pojo.query.UsingFormBackQry;
import com.consum.base.pojo.request.UsingFormBackParam;
import com.consum.base.pojo.response.UsingFormBackDetailVO;
import com.consum.model.po.FinSysTenantUser;
import com.walker.jdbc.service.BaseService;
@@ -13,4 +16,10 @@
public interface UsingFormBackService extends BaseService {
    void add(UsingFormBackParam usingFormBackParam, FinSysTenantUser sysInfo);
    PageUtil selectPageByList(UsingFormBackQry usingFormBackParam);
    UsingFormBackDetailVO getDetail(Long id);
    PageUtil selectPageByDetail(UsingFormBackQry usingFormBackParam);
}
consum-base/src/main/java/com/consum/base/service/impl/UsingFormBackServiceImpl.java
@@ -3,20 +3,41 @@
import com.consum.base.core.CodeGeneratorEnum;
import com.consum.base.core.CodeGeneratorService;
import com.consum.base.core.utils.IdUtil;
import com.consum.base.core.utils.MapUtils;
import com.consum.base.core.utils.MapperUtil;
import com.consum.base.core.utils.PageUtil;
import com.consum.base.pojo.dto.UsingFormBackDetailDTO;
import com.consum.base.pojo.query.UsingFormBackQry;
import com.consum.base.pojo.request.UsingFormBackGoodsInfo;
import com.consum.base.pojo.request.UsingFormBackParam;
import com.consum.base.pojo.request.baseGoodModel;
import com.consum.base.pojo.response.BaseGoodsTemplateInfo;
import com.consum.base.pojo.response.UseInfo;
import com.consum.base.pojo.response.UsingFormBackDetailListVO;
import com.consum.base.pojo.response.UsingFormBackDetailVO;
import com.consum.base.pojo.response.UsingFormBackGoodsTemplateInfo;
import com.consum.base.pojo.response.UsingFormBackModelInfo;
import com.consum.base.pojo.response.UsingFormBackVO;
import com.consum.base.service.BaseCategoryServiceImpl;
import com.consum.base.service.UsingFormBackGoodsService;
import com.consum.base.service.UsingFormBackModelService;
import com.consum.base.service.UsingFormBackService;
import com.consum.model.po.BaseCategory;
import com.consum.model.po.FinSysTenantUser;
import com.consum.model.po.UsingFormBack;
import com.consum.model.po.UsingFormBackGoods;
import com.consum.model.po.UsingFormBackModel;
import com.walker.db.page.GenericPager;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.infrastructure.utils.DateUtils;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -34,6 +55,11 @@
    private CodeGeneratorService codeGeneratorService;
    @Autowired
    private BaseCategoryServiceImpl baseCategoryService;
    @Autowired
    private UsingFormBackModelService usingFormBackModelService;
    @Autowired
    private UsingFormBackGoodsService usingFormBackGoodsService;
    @Override
    public void add(UsingFormBackParam usingFormBackParam, FinSysTenantUser sysInfo) {
@@ -54,9 +80,6 @@
            Long transBusinessId = backingGoodsInfo.getTransBusinessId();
            String businessFormCode = backingGoodsInfo.getBusinessFormCode();
            Map<String, List<baseGoodModel>> collect = backingGoodsInfo.getModels().stream()
                .collect(Collectors.groupingBy(baseGoodModel::getBaseGoodsModelsId));
            UsingFormBackGoods usingFormBackGoods = new UsingFormBackGoods();
            usingFormBackGoods.setId(IdUtil.generateId());
            usingFormBackGoods.setUsingFormBackId(usingFormBackId);
@@ -70,13 +93,280 @@
            usingFormBackGoods.setClassification(classification);
            usingFormBackGoods.setTransBusinessId(transBusinessId);
            usingFormBackGoods.setBusinessFormCode(businessFormCode);
//            usingFormBackGoods.setTransOutWarehouseType();
//            usingFormBackGoods.setTransOutWarehouseId();
            usingFormBackModelService.insert(usingFormBackGoods);
            for (baseGoodModel model : backingGoodsInfo.getModels()) {
                UsingFormBackModel usingFormBackModel = new UsingFormBackModel();
                usingFormBackModel.setId(IdUtil.generateId());
                usingFormBackModel.setUsingFormBackId(usingFormBackId);
                usingFormBackModel.setUsingFormBackGoodsId(usingFormBackGoods.getId());
                usingFormBackModel.setBaseGoodsTemplateId(model.getGoodsTemplatesId());
                usingFormBackModel.setBaseGoodsTemplateName(goodsTemplateName);
                usingFormBackModel.setClassification(model.getClassification());
                usingFormBackModel.setUnit(model.getUnit());
                usingFormBackModel.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
                usingFormBackModel.setBaseGoodsModelsName(model.getModelName());
                usingFormBackModel.setProcureModelUserId(model.getModelUserId());
                usingFormBackModel.setInitialCount(model.getGoodsNum());
                usingFormBackModel.setUseCount(model.getUserUseCount());
                usingFormBackModel.setCounts(model.getCounts());
                usingFormBackModel.setGoodsUserName(model.getNowUserName());
                usingFormBackGoodsService.insert(usingFormBackModel);
            }
        }
    }
    @Override
    public PageUtil selectPageByList(UsingFormBackQry usingFormBackParam) {
        StringBuilder sql = new StringBuilder("SELECT\n"
            + "\tDISTINCT ufb.ID,\n"
            + "\tufb.BUSINESS_FORM_CODE,\n"
            + "\tufb.DEPARTMENT_NAME,\n"
            + "\tufb.OPERATOR_NAME,\n"
            + "\tufb.DEAL_TIME\n"
            + "FROM\n"
            + "\tusing_form_back ufb\n"
            + "\tLEFT JOIN using_form_back_goods ufbg ON ufb.ID = ufbg.USING_FORM_BACK_ID\n"
            + "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID\n"
            + "where 1=1 ");
        String businessFormCode = usingFormBackParam.getBusinessFormCode();
        Long departmentId = usingFormBackParam.getDepartmentId();
        String goodsTemplateName = usingFormBackParam.getGoodsTemplateName();
        String goodsTemplateId = usingFormBackParam.getGoodsTemplateId();
        Long startTime = usingFormBackParam.getStartTime();
        Long endTime = usingFormBackParam.getEndTime();
        Long baseGoodsModelsId = usingFormBackParam.getBaseGoodsModelsId();
        Long agencyId = usingFormBackParam.getAgencyId();
        String createName = usingFormBackParam.getCreateName();
        Map<String, Object> map = new HashMap<>();
        if (StringUtils.isNotEmpty(businessFormCode)) {
            sql.append("AND ufb.BUSINESS_FORM_CODE = :businessFormCode ");
            map.put("businessFormCode", businessFormCode);
        }
        if (departmentId != null) {
            sql.append("AND ufb.DEPARTMENT_ID = :departmentId ");
            map.put("departmentId", departmentId);
        }
        if (StringUtils.isNotEmpty(goodsTemplateName)) {
            sql.append("AND ufbg.BASE_GOODS_TEMPLATE_NAME = :goodsTemplateName ");
            map.put("goodsTemplateName", goodsTemplateName);
        }
        if (StringUtils.isNotEmpty(goodsTemplateId)) {
            sql.append("AND ufbg.BASE_GOODS_TEMPLATE_ID = :goodsTemplateId ");
            map.put("goodsTemplateId", goodsTemplateId);
        }
        if (startTime != null) {
            sql.append("AND ufb.CREATE_TIME >= :startTime ");
            map.put("startTime", startTime * 1000000);
        }
        if (endTime != null) {
            sql.append("AND ufb.CREATE_TIME < :endTime ");
            map.put("endTime", endTime * 1000000 + 240000);
        }
        if (baseGoodsModelsId != null) {
            sql.append("AND ufbm.BASE_GOODS_MODELS_ID = :baseGoodsModelsId ");
            map.put("baseGoodsModelsId", baseGoodsModelsId);
        }
        if (agencyId != null) {
            sql.append("AND ufb.AGENCY_ID like :agencyId");
            map.put("agencyId", agencyId);
        }
        if (StringUtils.isNotEmpty(createName)) {
            sql.append("AND ufb.CREATE_NAME = :createName ");
            map.put("createName", createName);
        }
        sql.append("ORDER BY ufb.CREATE_TIME DESC ");
        GenericPager<Map<String, Object>> mapGenericPager = this.selectSplit(sql.toString(), map, usingFormBackParam.getPageNum(),
            usingFormBackParam.getPageSize(), new MapperUtil());
        PageUtil pageUtil = new PageUtil(mapGenericPager);
        List<UsingFormBackVO> pageList = Lists.newArrayList();
        mapGenericPager.getDatas().forEach(item -> {
            UsingFormBackVO usingFormBackVO = MapUtils.convertMapToObj(item, UsingFormBackVO.class);
            Long id = usingFormBackVO.getId();
            StringBuilder countSql = new StringBuilder("SELECT \n"
                + "\tufbg.BASE_GOODS_TEMPLATE_NAME,\n"
                + "\tsum(ufbm.COUNTS) count\n"
                + "FROM\n"
                + "\tusing_form_back_goods ufbg\n"
                + "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID\n"
                + "where ufbg.USING_FORM_BACK_ID = :id group by ufbg.BASE_GOODS_TEMPLATE_ID ");
            Map<String, Object> countSqlMap = new HashMap<>();
            countSqlMap.put("id", id);
            List<Map<String, Object>> select = this.select(countSql.toString(), countSqlMap, new MapperUtil());
            List<BaseGoodsTemplateInfo> baseGoodsTemplateInfoList = Lists.newArrayList();
            select.forEach(entity -> {
                BaseGoodsTemplateInfo baseGoodsTemplateInfo = MapUtils.convertMapToObj(entity, BaseGoodsTemplateInfo.class);
                baseGoodsTemplateInfoList.add(baseGoodsTemplateInfo);
            });
            usingFormBackVO.setGoodsTemplateInfoList(baseGoodsTemplateInfoList);
            pageList.add(usingFormBackVO);
        });
        pageUtil.setDatas(pageList);
        return pageUtil;
    }
    @Override
    public UsingFormBackDetailVO getDetail(Long id) {
        StringBuilder sql = new StringBuilder("SELECT\n"
            + "\tDISTINCT ufb.ID,\n"
            + "\tufb.BUSINESS_FORM_CODE,\n"
            + "\tufb.AGENCY_NAME,\n"
            + "\tufb.DEPARTMENT_NAME,\n"
            + "\tufb.OPERATOR_NAME,\n"
            + "\tufb.DEAL_TIME,\n"
            + "\tufb.PROCURE_DOC,\n"
            + "\tufbg.CATEGORY_NAME,\n"
            + "\tufbg.BASE_GOODS_TEMPLATE_NAME,\n"
            + "\tufbg.CLASSIFICATION,\n"
            + "\tufbg.BUSINESS_FORM_CODE,\n"
            + "\tufbm.BASE_GOODS_MODELS_NAME,\n"
            + "\tufbm.BASE_GOODS_TEMPLATE_ID,\n"
            + "\tufbm.BASE_GOODS_MODELS_ID,\n"
            + "\tufbm.UNIT,\n"
            + "\tufbm.COUNTS,\n"
            + "\tufbm.USE_COUNT,\n"
            + "\tufbm.GOODS_USER_NAME\n"
            + "FROM\n"
            + "\tusing_form_back ufb\n"
            + "\tLEFT JOIN using_form_back_goods ufbg ON ufb.ID = ufbg.USING_FORM_BACK_ID\n"
            + "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID where ufb.id =:id");
        Map<String, Object> map = new HashMap<>();
        map.put("id", id);
        List<Map<String, Object>> select = this.select(sql.toString(), map, new MapperUtil());
        if (CollectionUtils.isEmpty(select)) {
            return null;
        }
        List<UsingFormBackDetailDTO> usingFormBackDetailDTOList = Lists.newArrayList();
        select.forEach(item -> {
            UsingFormBackDetailDTO usingFormBackDetailDTO = MapUtils.convertMapToObj(item, UsingFormBackDetailDTO.class);
            usingFormBackDetailDTOList.add(usingFormBackDetailDTO);
        });
        UsingFormBackDetailVO usingFormBackDetailVO = new UsingFormBackDetailVO();
        List<UsingFormBackGoodsTemplateInfo> goodsTemplateInfoList = Lists.newArrayList();
        usingFormBackDetailDTOList.stream().collect(Collectors.groupingBy(UsingFormBackDetailDTO::getBaseGoodsTemplateId))
            .forEach((templateId, templateInfo) -> {
                UsingFormBackDetailDTO templateInfoDTO = templateInfo.get(0);
                BeanUtils.copyProperties(templateInfoDTO, usingFormBackDetailVO);
                UsingFormBackGoodsTemplateInfo usingFormBackGoodsTemplateInfo = new UsingFormBackGoodsTemplateInfo();
                usingFormBackGoodsTemplateInfo.setId(templateId);
                usingFormBackGoodsTemplateInfo.setCategoryName(templateInfoDTO.getCategoryName());
                usingFormBackGoodsTemplateInfo.setBaseGoodsTemplateName(templateInfoDTO.getBaseGoodsTemplateName());
                usingFormBackGoodsTemplateInfo.setType(templateInfoDTO.getClassification());
                usingFormBackGoodsTemplateInfo.setBusinessFormCode(templateInfoDTO.getBusinessFormCode());
                goodsTemplateInfoList.add(usingFormBackGoodsTemplateInfo);
                usingFormBackDetailVO.setGoodsTemplateInfoList(goodsTemplateInfoList);
                List<UsingFormBackModelInfo> modelInfoList = Lists.newArrayList();
                templateInfo.stream().collect(Collectors.groupingBy(UsingFormBackDetailDTO::getBaseGoodsModelsId)).forEach((modelId, modelInfo) -> {
                    UsingFormBackDetailDTO modelInfoDTO = modelInfo.get(0);
                    UsingFormBackModelInfo usingFormBackModelInfo = new UsingFormBackModelInfo();
                    usingFormBackModelInfo.setBaseGoodsModelsName(modelInfoDTO.getBaseGoodsModelsName());
                    usingFormBackModelInfo.setUnit(modelInfoDTO.getUnit());
                    usingFormBackModelInfo.setId(modelId);
                    modelInfoList.add(usingFormBackModelInfo);
                    usingFormBackGoodsTemplateInfo.setModelInfoList(modelInfoList);
                    List<UseInfo> useInfoList = Lists.newArrayList();
                    for (UsingFormBackDetailDTO useInfoDTO : modelInfo) {
                        UseInfo useInfo = new UseInfo();
                        useInfo.setUseName(useInfoDTO.getGoodsUserName());
                        useInfo.setReturnNum(useInfoDTO.getCounts());
                        useInfo.setUseUnm(useInfoDTO.getUseCount());
                        useInfoList.add(useInfo);
                        usingFormBackModelInfo.setUseInfoList(useInfoList);
                    }
                });
            });
        return usingFormBackDetailVO;
    }
    @Override
    public PageUtil selectPageByDetail(UsingFormBackQry usingFormBackParam) {
        StringBuilder sql = new StringBuilder("SELECT\n"
            + "\tufb.ID,\n"
            + "\tufb.BUSINESS_FORM_CODE,\n"
            + "\tufbm.BASE_GOODS_TEMPLATE_NAME,\n"
            + "\tufbm.BASE_GOODS_MODELS_NAME,\n"
            + "\tufbm.counts,\n"
            + "\tufb.AGENCY_NAME,\n"
            + "\tufb.DEPARTMENT_NAME,\n"
            + "\tufb.OPERATOR_NAME,\n"
            + "\tufb.DEAL_TIME\n"
            + "FROM\n"
            + "\tusing_form_back ufb\n"
            + "\tLEFT JOIN using_form_back_goods ufbg ON ufb.ID = ufbg.USING_FORM_BACK_ID\n"
            + "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID\n"
            + "where 1=1 ");
        String businessFormCode = usingFormBackParam.getBusinessFormCode();
        Long departmentId = usingFormBackParam.getDepartmentId();
        String goodsTemplateName = usingFormBackParam.getGoodsTemplateName();
        String goodsTemplateId = usingFormBackParam.getGoodsTemplateId();
        Long startTime = usingFormBackParam.getStartTime();
        Long endTime = usingFormBackParam.getEndTime();
        Long baseGoodsModelsId = usingFormBackParam.getBaseGoodsModelsId();
        Long agencyId = usingFormBackParam.getAgencyId();
        String createName = usingFormBackParam.getCreateName();
        Map<String, Object> map = new HashMap<>();
        if (StringUtils.isNotEmpty(businessFormCode)) {
            sql.append("AND ufb.BUSINESS_FORM_CODE = :businessFormCode ");
            map.put("businessFormCode", businessFormCode);
        }
        if (departmentId != null) {
            sql.append("AND ufb.DEPARTMENT_ID = :departmentId ");
            map.put("departmentId", departmentId);
        }
        if (StringUtils.isNotEmpty(goodsTemplateName)) {
            sql.append("AND ufbg.BASE_GOODS_TEMPLATE_NAME = :goodsTemplateName ");
            map.put("goodsTemplateName", goodsTemplateName);
        }
        if (StringUtils.isNotEmpty(goodsTemplateId)) {
            sql.append("AND ufbg.BASE_GOODS_TEMPLATE_ID = :goodsTemplateId ");
            map.put("goodsTemplateId", goodsTemplateId);
        }
        if (startTime != null) {
            sql.append("AND ufb.CREATE_TIME >= :startTime ");
            map.put("startTime", startTime * 1000000);
        }
        if (endTime != null) {
            sql.append("AND ufb.CREATE_TIME < :endTime ");
            map.put("endTime", endTime * 1000000 + 240000);
        }
        if (baseGoodsModelsId != null) {
            sql.append("AND ufbm.BASE_GOODS_MODELS_ID = :baseGoodsModelsId ");
            map.put("baseGoodsModelsId", baseGoodsModelsId);
        }
        if (agencyId != null) {
            sql.append("AND ufb.AGENCY_ID like :agencyId ");
            map.put("agencyId", agencyId);
        }
        if (StringUtils.isNotEmpty(createName)) {
            sql.append("AND ufb.CREATE_NAME = :createName ");
            map.put("createName", createName);
        }
        sql.append("ORDER BY ufb.CREATE_TIME DESC ");
        GenericPager<Map<String, Object>> mapGenericPager = this.selectSplit(sql.toString(), map, usingFormBackParam.getPageNum(),
            usingFormBackParam.getPageSize(), new MapperUtil());
        PageUtil pageUtil = new PageUtil(mapGenericPager);
        List<UsingFormBackDetailListVO> pageList = Lists.newArrayList();
        mapGenericPager.getDatas().forEach(item -> {
            UsingFormBackDetailListVO usingFormBackVO = MapUtils.convertMapToObj(item, UsingFormBackDetailListVO.class);
            pageList.add(usingFormBackVO);
        });
        pageUtil.setDatas(pageList);
        return pageUtil;
    }
    @Transactional
    public Long addUsingFormBack(FinSysTenantUser sysInfo, Long departmentId, String departmentName, Long operatorId, String operatorName, Long backTime,
        String procureDoc) {