Commit c16e627b authored by tangwei's avatar tangwei

器材统计

parent c995d549
package com.yeejoin.amos.boot.biz.common.excel;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.util.CollectionUtils;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: tw
* @createDate: 2023/2/23
*/
// 自定义合并策略 该类继承了AbstractMergeStrategy抽象合并策略,需要重写merge()方法
public class CustomMergeStrategy extends AbstractMergeStrategy {
/**
* 分组,每几行合并一次
*/
private List<Integer> exportFieldGroupCountList;
/**
* 目标合并列index
*/
private Integer targetColumnIndex;
// 需要开始合并单元格的首行index
private Integer rowIndex;
// exportDataList为待合并目标列的值
public CustomMergeStrategy(List<String> exportDataList, Integer targetColumnIndex) {
this.exportFieldGroupCountList = getGroupCountList(exportDataList);
this.targetColumnIndex = targetColumnIndex;
}
private void mergeGroupColumn(Sheet sheet) {
int rowCount = rowIndex;
for (Integer count : exportFieldGroupCountList) {
if(count == 1) {
rowCount += count;
continue ;
}
// 合并单元格
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount + count - 1, targetColumnIndex, targetColumnIndex);
sheet.addMergedRegionUnsafe(cellRangeAddress);
rowCount += count;
}
}
// 该方法将目标列根据值是否相同连续可合并,存储可合并的行数
private List<Integer> getGroupCountList(List<String> exportDataList){
if (CollectionUtils.isEmpty(exportDataList)) {
return new ArrayList<>();
}
List<Integer> groupCountList = new ArrayList<>();
int count = 1;
for (int i = 1; i < exportDataList.size(); i++) {
if (exportDataList.get(i).equals(exportDataList.get(i - 1))) {
count++;
} else {
groupCountList.add(count);
count = 1;
}
}
// 处理完最后一条后
groupCountList.add(count);
return groupCountList;
}
@Override
protected void merge(Sheet sheet, Cell cell, Head head, int relativeRowIndex) {
if (null == rowIndex) {
rowIndex = cell.getRowIndex();
}
// 仅从首行以及目标列的单元格开始合并,忽略其他
if (cell.getRowIndex() == rowIndex && cell.getColumnIndex() == targetColumnIndex) {
mergeGroupColumn(sheet);
}
}
}
\ No newline at end of file
......@@ -2,30 +2,37 @@ package com.yeejoin.amos.boot.biz.common.excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ExcelUtil {
......@@ -80,6 +87,52 @@ public class ExcelUtil {
* @param sheetName sheet名
* @param data 导出的数据
* @param model 导出的头
*/
public static void createTemplateHB(HttpServletResponse response, String fileName,
String sheetName, List<? extends Object> data,
Class<?> model,String getName) {
HorizontalCellStyleStrategy horizontalCellStyleStrategy = setMyCellStyle();
try {
//获取字段
Field field = model.getDeclaredField(getName);
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), model);
//获取get方法
Method getMethod = pd.getReadMethod();
List<String> exportDataList= data.stream().map(bject -> ReflectionUtils.invokeMethod(getMethod, bject).toString()).collect(Collectors.toList());
ExcelWriter excelWriter = EasyExcel.write(getOutputStream(fileName, response, ExcelTypeEnum.XLSX), model).build();
// 写sheet的时候注册相应的自定义合并单元格策略
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).head(model)
.registerWriteHandler(new CustomMergeStrategy(exportDataList, 0))
.registerWriteHandler(new TemplateCellWriteHandler())
.registerWriteHandler(horizontalCellStyleStrategy)
.build();
excelWriter.write(data, writeSheet);
excelWriter.finish();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("系统异常!");
}
}
/**
* 生成excel模板
*
* @param response
* @param fileName 下载的文件名,
* @param sheetName sheet名
* @param data 导出的数据
* @param model 导出的头
* @param flag true模板填充下拉 false 不填充
*/
public static void createDutyTemplate(HttpServletResponse response, String fileName, String sheetName, List<?
......
......@@ -11,6 +11,7 @@ import com.yeejoin.equipmanage.common.enums.IndustryEnum;
import com.yeejoin.equipmanage.common.utils.CommonResponseUtil;
import com.yeejoin.equipmanage.common.utils.StringUtil;
import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.dto.EquipmentcountDto;
import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.service.AbstractQRCodeFactory;
import com.yeejoin.equipmanage.service.IEquipmentService;
......@@ -667,4 +668,19 @@ public class EquipmentController extends AbstractBaseController {
public List<Equipment> listAll() {
return iEquipmentService.getAll();
}
@PostMapping(value = "/getEquipmentcount")
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "获取装备統計", notes = "获取装备統計")
public List<EquipmentcountDto> getEquipmentcount( @RequestParam(required = false) String name,@RequestParam(required = false) String code) {
if(code==null||code.equals("")){
throw new RuntimeException("请选择单位");
}else{
return iEquipmentService.getEquipmentcount(name,code);
}
}
}
......@@ -708,6 +708,13 @@ public class EquipmentDetailController extends AbstractBaseController {
return ResponseHelper.buildResponse(iEquipmentDetailService.companyDeptTree());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/companyTreeByUserAndTypeTJ")
@ApiOperation(httpMethod = "GET", value = "消防装备单位部门树", notes = "消防装备单位部门树")
public ResponseModel<List<OrgMenuDto>> companyTreeByUserAndTypeTJ() {
return ResponseHelper.buildResponse(iEquipmentDetailService.companyDeptTreeTJ());
}
/**
* 消防装备权限获取
*
......
......@@ -4,17 +4,15 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.utils.SpringUtils;
import com.yeejoin.equipmanage.dto.EquipmentcountDto;
import com.yeejoin.equipmanage.fegin.JcsFeign;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -64,7 +62,6 @@ import com.yeejoin.equipmanage.common.vo.FireFightingSystemTreeVo;
import com.yeejoin.equipmanage.common.vo.FireFightingSystemTypeTreeVo;
import com.yeejoin.equipmanage.common.vo.FireFightingSystemVo;
import com.yeejoin.equipmanage.common.vo.SpeIndexVo;
import com.yeejoin.equipmanage.fegin.JcsFeign;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificIndexMapper;
import com.yeejoin.equipmanage.mapper.FireFightingSystemMapper;
import com.yeejoin.equipmanage.remote.RemoteSecurityService;
......@@ -81,34 +78,11 @@ import com.yeejoin.equipmanage.service.IUploadFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.MediaType;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author zjw
......@@ -912,7 +886,19 @@ public class FireFightingSystemController extends AbstractBaseController {
ExcelUtil.createTemplate(response, "装备信息", "装备信息", list, EquipmentExportVO.class, null, false);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(value = "装备信息导出", notes = "装备信息导出")
@PostMapping(value = "/downGetEquipmentcount")
public void downGetEquipmentcount(HttpServletResponse response, @RequestParam(required = false) String name,@RequestParam(required = false) String code) {
if(code==null||code.equals("")){
throw new RuntimeException("请选择单位");
}else{
List<EquipmentcountDto> list = iEquipmentService.getEquipmentcount(name,code);
ExcelUtil.createTemplateHB(response, "装备信息", "装备信息", list, EquipmentcountDto.class, "bizOrgName");
}
}
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.equipmanage.common.entity.Equipment;
import com.yeejoin.equipmanage.common.entity.vo.*;
import com.yeejoin.equipmanage.common.vo.EquipmentVo;
import com.yeejoin.equipmanage.dto.EquipmentcountDto;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -51,4 +52,8 @@ public interface EquipmentMapper extends BaseMapper<Equipment> {
* @return
*/
EquipmentVo getEquipBySpecific(@Param("equipmentSpecificId") Long equipmentSpecificId);
List<EquipmentcountDto> getEquipmentcountB(@Param("name") String name,@Param("code") String code);
}
......@@ -36,4 +36,5 @@ public interface IEquipmentDetailService extends IService<EquipmentDetail> {
String checkDelete( List<Long> ids);
List<OrgMenuDto> companyDeptTree();
List<OrgMenuDto> companyDeptTreeTJ();
}
......@@ -5,6 +5,7 @@ import com.yeejoin.equipmanage.common.entity.Equipment;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentAppVO;
import com.yeejoin.equipmanage.common.vo.EquipmentVo;
import com.yeejoin.equipmanage.common.entity.vo.ImportantEquipmentVO;
import com.yeejoin.equipmanage.dto.EquipmentcountDto;
import java.util.List;
import java.util.Map;
......@@ -126,4 +127,12 @@ public interface IEquipmentService extends IService<Equipment> {
* @return
*/
EquipmentVo getEquipBySpecific(Long equipmentSpecificId);
/**
*
* 装备统计
* */
List<EquipmentcountDto> getEquipmentcount(String name,String code);
}
......@@ -84,7 +84,8 @@ public class EquipmentDetailServiceImpl extends ServiceImpl<EquipmentDetailMappe
@Value("${auth-key-fire-equip:fire_equip_info}")
private String authKey;
@Value("${auth-key-fire-equip-tj:fire_equip_tj}")
private String authKeyTJ;
@Autowired
private ISystemDicService iSystemDicService;
......@@ -308,6 +309,9 @@ public class EquipmentDetailServiceImpl extends ServiceImpl<EquipmentDetailMappe
public List<OrgMenuDto> companyDeptTree() {
return jcsRemoteService.getCompanyDeptTreeWithAuth(authKey, null);
}
@Override
public List<OrgMenuDto> companyDeptTreeTJ() {
return jcsRemoteService.getCompanyDeptTreeWithAuth(authKeyTJ, null);
}
}
......@@ -9,6 +9,7 @@ import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.vo.*;
import com.yeejoin.equipmanage.common.vo.EquipmentVo;
import com.yeejoin.equipmanage.dto.EquipmentcountDto;
import com.yeejoin.equipmanage.fegin.PatrolFeign;
import com.yeejoin.equipmanage.mapper.*;
import com.yeejoin.equipmanage.remote.RemoteSecurityService;
......@@ -457,4 +458,9 @@ public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment
{
return equipmentMapper.getEquipBySpecific(equipmentSpecificId);
}
@Override
public List<EquipmentcountDto> getEquipmentcount(String name,String code) {
return equipmentMapper.getEquipmentcountB(name,code);
}
}
......@@ -296,7 +296,8 @@ public class ScrapServiceImpl extends ServiceImpl<ScrapMapper, Scrap> implements
StockDetail stockDetail = stockDetailService.getById(id);
QueryWrapper<EquipmentOnCar> queryWrapper = new QueryWrapper<>();
equipmentOnCarMapper.delete(queryWrapper.eq("stock_detail_id", id));
stockDetail.setAmount(stockDetail.getAmount() + 1.0);
//stockDetail.setAmount(stockDetail.getAmount() + 1.0);
stockDetail.setAmount(stockDetail.getAmount());
stockDetail.setStatus(String.valueOf(EquipStatusEnum.SCRAP.getCode()));
stockDetailService.updateById(stockDetail);
}
......
......@@ -134,6 +134,9 @@ auth-key-fire-system=fire_system_info
auth-key-fire-system-build=fire_system_build_info
# 权限标识-消防装备
auth-key-fire-equip=fire_equip_info
# 权限标识-消防装备统计
auth-key-fire-equip-tj=fire_equip_tj
# 权限标识-消防视频
auth-key-fire-video=fire_video_info
# 权限标识-消防建筑视频
......
......@@ -269,4 +269,31 @@ FROM
</select>
<select id="getEquipmentcountB" resultType="com.yeejoin.equipmanage.dto.EquipmentcountDto">
select
uuid() AS id ,
kname as equipmentName,
kid as equipmentId,
bizOrgCode,
bizOrgName,
sum(case when status='在位' then amountn else 0 end) as `zw`,
sum(case when status='报废' then amountn else 0 end) as `bf`,
sum(case when status='车载' then amountn else 0 end) as `cz`,
sum(case when status='配装' then amountn else 0 end) as `pz`
from countequipment
<where>
bizOrgCode like CONCAT(#{code},"%" )
<if test="name != null and name != '' ">
and kname like CONCAT(#{name},"%" )
</if>
</where>
group by bizOrgCode,bizOrgName,kid,kname
</select>
</mapper>
......@@ -90,7 +90,8 @@
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update wl_stock_detail
<trim prefix="set" prefixOverrides="," suffix="where id=#{item.stockDetailId}">
amount = amount - 1,
-- amount = amount - 1,
amount = amount,
<if test="status != null">status=#{status}</if>
</trim>
</foreach>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment