package com.fzzy.igds; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.bstek.dorado.data.provider.Page; import com.fzzy.igds.constant.Constant; import com.fzzy.igds.data.NoticeDto; import com.fzzy.igds.data.NoticeParam; import com.fzzy.igds.service.InoutNoticeService; import com.fzzy.igds.domain.InoutNoticeIn; import com.fzzy.igds.domain.InoutNoticeOut; import com.fzzy.igds.service.SysDeptService; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.BeanUtils; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.util.*; /** * @Description 通知单管理 * @Author CZT * @Date 2024/12/16 10:10 */ @Component public class InoutNoticePR { @Resource private InoutNoticeService inoutNoticeService; @Resource private SysDeptService sysDeptService; /* *//** * inoutNoticePR#getTitle 根据报表类型,获取默认查询信息,比如表头信息等 * * @param * @return *//* @DataProvider public Map getTitle(Map param) { Map result = new HashMap(); //获取参数中报表类型 String type = (String)param.get("type"); //获取分库编码对应的分库名称 String deptName = ""; SysDept subDept = sysDeptService.getCacheDept(null, ContextUtil.subDeptId(null)); if (null != subDept) { deptName = subDept.getDeptName(); } if ("NOTICE_IN".equals(type)) { result.put("title", "入库通知单"); if (StringUtils.isNotEmpty(deptName)) { result.put("title", deptName + "入库通知单"); } } if ("NOTICE_OUT".equals(type)) { result.put("title", "出库通知单"); if (StringUtils.isNotEmpty(deptName)) { result.put("title", deptName + "出库通知单"); } } return result; }*/ /** * inoutNoticePR#getYearQuery 默认年份 * * @param * @return */ @DataProvider public Map getYearQuery(Map param) { Map result = new HashMap(); //获取参数中分库编码 String deptId = (String)param.get("deptId"); result.put("year", DateFormatUtils.format(new Date(), "yyyy")); result.put("deptId", deptId); return result; } /** * inoutNoticePR#queryNoticeByKey 根据参数查询出入库通知单,用于手动补单时,选择通知单 * * @param * @return */ @DataProvider public List queryNoticeByKey(Map param) { if (param == null) { return null; } String type = (String) param.get("type"); if (StringUtils.isEmpty(type)) { return null; } List list = new ArrayList<>(); NoticeDto dto; if (Constant.TYPE_IN.equals(type)) { List listIn = this.queryNoticeIn(param); if (null != listIn && listIn.size() > 0) { for (InoutNoticeIn inoutNoticeIn : listIn) { dto = new NoticeDto(); BeanUtils.copyProperties(inoutNoticeIn, dto); list.add(dto); } } } if (Constant.TYPE_OUT.equals(type)) { List listOut = this.queryNoticeOut(param); if (null != listOut && listOut.size() > 0) { for (InoutNoticeOut inoutNoticeOut : listOut) { dto = new NoticeDto(); BeanUtils.copyProperties(inoutNoticeOut, dto); list.add(dto); } } } return list; } /*==================== 入库通知单相关业务 ====================*/ /** * inoutNoticePR#initAddIn 入库通知单新增初始化 * * @return */ @Expose public InoutNoticeIn initAddIn() { SysUser user = ContextUtil.getLoginUser(); InoutNoticeIn data = new InoutNoticeIn(); data.setId(ContextUtil.generateOrderId("RK")); data.setName("入库通知单"); data.setCompanyId(user.getCompanyId()); data.setDeptId(ContextUtil.subDeptId(user)); data.setYear(DateFormatUtils.format(new Date(), "yyyy")); data.setCreateBy(ContextUtil.getLoginUserName()); data.setCreateTime(new Date()); return data; } /** * inoutNoticePR#pageQueryIn 获取入库通知单 * * @param param * @return */ @DataProvider public void pageQueryIn(Page page, NoticeParam param) { com.baomidou.mybatisplus.extension.plugins.pagination.Page corePage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPageNo(), page.getPageSize()); inoutNoticeService.pageQueryIn(corePage, param); // 重新封装 page.setEntities(corePage.getRecords()); page.setEntityCount(Integer.parseInt(String.valueOf(corePage.getTotal()))); } /** * inoutNoticePR#saveIn 更新入库通知单 */ @DataResolver public String saveIn(InoutNoticeIn data) { InoutNoticeIn inoutNoticeIn = new InoutNoticeIn(); BeanUtils.copyProperties(data, inoutNoticeIn); return inoutNoticeService.saveOrUpdateIn(inoutNoticeIn); } /** * inoutNoticePR#delDataIn */ @Expose public String delDataIn(InoutNoticeIn data) { InoutNoticeIn inoutNoticeIn = new InoutNoticeIn(); BeanUtils.copyProperties(data, inoutNoticeIn); return inoutNoticeService.delDataIn(inoutNoticeIn); } /** * 根据不同条件查询 * @param param * @return */ public List queryNoticeIn(Map param) { if (null == param) { param = new HashMap<>(); } Map finalParam = param; //多参数分页查询 Pageable pageable = PageRequest.of(0, 10000, Sort.Direction.ASC, InoutNoticeIn.SORT_PROP); Specification specification = new Specification() { private static final long serialVersionUID = 1L; public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) { List predicates = new ArrayList(); //所有的断言 Predicate predicate1 = cb.equal(root.get("companyId"), ContextUtil.getCompanyId()); predicates.add(predicate1); Predicate predicate2 = cb.equal(root.get("deptId"), ContextUtil.subDeptId(null)); predicates.add(predicate2); Predicate predicate3 = cb.equal(root.get("completeStatus"), "NONE"); predicates.add(predicate3); String key = (String) finalParam.get("customerId"); if (StringUtils.isNotEmpty(key)) { Predicate predicate4 = cb.equal(root.get("customerId"), key); predicates.add(predicate4); } key = (String) finalParam.get("foodVariety"); if (StringUtils.isNotEmpty(key)) { Predicate predicate5 = cb.equal(root.get("foodVariety"), key); predicates.add(predicate5); } key = (String) finalParam.get("depotId"); if (StringUtils.isNotEmpty(key)) { Predicate predicate6 = cb.equal(root.get("depotId"), key); predicates.add(predicate6); } key = (String) finalParam.get("key"); if (StringUtils.isNotEmpty(key)) { Predicate predicate7 = cb.like(root.get("name"), "%" + key + "%"); predicates.add(predicate7); } return cb.and(predicates.toArray(new Predicate[0])); } }; //org.springframework.data.domain.Page japPage = inoutNoticeService.queryAllNoticeIn(specification, pageable); //return japPage.getContent(); return null; } /** * 重新核算入库通知单完成量 * * inoutNoticePR#updateSumNoticeIn * * @return */ @Expose public String updateSumNoticeIn() { //获取所有未完成状态的入库通知单 String companyId = ContextUtil.getCompanyId(); String deptId = ContextUtil.subDeptId(null); List noticeInList = inoutNoticeService.getUnComNoticeIn(companyId); if (noticeInList != null && noticeInList.size() > 0) { inoutNoticeService.updateSumNoticeIn(noticeInList); return "success"; } return "fail"; } /*==================== 出库通知单相关业务 ====================*/ /** * inoutNoticePR#initAddOut 出库通知单新增初始化 * * @return */ @Expose public InoutNoticeOut initAddOut() { SysUser user = ContextUtil.getLoginUser(); InoutNoticeOut data = new InoutNoticeOut(); data.setId("CKTZD_" + ContextUtil.generateId()); data.setName("出库通知单"); data.setCompanyId(user.getCompanyId()); data.setDeptId(ContextUtil.subDeptId(user)); data.setTag(Constant.YN_Y); return data; } /** * inoutNoticePR#pageQueryOut 获取出库通知单 * @param page * @param param */ @DataProvider public void pageQueryOut(Page page, Map param) { if (null == param) { param = new HashMap<>(); } Map finalParam = param; //多参数分页查询 Pageable pageable = PageRequest.of(0, 10000, Sort.Direction.ASC, InoutNoticeOut.SORT_PROP); Specification specification = new Specification() { private static final long serialVersionUID = 1L; public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) { List predicates = new ArrayList(); //所有的断言 Predicate predicate1 = cb.equal(root.get("companyId"), ContextUtil.getCompanyId()); predicates.add(predicate1); Predicate predicate2 = cb.equal(root.get("deptId"), ContextUtil.subDeptId(null)); predicates.add(predicate2); String key = String.valueOf(finalParam.get("year")); if (StringUtils.isNotEmpty(key)) { Predicate predicate3 = cb.equal(root.get("year"), key); predicates.add(predicate3); } key = (String) finalParam.get("id"); if (StringUtils.isNotEmpty(key)) { Predicate predicate4 = cb.equal(root.get("id"), key); predicates.add(predicate4); } key = (String) finalParam.get("customerId"); if (StringUtils.isNotEmpty(key)) { Predicate predicate5 = cb.equal(root.get("customerId"), key); predicates.add(predicate5); } key = (String) finalParam.get("completeStatus"); if (StringUtils.isNotEmpty(key)) { Predicate predicate6 = cb.equal(root.get("completeStatus"), key); predicates.add(predicate6); } key = (String) finalParam.get("foodVariety"); if (StringUtils.isNotEmpty(key)) { Predicate predicate7 = cb.equal(root.get("foodVariety"), key); predicates.add(predicate7); } return cb.and(predicates.toArray(new Predicate[0])); } }; //org.springframework.data.domain.Page japPage = inoutNoticeService.queryAllNoticeOut(specification, pageable); //page.setEntityCount((int) japPage.getTotalElements()); //page.setEntities(japPage.getContent()); } /** * inoutNoticePR#saveOut 更新出库通知单 * @param data * @return */ @Expose public String saveOut(InoutNoticeOut data) { InoutNoticeOut inoutNoticeOut = new InoutNoticeOut(); BeanUtils.copyProperties(data, inoutNoticeOut); return inoutNoticeService.saveOrUpdateOut(inoutNoticeOut); } /** * inoutNoticePR#delDataOut */ @Expose public String delDataOut(InoutNoticeOut data) { InoutNoticeOut inoutNoticeOut = new InoutNoticeOut(); BeanUtils.copyProperties(data, inoutNoticeOut); return inoutNoticeService.delDataOut(inoutNoticeOut); } /** * 根据不同条件查询 * @param param * @return */ public List queryNoticeOut(Map param) { if (null == param) { param = new HashMap<>(); } Map finalParam = param; //多参数分页查询 Pageable pageable = PageRequest.of(0, 10000, Sort.Direction.ASC, InoutNoticeOut.SORT_PROP); Specification specification = new Specification() { private static final long serialVersionUID = 1L; public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) { List predicates = new ArrayList(); //所有的断言 Predicate predicate1 = cb.equal(root.get("companyId"), ContextUtil.getCompanyId()); predicates.add(predicate1); Predicate predicate2 = cb.equal(root.get("deptId"), ContextUtil.subDeptId(null)); predicates.add(predicate2); Predicate predicate3 = cb.equal(root.get("completeStatus"), "NONE"); predicates.add(predicate3); String key = (String) finalParam.get("customerId"); if (StringUtils.isNotEmpty(key)) { Predicate predicate4 = cb.equal(root.get("customerId"), key); predicates.add(predicate4); } key = (String) finalParam.get("foodVariety"); if (StringUtils.isNotEmpty(key)) { Predicate predicate5 = cb.equal(root.get("foodVariety"), key); predicates.add(predicate5); } key = (String) finalParam.get("depotId"); if (StringUtils.isNotEmpty(key)) { Predicate predicate6 = cb.equal(root.get("depotId"), key); predicates.add(predicate6); } key = (String) finalParam.get("key"); if (StringUtils.isNotEmpty(key)) { Predicate predicate7 = cb.like(root.get("name"), "%" + key + "%"); predicates.add(predicate7); } return cb.and(predicates.toArray(new Predicate[0])); } }; //org.springframework.data.domain.Page japPage = inoutNoticeService.queryAllNoticeOut(specification, pageable); //return japPage.getContent(); return null; } /** * 重新核算出库通知单完成量 * * inoutNoticePR#updateSumNoticeOut * * @return */ @Expose public String updateSumNoticeOut() { //获取所有未完成状态的入库通知单 String companyId = ContextUtil.getCompanyId(); String deptId = ContextUtil.subDeptId(null); List noticeOutList = inoutNoticeService.getUnComNoticeOut(companyId); if (noticeOutList != null && noticeOutList.size() > 0) { inoutNoticeService.updateSumNoticeOut(noticeOutList); return "success"; } return "fail"; } }