| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533 |
- package cn.com.goldenwater.dcproj.service.impl;
- import cn.com.goldenwater.core.service.AbstractCrudService;
- import cn.com.goldenwater.dcproj.dao.ChkSafeProdLedgerDao;
- import cn.com.goldenwater.dcproj.dao.ChkSafeSelsProjDao;
- import cn.com.goldenwater.dcproj.dao.OlBisInspOrgDao;
- import cn.com.goldenwater.dcproj.model.ChkSafeProdLedger;
- import cn.com.goldenwater.dcproj.model.ChkSafeSelsProj;
- import cn.com.goldenwater.dcproj.model.OlBisInspOrg;
- import cn.com.goldenwater.dcproj.param.ChkSafeSelsProjParam;
- import cn.com.goldenwater.dcproj.service.ChkSafeProdLedgerService;
- import cn.com.goldenwater.dcproj.utils.AdLevelUtil;
- import cn.com.goldenwater.dcproj.utils.expExcel.ExcelExport;
- import cn.com.goldenwater.dcproj.utils.expExcel.ExportAbstract;
- import cn.com.goldenwater.dcproj.utils.expExcel.ExportUtil;
- import cn.com.goldenwater.id.util.UuidUtil;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import io.swagger.annotations.ApiModelProperty;
- import org.apache.commons.lang3.ArrayUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.usermodel.WorkbookFactory;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.servlet.http.HttpServletResponse;
- import java.beans.BeanInfo;
- import java.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.net.URLEncoder;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.time.LocalDateTime;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Objects;
- import java.util.stream.Collectors;
- @Service
- @Transactional
- public class ChkSafeProdLedgerServiceImpl extends AbstractCrudService<ChkSafeProdLedger, ChkSafeProdLedger> implements ChkSafeProdLedgerService {
- private Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
- private ChkSafeProdLedgerDao chkSafeProdLedgerDao;
- @Value("${export.templatePath}")
- private String templatePath;
- @Autowired
- private ChkSafeSelsProjDao chkSafeSelsProjDao;
- @Autowired
- private OlBisInspOrgDao olBisInspOrgDao;
- /**
- * 导出模板
- * 水务行业安全大检查情况表
- */
- private String templateName = "chkSafeProdLedgerExport.xls";
- public ChkSafeProdLedgerServiceImpl(ChkSafeProdLedgerDao chkSafeProdLedgerDao) {
- super(chkSafeProdLedgerDao);
- this.chkSafeProdLedgerDao = chkSafeProdLedgerDao;
- }
- @Override
- public int insert(ChkSafeProdLedger chkSafeProdLedger) {
- String uuid = UuidUtil.uuid(); // 生成uuid
- chkSafeProdLedger.setId(uuid);
- chkSafeProdLedger.setIntm(new Date());
- chkSafeProdLedger.setUptm(chkSafeProdLedger.getIntm());
- chkSafeProdLedger.setDataStat("0");
- chkSafeProdLedger.setChkSubmitDttm(chkSafeProdLedger.getIntm());
- try {
- LocalDateTime localDateTime = convertDateToLocalDateTime(chkSafeProdLedger.getIntm());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
- chkSafeProdLedger.setChkMnth(sdf.parse(String.format("%d-%d-1",localDateTime.getYear(),localDateTime.getMonthValue())));
- } catch (ParseException e) {
- }
- chkSafeProdLedger.setFillRepoStat("1");
- return this.chkSafeProdLedgerDao.insert(chkSafeProdLedger);
- }
- @Override
- public int update(ChkSafeProdLedger chkSafeProdLedger) {
- chkSafeProdLedger.setUptm(new Date());
- return this.chkSafeProdLedgerDao.update(chkSafeProdLedger);
- }
- @Override
- public int batchReportByIds(String[] ids){
- return this.chkSafeProdLedgerDao.batchReportByIds(ids , new Date());
- }
- @Override
- public int insertBatchFile(List<ChkSafeProdLedger> safeProdLedgerList){
- return this.chkSafeProdLedgerDao.insertBatchFile(safeProdLedgerList);
- }
- @Override
- public PageInfo<Map<String,Object>> findSummaryPage(ChkSafeProdLedger param){
- // 市级汇总
- param.setFillRepoStat("2");
- param.setDataStat("0");
- param.setAdCode(null);
- PageHelper.startPage(param);
- List<Map<String,Object>> list = findSummaryList(param);
- PageInfo<Map<String,Object>> pageInfo = new PageInfo(list);
- return pageInfo;
- }
- /**
- * 导出统计表
- * @param chkSafeProdLedger
- * @param response
- */
- @Override
- public void export(ChkSafeProdLedger chkSafeProdLedger, HttpServletResponse response){
- // 查询导出的数据
- List<ChkSafeProdLedger> chkSafeProdLedgerList = findList(chkSafeProdLedger);
- List<String> columns = new ArrayList<String>() {{
- if("2".equals(chkSafeProdLedger.getFillRepoStat())){
- // 市级 导出 显示 行政区
- add("adName");
- }
- add("chkProjType");
- add("chkDttm");
- add("leadDep");
- add("leadDepRespPers");
- add("chkOrg");
- add("chkOrgRespPers");
- add("chkOrgRespPersMobi");
- add("chkResult");
- add("chkDgerPblm");
- add("chkHandSugg");
- add("chkHandEdtm");
- add("chkRectImplInfo");
- add("chkRectImplInfoDesc");
- add("chkAcceTm");
- add("chkAccePers");
- add("chkFillUnit");
- add("chkSubmitDept");
- if(!"2".equals(chkSafeProdLedger.getFillRepoStat())){
- // 区县导出显示 上报状态
- add("fillRepoStat");
- }
- }};
- exportExcel(chkSafeProdLedgerList, response, "成都市安全生产监督检查台账列表", columns, ChkSafeProdLedger.class);
- }
- public void exportExcel(List<?> result, HttpServletResponse response, String fileName, List<String> list, Class cla) {
- if (list == null || list.size() == 0) {
- ExportUtil.exportExcel(result, response, fileName);
- return;
- }
- List<Map<String, Object>> mapList = new ArrayList<>();
- result.forEach(worker -> mapList.add(transBean2Map(worker)));
- ExportAbstract export = new ExcelExport();
- if (StringUtils.isBlank(fileName)) {
- fileName = "结果列表";
- }
- export.setFileName(fileName);
- export.setExport_ps_export(true);
- export.setExport_ps_type(ExportAbstract.XLS);
- export.setExport_bzip(false);
- export.setTitle(fileName);
- ArrayList<Object> cols = new ArrayList<Object>();
- Field[] fields = cla.getDeclaredFields();
- Class clazz = cla.getSuperclass();
- if (clazz != null && clazz != Objects.class) {
- fields = ArrayUtils.addAll(fields, clazz.getDeclaredFields());
- }
- for (String name : list) {
- for (Field field : fields) {
- if (name.equals(field.getName()) && field.getAnnotation(ApiModelProperty.class) != null) {
- field.setAccessible(true);
- cols.add(field.getName() + "[" + ExportUtil.fileFormat(field.getAnnotation(ApiModelProperty.class).value()) + "]");
- break;
- }
- }
- }
- if (cols.size() < 1) {
- cols.add("name[名称]");
- cols.add("code[编码]");
- }
- export.setCols(cols);
- export.setGroupable(false);
- // 设置视图指标
- export.setLevel(1);
- export.setLocksize(0);
- try {
- export.Export(response);
- // 导出表头
- export.ExportHeadForCustom(response);
- export.ContinueExport(mapList);
- export.EndExport();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private Map<String, Object> transBean2Map(Object obj) {
- if (obj == null) {
- return null;
- }
- Map<String, Object> map = new HashMap<String, Object>();
- try {
- BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
- PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
- ChkSafeSelsProjParam chkSafeSelsProjParam = new ChkSafeSelsProjParam();
- chkSafeSelsProjParam.setUseScope("2");
- chkSafeSelsProjParam.setDataStat("0");
- List<ChkSafeSelsProj> projTypeList = this.chkSafeSelsProjDao.findLedgerRootList();
- String key="";
- for (PropertyDescriptor property : propertyDescriptors) {
- key = property.getName();
- // 过滤class属性
- if (!"class".equals(key)) {
- // 得到property对应的getter方法
- Method getter = property.getReadMethod();
- Object value = getter.invoke(obj);
- map.put(key, value);
- if("chkProjType".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- map.put(key, formatProjType(value.toString(),projTypeList));
- }
- }else if("chkResult".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- map.put(key, formatChkResult(value.toString()));
- }
- }else if("chkRectImplInfo".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- map.put(key, formatChkRectImplInfo(value.toString()));
- }
- }else if("chkMnth".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- LocalDateTime localDateTime = convertDateToLocalDateTime((Date)value);
- if(null != localDateTime){
- String dateStr = String.format("%d年%d月",localDateTime.getYear(),localDateTime.getMonthValue());
- map.put(key, dateStr);
- }
- }
- }else if("chkDttm".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- LocalDateTime localDateTime = convertDateToLocalDateTime((Date)value);
- if(null != localDateTime){
- String dateStr = String.format("%d年%d月%d日",localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth());
- map.put(key, dateStr);
- }
- }
- }else if("chkHandEdtm".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- LocalDateTime localDateTime = convertDateToLocalDateTime((Date)value);
- if(null != localDateTime){
- String dateStr = String.format("%d年%d月%d日",localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth());
- map.put(key, dateStr);
- }
- }
- }else if("chkAcceTm".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- LocalDateTime localDateTime = convertDateToLocalDateTime((Date)value);
- if(null != localDateTime){
- String dateStr = String.format("%d年%d月%d日",localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth());
- map.put(key, dateStr);
- }
- }
- }else if("chkSubmitDttm".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- LocalDateTime localDateTime = convertDateToLocalDateTime((Date)value);
- if(null != localDateTime){
- String dateStr = String.format("%d年%d月%d日",localDateTime.getYear(),localDateTime.getMonthValue(),localDateTime.getDayOfMonth());
- map.put(key, dateStr);
- }
- }
- }else if("fillRepoStat".equals(key)){
- if(null != value && StringUtils.isNotBlank(value.toString())){
- map.put(key, "2".equals(value.toString())?"已上报":"未上报");
- }
- }
- }
- }
- } catch (Exception e) {
- System.out.println("transBean2Map Error " + e);
- }
- return map;
- }
- private String formatProjType(String projType , List<ChkSafeSelsProj> projList){
- try {
- if(cn.com.goldenwater.dcproj.utils.StringUtils.isBlank(projType)){
- return null;
- }
- String formatStr = projList.stream().filter(f->projType.equals(f.getId())).map(m->m.getProjType()).collect(Collectors.joining());
- return formatStr;
- } catch (Exception e) {
- return null;
- }
- }
- private String formatChkRectImplInfo(String chkRectImplInfo){
- switch (chkRectImplInfo){
- case "0":
- chkRectImplInfo = "未整改";
- break;
- case "1":
- chkRectImplInfo = "正在整改";
- break;
- case "2":
- chkRectImplInfo = "完成整改";
- break;
- default:
- break;
- }
- return chkRectImplInfo;
- }
- private String formatChkResult(String chkResult){
- switch (chkResult){
- case "0":
- chkResult = "无隐患";
- break;
- case "1":
- chkResult = "有隐患";
- break;
- default:
- break;
- }
- return chkResult;
- }
- private LocalDateTime convertDateToLocalDateTime(Date date){
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(date);
- LocalDateTime localDateTime = LocalDateTime.of(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH)+1, calendar.get(Calendar.DAY_OF_MONTH),0,0,0);
- return localDateTime;
- }
- /**
- * 导出 市级汇总 成都市水务行业安全大检查情况统计
- *
- * @param safeProdLedger 筛选查询参数
- * @param response
- */
- @Override
- public void exportSummary(ChkSafeProdLedger safeProdLedger, HttpServletResponse response) {
- logger.debug("ChkSafeStatList 导出");
- // 读取导出模板
- String fileName = templatePath + File.separator + templateName ;
- File file = new File(fileName);
- if(file.exists()){
- // 模板存在
- try {
- FileInputStream inputStream = new FileInputStream(file);
- Workbook workbook = WorkbookFactory.create(inputStream);
- exportFile(workbook, safeProdLedger);
- writeToResponse(response, workbook, "成都市安全生产监督检查台账汇总.xls");
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }else {
- logger.error("导出模板不存在");
- }
- }
- @Override
- public List<Map<String,Object>> findSummaryList(ChkSafeProdLedger param){
- List<Map<String,Object>> list = this.chkSafeProdLedgerDao.summaryList(param);
- if(null != list && list.size()>0){
- List<Date> dateList = list.stream().map(m->(Date)m.get("chkMnth")).collect(Collectors.toList());
- param.setChkMnthList(dateList);
- // 从总数中拆分出 市级、市县区级
- String curOrgId = param.getOrgId();
- OlBisInspOrg inspOrg = olBisInspOrgDao.get(curOrgId);
- String province = inspOrg.getRlcode();
- List<OlBisInspOrg> bisInspOrgListAll = olBisInspOrgDao.getByPid(curOrgId,province);
- // 获取 市级的 行政区划代码列表
- String cityCodes = bisInspOrgListAll.stream().filter(f->f.getAdCode().startsWith("51019")).map(m-> AdLevelUtil.getAddvcd(m.getAdCode())).collect(Collectors.joining(","));
- param.setAdCode(cityCodes);
- List<Map<String,Object>> cityList = this.chkSafeProdLedgerDao.summaryList(param);
- // 获取 县级的 行政区划代码列表
- String countyCodes = bisInspOrgListAll.stream().filter(f->!f.getAdCode().startsWith("51019")).map(m->AdLevelUtil.getAddvcd(m.getAdCode())).collect(Collectors.joining(","));
- param.setAdCode(countyCodes);
- List<Map<String,Object>> countyList = this.chkSafeProdLedgerDao.summaryList(param);
- for(int i=0;i<list.size();i++){
- Map<String, Object> totalMap = list.get(i);
- Date itemDate = (Date)totalMap.get("chkMnth");
- logger.info("totalMap:"+totalMap.toString());
- // 算出总数百分比
- if("0".equals(totalMap.get("pblmNum").toString())){
- totalMap.put("percent","0");
- }else{
- totalMap.put("percent",new BigDecimal(totalMap.get("rectDoNum").toString()).multiply(new BigDecimal(100)).divide(new BigDecimal(totalMap.get("pblmNum").toString()), 2, RoundingMode.HALF_UP).toString().concat("%"));
- }
- Map<String, Object> cityMap = cityList.stream().filter(f->itemDate.compareTo((Date)f.get("chkMnth")) == 0).findFirst().orElse(null);
- Map<String, Object> countyMap = countyList.stream().filter(f->itemDate.compareTo((Date)f.get("chkMnth")) == 0).findFirst().orElse(null);
- if(null == cityMap){
- totalMap.put("cityChkNum","0");
- totalMap.put("cityPblmNum","0");
- totalMap.put("cityRectNotNum","0");
- totalMap.put("cityRectDoNum","0");
- totalMap.put("cityPercent","0");
- }else{
- totalMap.put("cityChkNum",cityMap.get("chkNum"));
- Object pblmNum = cityMap.get("pblmNum");
- totalMap.put("cityPblmNum",pblmNum);
- totalMap.put("cityRectNotNum",cityMap.get("rectNotNum"));
- Object rectDoNum = cityMap.get("rectDoNum");
- totalMap.put("cityRectDoNum",rectDoNum);
- if("0".equals(pblmNum.toString())){
- totalMap.put("cityPercent",0);
- }else {
- totalMap.put("cityPercent",new BigDecimal(rectDoNum.toString()).multiply(new BigDecimal(100)).divide(new BigDecimal(pblmNum.toString()), 2, RoundingMode.HALF_UP).toString().concat("%"));
- }
- }
- if(null == countyMap){
- totalMap.put("countyChkNum","0");
- totalMap.put("countyPblmNum","0");
- totalMap.put("countyRectNotNum","0");
- totalMap.put("countyRectDoNum","0");
- totalMap.put("countyPercent","0");
- }else {
- totalMap.put("countyChkNum",countyMap.get("chkNum"));
- Object pblmNum = countyMap.get("pblmNum");
- totalMap.put("countyPblmNum",pblmNum);
- totalMap.put("countyRectNotNum",countyMap.get("rectNotNum"));
- Object rectDoNum = countyMap.get("rectDoNum");
- totalMap.put("countyRectDoNum",rectDoNum);
- if("0".equals(pblmNum.toString())){
- totalMap.put("countyPercent",0);
- }else {
- totalMap.put("countyPercent",new BigDecimal(rectDoNum.toString()).multiply(new BigDecimal(100)).divide(new BigDecimal(pblmNum.toString()), 2, RoundingMode.HALF_UP).toString().concat("%"));
- }
- }
- }
- }
- return list;
- }
- /**
- * 把数据写入excel
- * @param xssfWorkbook
- * @param safeProdLedger
- */
- private void exportFile(Workbook xssfWorkbook,ChkSafeProdLedger safeProdLedger){
- // 查询统计数据 总数
- safeProdLedger.setAdCode(null);
- List<Map<String,Object>> resultList = findSummaryList(safeProdLedger);
- // 获取模板表格
- Sheet sheet = xssfWorkbook.getSheetAt(0);
- // 设置 表格数据
- if(null != resultList && resultList.size()>0){
- // 把查询结果 写入到模板中
- for (int i=0;i<resultList.size();i++){
- setAllCell(sheet,i, resultList.get(i));
- }
- }
- }
- /**
- * 设置 行 内容
- * @param sheet
- * @param rowNum
- * @param totalMap
- */
- private void setAllCell(Sheet sheet,int rowNum, Map<String,Object> totalMap){
- setCellValue(sheet,3+rowNum,0,String.valueOf(rowNum+1) );
- String chkDttm = String.valueOf(totalMap.get("chkMnth"));
- if(chkDttm.contains("-")){
- String[] chkDttmArray = chkDttm.split("-");
- setCellValue(sheet,3+rowNum,1,String.format("%s年%d月", chkDttmArray[0],Integer.parseInt(chkDttmArray[1])));
- }else{
- return ;
- }
- // 市级
- setCellValue(sheet,3+rowNum,2,String.valueOf(totalMap.get("cityChkNum")) );
- setCellValue(sheet,3+rowNum,3,String.valueOf(totalMap.get("cityPblmNum")) );
- setCellValue(sheet,3+rowNum,4,String.valueOf(totalMap.get("cityRectDoNum")) );
- setCellValue(sheet,3+rowNum,5,String.valueOf(totalMap.get("cityRectNotNum")) );
- setCellValue(sheet,3+rowNum,6,String.valueOf(totalMap.get("cityPercent")) );
- // 县级
- setCellValue(sheet,3+rowNum,7,String.valueOf(totalMap.get("countyChkNum")) );
- setCellValue(sheet,3+rowNum,8,String.valueOf(totalMap.get("countyPblmNum")) );
- setCellValue(sheet,3+rowNum,9,String.valueOf(totalMap.get("countyRectDoNum")) );
- setCellValue(sheet,3+rowNum,10,String.valueOf(totalMap.get("countyRectNotNum")) );
- setCellValue(sheet,3+rowNum,11,String.valueOf(totalMap.get("countyPercent")) );
- // 总数
- setCellValue(sheet,3+rowNum,12,String.valueOf(totalMap.get("chkNum")) );
- setCellValue(sheet,3+rowNum,13,String.valueOf(totalMap.get("pblmNum")) );
- setCellValue(sheet,3+rowNum,14,String.valueOf(totalMap.get("rectDoNum")) );
- setCellValue(sheet,3+rowNum,15,String.valueOf(totalMap.get("rectNotNum")) );
- setCellValue(sheet,3+rowNum,16,String.valueOf(totalMap.get("percent")) );
- }
- /**
- * 设置 单元格的值
- * @param sheet
- * @param rownum
- * @param cellnum
- * @param value
- */
- private void setCellValue(Sheet sheet, int rownum, int cellnum, String value) {
- Cell cell = sheet.getRow(rownum).getCell(cellnum);
- cell.setCellValue(value);
- }
- private void writeToResponse(HttpServletResponse response, Workbook workbook, String name) throws IOException {
- // 修改模板内容导出新模板
- response.setContentType("application/x-msdownload");
- String fileNameURL = URLEncoder.encode(name, "UTF-8");
- response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";filename*=utf-8''" + fileNameURL);
- OutputStream out = response.getOutputStream();
- workbook.write(out);
- out.flush();
- out.close();
- }
- }
|