From 0b21f5c3f0a8e1189e8de89d5172c1ae30fda80f Mon Sep 17 00:00:00 2001 From: Administrator <1923636941@qq.com> Date: Wed, 5 Jul 2023 15:32:46 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CompanyFileController.java | 192 ++++++++-------- .../controller/UploadFileController.java | 50 ++++- .../service/ICompanyFileService.java | 8 +- .../service/impl/CompanyFileServiceImpl.java | 55 ++++- .../controller/LedBigScreenController.java | 205 ++++++++++++++++++ .../LedBigScreenRegionController.java | 204 +++++++++++++++++ .../xmgl/modules/led/entity/LedBigScreen.java | 72 ++++++ .../led/entity/LedBigScreenRegion.java | 109 ++++++++++ .../led/mapper/LedBigScreenMapper.java | 16 ++ .../led/mapper/LedBigScreenRegionMapper.java | 16 ++ .../led/mapper/xml/LedBigScreenMapper.xml | 4 + .../mapper/xml/LedBigScreenRegionMapper.xml | 4 + .../service/ILedBigScreenRegionService.java | 14 ++ .../led/service/ILedBigScreenService.java | 19 ++ .../impl/LedBigScreenRegionServiceImpl.java | 19 ++ .../service/impl/LedBigScreenServiceImpl.java | 57 +++++ .../PanoramaNodePlanStatisticsController.java | 5 +- .../vo/KeyNodeEarlyWarningStatisticsVo.java | 20 ++ .../ProgressPanoramaNodePlanMapper.java | 3 +- .../xml/ProgressPanoramaNodePlanMapper.xml | 3 +- .../PanoramaNodePlanStatisticsService.java | 3 +- .../impl/EngineeringScoreServiceImpl.java | 1 + ...PanoramaNodePlanStatisticsServiceImpl.java | 12 +- .../mapper/xml/SjImageProgressMapper.xml | 5 +- .../service/impl/WorkerInfoServiceImpl.java | 37 ++-- .../java/com/zhgd/xmgl/util/ExcelUtils.java | 24 +- src/main/resources/excel/人员导入模板.xlsx | Bin 12794 -> 12718 bytes 27 files changed, 1000 insertions(+), 157 deletions(-) create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenRegionController.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreen.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreenRegion.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenRegionMapper.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenRegionMapper.xml create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenRegionService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenService.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenRegionServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenServiceImpl.java create mode 100644 src/main/java/com/zhgd/xmgl/modules/project/entity/vo/KeyNodeEarlyWarningStatisticsVo.java diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyFileController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyFileController.java index 34ab2ee61..ae50658f9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyFileController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyFileController.java @@ -12,21 +12,22 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; -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; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.*; -import java.text.SimpleDateFormat; -import java.util.Date; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; import java.util.Map; - /** +/** * @Title: Controller * @Description: 企业文件资料 * @author: pds - * @date: 2020-08-07 + * @date: 2020-08-07 * @version: V1.0 */ @RestController @@ -34,101 +35,84 @@ import java.util.Map; @Slf4j @Api(tags = "企业文件资料") public class CompanyFileController { - @Autowired - private ICompanyFileService companyFileService; - - /** - * 分页列表查询 - * @return - */ - @ApiOperation(value = "分页查询企业的文件资料记录", notes = "分页查询企业的文件资料记录") - @ApiImplicitParams({ - @ApiImplicitParam(name = "fileName", value = "文件名称", paramType = "query", required = false, dataType = "String"), - @ApiImplicitParam(name = "companySn", value = "企业总部sn", paramType = "query", required = false, dataType = "String"), - @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), - @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), - }) - @PostMapping("/list") - public Result> selectCompanyFileList(@RequestBody Map map) { - return Result.success(companyFileService.selectCompanyFileList(map)); - } - - /** - * 添加 - * @param companyFile - * @return - */ - @OperLog(operModul = "企业文件资料管理",operType = "添加企业文件资料信息",operDesc = "添加企业文件资料信息") - @ApiOperation(value = " 添加企业文件资料信息", notes = "添加企业文件资料信息" , httpMethod="POST") - @PostMapping(value = "/add") - public Result add(@RequestBody CompanyFile companyFile) { - Result result = new Result(); - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - companyFile.setCreateTime(sdf.format(new Date())); - companyFileService.save(companyFile); - result.successMsg(MessageUtil.get("addSucess")); - } catch (Exception e) { - e.printStackTrace(); - log.info(e.getMessage()); - result.error500(MessageUtil.get("failErr")); - } - return result; - } - - /** - * 编辑 - * @param companyFile - * @return - */ - @OperLog(operModul = "企业文件资料管理",operType = "编辑企业文件资料信息",operDesc = "编辑企业文件资料信息") - @ApiOperation(value = "编辑企业文件资料信息", notes = "编辑企业文件资料信息" , httpMethod="POST") - @PostMapping(value = "/edit") - public Result edit(@RequestBody CompanyFile companyFile) { - Result result = new Result(); - CompanyFile companyFileEntity = companyFileService.getById(companyFile.getId()); - if(companyFileEntity==null) { - result.error500(MessageUtil.get("notFindErr")); - }else { - boolean ok = companyFileService.updateById(companyFile); - //TODO 返回false说明什么? - if(ok) { - result.successMsg(MessageUtil.get("editSucess")); - } - } - - return result; - } - - /** - * 通过id删除 - * @param - * @return - */ - @OperLog(operModul = "企业文件资料管理",operType = "删除企业文件资料信息",operDesc = "删除企业文件资料信息") - @ApiOperation(value = "删除企业文件资料信息", notes = "删除企业文件资料信息" , httpMethod="POST") - @ApiImplicitParam(name = "id", value = "企业文件资料ID", paramType = "query", required = true, dataType = "Integer") - @PostMapping(value = "/delete") - public Result delete(@RequestBody Map map) { - Result result = new Result(); - CompanyFile companyFile = companyFileService.getById(MapUtils.getString(map,"id")); - if(companyFile==null) { - result.error500(MessageUtil.get("notFindErr")); - }else { - boolean ok = companyFileService.removeById(MapUtils.getString(map,"id")); - if(ok) { - result.successMsg(MessageUtil.get("deleteSucess")); - } - } - - return result; - } + @Autowired + private ICompanyFileService companyFileService; - @ApiOperation(value = "增加文件资料下载次数", notes = "增加文件资料下载次数" , httpMethod="POST") - @ApiImplicitParam(name = "id", value = "企业文件资料ID", paramType = "query", required = true, dataType = "Integer") - @PostMapping(value = "/updateFileDownloadNum") - public Result updateFileDownloadNum(@RequestBody Map map) { - companyFileService.updateFileDownloadNum(map); - return Result.ok(); - } + /** + * 分页列表查询 + * + * @return + */ + @ApiOperation(value = "分页查询企业的文件资料记录", notes = "分页查询企业的文件资料记录") + @ApiImplicitParams({ + @ApiImplicitParam(name = "fileName", value = "文件名称", paramType = "query", required = false, dataType = "String"), + @ApiImplicitParam(name = "companySn", value = "企业总部sn", paramType = "query", required = false, dataType = "String"), + @ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"), + @ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"), + }) + @PostMapping("/list") + public Result> selectCompanyFileList(@RequestBody Map map) { + return Result.success(companyFileService.selectCompanyFileList(map)); + } + + /** + * 添加 + * + * @param companyFile + * @return + */ + @OperLog(operModul = "企业文件资料管理", operType = "添加企业文件资料信息", operDesc = "添加企业文件资料信息") + @ApiOperation(value = " 添加企业文件资料信息", notes = "添加企业文件资料信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody CompanyFile companyFile) { + companyFileService.add(companyFile); + return Result.ok(); + } + + /** + * 编辑 + * + * @param companyFile + * @return + */ + @OperLog(operModul = "企业文件资料管理", operType = "编辑企业文件资料信息", operDesc = "编辑企业文件资料信息") + @ApiOperation(value = "编辑企业文件资料信息", notes = "编辑企业文件资料信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result edit(@RequestBody CompanyFile companyFile) { + companyFileService.edit(companyFile); + return Result.ok(); + } + + /** + * 通过id删除 + * + * @param + * @return + */ + @OperLog(operModul = "企业文件资料管理", operType = "删除企业文件资料信息", operDesc = "删除企业文件资料信息") + @ApiOperation(value = "删除企业文件资料信息", notes = "删除企业文件资料信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "企业文件资料ID", paramType = "query", required = true, dataType = "Integer") + @PostMapping(value = "/delete") + public Result delete(@RequestBody Map map) { + Result result = new Result(); + CompanyFile companyFile = companyFileService.getById(MapUtils.getString(map, "id")); + if (companyFile == null) { + result.error500(MessageUtil.get("notFindErr")); + } else { + boolean ok = companyFileService.removeById(MapUtils.getString(map, "id")); + if (ok) { + result.successMsg(MessageUtil.get("deleteSucess")); + } + } + + return result; + } + + @ApiOperation(value = "增加文件资料下载次数", notes = "增加文件资料下载次数", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "企业文件资料ID", paramType = "query", required = true, dataType = "Integer") + @PostMapping(value = "/updateFileDownloadNum") + public Result updateFileDownloadNum(@RequestBody Map map) { + companyFileService.updateFileDownloadNum(map); + return Result.ok(); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java index 7e91a5d7a..dd532c240 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/UploadFileController.java @@ -1,16 +1,21 @@ package com.zhgd.xmgl.modules.basicdata.controller; -import com.zhgd.jeecg.common.api.vo.Result; -import com.zhgd.xmgl.modules.basicdata.entity.vo.UploadImageVo; import com.zhgd.xmgl.modules.basicdata.service.UploadFileService; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; import java.util.HashMap; import java.util.Map; @@ -21,7 +26,7 @@ import java.util.Map; * @create: 2020-02-18 13:13 **/ @RestController -@RequestMapping(value = "/upload") +@RequestMapping(value = {"/upload", "/xmgl/upload"}) @Slf4j @Api(tags = "文件") public class UploadFileController { @@ -69,4 +74,41 @@ public class UploadFileController { } return resultMap; }*/ + + /** + * 通过http下载文件,并修改名称 + * + * @param fileUrl 下载地址 + * @param fileName 修改名称 + * @param response 返回修改后的文件 + */ + @RequestMapping(value = "/getRenameFile", method = RequestMethod.GET) + @ApiImplicitParams({ + @ApiImplicitParam(name = "fileUrl", value = "下载地址", paramType = "query", required = true, dataType = "String"), + @ApiImplicitParam(name = "fileName", value = "修改名称", paramType = "query", required = true, dataType = "String") + }) + public void getRenameFile(@RequestParam("fileUrl") String fileUrl, @RequestParam("fileName") String fileName, HttpServletResponse response) { + try { + URL url = new URL(fileUrl); + int index = fileUrl.indexOf("?");//第一个问号的位置 + if (index > -1) { + fileUrl = fileUrl.substring(0, index); + } + String[] split = fileUrl.split("\\."); + // 不同文件的MimeType参考后续链接 + response.setContentType("application/x-download");//下面三行是关键代码,处理乱码问题 + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "iso8859-1") + "." + split[split.length - 1]); + URLConnection conn = url.openConnection(); + InputStream inStream = conn.getInputStream(); + OutputStream fos = response.getOutputStream(); + // 读取路径下面的文件 + FileCopyUtils.copy(inStream, fos); + response.getOutputStream().flush(); + response.getOutputStream().close(); + response.flushBuffer(); + } catch (Exception e) { + log.error("err:", e); + } + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyFileService.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyFileService.java index 0e25b86e2..0ff229855 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyFileService.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/ICompanyFileService.java @@ -8,12 +8,16 @@ import java.util.Map; /** * @Description: 企业文件资料 * @author: pds - * @date: 2020-08-07 + * @date: 2020-08-07 * @version: V1.0 */ public interface ICompanyFileService extends IService { - Map selectCompanyFileList(Map map); + Map selectCompanyFileList(Map map); void updateFileDownloadNum(Map map); + + void add(CompanyFile companyFile); + + void edit(CompanyFile companyFile); } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyFileServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyFileServiceImpl.java index 3978e9f70..16abac0e2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyFileServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyFileServiceImpl.java @@ -1,15 +1,24 @@ package com.zhgd.xmgl.modules.basicdata.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.lang.UUID; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.basicdata.entity.CompanyFile; import com.zhgd.xmgl.modules.basicdata.mapper.CompanyFileMapper; import com.zhgd.xmgl.modules.basicdata.service.ICompanyFileService; 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 java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -17,7 +26,7 @@ import java.util.Map; /** * @Description: 企业文件资料 * @author: pds - * @date: 2020-08-07 + * @date: 2020-08-07 * @version: V1.0 */ @Service @@ -27,16 +36,16 @@ public class CompanyFileServiceImpl extends ServiceImpl selectCompanyFileList(Map map) { - Map data=new HashMap<>(); + public Map selectCompanyFileList(Map map) { + Map data = new HashMap<>(); int pageNo = Integer.parseInt(map.getOrDefault("pageNo", 1).toString()); int pageSize = Integer.parseInt(map.getOrDefault("pageSize", 10).toString()); Page page = new Page<>(pageNo, pageSize); - List list=companyFileMapper.selectCompanyFileList(page, map); + List list = companyFileMapper.selectCompanyFileList(page, map); page.setRecords(list); - Map result=companyFileMapper.getTotleFileGroup(map); - data.put("page",page); - data.put("totalNum",result); + Map result = companyFileMapper.getTotleFileGroup(map); + data.put("page", page); + data.put("totalNum", result); return data; } @@ -44,4 +53,36 @@ public class CompanyFileServiceImpl extends ServiceImpl map) { companyFileMapper.updateFileDownloadNum(map); } + + @Override + public void add(CompanyFile companyFile) { + checkParam(companyFile); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + companyFile.setCreateTime(sdf.format(new Date())); + save(companyFile); + } + + @Override + public void edit(CompanyFile companyFile) { + checkParamUnique(companyFile); + //文件重命名 + updateById(companyFile); + } + + private void checkParamUnique(CompanyFile companyFile) { + List list = companyFileMapper.selectList(new LambdaQueryWrapper().eq(CompanyFile::getCompanySn, companyFile.getCompanySn()) + .eq(CompanyFile::getFileName, companyFile.getFileName()) + .ne(CompanyFile::getId, companyFile.getId()) + ); + if (CollectionUtil.isNotEmpty(list)) { + throw new OpenAlertException("该文件名已存在"); + } + } + + private void checkParam(CompanyFile companyFile) { + List list = companyFileMapper.selectList(new LambdaQueryWrapper().eq(CompanyFile::getCompanySn, companyFile.getCompanySn()).eq(CompanyFile::getFileName, companyFile.getFileName())); + if (CollectionUtil.isNotEmpty(list)) { + throw new OpenAlertException("上传失败,该文件名已存在"); + } + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenController.java b/src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenController.java new file mode 100644 index 000000000..0a9290567 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenController.java @@ -0,0 +1,205 @@ +package com.zhgd.xmgl.modules.led.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.modules.led.entity.LedBigScreen; +import com.zhgd.xmgl.modules.led.service.ILedBigScreenService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + + +/** + * @Title: Controller + * @Description: led大屏 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@RestController +@RequestMapping("/xmgl/led/ledBigScreen") +@Slf4j +@Api(tags = "LedBigScreenController相关Api") +public class LedBigScreenController { + @Autowired + private ILedBigScreenService ledBigScreenService; + + + /** + * 分页列表查询 + * + * @param ledBigScreen + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @ApiOperation(value = " 分页列表查询led大屏信息", notes = "分页列表查询led大屏信息", httpMethod = "GET") + @GetMapping(value = "/page") + public Result> queryPageList(LedBigScreen ledBigScreen, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(ledBigScreen, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = ledBigScreenService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 列表查询 + * + * @param ledBigScreen + * @param req + * @return + */ + @ApiOperation(value = " 列表查询led大屏信息", notes = "列表查询led大屏信息", httpMethod = "GET") + @GetMapping(value = "/list") + public Result> queryList(LedBigScreen ledBigScreen, + HttpServletRequest req) { + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(ledBigScreen, req.getParameterMap()); + return Result.success(ledBigScreenService.list(queryWrapper)); + } + + /** + * 添加 + * + * @param ledBigScreen + * @return + */ + @ApiOperation(value = " 添加led大屏信息", notes = "添加led大屏信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody LedBigScreen ledBigScreen) { + Result result = new Result(); + try { + ledBigScreenService.save(ledBigScreen); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * + * @param ledBigScreen + * @return + */ + @ApiOperation(value = "编辑led大屏信息", notes = "编辑led大屏信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result edit(@RequestBody LedBigScreen ledBigScreen) { + Result result = new Result(); + LedBigScreen ledBigScreenEntity = ledBigScreenService.getById(ledBigScreen.getId()); + if (ledBigScreenEntity == null) { + result.error500("未找到对应实体"); + } else { + ledBigScreenService.updateById(ledBigScreen); + result.success("修改成功!"); + } + + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @ApiOperation(value = "删除led大屏信息", notes = "删除led大屏信息", httpMethod = "POST") + @PostMapping(value = "/delete") + public Result delete(@RequestBody String id) { + JSONObject jsonObject = JSON.parseObject(id, JSONObject.class); + id = String.valueOf(jsonObject.get("id")); + Result result = new Result(); + LedBigScreen ledBigScreen = ledBigScreenService.getById(id); + if (ledBigScreen == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = ledBigScreenService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @ApiOperation(value = "批量删除led大屏信息", notes = "批量删除led大屏信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "led大屏ID字符串", paramType = "query", required = true, dataType = "String") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.ledBigScreenService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @ApiOperation(value = "通过id查询led大屏信息", notes = "通过id查询led大屏信息", httpMethod = "GET") + @ApiImplicitParam(name = "id", value = "led大屏ID", paramType = "query", required = true, dataType = "Integer") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + LedBigScreen ledBigScreen = ledBigScreenService.getById(id); + if (ledBigScreen == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(ledBigScreen); + result.setSuccess(true); + } + return result; + } + + @ApiOperation(value = " 保存led大屏信息", notes = "保存led大屏信息", httpMethod = "POST") + @PostMapping(value = "/saveDetail") + public Result saveDetail(@RequestBody LedBigScreen ledBigScreen) { + ledBigScreenService.saveDetail(ledBigScreen); + return Result.ok(); + } + + + @ApiOperation(value = "查询led大屏信息", notes = "查询led大屏信息", httpMethod = "GET") + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String") + @GetMapping(value = "/queryDetail") + public Result queryDetail(@RequestParam HashMap map) { + return Result.success(ledBigScreenService.queryDetail(map)); + } + + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenRegionController.java b/src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenRegionController.java new file mode 100644 index 000000000..89e5d1e34 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/controller/LedBigScreenRegionController.java @@ -0,0 +1,204 @@ +package com.zhgd.xmgl.modules.led.controller; + +import com.alibaba.fastjson.JSONObject; +import com.zhgd.xmgl.modules.led.entity.LedBigScreenRegion; +import com.zhgd.xmgl.modules.led.service.ILedBigScreenRegionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.jeecg.common.util.oConvertUtils; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; + + +/** + * @Title: Controller + * @Description: led大屏-区域 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@RestController +@RequestMapping("/xmgl/led/ledBigScreenRegion") +@Slf4j +@Api(tags = "LedBigScreenRegionController相关Api") +public class LedBigScreenRegionController { + @Autowired + private ILedBigScreenRegionService ledBigScreenRegionService; + + /** + * 分页列表查询 + * + * @param ledBigScreenRegion + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @ApiOperation(value = " 分页列表查询led大屏-区域信息", notes = "分页列表查询led大屏-区域信息", httpMethod = "GET") + @GetMapping(value = "/page") + public Result> queryPageList(LedBigScreenRegion ledBigScreenRegion, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(ledBigScreenRegion, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = ledBigScreenRegionService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 列表查询 + * + * @param ledBigScreenRegion + * @param req + * @return + */ + @ApiOperation(value = " 列表查询led大屏-区域信息", notes = "列表查询led大屏-区域信息", httpMethod = "GET") + @GetMapping(value = "/list") + public Result> queryList(LedBigScreenRegion ledBigScreenRegion, + HttpServletRequest req) { + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(ledBigScreenRegion, req.getParameterMap()); + return Result.success(ledBigScreenRegionService.list(queryWrapper)); + } + + /** + * 添加 + * + * @param ledBigScreenRegion + * @return + */ + @ApiOperation(value = " 添加led大屏-区域信息", notes = "添加led大屏-区域信息", httpMethod = "POST") + @PostMapping(value = "/add") + public Result add(@RequestBody LedBigScreenRegion ledBigScreenRegion) { + Result result = new Result(); + try { + ledBigScreenRegionService.save(ledBigScreenRegion); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * + * @param ledBigScreenRegion + * @return + */ + @ApiOperation(value = "编辑led大屏-区域信息", notes = "编辑led大屏-区域信息", httpMethod = "POST") + @PostMapping(value = "/edit") + public Result edit(@RequestBody LedBigScreenRegion ledBigScreenRegion) { + Result result = new Result(); + LedBigScreenRegion ledBigScreenRegionEntity = ledBigScreenRegionService.getById(ledBigScreenRegion.getId()); + if (ledBigScreenRegionEntity == null) { + result.error500("未找到对应实体"); + } else { + ledBigScreenRegionService.updateById(ledBigScreenRegion); + result.success("修改成功!"); + } + + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @ApiOperation(value = "删除led大屏-区域信息", notes = "删除led大屏-区域信息", httpMethod = "POST") + @PostMapping(value = "/delete") + public Result delete(@RequestBody String id) { + JSONObject jsonObject = JSON.parseObject(id, JSONObject.class); + id = String.valueOf(jsonObject.get("id")); + Result result = new Result(); + LedBigScreenRegion ledBigScreenRegion = ledBigScreenRegionService.getById(id); + if (ledBigScreenRegion == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = ledBigScreenRegionService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @ApiOperation(value = "批量删除led大屏-区域信息", notes = "批量删除led大屏-区域信息", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "led大屏-区域ID字符串", paramType = "query", required = true, dataType = "String") + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.ledBigScreenRegionService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @ApiOperation(value = "通过id查询led大屏-区域信息", notes = "通过id查询led大屏-区域信息", httpMethod = "GET") + @ApiImplicitParam(name = "id", value = "led大屏-区域ID", paramType = "query", required = true, dataType = "Integer") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + LedBigScreenRegion ledBigScreenRegion = ledBigScreenRegionService.getById(id); + if (ledBigScreenRegion == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(ledBigScreenRegion); + result.setSuccess(true); + } + return result; + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreen.java b/src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreen.java new file mode 100644 index 000000000..79ccdd8bd --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreen.java @@ -0,0 +1,72 @@ +package com.zhgd.xmgl.modules.led.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.List; + +/** + * @Description: led大屏 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@Data +@TableName("led_big_screen") +@ApiModel(value = "LedBigScreen实体类", description = "LedBigScreen") +public class LedBigScreen implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键id") + private java.lang.Long id; + /** + * 宽(px) + */ + @Excel(name = "宽(px)", width = 15) + @ApiModelProperty(value = "宽(px)") + private java.lang.Integer wide; + /** + * 高(px) + */ + @Excel(name = "高(px)", width = 15) + @ApiModelProperty(value = "高(px)") + private java.lang.Integer high; + /** + * 项目sn + */ + @Excel(name = "项目sn", width = 15) + @ApiModelProperty(value = "项目sn") + private java.lang.String projectSn; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private java.util.Date updateTime; + + @TableField(exist = false) + private List ledBigScreenRegions; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreenRegion.java b/src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreenRegion.java new file mode 100644 index 000000000..072863a62 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/entity/LedBigScreenRegion.java @@ -0,0 +1,109 @@ +package com.zhgd.xmgl.modules.led.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +/** + * @Description: led大屏-区域 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@Data +@TableName("led_big_screen_region") +@ApiModel(value = "LedBigScreenRegion实体类", description = "LedBigScreenRegion") +public class LedBigScreenRegion implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键id") + private java.lang.Long id; + /** + * led大屏id + */ + @Excel(name = "led大屏id", width = 15) + @ApiModelProperty(value = "led大屏id") + private java.lang.Integer ledBigScreenId; + /** + * 区域内容 + */ + @Excel(name = "区域内容", width = 15) + @ApiModelProperty(value = "区域内容") + private java.lang.Object regionContent; + /** + * 区域高度 + */ + @Excel(name = "区域高度", width = 15) + @ApiModelProperty(value = "区域高度") + private java.lang.Integer regionHeight; + /** + * 区域滚动效果(1左到右2下到上3无) + */ + @Excel(name = "区域滚动效果(1左到右2下到上3无)", width = 15) + @ApiModelProperty(value = "区域滚动效果(1左到右2下到上3无)") + private java.lang.Integer regionScrollEffect; + /** + * 滚动时长(s) + */ + @Excel(name = "滚动时长(s)", width = 15) + @ApiModelProperty(value = "滚动时长(s)") + private java.lang.Integer scrollDuration; + /** + * 字号大小(px) + */ + @Excel(name = "字号大小(px)", width = 15) + @ApiModelProperty(value = "字号大小(px)") + private java.lang.Integer fontSize; + /** + * 数据模块(1工种情况2班组情况3考情情况) + */ + @Excel(name = "数据模块(1工种情况2班组情况3考情情况)", width = 15) + @ApiModelProperty(value = "数据模块(1工种情况2班组情况3考情情况)") + private java.lang.Integer dataModule; + /** + * 自定义行数 + */ + @Excel(name = "自定义行数", width = 15) + @ApiModelProperty(value = "自定义行数") + private java.lang.Integer customRowNum; + /** + * 自定义列数 + */ + @Excel(name = "自定义列数", width = 15) + @ApiModelProperty(value = "自定义列数") + private java.lang.Integer customColumnNum; + /** + * 项目sn + */ + @Excel(name = "项目sn", width = 15) + @ApiModelProperty(value = "项目sn") + private java.lang.String projectSn; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private java.util.Date updateTime; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenMapper.java b/src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenMapper.java new file mode 100644 index 000000000..13430b2c6 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenMapper.java @@ -0,0 +1,16 @@ +package com.zhgd.xmgl.modules.led.mapper; + +import org.apache.ibatis.annotations.Mapper; +import com.zhgd.xmgl.modules.led.entity.LedBigScreen; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: led大屏 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@Mapper +public interface LedBigScreenMapper extends BaseMapper { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenRegionMapper.java b/src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenRegionMapper.java new file mode 100644 index 000000000..1cfdf113b --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/mapper/LedBigScreenRegionMapper.java @@ -0,0 +1,16 @@ +package com.zhgd.xmgl.modules.led.mapper; + +import org.apache.ibatis.annotations.Mapper; +import com.zhgd.xmgl.modules.led.entity.LedBigScreenRegion; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: led大屏-区域 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@Mapper +public interface LedBigScreenRegionMapper extends BaseMapper { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenMapper.xml b/src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenMapper.xml new file mode 100644 index 000000000..4a7c55e8d --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenRegionMapper.xml b/src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenRegionMapper.xml new file mode 100644 index 000000000..2db4639ef --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/mapper/xml/LedBigScreenRegionMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenRegionService.java b/src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenRegionService.java new file mode 100644 index 000000000..428d4cb21 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenRegionService.java @@ -0,0 +1,14 @@ +package com.zhgd.xmgl.modules.led.service; + +import com.zhgd.xmgl.modules.led.entity.LedBigScreenRegion; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: led大屏-区域 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +public interface ILedBigScreenRegionService extends IService { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenService.java b/src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenService.java new file mode 100644 index 000000000..fdbd10c71 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/service/ILedBigScreenService.java @@ -0,0 +1,19 @@ +package com.zhgd.xmgl.modules.led.service; + +import com.zhgd.xmgl.modules.led.entity.LedBigScreen; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.HashMap; + +/** + * @Description: led大屏 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +public interface ILedBigScreenService extends IService { + + LedBigScreen queryDetail(HashMap map); + + void saveDetail(LedBigScreen ledBigScreen); +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenRegionServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenRegionServiceImpl.java new file mode 100644 index 000000000..5963b1ece --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenRegionServiceImpl.java @@ -0,0 +1,19 @@ +package com.zhgd.xmgl.modules.led.service.impl; + +import com.zhgd.xmgl.modules.led.entity.LedBigScreenRegion; +import com.zhgd.xmgl.modules.led.mapper.LedBigScreenRegionMapper; +import com.zhgd.xmgl.modules.led.service.ILedBigScreenRegionService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: led大屏-区域 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@Service +public class LedBigScreenRegionServiceImpl extends ServiceImpl implements ILedBigScreenRegionService { + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenServiceImpl.java new file mode 100644 index 000000000..81a683751 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/led/service/impl/LedBigScreenServiceImpl.java @@ -0,0 +1,57 @@ +package com.zhgd.xmgl.modules.led.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.xmgl.modules.led.entity.LedBigScreen; +import com.zhgd.xmgl.modules.led.entity.LedBigScreenRegion; +import com.zhgd.xmgl.modules.led.mapper.LedBigScreenMapper; +import com.zhgd.xmgl.modules.led.mapper.LedBigScreenRegionMapper; +import com.zhgd.xmgl.modules.led.service.ILedBigScreenService; +import org.apache.commons.collections.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; + +/** + * @Description: led大屏 + * @author: pds + * @date: 2023-07-04 + * @version: V1.0 + */ +@Service +public class LedBigScreenServiceImpl extends ServiceImpl implements ILedBigScreenService { + @Autowired + private LedBigScreenRegionMapper ledBigScreenRegionMapper; + + @Override + public LedBigScreen queryDetail(HashMap map) { + String projectSn = MapUtils.getString(map, "projectSn"); + if (StrUtil.isBlank(projectSn)) { + throw new OpenAlertException("projectSn不能为空"); + } + LedBigScreen ledBigScreen = getOne(new LambdaQueryWrapper().eq(LedBigScreen::getProjectSn, projectSn)); + List ledBigScreenRegions = ledBigScreenRegionMapper.selectList(new LambdaQueryWrapper().eq(LedBigScreenRegion::getProjectSn, projectSn)); + ledBigScreen.setLedBigScreenRegions(ledBigScreenRegions); + return ledBigScreen; + } + + @Override + public void saveDetail(LedBigScreen ledBigScreen) { + String projectSn = ledBigScreen.getProjectSn(); + LedBigScreen lbs = getOne(new LambdaQueryWrapper().eq(LedBigScreen::getProjectSn, projectSn)); + if (lbs == null) { + save(ledBigScreen); + } else { + updateById(ledBigScreen); + } + ledBigScreenRegionMapper.delete(new LambdaQueryWrapper().eq(LedBigScreenRegion::getProjectSn, projectSn)); + for (LedBigScreenRegion ledBigScreenRegion : ledBigScreen.getLedBigScreenRegions()) { + ledBigScreenRegion.setProjectSn(projectSn); + ledBigScreenRegionMapper.insert(ledBigScreenRegion); + } + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/PanoramaNodePlanStatisticsController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/PanoramaNodePlanStatisticsController.java index cb264d039..0e7cea971 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/PanoramaNodePlanStatisticsController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/PanoramaNodePlanStatisticsController.java @@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.project.controller; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.mybatis.EntityMap; +import com.zhgd.xmgl.modules.project.entity.vo.KeyNodeEarlyWarningStatisticsVo; import com.zhgd.xmgl.modules.project.service.PanoramaNodePlanStatisticsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -53,12 +54,12 @@ public class PanoramaNodePlanStatisticsController { } - @ApiOperation(value = "关键里程碑延期告警", notes = "关键里程碑延期告警") + @ApiOperation(value = "关键里程碑延期告警(全景计划)", notes = "关键里程碑延期告警") @ApiImplicitParams({ @ApiImplicitParam(name = "sn", value = "公司sn", paramType = "query", required = true, dataType = "String"), }) @PostMapping("/selectKeyNodeEarlyWarningStatistics") - public Result> selectKeyNodeEarlyWarningStatistics(@RequestBody Map map) { + public Result selectKeyNodeEarlyWarningStatistics(@RequestBody Map map) { return Result.success(panoramaNodePlanStatisticsService.selectKeyNodeEarlyWarningStatistics(map)); } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/KeyNodeEarlyWarningStatisticsVo.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/KeyNodeEarlyWarningStatisticsVo.java new file mode 100644 index 000000000..d6444a93e --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/vo/KeyNodeEarlyWarningStatisticsVo.java @@ -0,0 +1,20 @@ +package com.zhgd.xmgl.modules.project.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class KeyNodeEarlyWarningStatisticsVo { + @ApiModelProperty(value = "招标逾期数量") + private Integer zbNum; + @ApiModelProperty(value = "出图逾期数量") + private Integer ctNum; + @ApiModelProperty(value = "交付逾期数量") + private Integer jfNum; + @ApiModelProperty(value = "开工逾期数量") + private Integer kgNum; + @ApiModelProperty(value = "竣备逾期数量") + private Integer jbNum; + @ApiModelProperty(value = "预售逾期数量") + private Integer ysNum; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProgressPanoramaNodePlanMapper.java b/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProgressPanoramaNodePlanMapper.java index 9c66e8abb..2eef3304a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProgressPanoramaNodePlanMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProgressPanoramaNodePlanMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.project.entity.ProgressPanoramaNodePlan; +import com.zhgd.xmgl.modules.project.entity.vo.KeyNodeEarlyWarningStatisticsVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -30,7 +31,7 @@ public interface ProgressPanoramaNodePlanMapper extends BaseMapper> selectRegionDelayStatisticsList(Map map); - Map selectKeyNodeEarlyWarningStatistics(Map map); + KeyNodeEarlyWarningStatisticsVo selectKeyNodeEarlyWarningStatistics(Map map); List> selectRegionDelayComparisonList(Map map); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProgressPanoramaNodePlanMapper.xml b/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProgressPanoramaNodePlanMapper.xml index cd2fbb053..26e2c31c0 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProgressPanoramaNodePlanMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/project/mapper/xml/ProgressPanoramaNodePlanMapper.xml @@ -175,7 +175,8 @@ order by totalDelayProjectNum desc - select IFNULL(SUM(IFNULL(zbNum, 0)), 0) zbNum, IFNULL(SUM(IFNULL(ctNum, 0)), 0) ctNum, IFNULL(SUM(IFNULL(jfNum, 0)), 0) jfNum, diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/PanoramaNodePlanStatisticsService.java b/src/main/java/com/zhgd/xmgl/modules/project/service/PanoramaNodePlanStatisticsService.java index 9c104401c..3edea0062 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/PanoramaNodePlanStatisticsService.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/PanoramaNodePlanStatisticsService.java @@ -1,6 +1,7 @@ package com.zhgd.xmgl.modules.project.service; import com.zhgd.jeecg.common.mybatis.EntityMap; +import com.zhgd.xmgl.modules.project.entity.vo.KeyNodeEarlyWarningStatisticsVo; import java.util.List; import java.util.Map; @@ -11,7 +12,7 @@ public interface PanoramaNodePlanStatisticsService { List> selectRegionDelayStatisticsList(Map map); - Map selectKeyNodeEarlyWarningStatistics(Map map); + KeyNodeEarlyWarningStatisticsVo selectKeyNodeEarlyWarningStatistics(Map map); List> selectRegionDelayComparisonList(Map map); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EngineeringScoreServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EngineeringScoreServiceImpl.java index 3cc6c3d23..65f1e1f4b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EngineeringScoreServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EngineeringScoreServiceImpl.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.modules.project.service.impl; +import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/PanoramaNodePlanStatisticsServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/PanoramaNodePlanStatisticsServiceImpl.java index 36b8bd8cc..6494c9442 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/PanoramaNodePlanStatisticsServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/PanoramaNodePlanStatisticsServiceImpl.java @@ -1,9 +1,11 @@ package com.zhgd.xmgl.modules.project.service.impl; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.basicdata.entity.Company; import com.zhgd.xmgl.modules.basicdata.service.ICompanyService; +import com.zhgd.xmgl.modules.project.entity.vo.KeyNodeEarlyWarningStatisticsVo; import com.zhgd.xmgl.modules.project.mapper.ProgressPanoramaNodePlanMapper; import com.zhgd.xmgl.modules.project.service.PanoramaNodePlanStatisticsService; import org.apache.commons.collections.MapUtils; @@ -40,13 +42,15 @@ public class PanoramaNodePlanStatisticsServiceImpl implements PanoramaNodePlanSt } @Override - public Map selectKeyNodeEarlyWarningStatistics(Map param) { - Map map=companyService.getCompanyType(param); - return progressPanoramaNodePlanMapper.selectKeyNodeEarlyWarningStatistics(map); + public KeyNodeEarlyWarningStatisticsVo selectKeyNodeEarlyWarningStatistics(Map param) { + Map map = companyService.getCompanyType(param); + KeyNodeEarlyWarningStatisticsVo vo = progressPanoramaNodePlanMapper.selectKeyNodeEarlyWarningStatistics(map); + return vo; } + @Override public List> selectRegionDelayComparisonList(Map param) { - Map map=companyService.getCompanyType(param); + Map map = companyService.getCompanyType(param); return progressPanoramaNodePlanMapper.selectRegionDelayComparisonList(map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/sanjiang/mapper/xml/SjImageProgressMapper.xml b/src/main/java/com/zhgd/xmgl/modules/sanjiang/mapper/xml/SjImageProgressMapper.xml index 3d5886b3c..20b7976b7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/sanjiang/mapper/xml/SjImageProgressMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/sanjiang/mapper/xml/SjImageProgressMapper.xml @@ -1,5 +1,4 @@ - - - \ No newline at end of file + + diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java index 3efbae473..c6c45d788 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java @@ -1402,9 +1402,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl teamMap = teamInfoMapper.getTeamInfoMapBySn(projectSn); Map departmentMap = departmentInfoMapper.getDepartmentInfoMapBySn(projectSn); + checkParams(list, teamMap, departmentMap); for (Map importInfo : list) { if (CharSequenceUtil.isBlank(importInfo.get("*姓名")) && CharSequenceUtil.isBlank(importInfo.get("*身份证号码")) && CharSequenceUtil.isBlank(importInfo.get("*人员类型"))) { continue; @@ -1438,23 +1438,25 @@ public class WorkerInfoServiceImpl extends ServiceImpl map = (Map) departmentMap.get(importInfo.get("*部门(管理人员填)")); + if (departmentMap.containsKey(department)) { + Map map = (Map) departmentMap.get(department); workerInfo.setDepartmentId(MapUtils.getLong(map, "id")); workerInfo.setEnterpriseId(MapUtils.getLong(map, "enterpriseId")); } } } else { - if (!"".equals(importInfo.get("*班组(劳务人员填)")) && !"#N/A".equals(importInfo.get("*班组(劳务人员填)"))) { + String team = importInfo.get("*部门/班组"); + if (!"".equals(team) && !"#N/A".equals(team)) { /*String depId=importInfo.get("班组ID"); workerInfo.setTeamId(Integer.valueOf(depId.split("-")[1])); workerInfo.setEnterpriseId(Integer.valueOf(depId.split("-")[0]));*/ - if (teamMap.containsKey(importInfo.get("*班组(劳务人员填)"))) { - Map map = (Map) teamMap.get(importInfo.get("*班组(劳务人员填)")); + if (teamMap.containsKey(team)) { + Map map = (Map) teamMap.get(team); workerInfo.setTeamId(MapUtils.getLong(map, "id")); workerInfo.setEnterpriseId(MapUtils.getLong(map, "enterpriseId")); } @@ -1535,15 +1537,17 @@ public class WorkerInfoServiceImpl extends ServiceImpl> list) { + private void checkParams(List> list, Map teamMap, Map departmentMap) { for (Map importInfo : list) { - if (StringUtils.isBlank(importInfo.get("*姓名"))) { + String name = importInfo.get("*姓名"); + if (StringUtils.isBlank(name)) { throw new OpenAlertException("有姓名未填写"); } if (StringUtils.isBlank(importInfo.get("*身份证号码"))) { throw new OpenAlertException("有身份证号码未填写"); } - if (StringUtils.isBlank(importInfo.get("*人员类型"))) { + String personTypeStr = importInfo.get("*人员类型"); + if (StringUtils.isBlank(personTypeStr)) { throw new OpenAlertException("有人员类型未填写"); } if (StringUtils.isBlank(importInfo.get("*民族"))) { @@ -1567,13 +1571,14 @@ public class WorkerInfoServiceImpl extends ServiceImpl 0) { - XSSFSheet sheet2 = workbook.getSheet("班组"); + //部门/班组下拉列 + XSSFSheet sheet2 = workbook.getSheet("部门"); for (int i = 0; i < teamList.size(); i++) { XSSFRow row1 = sheet2.createRow(i); XSSFCell cell1 = row1.createCell(0); @@ -237,17 +238,16 @@ public class ExcelUtils { cell2.setCellType(CellType.STRING); cell2.setCellValue(MapUtils.getString(teamList.get(i), "enterpriseTeamId")); } - } - if (departmentList.size() > 0) { - XSSFSheet sheet2 = workbook.getSheet("部门"); - for (int i = 0; i < departmentList.size(); i++) { - XSSFRow row1 = sheet2.createRow(i); - XSSFCell cell1 = row1.createCell(0); - cell1.setCellType(CellType.STRING); - cell1.setCellValue(MapUtils.getString(departmentList.get(i), "enterpriseDepartmentName")); - XSSFCell cell2 = row1.createCell(1); - cell2.setCellType(CellType.STRING); - cell2.setCellValue(MapUtils.getString(departmentList.get(i), "enterpriseDepartmentId")); + if (departmentList.size() > 0) { + for (int i = 0; i < departmentList.size(); i++) { + XSSFRow row1 = sheet2.createRow(i); + XSSFCell cell1 = row1.createCell(0); + cell1.setCellType(CellType.STRING); + cell1.setCellValue(MapUtils.getString(departmentList.get(i), "enterpriseDepartmentName")); + XSSFCell cell2 = row1.createCell(1); + cell2.setCellType(CellType.STRING); + cell2.setCellValue(MapUtils.getString(departmentList.get(i), "enterpriseDepartmentId")); + } } } downLoadExcel("人员导入模板.xlsx", response, workbook); diff --git a/src/main/resources/excel/人员导入模板.xlsx b/src/main/resources/excel/人员导入模板.xlsx index 17254312bfa09723c96a018d81faef43b8af74b3..14fcb2c438d49d719c697d53fb1f6b859566526b 100644 GIT binary patch delta 6834 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