提交 beedd926 authored 作者: 张警文's avatar 张警文

add: 统计BOM原料汇总并导出

上级 772f347e
......@@ -6,6 +6,7 @@ import com.dalezhuang.basic.database.mybatis.auth.DataScope;
import com.dalezhuang.cloudfactory.pms.dto.*;
import com.dalezhuang.cloudfactory.pms.entity.PmsComponent;
import com.dalezhuang.cloudfactory.pms.vo.BuildingUnitSquareAmountSourceVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentBomMaterialStatisticalVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentManagementVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentSummaryVO;
import org.apache.ibatis.annotations.Param;
......@@ -93,4 +94,12 @@ public interface ComponentMapper extends SuperMapper<PmsComponent> {
@Param("extra") Map<String, Object> extra,
DataScope dataScope);
/**
* 构件Bom物料详情汇总
*
* @param projectId 项目id
* @return bom物料汇总
*/
List<ComponentBomMaterialStatisticalVO> statisticalBomMaterial(@Param("projectId") Long projectId);
}
......@@ -6,6 +6,7 @@ import com.dalezhuang.basic.base.service.SuperService;
import com.dalezhuang.cloudfactory.pms.dto.*;
import com.dalezhuang.cloudfactory.pms.entity.PmsComponent;
import com.dalezhuang.cloudfactory.pms.vo.BuildingUnitSquareAmountVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentBomMaterialStatisticalVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentManagementVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentSummaryVO;
......@@ -107,4 +108,13 @@ public interface ComponentService extends SuperService<PmsComponent> {
* @return 删除是否成功
*/
Boolean deleteByIds(List<String> idsList);
/**
* 构件Bom物料详情汇总
*
* @param projectId 项目id
* @return bom物料汇总
*/
List<ComponentBomMaterialStatisticalVO> statisticalBomMaterial(Long projectId);
}
......@@ -3,6 +3,7 @@ package com.dalezhuang.cloudfactory.pms.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
......@@ -36,7 +37,6 @@ import com.dalezhuang.cloudfactory.pms.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -66,6 +66,8 @@ public class ComponentServiceImpl extends SuperServiceImpl<ComponentMapper, PmsC
@Autowired
private PmsComponentMaterialService componentMaterialService;
@Autowired
private PmsMaterialService pmsMaterialService;
@Autowired
private CachePlusOps cachePlusOps;
@Autowired
private DistributedLock redisDistributedLock;
......@@ -1063,4 +1065,26 @@ public class ComponentServiceImpl extends SuperServiceImpl<ComponentMapper, PmsC
}
return true;
}
@Override
public List<ComponentBomMaterialStatisticalVO> statisticalBomMaterial(Long projectId) {
List<ComponentBomMaterialStatisticalVO> dataList = baseMapper.statisticalBomMaterial(projectId);
//获取品类、单位转换
Map<String, Long> materialCategoryLabelMap = pmsMaterialService.getMaterialCategoryLabelMap();
Map<Long, String> categoryMap = GeneralStrUtil.reverseMap(materialCategoryLabelMap);
Map<String, String> unitLabelMap = pmsMaterialService.getMaterialUnitLabelMap();
Map<String, String> unitMap = GeneralStrUtil.reverseMap(unitLabelMap);
for (ComponentBomMaterialStatisticalVO data : dataList) {
//设置对应物料 品类-名称-规格-单位
String stringBuffer = categoryMap.get(data.getCategoryId()) + "-" +
data.getName() + "-" +
data.getSpecification() + "-" +
unitMap.get(data.getMaterialUnit());
data.setNameFull(stringBuffer);
// 楼栋单元
data.setBuildingUnit(data.getBuilding() + "#" + Convert.toStr(data.getUnit(), StrPool.EMPTY));
}
return dataList;
}
}
......@@ -228,4 +228,31 @@
ORDER BY floor
</select>
<select id="statisticalBomMaterial"
resultType="com.dalezhuang.cloudfactory.pms.vo.ComponentBomMaterialStatisticalVO">
SELECT
pc.building, pc.unit,
SUM(IFNULL(material.cutting_length, 0)) AS 'quantity',
SUM(IFNULL(material.total, 0)) AS 'weight',
pm.`name`,
pm.`code`,
pm.category_id,
pm.specification,
pm.unit AS material_unit,
pm.note
FROM pms_component pc
LEFT JOIN (
SELECT
component_id, material_id, total, party_a_provides, '' AS sketch, '' AS sketch_crc64, '' AS cutting_length
FROM pms_component_material pcm
UNION ALL
SELECT
component_id, material_id, quantity AS total, '' AS party_a_provides, sketch, sketch_crc64, cutting_length
FROM pms_rebar pr
) material ON material.component_id = pc.id
LEFT JOIN pms_material pm ON pm.id = material.material_id
WHERE pc.project_id = #{projectId}
GROUP BY pc.building, pc.unit, material.material_id
</select>
</mapper>
package com.dalezhuang.cloudfactory.pms.controller;
import cn.afterturn.easypoi.entity.vo.NormalExcelConstants;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.view.PoiBaseView;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dalezhuang.basic.annotation.log.SysLog;
import com.dalezhuang.basic.annotation.security.PreAuth;
......@@ -12,6 +16,7 @@ import com.dalezhuang.cloudfactory.pms.dto.*;
import com.dalezhuang.cloudfactory.pms.entity.PmsComponent;
import com.dalezhuang.cloudfactory.pms.service.ComponentService;
import com.dalezhuang.cloudfactory.pms.vo.BuildingUnitSquareAmountVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentBomMaterialStatisticalVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentManagementVO;
import com.dalezhuang.cloudfactory.pms.vo.ComponentSummaryVO;
import io.swagger.annotations.Api;
......@@ -22,6 +27,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
......@@ -161,4 +169,19 @@ public class ComponentController extends SuperController<ComponentService, Long,
return R.success(delete);
}
@ApiOperation(value = "统计BOM原料汇总并导出", notes = "根据项目ID查询")
@RequestMapping(value = "/statisticalBomExport", method = RequestMethod.POST, produces = "application/octet-stream")
@SysLog("'统计BOM原料汇总并导出-项目ID: ' + #model?.id")
public void statisticalBomExport(@RequestBody @Validated IdModel model, HttpServletRequest request, HttpServletResponse response) {
String title = "原料汇总";
ExportParams exportParams = new ExportParams(title, title, ExcelType.XSSF);
List<ComponentBomMaterialStatisticalVO> list = baseService.statisticalBomMaterial(model.getId());
Map<String, Object> map = new HashMap<>(7);
map.put(NormalExcelConstants.DATA_LIST, list);
map.put(NormalExcelConstants.CLASS, getExcelClass());
map.put(NormalExcelConstants.PARAMS, exportParams);
map.put(NormalExcelConstants.FILE_NAME, list);
PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);
}
}
......@@ -98,8 +98,8 @@ public class BomMaterialDTO extends BaseDTO implements EchoVO {
@ApiModelProperty(value = "物料单位")
private String unitName;
@ApiModelProperty(value = "使用数量")
@Excel(name = "使用数量")
@ApiModelProperty(value = "名称")
@Excel(name = "名称")
private String nameFull;
@ApiModelProperty(value = "物料图片,首张")
......
......@@ -109,8 +109,8 @@ public class BomRebarDTO extends BaseDTO implements EchoVO {
@ApiModelProperty(value = "物料单位")
private String unitName;
@ApiModelProperty(value = "使用数量")
@Excel(name = "使用数量")
@ApiModelProperty(value = "名称")
@Excel(name = "名称")
private String nameFull;
@ApiModelProperty(value = "物料图片,首张")
......
package com.dalezhuang.cloudfactory.pms.vo;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.dalezhuang.basic.base.domain.BaseVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
/**
* <p>
* 实体类
* 构件Bom物料详情汇总
* </p>
*
* @author jawoo
* @since 2021-12-7
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "ComponentBomMaterialStatisticalDTO", description = "构件Bom物料详情汇总")
public class ComponentBomMaterialStatisticalVO extends BaseVO {
private static final long serialVersionUID = 6462298111204114114L;
@ApiModelProperty(value = "项目id")
private Long projectId;
@ApiModelProperty(value = "楼栋")
private String building;
@ApiModelProperty(value = "单元")
private String unit;
@ApiModelProperty(value = "楼层")
private Integer floor;
@ApiModelProperty(value = "楼栋")
@Excel(name = "楼栋单元")
private String buildingUnit;
@ApiModelProperty(value = "物料名称,最多20个字符,必填")
private String name;
@ApiModelProperty(value = "物料编号")
@Excel(name = "物料编码")
private String code;
@ApiModelProperty(value = "品类id")
private Long categoryId;
@ApiModelProperty(value = "规格参数,最多20个字符,必填")
private String specification;
@ApiModelProperty(value = "物料单位")
private String materialUnit;
@ApiModelProperty(value = "备注,最多50个字符,非必填")
private String note;
@ApiModelProperty(value = "名称")
@Excel(name = "品类-物料名称-规格-单位")
private String nameFull;
@ApiModelProperty(value = "数量")
@Excel(name = "汇总数量(PCS)")
private Integer quantity;
@ApiModelProperty(value = "重量")
@Excel(name = "汇总重量(KG)")
private Integer weight;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论