diff --git a/yanzhu-common/pom.xml b/yanzhu-common/pom.xml index b987260..4cd4ed0 100644 --- a/yanzhu-common/pom.xml +++ b/yanzhu-common/pom.xml @@ -132,6 +132,19 @@ ${hutool.version} + + + com.google.zxing + core + 3.3.1 + + + + com.google.zxing + javase + 3.3.1 + + \ No newline at end of file diff --git a/yanzhu-common/src/main/java/com/yanzhu/common/utils/ZxingUtils.java b/yanzhu-common/src/main/java/com/yanzhu/common/utils/ZxingUtils.java new file mode 100644 index 0000000..415bf34 --- /dev/null +++ b/yanzhu-common/src/main/java/com/yanzhu/common/utils/ZxingUtils.java @@ -0,0 +1,214 @@ +package com.yanzhu.common.utils; + +import com.google.zxing.*; +import com.google.zxing.client.j2se.BufferedImageLuminanceSource; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.common.HybridBinarizer; +import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * google zxing二维码生成类库demo + */ +public class ZxingUtils { + + //二维码颜色,黑色 + private static final int BLACK = 0xFF000000; + + //二维码背景色,白色 + private static final int WHITE = 0xFFFFFFFF; + + /** + * 打印日志 + */ + private static Logger LOGGER = LoggerFactory.getLogger(ZxingUtils.class); + + private ZxingUtils() { + + } + + /** + * 生成二维码 + * + * @param fileDir 生成图片保存路径 + * @param fileName 生成图片文件名 + * @param fileFormat 生成图片文件后缀 + * @param data 二维码中的数据 + * @param size 二维码大小 + * @param logoPath 二维码路径 + */ + public static String createImage(String fileDir, String fileName, String fileFormat, String data, int size, String logoPath) throws Exception { + Map hints = new HashMap<>(); + + //编码方式 + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + + //白边 + hints.put(EncodeHintType.MARGIN, 1); + + //纠错级别,L(7%)、M(15%)、Q(25%)、H(30%) + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + + //生成矩阵 + BitMatrix bitMatrix = new MultiFormatWriter().encode(data, BarcodeFormat.QR_CODE, size, size, hints); + + //绘制二维码 + BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < size; x++) { + for (int y = 0; y < size; y++) { + image.setRGB(x, y, bitMatrix.get(x, y) ? BLACK : WHITE); + } + } + + //向二维码中插入logo + if(StringUtils.isNotEmpty(logoPath)){ + ZxingUtils.insertLogo(image,logoPath); + } + + //生成二维码 + StringBuffer path = new StringBuffer(fileDir).append("/").append(fileName).append(".").append(fileFormat); + File file = new File(path.toString()); + ImageIO.write(image, fileFormat, file); + + //关闭二维码流 + image.flush(); + + return path.toString(); + } + + /** + * 生成二维码返回BufferedImage + * + * @param data 二维码中的数据 + * @param size 二维码大小 + * @param logoPath logo路径 + */ + public static BufferedImage createImage(String data, int size, String logoPath) throws Exception { + Map hints = new HashMap<>(); + + //编码方式 + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + + //白边 + hints.put(EncodeHintType.MARGIN, 1); + + //纠错级别,L(7%)、M(15%)、Q(25%)、H(30%) + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + + //生成矩阵 + BitMatrix bitMatrix = new MultiFormatWriter().encode(data, BarcodeFormat.QR_CODE, size, size, hints); + + //绘制二维码 + BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < size; x++) { + for (int y = 0; y < size; y++) { + image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); + } + } + + //向二维码中插入logo + if (!StringUtils.isEmpty(logoPath)) { + ZxingUtils.insertLogo(image, logoPath); + } + return image; + } + + /** + * 二维码中插入logo + * + * @param image 二维码对象 + * @param logoPath 图片完整路径 + */ + private static void insertLogo(BufferedImage image, String logoPath) throws Exception { + + BufferedImage logo = ImageIO.read(ZxingUtils.class.getResourceAsStream("/static/img/qrlogo.jpg")); + int imageWidth = image.getWidth(); + int imageHeight = image.getHeight(); + int logoWidth = logo.getWidth(); + int logoHeight = logo.getHeight(); + + //计算logo缩放后的大小,按二维码大小的20%计算 + logoWidth = logoWidth > (imageWidth * 2 / 10) ? (imageWidth * 2 / 10) : logoWidth; + logoHeight = logoHeight > (imageHeight * 2 / 10) ? (imageHeight * 2 / 10) : logoHeight; + + //插入logo + Graphics2D graph = image.createGraphics(); + int x = (imageWidth - logoWidth) / 2; + int y = (imageHeight - logoHeight) / 2; + + //开始合并绘制图片 + graph.drawImage(logo, x, y, logoWidth, logoHeight, null); + graph.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15); + + //logo边框大小 + graph.setStroke(new BasicStroke(2)); + + //logo边框颜色 + graph.setColor(Color.WHITE); + + //绘制图片 + graph.drawRect(x, y, logoWidth, logoHeight); + graph.dispose(); + + //关闭logo流 + logo.flush(); + } + + /** + * 解析二维码 + * + * @param filePath 图片路径 + * @return + */ + public String decodeImage(String filePath) { + String retStr = ""; + if ("".equalsIgnoreCase(filePath) && filePath.length() == 0) { + return "图片路径为空!"; + } + try { + BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath)); + LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage); + Binarizer binarizer = new HybridBinarizer(source); + BinaryBitmap bitmap = new BinaryBitmap(binarizer); + HashMap hintTypeObjectHashMap = new HashMap<>(); + hintTypeObjectHashMap.put(DecodeHintType.CHARACTER_SET, "UTF-8"); + Result result = new MultiFormatReader().decode(bitmap, hintTypeObjectHashMap); + retStr = result.getText(); + } catch (Exception e) { + e.printStackTrace(); + } + return retStr; + } + + public static void main(String[] args) throws Exception { + ZxingUtils zxingDemo = new ZxingUtils(); + + //生成二维码 + String data = "https://view.sxlxny.cn/web-app-view/aggregatePay/aggregatePay/getAggregatePayOpenId?wifi=123ss&password=kklpouhjksa&user=123"; + String path = zxingDemo.createImage("C:/Users/Administrator/Desktop/", "huihigh", "png", data, 200, null); + System.out.println(path); + + //解析二维码 + //String data = zxingDemo.decodeImage("C:\\Users\\fireelf\\Desktop\\3.jpg"); + //System.out.println(data); + +// byte[] bytes = Base64.getMimeDecoder().decode("data:image/jpeg;base64,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\n"); +// ByteArrayInputStream bais = new ByteArrayInputStream(bytes); +// BufferedImage logo = ImageIO.read(bais); +// int logoWidth = logo.getWidth(); +// int logoHeight = logo.getHeight(); +// System.out.println("logoWidth-->"+logoWidth); +// System.out.println("logoHeight-->"+logoHeight); + } +} diff --git a/yanzhu-framework/src/main/java/com/yanzhu/framework/web/service/UserDetailsServiceImpl.java b/yanzhu-framework/src/main/java/com/yanzhu/framework/web/service/UserDetailsServiceImpl.java index fabc6de..c374424 100644 --- a/yanzhu-framework/src/main/java/com/yanzhu/framework/web/service/UserDetailsServiceImpl.java +++ b/yanzhu-framework/src/main/java/com/yanzhu/framework/web/service/UserDetailsServiceImpl.java @@ -19,6 +19,10 @@ import com.yanzhu.common.utils.MessageUtils; import com.yanzhu.common.utils.StringUtils; import com.yanzhu.system.service.ISysUserService; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + /** * 用户验证处理 * @@ -63,13 +67,14 @@ public class UserDetailsServiceImpl implements UserDetailsService //设置项目单位信息 if(!user.isAdmin()){ + String as = user.getDept().getAncestors()+","+user.getDeptId(); //判断是否是段队管理员 - String[] ancestors = user.getDept().getAncestors().split(","); - Long deptId = Convert.toLong(ancestors[ancestors.length-1]); - if(deptId != null){ - SysDept sysDept = sysDeptService.selectDeptById(deptId); - user.setParDeptId(sysDept.getDeptId()); - user.setParDeptName(sysDept.getDeptName()); + String[] ancestorsIds = as.split(","); + List deptIds = Arrays.stream(ancestorsIds).map(ancestors -> Long.parseLong(ancestors)).collect(Collectors.toList()); + List depts = sysDeptService.selectParentDeptByIds(deptIds); + if(StringUtils.isNotEmpty(depts)){ + user.setParDeptId(depts.get(0).getDeptId()); + user.setParDeptName(depts.get(0).getDeptName()); } }else{ user.setParDeptId(100L); diff --git a/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyController.java b/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyController.java index f05a748..f363762 100644 --- a/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyController.java +++ b/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyController.java @@ -1,10 +1,18 @@ package com.yanzhu.web; +import java.io.File; import java.util.List; +import java.util.Map; +import java.util.Objects; import javax.servlet.http.HttpServletResponse; +import com.yanzhu.common.annotation.Anonymous; +import com.yanzhu.common.config.YanZhuConfig; import com.yanzhu.common.core.domain.entity.SysUser; import com.yanzhu.common.core.text.Convert; +import com.yanzhu.common.exception.ServiceException; +import com.yanzhu.common.utils.DateUtils; +import com.yanzhu.common.utils.ZxingUtils; import com.yanzhu.project.domain.ProProjectInfo; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -50,6 +58,77 @@ public class ProProjectApplyController extends BaseController return getDataTable(list); } + /** + * 查询项目申请列表 + * @PreAuthorize("@ss.hasPermi('project:projectApply:list')") + */ + @GetMapping("/checkApplyList") + public TableDataInfo checkApplyList(ProProjectApply proProjectApply) + { + SysUser sysUser = super.getLoginUser().getUser(); + if(Objects.equals(proProjectApply.getActiveName(),"dys")){ + proProjectApply.setApplyStatus("10"); + }else{ + proProjectApply.setApplyStatus("100"); + } + //超管查询所有数据 + if(!SysUser.isAdmin(sysUser.getUserId())){ + proProjectApply.setDeptAncestors(sysUser.getDept().getAncestors()+","+sysUser.getDeptId()); + } + proProjectApply.setIsDel("0"); + startPage(); + List list = proProjectApplyService.selectProProjectApplyList(proProjectApply); + return getDataTable(list); + } + + /** + * 查询项目申请列表 + * @PreAuthorize("@ss.hasPermi('project:projectApply:list')") + */ + @GetMapping("/createQr/{id}") + public AjaxResult createQr(@PathVariable("id") Long id) + { + String filePath = YanZhuConfig.getUploadPath() + "/" + DateUtils.datePath(); + String fileName = id+"_"+System.currentTimeMillis(); + String data = "http://49.235.181.228:8088/#/ApplyDetail?applyId="+id; + try { + File folder = new File(filePath); + if(!folder.exists()){ + folder.mkdirs(); + } + String path = ZxingUtils.createImage(filePath, fileName, "png", data, 200, null); + path = path.replace(YanZhuConfig.getProfile(),"/profile"); + ProProjectApply proProjectApply = proProjectApplyService.selectProProjectApplyById(id); + proProjectApply.setQrPath(path); + proProjectApplyService.updateProProjectApply(proProjectApply); + return success(proProjectApply); + }catch (Exception e){ + throw new ServiceException(e.getMessage()); + } + } + + /** + * 查询项目申请列表 + * @PreAuthorize("@ss.hasPermi('project:projectApply:list')") + */ + @GetMapping("/findGroupCountByStatus") + public AjaxResult findGroupCountByStatus(ProProjectApply proProjectApply) + { + SysUser sysUser = super.getLoginUser().getUser(); + if(Objects.equals(proProjectApply.getActiveName(),"dys")){ + proProjectApply.setApplyStatus("10"); + }else{ + proProjectApply.setApplyStatus("100"); + } + //超管查询所有数据 + if(!SysUser.isAdmin(sysUser.getUserId())){ + proProjectApply.setDeptAncestors(sysUser.getDept().getAncestors()+","+sysUser.getDeptId()); + } + proProjectApply.setIsDel("0"); + List> list = proProjectApplyService.findGroupCountByStatus(proProjectApply); + return success(list); + } + /** * 导出项目申请列表 */ @@ -67,6 +146,7 @@ public class ProProjectApplyController extends BaseController * 获取项目申请详细信息 * @PreAuthorize("@ss.hasPermi('project:projectApply:query')") */ + @Anonymous @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { @@ -85,9 +165,21 @@ public class ProProjectApplyController extends BaseController } /** - * 修改项目申请 + * 新增项目申请 + * @PreAuthorize("@ss.hasPermi('project:projectApply:add')") + */ + @Log(title = "项目申请", businessType = BusinessType.INSERT) + @PostMapping("/addApplyDetail") + public AjaxResult addApplyDetail(@RequestBody ProProjectApply proProjectApply) + { + return toAjax(proProjectApplyService.insertMyProProjectApplyDetail(proProjectApply)); + } + + + /** + * 修改项目申请 + * @PreAuthorize("@ss.hasPermi('project:projectApply:edit')") */ - @PreAuthorize("@ss.hasPermi('project:projectApply:edit')") @Log(title = "项目申请", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody ProProjectApply proProjectApply) diff --git a/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyDetailCheckController.java b/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyDetailCheckController.java new file mode 100644 index 0000000..e06f100 --- /dev/null +++ b/yanzhu-manage/src/main/java/com/yanzhu/web/ProProjectApplyDetailCheckController.java @@ -0,0 +1,98 @@ +package com.yanzhu.web; + +import com.yanzhu.common.annotation.Log; +import com.yanzhu.common.core.controller.BaseController; +import com.yanzhu.common.core.domain.AjaxResult; +import com.yanzhu.common.core.page.TableDataInfo; +import com.yanzhu.common.enums.BusinessType; +import com.yanzhu.common.utils.poi.ExcelUtil; +import com.yanzhu.project.domain.ProProjectApplyDetailCheck; +import com.yanzhu.project.service.IProProjectApplyDetailCheckService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 申请详情验收Controller + * + * @author yanZhu + * @date 2024-09-01 + */ +@RestController +@RequestMapping("/manage/proProjectApplyDetailCheck") +public class ProProjectApplyDetailCheckController extends BaseController +{ + @Autowired + private IProProjectApplyDetailCheckService proProjectApplyDetailCheckService; + + /** + * 查询申请详情验收列表 + */ + @PreAuthorize("@ss.hasPermi('manage:proProjectApplyDetailCheck:list')") + @GetMapping("/list") + public TableDataInfo list(ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + startPage(); + List list = proProjectApplyDetailCheckService.selectProProjectApplyDetailCheckList(proProjectApplyDetailCheck); + return getDataTable(list); + } + + /** + * 导出申请详情验收列表 + */ + @PreAuthorize("@ss.hasPermi('manage:proProjectApplyDetailCheck:export')") + @Log(title = "申请详情验收", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + List list = proProjectApplyDetailCheckService.selectProProjectApplyDetailCheckList(proProjectApplyDetailCheck); + ExcelUtil util = new ExcelUtil(ProProjectApplyDetailCheck.class); + util.exportExcel(response, list, "申请详情验收数据"); + } + + /** + * 获取申请详情验收详细信息 + * @PreAuthorize("@ss.hasPermi('manage:proProjectApplyDetailCheck:query')") + */ + @GetMapping(value = "/findAll/{detailId}") + public AjaxResult findAll(@PathVariable("detailId") Long detailId) + { + return success(proProjectApplyDetailCheckService.selectProProjectApplyDetailCheckByDetailId(detailId)); + } + + /** + * 新增申请详情验收 + * @PreAuthorize("@ss.hasPermi('manage:proProjectApplyDetailCheck:add')") + */ + @Log(title = "申请详情验收", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + return toAjax(proProjectApplyDetailCheckService.insertProProjectApplyDetailCheck(proProjectApplyDetailCheck)); + } + + /** + * 修改申请详情验收 + */ + @PreAuthorize("@ss.hasPermi('manage:proProjectApplyDetailCheck:edit')") + @Log(title = "申请详情验收", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + return toAjax(proProjectApplyDetailCheckService.updateProProjectApplyDetailCheck(proProjectApplyDetailCheck)); + } + + /** + * 删除申请详情验收 + */ + @PreAuthorize("@ss.hasPermi('manage:proProjectApplyDetailCheck:remove')") + @Log(title = "申请详情验收", businessType = BusinessType.DELETE) + @DeleteMapping("/{detailIds}") + public AjaxResult remove(@PathVariable Long[] detailIds) + { + return toAjax(proProjectApplyDetailCheckService.deleteProProjectApplyDetailCheckByDetailIds(detailIds)); + } +} diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java index 364ec60..7a571cd 100644 --- a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApply.java @@ -62,6 +62,10 @@ public class ProProjectApply extends BaseEntity @Excel(name = "使用时间", width = 30, dateFormat = "yyyy-MM-dd") private Date useTime; + /** 二维码地址 */ + @Excel(name = "二维码地址") + private String qrPath; + /** 是否删除 */ @Excel(name = "是否删除") private String isDel; @@ -69,6 +73,8 @@ public class ProProjectApply extends BaseEntity /** 申请人单位名称 */ private String createByDeptName; + private String deptAncestors; + /** 项目申请明细信息 */ private List proProjectApplyDetailList; @@ -187,6 +193,14 @@ public class ProProjectApply extends BaseEntity this.createByDeptName = createByDeptName; } + public String getQrPath() { + return qrPath; + } + + public void setQrPath(String qrPath) { + this.qrPath = qrPath; + } + public List getProProjectApplyDetailList() { return proProjectApplyDetailList; @@ -197,6 +211,14 @@ public class ProProjectApply extends BaseEntity this.proProjectApplyDetailList = proProjectApplyDetailList; } + public String getDeptAncestors() { + return deptAncestors; + } + + public void setDeptAncestors(String deptAncestors) { + this.deptAncestors = deptAncestors; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetail.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetail.java index a5c6bb8..a75c818 100644 --- a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetail.java +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetail.java @@ -78,6 +78,18 @@ public class ProProjectApplyDetail extends BaseEntity @Excel(name = "总价") private BigDecimal totalPrice; + /** 添加类型 */ + @Excel(name = "添加类型") + private int pushType; + + /** 验收总量 */ + @Excel(name = "验收总量") + private String checkedTotalValue; + + /** 是否验收 */ + @Excel(name = "是否验收") + private int isChecked; + /** 是否删除 */ @Excel(name = "是否删除") private String isDel; @@ -226,6 +238,30 @@ public class ProProjectApplyDetail extends BaseEntity return isDel; } + public int getPushType() { + return pushType; + } + + public void setPushType(int pushType) { + this.pushType = pushType; + } + + public String getCheckedTotalValue() { + return checkedTotalValue; + } + + public void setCheckedTotalValue(String checkedTotalValue) { + this.checkedTotalValue = checkedTotalValue; + } + + public int getIsChecked() { + return isChecked; + } + + public void setIsChecked(int isChecked) { + this.isChecked = isChecked; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetailCheck.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetailCheck.java new file mode 100644 index 0000000..8358d2d --- /dev/null +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/domain/ProProjectApplyDetailCheck.java @@ -0,0 +1,69 @@ +package com.yanzhu.project.domain; + +import java.math.BigDecimal; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.yanzhu.common.annotation.Excel; +import com.yanzhu.common.core.domain.BaseEntity; + +/** + * 申请详情验收对象 pro_project_apply_detail_check + * + * @author yanZhu + * @date 2024-09-01 + */ +public class ProProjectApplyDetailCheck extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 详情主键 */ + @Excel(name = "详情主键") + private Long detailId; + + /** 验收值 */ + @Excel(name = "验收值") + private String checkValue; + + /** 验收价格 */ + @Excel(name = "验收价格") + private BigDecimal checkPrice; + + public void setDetailId(Long detailId) + { + this.detailId = detailId; + } + + public Long getDetailId() + { + return detailId; + } + public void setCheckValue(String checkValue) + { + this.checkValue = checkValue; + } + + public String getCheckValue() + { + return checkValue; + } + public void setCheckPrice(BigDecimal checkPrice) + { + this.checkPrice = checkPrice; + } + + public BigDecimal getCheckPrice() + { + return checkPrice; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("detailId", getDetailId()) + .append("checkValue", getCheckValue()) + .append("checkPrice", getCheckPrice()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .toString(); + } +} diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyDetailCheckMapper.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyDetailCheckMapper.java new file mode 100644 index 0000000..f6ce0aa --- /dev/null +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyDetailCheckMapper.java @@ -0,0 +1,62 @@ +package com.yanzhu.project.mapper; + +import com.yanzhu.project.domain.ProProjectApplyDetailCheck; + +import java.util.List; + +/** + * 申请详情验收Mapper接口 + * + * @author yanZhu + * @date 2024-09-01 + */ +public interface ProProjectApplyDetailCheckMapper +{ + /** + * 查询申请详情验收 + * + * @param detailId 申请详情验收主键 + * @return 申请详情验收 + */ + public List selectProProjectApplyDetailCheckByDetailId(Long detailId); + + /** + * 查询申请详情验收列表 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 申请详情验收集合 + */ + public List selectProProjectApplyDetailCheckList(ProProjectApplyDetailCheck proProjectApplyDetailCheck); + + /** + * 新增申请详情验收 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 结果 + */ + public int insertProProjectApplyDetailCheck(ProProjectApplyDetailCheck proProjectApplyDetailCheck); + + /** + * 修改申请详情验收 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 结果 + */ + public int updateProProjectApplyDetailCheck(ProProjectApplyDetailCheck proProjectApplyDetailCheck); + + /** + * 删除申请详情验收 + * + * @param detailId 申请详情验收主键 + * @return 结果 + */ + public int deleteProProjectApplyDetailCheckByDetailId(Long detailId); + + /** + * 批量删除申请详情验收 + * + * @param detailIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteProProjectApplyDetailCheckByDetailIds(Long[] detailIds); +} diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyMapper.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyMapper.java index fb3f458..c69b3b6 100644 --- a/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyMapper.java +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/mapper/ProProjectApplyMapper.java @@ -1,6 +1,8 @@ package com.yanzhu.project.mapper; import java.util.List; +import java.util.Map; + import com.yanzhu.project.domain.ProProjectApply; import com.yanzhu.project.domain.ProProjectApplyDetail; @@ -28,6 +30,14 @@ public interface ProProjectApplyMapper */ public List selectProProjectApplyList(ProProjectApply proProjectApply); + /** + * 统计项目申请信息 + * + * @param proProjectApply 项目申请 + * @return 项目申请集合 + */ + public List> findGroupCountByStatus(ProProjectApply proProjectApply); + /** * 新增项目申请 * @@ -84,4 +94,8 @@ public interface ProProjectApplyMapper * @return 结果 */ public int deleteProProjectApplyDetailByApplyId(Long id); + + public ProProjectApplyDetail selectProProjectApplyDetailById(Long id); + + public int updateProProjectApplyDetail(ProProjectApplyDetail proProjectApplyDetail); } diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyDetailCheckService.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyDetailCheckService.java new file mode 100644 index 0000000..3f6ab4f --- /dev/null +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyDetailCheckService.java @@ -0,0 +1,62 @@ +package com.yanzhu.project.service; + +import com.yanzhu.project.domain.ProProjectApplyDetailCheck; + +import java.util.List; + +/** + * 申请详情验收Service接口 + * + * @author yanZhu + * @date 2024-09-01 + */ +public interface IProProjectApplyDetailCheckService +{ + /** + * 查询申请详情验收 + * + * @param detailId 申请详情验收主键 + * @return 申请详情验收 + */ + public List selectProProjectApplyDetailCheckByDetailId(Long detailId); + + /** + * 查询申请详情验收列表 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 申请详情验收集合 + */ + public List selectProProjectApplyDetailCheckList(ProProjectApplyDetailCheck proProjectApplyDetailCheck); + + /** + * 新增申请详情验收 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 结果 + */ + public int insertProProjectApplyDetailCheck(ProProjectApplyDetailCheck proProjectApplyDetailCheck); + + /** + * 修改申请详情验收 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 结果 + */ + public int updateProProjectApplyDetailCheck(ProProjectApplyDetailCheck proProjectApplyDetailCheck); + + /** + * 批量删除申请详情验收 + * + * @param detailIds 需要删除的申请详情验收主键集合 + * @return 结果 + */ + public int deleteProProjectApplyDetailCheckByDetailIds(Long[] detailIds); + + /** + * 删除申请详情验收信息 + * + * @param detailId 申请详情验收主键 + * @return 结果 + */ + public int deleteProProjectApplyDetailCheckByDetailId(Long detailId); +} diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyService.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyService.java index 109f2ff..8cbaf69 100644 --- a/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyService.java +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/IProProjectApplyService.java @@ -1,6 +1,8 @@ package com.yanzhu.project.service; import java.util.List; +import java.util.Map; + import com.yanzhu.project.domain.ProProjectApply; /** @@ -27,6 +29,14 @@ public interface IProProjectApplyService */ public List selectProProjectApplyList(ProProjectApply proProjectApply); + /** + * 统计项目申请信息 + * + * @param proProjectApply 项目申请 + * @return 项目申请集合 + */ + public List> findGroupCountByStatus(ProProjectApply proProjectApply); + /** * 新增项目申请 * @@ -35,6 +45,14 @@ public interface IProProjectApplyService */ public int insertProProjectApply(ProProjectApply proProjectApply); + /** + * 新增项目申请 + * + * @param proProjectApply 项目申请 + * @return 结果 + */ + public int insertMyProProjectApplyDetail(ProProjectApply proProjectApply); + /** * 修改项目申请 * diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyDetailCheckServiceImpl.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyDetailCheckServiceImpl.java new file mode 100644 index 0000000..5808921 --- /dev/null +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyDetailCheckServiceImpl.java @@ -0,0 +1,111 @@ +package com.yanzhu.project.service.impl; + +import com.yanzhu.common.core.text.Convert; +import com.yanzhu.common.utils.DateUtils; +import com.yanzhu.common.utils.SecurityUtils; +import com.yanzhu.project.domain.ProProjectApplyDetail; +import com.yanzhu.project.domain.ProProjectApplyDetailCheck; +import com.yanzhu.project.mapper.ProProjectApplyDetailCheckMapper; +import com.yanzhu.project.mapper.ProProjectApplyMapper; +import com.yanzhu.project.service.IProProjectApplyDetailCheckService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 申请详情验收Service业务层处理 + * + * @author yanZhu + * @date 2024-09-01 + */ +@Service +public class ProProjectApplyDetailCheckServiceImpl implements IProProjectApplyDetailCheckService +{ + @Autowired + private ProProjectApplyMapper proProjectApplyMapper; + + @Autowired + private ProProjectApplyDetailCheckMapper proProjectApplyDetailCheckMapper; + + /** + * 查询申请详情验收 + * + * @param detailId 申请详情验收主键 + * @return 申请详情验收 + */ + @Override + public List selectProProjectApplyDetailCheckByDetailId(Long detailId) + { + return proProjectApplyDetailCheckMapper.selectProProjectApplyDetailCheckByDetailId(detailId); + } + + /** + * 查询申请详情验收列表 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 申请详情验收 + */ + @Override + public List selectProProjectApplyDetailCheckList(ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + return proProjectApplyDetailCheckMapper.selectProProjectApplyDetailCheckList(proProjectApplyDetailCheck); + } + + /** + * 新增申请详情验收 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 结果 + */ + @Override + public int insertProProjectApplyDetailCheck(ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + proProjectApplyDetailCheck.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName()); + proProjectApplyDetailCheck.setCreateTime(DateUtils.getNowDate()); + int res = proProjectApplyDetailCheckMapper.insertProProjectApplyDetailCheck(proProjectApplyDetailCheck); + if(res>0){ + ProProjectApplyDetail proProjectApplyDetail = proProjectApplyMapper.selectProProjectApplyDetailById(proProjectApplyDetailCheck.getDetailId()); + proProjectApplyDetail.setIsChecked(1); + proProjectApplyDetail.setCheckedTotalValue(Convert.toStr(Convert.toDouble(proProjectApplyDetail.getCheckedTotalValue())+Convert.toDouble(proProjectApplyDetailCheck.getCheckValue()))); + proProjectApplyMapper.updateProProjectApplyDetail(proProjectApplyDetail); + } + return res; + } + + /** + * 修改申请详情验收 + * + * @param proProjectApplyDetailCheck 申请详情验收 + * @return 结果 + */ + @Override + public int updateProProjectApplyDetailCheck(ProProjectApplyDetailCheck proProjectApplyDetailCheck) + { + return proProjectApplyDetailCheckMapper.updateProProjectApplyDetailCheck(proProjectApplyDetailCheck); + } + + /** + * 批量删除申请详情验收 + * + * @param detailIds 需要删除的申请详情验收主键 + * @return 结果 + */ + @Override + public int deleteProProjectApplyDetailCheckByDetailIds(Long[] detailIds) + { + return proProjectApplyDetailCheckMapper.deleteProProjectApplyDetailCheckByDetailIds(detailIds); + } + + /** + * 删除申请详情验收信息 + * + * @param detailId 申请详情验收主键 + * @return 结果 + */ + @Override + public int deleteProProjectApplyDetailCheckByDetailId(Long detailId) + { + return proProjectApplyDetailCheckMapper.deleteProProjectApplyDetailCheckByDetailId(detailId); + } +} diff --git a/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyServiceImpl.java b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyServiceImpl.java index fec534e..bec3e41 100644 --- a/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyServiceImpl.java +++ b/yanzhu-mapper/src/main/java/com/yanzhu/project/service/impl/ProProjectApplyServiceImpl.java @@ -14,6 +14,9 @@ import com.yanzhu.system.mapper.SysDictDataMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Map; +import java.util.Objects; + import com.yanzhu.common.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; import com.yanzhu.project.domain.ProProjectApplyDetail; @@ -48,6 +51,16 @@ public class ProProjectApplyServiceImpl implements IProProjectApplyService return proProjectApplyMapper.selectProProjectApplyById(id); } + /** + * 统计项目申请信息 + * + * @param proProjectApply 项目申请 + * @return 项目申请集合 + */ + public List> findGroupCountByStatus(ProProjectApply proProjectApply){ + return proProjectApplyMapper.findGroupCountByStatus(proProjectApply); + } + /** * 查询项目申请列表 * @@ -147,7 +160,7 @@ public class ProProjectApplyServiceImpl implements IProProjectApplyService * * @param proProjectApply 项目申请对象 */ - public void insertProProjectApplyDetail(ProProjectApply proProjectApply) + private void insertProProjectApplyDetail(ProProjectApply proProjectApply) { List proProjectApplyDetailList = proProjectApply.getProProjectApplyDetailList(); Long id = proProjectApply.getId(); @@ -164,10 +177,11 @@ public class ProProjectApplyServiceImpl implements IProProjectApplyService if(StringUtils.isEmpty(proProjectApplyDetail.getAssetsName())){ BaseAssetsType baseAssetsType = baseAssetsTypeMapper.selectBaseAssetsTypeById(proProjectApplyDetail.getAssetsId()); proProjectApplyDetail.setAssetsName(baseAssetsType.getName()); - //为空时,重新查询并赋值 - if(proProjectApplyDetail.getTypeId()!=null && StringUtils.isEmpty(proProjectApplyDetail.getTypeName())){ + } + if(Objects.nonNull(proProjectApplyDetail.getTypeId())){ + if(StringUtils.isEmpty(proProjectApplyDetail.getTypeName())){ //资产类型 - BaseAssetsType parentAssetsType = baseAssetsTypeMapper.selectBaseAssetsTypeById(baseAssetsType.getParentId()); + BaseAssetsType parentAssetsType = baseAssetsTypeMapper.selectBaseAssetsTypeById(proProjectApplyDetail.getTypeId()); proProjectApplyDetail.setTypeName(parentAssetsType.getName()); } } @@ -180,4 +194,18 @@ public class ProProjectApplyServiceImpl implements IProProjectApplyService } } } + + /** + * 新增项目申请 + * + * @param proProjectApply 项目申请 + * @return 结果 + */ + public int insertMyProProjectApplyDetail(ProProjectApply proProjectApply){ + ProProjectApply entity = proProjectApplyMapper.selectProProjectApplyById(proProjectApply.getId()); + entity.setProProjectApplyDetailList(proProjectApply.getProProjectApplyDetailList()); + insertProProjectApplyDetail(entity); + return 1; + } } + diff --git a/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyDetailCheckMapper.xml b/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyDetailCheckMapper.xml new file mode 100644 index 0000000..78921bc --- /dev/null +++ b/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyDetailCheckMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + select detail_id, check_value, check_price, create_by, create_time from pro_project_apply_detail_check + + + + + + and detail_id = #{detailId} + + order by create_time desc + + + + + where detail_id = #{detailId} + order by create_time desc + + + + insert into pro_project_apply_detail_check + + detail_id, + check_value, + check_price, + create_by, + create_time, + + + #{detailId}, + #{checkValue}, + #{checkPrice}, + #{createBy}, + #{createTime}, + + + + + update pro_project_apply_detail_check + + check_value = #{checkValue}, + check_price = #{checkPrice}, + create_by = #{createBy}, + create_time = #{createTime}, + + where detail_id = #{detailId} + + + + delete from pro_project_apply_detail_check where detail_id = #{detailId} + + + + delete from pro_project_apply_detail_check where detail_id in + + #{detailId} + + + \ No newline at end of file diff --git a/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyMapper.xml b/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyMapper.xml index 7639de5..1529c89 100644 --- a/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyMapper.xml +++ b/yanzhu-mapper/src/main/resources/mapper/project/ProProjectApplyMapper.xml @@ -16,9 +16,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -45,6 +47,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -54,33 +59,53 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, dept_id, proj_id, proj_name, par_proj_name, apply_type, apply_status, apply_reason, apply_files, apply_user, use_time, is_del, create_by, create_time, update_by, update_time, remark from pro_project_apply + select pa.id, pa.dept_id, sd.dept_name as createByDeptName, pa.proj_id, pa.proj_name, pa.par_proj_name, pa.apply_type, pa.apply_status, pa.apply_reason, pa.apply_files, pa.apply_user, pa.use_time, pa.qr_path, pa.is_del, pa.create_by, pa.create_time, pa.update_by, pa.update_time, pa.remark from pro_project_apply pa + left join sys_dept sd on sd.dept_id = pa.dept_id - and dept_id = #{deptId} - and proj_id = #{projId} - and proj_name like concat('%', #{projName}, '%') - and par_proj_name like concat('%', #{parProjName}, '%') - and apply_type = #{applyType} - and apply_status = #{applyStatus} - and apply_user = #{applyUser} - and use_time = #{useTime} - and is_del = #{isDel} + and pa.dept_id = #{deptId} + and pa.proj_id = #{projId} + and pa.proj_name like concat('%', #{projName}, '%') + and pa.par_proj_name like concat('%', #{parProjName}, '%') + and pa.apply_type = #{applyType} + and pa.apply_status = #{applyStatus} + and pa.apply_user = #{applyUser} + and pa.use_time = #{useTime} + and pa.is_del = #{isDel} + and find_in_set(pa.dept_id, #{deptAncestors}) + order by pa.id desc - select a.id, a.dept_id, a.proj_id, a.proj_name, a.par_proj_name, a.apply_type, a.apply_status, a.apply_reason, a.apply_files, a.apply_user, a.use_time, a.is_del, sd.dept_name as createByDeptName, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, - b.id as sub_id, b.apply_id as sub_apply_id, b.super_type_key as sub_super_type_key, b.super_type_name as sub_super_type_name, b.type_id as sub_type_id, b.type_name as sub_type_name, b.assets_id as sub_assets_id, b.assets_name as sub_assets_name, b.assets_version as sub_assets_version, b.assets_unit as sub_assets_unit, b.number as sub_number, b.use_time as sub_use_time, b.use_reason as sub_use_reason, b.price as sub_price, b.total_price as sub_total_price, b.is_del as sub_is_del, b.create_by as sub_create_by, b.create_time as sub_create_time, b.update_by as sub_update_by, b.update_time as sub_update_time, b.remark as sub_remark + select a.id, a.dept_id, a.proj_id, a.proj_name, a.par_proj_name, a.apply_type, a.apply_status, a.apply_reason, a.apply_files, a.apply_user, a.use_time, a.qr_path, a.is_del, sd.dept_name as createByDeptName, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, + b.id as sub_id, b.apply_id as sub_apply_id, b.super_type_key as sub_super_type_key, b.super_type_name as sub_super_type_name, b.type_id as sub_type_id, b.type_name as sub_type_name, b.assets_id as sub_assets_id, b.assets_name as sub_assets_name, b.assets_version as sub_assets_version, b.assets_unit as sub_assets_unit, b.number as sub_number, b.use_time as sub_use_time, b.use_reason as sub_use_reason, b.price as sub_price, b.total_price as sub_total_price, b.push_type as sub_push_type, b.checked_total_value as sub_checked_total_value, b.is_checked as sub_is_checked, b.is_del as sub_is_del, b.create_by as sub_create_by, b.create_time as sub_create_time, b.update_by as sub_update_by, b.update_time as sub_update_time, b.remark as sub_remark from pro_project_apply a left join sys_dept sd on a.dept_id = sd.dept_id left join pro_project_apply_detail b on b.apply_id = a.id where a.id = #{id} - + + + select pa.apply_status as applyStatus, count(1) as total from pro_project_apply pa + + pa.apply_status != '1' + and pa.dept_id = #{deptId} + and pa.proj_id = #{projId} + and pa.proj_name like concat('%', #{projName}, '%') + and pa.par_proj_name like concat('%', #{parProjName}, '%') + and pa.apply_type = #{applyType} + and pa.apply_user = #{applyUser} + and pa.use_time = #{useTime} + and pa.is_del = #{isDel} + and find_in_set(pa.dept_id, #{deptAncestors}) + + group by pa.apply_status + + insert into pro_project_apply @@ -94,6 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" apply_files, apply_user, use_time, + qr_path, is_del, create_by, create_time, @@ -112,6 +138,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{applyFiles}, #{applyUser}, #{useTime}, + #{qrPath}, #{isDel}, #{createBy}, #{createTime}, @@ -134,6 +161,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" apply_files = #{applyFiles}, apply_user = #{applyUser}, use_time = #{useTime}, + qr_path = #{qrPath}, is_del = #{isDel}, create_by = #{createBy}, create_time = #{createTime}, @@ -167,9 +195,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - insert into pro_project_apply_detail( id, apply_id, super_type_key, super_type_name, type_id, type_name, assets_id, assets_name, assets_unit, assets_version, number, use_time, use_reason, price, total_price, is_del, create_by, create_time, update_by, update_time, remark) values + insert into pro_project_apply_detail( id, apply_id, super_type_key, super_type_name, type_id, type_name, assets_id, assets_name, assets_unit, assets_version, number, use_time, use_reason, price, total_price, push_type, is_checked, is_del, create_by, create_time, update_by, update_time, remark) values - ( #{item.id}, #{item.applyId}, #{item.superTypeKey}, #{item.superTypeName}, #{item.typeId}, #{item.typeName}, #{item.assetsId}, #{item.assetsName}, #{item.assetsVersion}, #{item.assetsUnit}, #{item.number}, #{item.useTime}, #{item.useReason}, #{item.price}, #{item.totalPrice}, #{item.isDel}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark}) + ( #{item.id}, #{item.applyId}, #{item.superTypeKey}, #{item.superTypeName}, #{item.typeId}, #{item.typeName}, #{item.assetsId}, #{item.assetsName}, #{item.assetsUnit}, #{item.assetsVersion}, #{item.number}, #{item.useTime}, #{item.useReason}, #{item.price}, #{item.totalPrice}, #{item.pushType}, #{item.isChecked}, #{item.isDel}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark}) + + + select * from pro_project_apply_detail where id = #{id} + + + + update pro_project_apply_detail + + checked_total_value = #{checkedTotalValue}, + is_checked = #{isChecked}, + + where id = #{id} + + \ No newline at end of file diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/mapper/SysDeptMapper.java b/yanzhu-system/src/main/java/com/yanzhu/system/mapper/SysDeptMapper.java index b916043..393d308 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/mapper/SysDeptMapper.java +++ b/yanzhu-system/src/main/java/com/yanzhu/system/mapper/SysDeptMapper.java @@ -117,4 +117,12 @@ public interface SysDeptMapper public int deleteDeptById(Long deptId); public int deleteDeepDeptById(Long deptId); + + /** + * 根据部门ID查询信息 + * + * @param ids 部门ID + * @return 部门信息 + */ + public List selectParentDeptByIds(List ids); } diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysDeptService.java b/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysDeptService.java index a5955f2..b523962 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysDeptService.java +++ b/yanzhu-system/src/main/java/com/yanzhu/system/service/ISysDeptService.java @@ -150,4 +150,12 @@ public interface ISysDeptService * @return */ public int inertSubProject(SysDept dept); + + /** + * 根据部门ID查询信息 + * + * @param ids 部门ID + * @return 部门信息 + */ + public List selectParentDeptByIds(List ids); } diff --git a/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysDeptServiceImpl.java b/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysDeptServiceImpl.java index 334075d..0eae770 100644 --- a/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysDeptServiceImpl.java +++ b/yanzhu-system/src/main/java/com/yanzhu/system/service/impl/SysDeptServiceImpl.java @@ -413,5 +413,14 @@ public class SysDeptServiceImpl implements ISysDeptService return deptMapper.deleteDeepDeptById(deptId); } - + /** + * 根据部门ID查询信息 + * + * @param ids 部门ID + * @return 部门信息 + */ + @Override + public List selectParentDeptByIds(List ids){ + return deptMapper.selectParentDeptByIds(ids); + } } diff --git a/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml b/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml index 7245f9b..164e168 100644 --- a/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml +++ b/yanzhu-system/src/main/resources/mapper/flowable/FlowBusinessKeyMapper.xml @@ -53,16 +53,11 @@ AND (fa.ASSIGNEE_ = #{assigneeId} OR ( - fa.ASSIGNEE_ IS NULL - AND ( - fa.USER_ID_ = #{assigneeId} - OR ( - fa.GROUP_ID_ IN - - #{roleId} - - ) - ) + fa.ASSIGNEE_ IS NULL + AND fa.GROUP_ID_ IN + + #{roleId} + ) ) diff --git a/yanzhu-system/src/main/resources/mapper/system/SysDeptMapper.xml b/yanzhu-system/src/main/resources/mapper/system/SysDeptMapper.xml index 3132bdd..c601940 100644 --- a/yanzhu-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/yanzhu-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -170,4 +170,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update sys_dept set del_flag = '2' where parent_id =#{deptId} or dept_id = #{deptId} + + + select * from sys_dept where status = 0 and del_flag = '0' and level=300 + and dept_id in + + #{item} + + order by id desc + + \ No newline at end of file diff --git a/yanzhu-ui/src/permission.js b/yanzhu-ui/src/permission.js index c568979..e51d9bc 100644 --- a/yanzhu-ui/src/permission.js +++ b/yanzhu-ui/src/permission.js @@ -8,7 +8,7 @@ import { isRelogin } from '@/utils/request' NProgress.configure({ showSpinner: false }) -const whiteList = ['/login', '/register'] +const whiteList = ['/login', '/register', "/ApplyDetail"] router.beforeEach((to, from, next) => { NProgress.start() diff --git a/yanzhu-ui/src/router/index.js b/yanzhu-ui/src/router/index.js index 95b51f4..f5829c1 100644 --- a/yanzhu-ui/src/router/index.js +++ b/yanzhu-ui/src/router/index.js @@ -61,6 +61,11 @@ export const constantRoutes = [ component: () => import('@/views/error/401'), hidden: true }, + { + path: '/ApplyDetail', + component: () => import('@/views/ApplyDetail/index'), + hidden: true + }, { path: '', component: Layout, diff --git a/yanzhu-ui/src/views/ApplyDetail/index.vue b/yanzhu-ui/src/views/ApplyDetail/index.vue new file mode 100644 index 0000000..e420ed9 --- /dev/null +++ b/yanzhu-ui/src/views/ApplyDetail/index.vue @@ -0,0 +1,234 @@ + + + + + + + + + + {{ index < 9 ? "0" + (index + 1) : index + 1 }} + + + {{ dataInfo.useTime }} + + + + + + + + 采购项目:{{ dataInfo.projName }} + + + 采购内容:{{ item.typeName + " > " + item.assetsName }} + + + 采购数量:{{ item.number + " " + item.assetsUnit }} + + + 规格型号:{{ item.assetsVersion }} + + + 验收数量:{{ item.checkedTotalValue }} + {{ item.assetsUnit }} + + + + 使用原因:{{ item.useReason }} + + + + + + + + 暂 无 投 诉 信 息 + + + + + + + +