getPl(@Param("begin") String begin,@Param("end") String end);
}
diff --git a/src/main/java/com/dsic/gj_erp/mapper/jhgk/DmYdjhMapper.java b/src/main/java/com/dsic/gj_erp/mapper/jhgk/DmYdjhMapper.java
index 1828268..1dd2f37 100644
--- a/src/main/java/com/dsic/gj_erp/mapper/jhgk/DmYdjhMapper.java
+++ b/src/main/java/com/dsic/gj_erp/mapper/jhgk/DmYdjhMapper.java
@@ -2,8 +2,11 @@ package com.dsic.gj_erp.mapper.jhgk;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsic.gj_erp.bean.jhgk.DmSygdMx;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
+import java.util.List;
+
/**
*
* Mapper 接口
@@ -14,4 +17,5 @@ import com.dsic.gj_erp.bean.jhgk.DmYdjh;
*/
public interface DmYdjhMapper extends BaseMapper {
+ List getSygdmx(String nextMonth);
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmGcrlServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmGcrlServiceImpl.java
index 1939702..c18b4f7 100644
--- a/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmGcrlServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmGcrlServiceImpl.java
@@ -42,7 +42,7 @@ public class EmGcrlServiceImpl extends ServiceImpl impleme
EmGcrlRepository emGcrlRepository;
- String[] weekArray = { "一", "二", "三", "四", "五", "六","日"};
+ String[] weekArray = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六","星期日"};
@Override
public List getList(JSONObject json) {
@@ -52,8 +52,9 @@ public class EmGcrlServiceImpl extends ServiceImpl impleme
}else{
queryWrapper.eq("NF", Calendar.getInstance().get(Calendar.YEAR));
}
- queryWrapper.orderByDesc("gl");
+ queryWrapper.orderByAsc("gl");
List emGcrls=emGcrlMapper.selectList(queryWrapper);
+
return emGcrls;
}
@@ -74,25 +75,37 @@ public class EmGcrlServiceImpl extends ServiceImpl impleme
LocalDate endDate = LocalDate.of(intNF, 12, 31); // 结束日期:2022年12月31日
List saveList=new ArrayList<>();
LocalDate currentDate = startDate;
-
+ String gzr="";
while (currentDate.isBefore(endDate) || currentDate.isEqual(endDate)) {
EmGcrl emGcrl=new EmGcrl();
emGcrl.setNf(nf);
String gl = currentDate.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
emGcrl.setGl(gl);
- WeekFields weekFields = WeekFields.of(Locale.getDefault());
+// WeekFields weekFields = WeekFields.of(Locale.getDefault());
+ WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 4);
Integer weekOfYear = currentDate.get(weekFields.weekOfYear());
emGcrl.setNz(weekOfYear.toString());
- Integer weekOfMonth = currentDate.get(weekFields.weekOfMonth());
- emGcrl.setYz(weekOfMonth.toString());
+// Integer weekOfMonth = currentDate.get(weekFields.weekOfMonth());
+// emGcrl.setYz(weekOfMonth.toString());
DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
Integer dayOfYear= currentDate.getDayOfYear();
emGcrl.setGzlr(dayOfYear.toString());
Integer zj=dayOfWeek.getValue();
emGcrl.setXq(weekArray[zj-1]);
if(zj==6||zj==7){
+ if (gzr.equals("")){
+ EmGcrl l= this.getOne(new QueryWrapper().select("top 1 gzr")
+ .eq("nf",intNF-1).orderByDesc(" cast(gzlr as int) "));
+ if (ObjectUtil.isEmpty(l)){
+ throw new RuntimeException("请先生成上一年份信息!");
+ }
+ gzr=l.getGzr();
+ }
+ emGcrl.setGzr(gzr);
emGcrl.setXxr("0");
}else {
+ gzr=emGcrl.getGl();
+ emGcrl.setGzr(gzr);
emGcrl.setXxr("1");
}
saveList.add(emGcrl);
diff --git a/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmSbcnpServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmSbcnpServiceImpl.java
index 803ed0e..6062e74 100644
--- a/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmSbcnpServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jcsj/impl/EmSbcnpServiceImpl.java
@@ -42,7 +42,7 @@ public class EmSbcnpServiceImpl extends ServiceImpl impl
// if(StringUtils.isNotEmpty(json.getString("sbmc"))){
// queryWrapper.eq("SBMC",json.getString("sbmc"));
// }
- List emSbjbbs=emSbcnpMapper.selectList(queryWrapper);
+ List emSbjbbs=emSbcnpMapper.selectList(queryWrapper.orderByAsc("kw,gx"));
return emSbjbbs;
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxLjService.java b/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxLjService.java
new file mode 100644
index 0000000..00ce6eb
--- /dev/null
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxLjService.java
@@ -0,0 +1,17 @@
+package com.dsic.gj_erp.service.jhgk;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsic.gj_erp.bean.jhgk.DmSygdMxLj;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author xn
+ * @since 2023-11-20
+ */
+public interface DmSygdMxLjService extends IService {
+
+}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxService.java b/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxService.java
index 7339b14..d8b99db 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxService.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/DmSygdMxService.java
@@ -19,10 +19,10 @@ import java.util.Map;
*/
public interface DmSygdMxService extends IService {
Map sygdPC();
- List saveByDcch(HashMap> map);
- List getKwList(List list);
- List getXBList(List list);
- List getPl(List list);
+// List saveByDcch(HashMap> map);
+ List getKwList(List list,String begin,String end);
+ List getXBList(List list,String year,String begin,String end);
+ List getPl(String begin,String end);
List getTZList(List list);
List getDhList(List list);
ResultBean tqSygd();
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/DmYdjhService.java b/src/main/java/com/dsic/gj_erp/service/jhgk/DmYdjhService.java
index f595adc..6d98bcd 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/DmYdjhService.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/DmYdjhService.java
@@ -2,8 +2,11 @@ package com.dsic.gj_erp.service.jhgk;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsic.gj_erp.bean.jhgk.DmSygdMx;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
+import java.util.List;
+
/**
*
* 服务类
@@ -15,5 +18,5 @@ import com.dsic.gj_erp.bean.jhgk.DmYdjh;
public interface DmYdjhService extends IService {
- void tjydjh();
+ List tjydjh();
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java
index 4bd27b8..c15766f 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmQfxqServiceImpl.java
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
/**
*
- * 服务实现类
+ * 服务实现类
*
*
* @author xn
@@ -37,27 +37,31 @@ public class DmQfxqServiceImpl extends ServiceImpl impleme
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBean uploadQf(List list, String project, HttpServletRequest req) {
- List listForSave=new ArrayList<>();
- Map> chs =list.stream().filter(f -> StringUtils.isNotBlank(f.getDcPl()))
- .collect(Collectors.groupingBy(QfExcel::getDcCh,Collectors.mapping(QfExcel::getDcPl,Collectors.toSet())));
- for (String ch:chs.keySet()){
- int i= this.count(new QueryWrapper().eq("DC_CH",ch).in("DC_PL",chs.get(ch)));
- if (i>0){
- return new ResultBean(false,10000, "请勿重复导入,船号:"+ch+",批量:"+chs.get(ch));
- }
- }
- for (QfExcel q:list) {
-// this.remove(new QueryWrapper()
-// .eq("DC_CH",q.getDcCh())
-// .eq("DC_PL",q.getDcPl())
-// .eq("DC_FD",q.getDcFd()));
- DmQfxq a=new DmQfxq();
- BeanUtil.copyProperties(q,a);
- a.setBzry((String) req.getAttribute("yhms"));
- a.setBzrq(DateUtil.format(DateUtil.date(), "yyyy/MM/dd"));
- listForSave.add(a);
+ List listForSave = new ArrayList<>();
+ Map> chs = list.stream().filter(f -> StringUtils.isNotBlank(f.getDcPl()))
+ .collect(Collectors.groupingBy(QfExcel::getDcCh, Collectors.mapping(QfExcel::getDcPl, Collectors.toSet())));
+ for (String ch : chs.keySet()) {
+ int i = this.count(new QueryWrapper().eq("DC_CH", ch).in("DC_PL", chs.get(ch)));
+ if (i > 0) {
+ return new ResultBean(false, 10000, "请勿重复导入,船号:" + ch + ",批量:" + chs.get(ch));
}
- this.saveBatch(listForSave);
+ }
+ for (QfExcel q : list) {
+ DmQfxq a = new DmQfxq();
+ BeanUtil.copyProperties(q, a);
+ String pl = a.getDcPl().length() == 1 ? "00" + a.getDcPl() : a.getDcPl().length() == 2 ? "0" + a.getDcPl() : a.getDcPl();
+ a.setDcPl(pl);
+ a.setBzry((String) req.getAttribute("yhms"));
+ a.setBzrq(DateUtil.format(DateUtil.date(), "yyyy/MM/dd"));
+ listForSave.add(a);
+ }
+ this.saveBatch(listForSave);
+ //生成月度计划信息
+ generateYdjh();
return new ResultBean();
}
+
+ public void generateYdjh() {
+ //零件
+ }
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxLjServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxLjServiceImpl.java
new file mode 100644
index 0000000..28989f3
--- /dev/null
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxLjServiceImpl.java
@@ -0,0 +1,21 @@
+package com.dsic.gj_erp.service.jhgk.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsic.gj_erp.bean.jhgk.DmSygdMxLj;
+import com.dsic.gj_erp.mapper.jhgk.DmSygdMxLjMapper;
+import com.dsic.gj_erp.service.jhgk.DmSygdMxLjService;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 服务实现类
+ *
+ *
+ * @author xn
+ * @since 2023-11-20
+ */
+@Service
+public class DmSygdMxLjServiceImpl extends ServiceImpl implements DmSygdMxLjService {
+
+}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java
index 9d65bc7..f99ab4b 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdMxServiceImpl.java
@@ -6,11 +6,13 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsic.gj_erp.bean.ResultBean;
import com.dsic.gj_erp.bean.jcsj.DmBom;
import com.dsic.gj_erp.bean.jcsj.DmCzplpNew;
import com.dsic.gj_erp.bean.jcsj.EmGcrl;
+import com.dsic.gj_erp.bean.jcsj.excel.PlExcel;
import com.dsic.gj_erp.bean.jhgk.*;
import com.dsic.gj_erp.bean.jhgk.dto.*;
import com.dsic.gj_erp.mapper.jcsj.DmBomMapper;
@@ -22,6 +24,7 @@ import com.dsic.gj_erp.service.jhgk.DmSygdMxService;
import com.dsic.gj_erp.service.jhgk.DmSygdService;
import com.dsic.gj_erp.service.jhgk.DmTzjhService;
import com.dsic.gj_erp.service.jhgk.DmXbjhService;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -33,7 +36,7 @@ import java.util.stream.Collectors;
/**
*
- * 服务实现类
+ * 服务实现类
*
*
* @author xn
@@ -42,699 +45,489 @@ import java.util.stream.Collectors;
@Service
public class DmSygdMxServiceImpl extends ServiceImpl implements DmSygdMxService {
- @Resource
- private DmZrcjhMapper zrcjhMapper;
- @Resource
- private DmBomMapper bomMapper;
@Resource
private EmGcrlMapper gcrlMapper;
@Resource
private DmSygdService sygdService;
@Resource
- private DmCzplpNewService plService;
- @Resource
private DmXbjhService xbService;
@Resource
private DmTzjhService tzjhService;
+ @Resource
+ private DmSygdMxLjServiceImpl ljService;
/**
- * 中日程分解
- * 根据中日程信息,提取相应的BOM数据,合并到套料图级别
+ * 三月滚动需求期排产
+ * 滚动需求期信息,提取相应的BOM数据,后合并到套料图级别
* 默认提取未来3个月信息
+ *
* @return
*/
@Override
@Transactional
- public Map sygdPC(){
- Map map2= new HashMap();
- //1.接下来3个月的 中日程 数据
-// List zrcjhs= zrcjhMapper.selectList(new QueryWrapper()
-// .select("DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd")
-// .between("gjjs_dz",
-// "(SELECT CONVERT(varchar(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111))",
-// "(Select CONVERT(varchar(10), eomonth(GETDATE(),3), 111))").or()
-// .between("gjjs_dz",
-// "(SELECT CONVERT(varchar(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111))",
-// "(Select CONVERT(varchar(10), eomonth(GETDATE(),3), 111))")
-// .groupBy("DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd")
-// );
-
- //TODO 需测试
- List zrcjhs= zrcjhMapper.selectList(new QueryWrapper()
- .select("DC_CH,stuff( ( SELECT ' ' + c.DC_FD FROM dm_zrcjh c WHERE c.DC_CH=dm_zrcjh.DC_CH and c.DC_PL=dm_zrcjh.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd," +
- "DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd,SUM(zl) as zl")
- .between("gjjs_dz",
- "2023/08/01",
- "2023/08/31")
- .or()
- .between("gjjs_xz",
- "2023/08/01",
- "2023/08/31")
- .groupBy("DC_CH,DC_PL,gjks,gjjs_dz,gjjs_xz,jsq_tlt,jsq_lqb,dhqd")
- );
-
- if (zrcjhs.size()<1){map2.put("message","请导入中日程!");return map2;}
- List zrcjhsNew=new ArrayList<>();
- //TODO 2.如果要重新排产,应当先根据 船号、批量 删除对应数父级状态为编制数据,及对应明细数据
- for (DmZrcjh zrc:zrcjhs){
- //有父级数据的
- if (sygdService.remove(new QueryWrapper()
- .eq("DC_CH",zrc.getDcCh())
- .eq("DC_PL",zrc.getDcPl())
- .eq("gd_zt","0")//编辑
- )) {
- this.remove(new QueryWrapper()
- .eq("dc_ch",zrc.getDcCh())
- .eq("dc_pl",zrc.getDcPl()));
- zrcjhsNew.add(zrc);
- }else {
- //无父级数据的
- this.remove(new QueryWrapper()
- .eq("dc_ch",zrc.getDcCh())
- .eq("dc_pl",zrc.getDcPl())
- .last("and parent_id is null"));
- zrcjhsNew.add(zrc);
- }
- }
-
- if(zrcjhsNew.size()<1){
- map2.put("message","无可排产数据");
- return map2;
- }
-
- //3.用中日程中的 船号 批量 ,在BOM中找明细
- List mxList=new ArrayList<>();
- List no_tlt=new ArrayList<>();//在BOM中没有对应数据的中日程信息
- for (DmZrcjh zrcjh : zrcjhsNew) {
- //TODO ②BOM中对应数据 未计算型材数据
- List bomList= bomMapper.selectList(new QueryWrapper()
- .select("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
- "pklx,pkcd,qbs,dmcd,ljsl")
- .eq("dcch",zrcjh.getDcCh())
- .eq("pl",zrcjh.getDcPl().length()<3?"0"+zrcjh.getDcPl():zrcjh.getDcPl())
-// .eq("cs",3)
- .groupBy("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
- "pklx,pkcd,qbs,dmcd,ljsl")
- );
-
- if(bomList.size()<1){
- no_tlt.add(zrcjh);
- }else {
- bomToMx(zrcjh,bomList,mxList,"",zrcjh.getDcCh());
- }
- }
- //4.1 将没有BOM信息的中日程的船号,去重,返回前端,手动选择目标船只
- if (no_tlt.size()>0){
- Map> map=no_tlt.stream().collect(Collectors.groupingBy(DmZrcjh::getDcCh));
- List no_tlt_ch=new ArrayList<>();
- for (String s:map.keySet()){
- DmSygdMx m=new DmSygdMx();
- m.setDcCh(s);
- no_tlt_ch.add(m);
- }
- //可作为目标船只的船
- List haveTltBoms= bomMapper.selectList(new QueryWrapper()
- .select("dcch")
- .eq("cs",3)
- .groupBy("dcch"));
-
- map2.put("no_tlt",no_tlt);
- map2.put("no_tlt_ch",no_tlt_ch);
- map2.put("haveTltBoms",haveTltBoms);
- }else {
- //4.2 如果BOM中数据齐全,直接排产
- ypc(mxList);
- }
- map2.put("mxList",mxList);
- return map2;
- }
-
- /**
- *使用中日程、BOM信息,给明细赋值
- * @param zrcjh 中日程对象
- * @param list BOM信息
- * @param mxList 明细信息
- * @param mbch 目标船只
- * @param dcch 本船号
- * @return
- */
- public void bomToMx(DmZrcjh zrcjh,List list,List mxList,String mbch,String dcch){
- for (DmBom b:list){
- DmSygdMx mx=new DmSygdMx();
- zrcToMx(zrcjh,mx);
- if (StrUtil.isNotEmpty(b.getZl())){
- if(b.getZl().equals("1110")){
- mx.setJssj(mx.getGjjsDz());
- }
- if(b.getZl().equals("1010")){
- mx.setJssj(mx.getGjjsXz());
+ public Map sygdPC() {
+ List ljList = baseMapper.getLjxx();
+ //零件排产 按时间 船号 批量 图号 排序
+ //默认定额 坡口 打磨 曲
+
+ //todo 保存前判断是否有,已排完的数据
+
+ ljService.saveBatch(ljList);
+
+ List mxList = baseMapper.getMx();
+ mxList.forEach(l -> {
+ if (StrUtil.isNotEmpty(l.getWpgg())) {
+ String[] wpgg = l.getWpgg().split("\\*");
+ Double c = 0.0;
+ if (wpgg.length == 3) {
+ //立方米
+ Double d = Double.parseDouble(wpgg[0]) * Double.parseDouble(wpgg[1]) * Double.parseDouble(wpgg[2]) / 1000000000.0;
+ //密度7.85t/m3
+ c = d * 7850;
}
- if (b.getZl().equals("4230")){//焊接机器人肘板
- mx.setJssj(mx.getGjjsXz());
- }
- if (b.getZl().equals("1120")){//TODO 光电 暂时按最小时间排
- if (mx.getGjjsXz().compareTo(mx.getGjjsDz())>0)
- mx.setJssj(mx.getGjjsXz());
- else
- mx.setJssj(mx.getGjjsDz());
- }
- }else {
- if (mx.getGjjsXz().compareTo(mx.getGjjsDz())>0)
- mx.setJssj(mx.getGjjsDz());
- else
- mx.setJssj(mx.getGjjsXz());
- }
- if (mx.getJssj().compareTo("2023/08/01")<0 || mx.getJssj().compareTo("2023/08/31")>0){
- break;
+ l.setBcshzl(Double.valueOf(String.format("%.2f", c)));
}
-// 7850 kg 密度 计算重量
- String[] wpgg=b.getWpgg().split("\\*");
- Double c=0.0;
- if (wpgg.length==3){
- //立方米
- Double d= Double.parseDouble(wpgg[0])*Double.parseDouble(wpgg[1])*Double.parseDouble(wpgg[2])/1000000000.0;
- //密度7.85t/m3
- c=d*7.85;
- }
- mx.setBcshzl(c);
- mx.setZl(b.getZl());
- mx.setTzbh(b.getTzbh());
- mx.setLqlb(b.getLqlb());
- mx.setLx(b.getTzbh().substring(4,5).equals("X")?"X":"B");
- mx.setWpgg(b.getWpgg());
- mx.setWpxh(b.getWpcz());
- //型材米数
- mx.setLjsl(b.getLjsl());
- //区域
-// mx.setQy();
- mx.setKw(b.getKw());
- //上料日期
- //上料人员
- //矫正标识
- //矫正设备
- //矫正人员
- mx.setPw(b.getPw());
- //抛丸设备
- //抛丸人员
- //抛丸日期
- mx.setHxcd(b.getHxcd());
- //划线空程
- //划线设备
- //划线人员
- //划线日期
- mx.setQgcd(b.getQgcd());
- //切割空程
- //切割设备
- //切割人员
- //切割日期
- mx.setPklx(b.getPklx());
- // mx.setPkcd(b.getPkcd());
- //坡口设备
- //坡口人员
- //坡口日期
- mx.setQbs(b.getQbs());
- //曲加工设备
- //曲加工人员
- //曲加工日期
- // mx.setDmcd(b.getDmcd());
- //打磨设备
- //打磨人员
- //打磨日期
- mx.setDcCh2(dcch);
- mx.setDcCh1(mbch);
- mx.setGxsj(DateUtil.now());
-
-
- mxList.add(mx);
- }
- }
+ });
+ this.saveBatch(mxList);
+ baseMapper.setParent();
- /**
- * 使用中日程信息,给明细赋值
- * @param zrcjh
- * @param m
- */
- public void zrcToMx(DmZrcjh zrcjh, DmSygdMx m){
- m.setDcCh(zrcjh.getDcCh());
- m.setDcPl(zrcjh.getDcPl());
- m.setDcFd(zrcjh.getDcFd());
- m.setGjks(zrcjh.getGjks());
- m.setBcshzl(zrcjh.getZl());
- m.setGjjsDz(zrcjh.getGjjsDz());
- m.setGjjsXz(zrcjh.getGjjsXz());
- m.setJsqTlt(zrcjh.getJsqTlt());
- m.setJsqLqb(zrcjh.getJsqLqb());
- m.setDhqd(zrcjh.getDhqd());
- }
+ //todo 排产
- /**
- * 根据选择的目标船只,查询数据,为本船只赋值
- * @param map
- * @return
- */
- @Override
- public List saveByDcch(HashMap> map) {
- List zrcjhs = BeanUtil.copyToList(map.get("no_tlt"), DmZrcjh.class);
- List mxList= BeanUtil.copyToList(map.get("mxList"),DmSygdMx.class);
- List no_tlt_ch= BeanUtil.copyToList(map.get("no_tlt_ch"),DmSygdMx.class);
-
- //1.根据选择的*目标船只,查询数据,为本船只赋值
- for (DmZrcjh z:zrcjhs){
- for (DmSygdMx mx:no_tlt_ch){
- if (z.getDcCh().equals(mx.getDcCh())){
- List bomList= bomMapper.selectList(new QueryWrapper()
- .select("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
- "pklx,pkcd,qbs,dmcd,ljsl")
- .eq("dcch",mx.getDcCh1())
- .eq("pl",z.getDcPl().length()<3?"0"+z.getDcPl():z.getDcPl())
- .eq("cs",3)
- .groupBy("dcch,sjch,pl,tzbh,lqlb,zl,wpgg,wpcz,kw,hxcd,qgcd,\n" +
- "pklx,pkcd,qbs,dmcd,ljsl")
- );
- if(bomList.size()<1){
- DmSygdMx mx1=new DmSygdMx();
- zrcToMx(z,mx1);
- mxList.add(mx1);
- }else {
- bomToMx(z,bomList,mxList,mx.getDcCh1(),"");
- }
- }
- }
- }
- //2.排产
- ypc(mxList);
- mxList =mxList.stream().sorted(Comparator.comparing(DmSygdMx::getJssj,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- return mxList;
+ Map map2 = new HashMap();
+ map2.put("mxList", mxList);
+ return map2;
}
/**
* 预排产,根据套料图号及跨位
+ *
* @param list
*/
- public void ypc(List list){
- //1.根据组立结束时间排序,决定生产顺序
- list =list.stream().sorted(Comparator.comparing(DmSygdMx::getJssj,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- //2.未来工厂日历信息
- List gcrlList= gcrlMapper.selectList(new QueryWrapper()
- .eq("xxr","1")
+ public void ypc(List list) {
+ //1.根据组立结束时间排序,决定生产顺序
+ list = list.stream().sorted(Comparator.comparing(DmSygdMx::getJssj, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
+ //2.未来工厂日历信息
+ List gcrlList = gcrlMapper.selectList(new QueryWrapper()
+ .eq("xxr", "1")
// .between("gl","2023/08/01","2023/08/31")
- .gt("gl","2023/08/01")
+ .gt("gl", "2023/08/01")
// DateUtil.date().toString("yyyy/MM/dd"))
- .orderByAsc("gl"));
- //3.预排产
- //TODO 假设:产能测算266.9;又套料图需当天完成
+ .orderByAsc("gl"));
+ //3.预排产
+ //TODO 假设:产能测算266.9;又套料图需当天完成
for (int i = 0; i < gcrlList.size(); i++) {
for (int j = 0; j < 266; j++) {
- int index=266*i+j;
- if (list.size()>index){
- list.get(index).setPwrq(gcrlList.get(i).getGl());
- list.get(index).setSlrq(gcrlList.get(i).getGl());
- list.get(index).setHxrq(gcrlList.get(i).getGl());
- list.get(index).setQgrq(gcrlList.get(i).getGl());
- }else {
- j=266;
- i=gcrlList.size();
+ int index = 266 * i + j;
+ if (list.size() > index) {
+ list.get(index).setPwrq(gcrlList.get(i).getGl());
+ list.get(index).setSlrq(gcrlList.get(i).getGl());
+ list.get(index).setHxrq(gcrlList.get(i).getGl());
+ list.get(index).setQgrq(gcrlList.get(i).getGl());
+ } else {
+ j = 266;
+ i = gcrlList.size();
}
}
//
}
- this.saveBatch(list);
- }
-
- /**
- * 生成3月滚动计划
- * @return
- */
- @Transactional
- public ResultBean tqSygd(){
- //1.查询未来3个月明细信息
- //测试
-// List list=null;
- List list= this.list(new QueryWrapper()
- .between("gjks",
- "2023/08/01",
- "2023/08/31")
- );
- if (ObjectUtil.isEmpty(list)||list.size()<1){
- return new ResultBean(null);
- }
- //根据船号+批量分组
- Map> map=list.stream().collect(Collectors.groupingBy(x->x.getDcCh()+x.getDcPl()));
- List sygdList=new ArrayList<>();
- for (String key:map.keySet()){
- DmSygd sygd=new DmSygd();
- List mxList=map.get(key);
- sygd.setDcCh(mxList.get(0).getDcCh());
- sygd.setDcPl(mxList.get(0).getDcPl());
- sygd.setDcFd(mxList.get(0).getDcFd());
- sygd.setGjjsDz(mxList.get(0).getGjjsDz());
- sygd.setGjjsXz(mxList.get(0).getGjjsXz());
- sygd.setJsqTlt(mxList.get(0).getJsqTlt());
- sygd.setJsqLqb(mxList.get(0).getJsqLqb());
- sygd.setTltSl(mxList.size());
- sygd.setSlSl(mxList.size());
- sygd.setPwSl(mxList.size());
- //跨位信息
- Map> kwMap=map.get(key).stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getKw()).orElse("0") ));
- for (String kw:kwMap.keySet()){
- //组立信息
- Map> zlMap=kwMap.get(kw).stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getZl()).orElse("0") ));
- for (String zl:zlMap.keySet()){
- //跨位、组立下,多张套料图的最开始加工时间,最后加工时间;(上料日期)
- List kssj= zlMap.get(zl).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- List jssj= zlMap.get(zl).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq,Comparator.nullsLast(Comparator.naturalOrder())).reversed()).collect(Collectors.toList());
- String sj=kssj.get(0).getSlrq()+" - "+jssj.get(0).getSlrq();
-
- if (kw.equals("7")){//1跨平直大板
- if(zl.equals("1110")){//大组
- sygd.setN1ad(kssj.size());
- sygd.setN1adSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN1ax(kssj.size());
- sygd.setN1axSj(sj);
- }
- }
- if (kw.equals("8")){//1跨进线板
- sygd.setN1ld(kssj.size());
- sygd.setN1ldSj(sj);
- }
- if (kw.equals("5")){//2跨T型材面板
- if(zl.equals("1110")){//大组
- sygd.setS2td(kssj.size());
- sygd.setS2tdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setS2tx(kssj.size());
- sygd.setS2txSj(sj);
- }
-
- }
- if (kw.equals("9")){//2跨超长超宽板
- if(zl.equals("1110")){//大组
- sygd.setN2bd(kssj.size());
- sygd.setN2bdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN2bx(kssj.size());
- sygd.setN2bxSj(sj);
- }
- }
- if (kw.equals("10")){//2跨超长超宽曲板
- if(zl.equals("1110")){//大组
- sygd.setN2cd(kssj.size());
- sygd.setN2cdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN2cx(kssj.size());
- sygd.setN2cxSj(sj);
- }
- }
- if (kw.equals("11")){//2跨T型材腹板
- if(zl.equals("1110")){//大组
- sygd.setN2td(kssj.size());
- sygd.setN2tdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN2tx(kssj.size());
- sygd.setN2txSj(sj);
- }
- }
- if (kw.equals("12")){//2跨激光切割板
- if(zl.equals("1110")){//大组
- sygd.setN2jd(kssj.size());
- sygd.setN2jdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN2jx(kssj.size());
- sygd.setN2jxSj(sj);
- }
-
- }
- if (kw.equals("14")){//3跨厚板
- if(zl.equals("1110")){//大组
- sygd.setN3hd(kssj.size());
- sygd.setN3hdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN3hx(kssj.size());
- sygd.setN3hxSj(sj);
- }
-
- }
- if (kw.equals("6")){//3跨平铁
- if(zl.equals("1110")){//大组
- sygd.setS3pd(kssj.size());
- sygd.setS3pdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setS3px(kssj.size());
- sygd.setS3pxSj(sj);
- }
- if(zl.equals("4230")) {//焊接机器人肘板
- sygd.setS3xx(kssj.size());
- sygd.setS3xxSj(sj);
- }
-
- }
- if (kw.equals("13")){//3跨曲板
- if(zl.equals("1110")){//大组
- sygd.setN3cd(kssj.size());
- sygd.setN3cdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN3cx(kssj.size());
- sygd.setN3cxSj(sj);
- }
- }
- if (kw.equals("15")){//4跨普通板
- if(zl.equals("1110")){//大组
- sygd.setN4pd(kssj.size());
- sygd.setN4pdSj(sj);
- }
- if(zl.equals("1010")) {//小组
- sygd.setN4px(kssj.size());
- sygd.setN4pxSj(sj);
- }
- if(zl.equals("4230")) {//焊接机器人肘板
- sygd.setN4xx(kssj.size());
- sygd.setN4xxSj(sj);
- }
-
- }
- if (kw.equals("16")){//7跨型板
- if(zl.equals("1110")){//大组
- //todo 型材米数
-// sygd.setX7xd(kssj.size());
- sygd.setX7xdSj(sj);
- }
- if(zl.equals("1010")) {//小组
-// sygd.setX7xx(kssj.size());
- sygd.setX7xxSj(sj);
- }
- }
- if(kw.equals("17")) {//光电
- sygd.setN8gx(kssj.size());
- sygd.setN8gxSj(sj);
- }
- }
- //1跨 板数 加工 时间
- //1跨 板数 加工 时间
- }
- sygdService.remove(new QueryWrapper().eq("DC_CH",sygd.getDcCh()).eq("DC_PL",sygd.getDcPl()));
- sygdList.add(sygd);
- }
- sygdList = sygdList.stream().sorted(Comparator.comparing(DmSygd::getDcCh).thenComparing(DmSygd::getDcPl)).collect(Collectors.toList());
- sygdService.saveBatch(sygdList);
- return new ResultBean(sygdList);
- }
-
- /**
- * 提取跨位信息
- * @param list
- * @return
- */
- public List getKwList(List list){
- //1.将明细信息,按照跨位分组
- Map> map=list.stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getKw()).orElse("") ));
- List kwdtoList=new ArrayList<>();
- //2.按照日期,统计每个跨位信息
- for (String kw:map.keySet()){
- //TODO 根据上料日期分组
- Map> map1=map.get(kw).stream().collect(Collectors.groupingBy(x->Optional.ofNullable(x.getSlrq()).orElse("无法") ));
- for (String rq:map1.keySet()){
- Kwdto kwdto=new Kwdto();
- kwdto.setRq(rq);
- kwdto.setKw(kw);
- List list1=map1.get(rq);
- kwdto.setTlt_sl(list1.size());
- BigDecimal hx_cd=new BigDecimal(0);
- BigDecimal qg_cd=new BigDecimal(0);
- for (DmSygdMx mx:list1){
- hx_cd=hx_cd.add(ObjectUtil.isEmpty(mx.getHxcd())?new BigDecimal(0):mx.getHxcd());
- qg_cd=qg_cd.add(ObjectUtil.isEmpty(mx.getQgcd())?new BigDecimal(0):mx.getQgcd());
- }
- kwdto.setHx_cd(hx_cd);
- kwdto.setQg_cd(qg_cd);
- kwdto.setMxList(list1);
- kwdtoList.add(kwdto);
- }
- }
- kwdtoList=kwdtoList.stream().sorted(Comparator.comparing(Kwdto::getRq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- return kwdtoList;
+ this.saveBatch(list);
}
/**
* 提取线表信息
+ *
* @param list
* @return
*/
@Override
- public List getXBList(List list) {
+ public List getXBList(List list, String year, String begin, String end) {
//
//线表 年月 船号 重量
//批量表重量 中日程重量
//明细 按船号 月份 分组 计算重量 排产重量
- //1.根据上料时间 从近到远排序
- list=list.stream()
- .filter(mx -> Objects.nonNull(mx.getSlrq()))
- .sorted(Comparator.comparing(DmSygdMx::getSlrq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- //2.时间范围内线表计划数据
- String year=list.get(0).getSlrq().substring(0,4);
- String begin=list.get(0).getSlrq().substring(5,7);
- String end=list.get(list.size()-1).getSlrq().substring(5,7);
- List xbjhs=xbService.list(new QueryWrapper()
- .eq("nf",year)
- .between("yf",begin,end));
- List xbjhdtoList= BeanUtil.copyToList(xbjhs,Xbjhdto.class);
+
+ List xbjhs = xbService.list(new QueryWrapper()
+ .eq("nf", year)
+ .ne("zl", 0)
+ .between("yf", begin, end));
+ List xbjhdtoList = BeanUtil.copyToList(xbjhs, Xbjhdto.class);
//3.根据月份和船号分组
Map> monthAndCh = list.stream()
- .filter(mx -> Objects.nonNull(mx.getSlrq())) // group by 的字段不能有null值
- .collect(Collectors.groupingBy(x-> x.getSlrq().substring(5,7)+x.getDcCh()));
+ .filter(mx -> Objects.nonNull(mx.getJssj())) // group by 的字段不能有null值
+ .collect(Collectors.groupingBy(x -> x.getJssj().substring(5, 7) + x.getDcCh()));
//4.
- xbjhdtoList.forEach(dmXbjh->{
- for (String ch:monthAndCh.keySet()){
+ xbjhdtoList.forEach(dmXbjh -> {
+ for (String ch : monthAndCh.keySet()) {
if (dmXbjh.getDcCh().equals(monthAndCh.get(ch).get(0).getDcCh())
- && dmXbjh.getYf().equals(monthAndCh.get(ch).get(0).getSlrq().substring(5,7))){
- Double shzl=0.0;
- for (DmSygdMx mx:monthAndCh.get(ch)){
- shzl=shzl+mx.getBcshzl();
+ && dmXbjh.getYf().equals(monthAndCh.get(ch).get(0).getJssj().substring(5, 7))) {
+ Double shzl = 0.0;
+ for (DmSygdMx mx : monthAndCh.get(ch)) {
+ shzl = shzl + (Objects.isNull(mx.getBcshzl()) ? 0.0 : mx.getBcshzl());
}
+ shzl = Double.valueOf(String.format("%.2f", Objects.isNull(shzl) ? shzl : shzl / 1000.0));
dmXbjh.setTlt_zl(shzl);
+ dmXbjh.setXczl(Double.valueOf(String.format("%.2f", shzl - dmXbjh.getZl())));
dmXbjh.setMxList(monthAndCh.get(ch));
}
}
});
- xbjhdtoList=xbjhdtoList.stream()
- .filter(xb -> Objects.nonNull(xb.getTlt_zl()))
+ Map> yf = xbjhdtoList.stream()
+ .filter(mx -> Objects.nonNull(mx.getDcCh())) // group by 的字段不能有null值
+ .collect(Collectors.groupingBy(x -> x.getYf()));
+ List list1 = new ArrayList<>();
+
+ for (String month : yf.keySet()) {
+ Double tlt_zl = 0.0;
+ Double zl = 0.0;
+ List y = yf.get(month);
+ for (Xbjhdto l : y) {
+ tlt_zl = tlt_zl + l.getTlt_zl();
+ zl = zl + l.getZl();
+ }
+ list1.addAll(yf.get(month));
+ Xbjhdto xbjhdto = new Xbjhdto();
+ xbjhdto.setDcCh("合计");
+ xbjhdto.setXczl(Double.valueOf(String.format("%.2f", tlt_zl - zl)));
+ xbjhdto.setTlt_zl(tlt_zl);
+ xbjhdto.setZl(zl);
+ xbjhdto.setYf(month);
+ xbjhdto.setNf(y.get(0).getNf());
+ list1.add(xbjhdto);
+ }
+ list1 = list1.stream()
.sorted(Comparator.comparing(Xbjhdto::getYf)).collect(Collectors.toList());
- return xbjhdtoList;
+ return list1;
}
/**
* 提取批量表信息
- * @param list
+ *
* @return
*/
@Override
- public List getPl(List list) {
- //根据船号 批量 对应
- //钢加大组结束期 钢加小组结束期 钢加开始
- //list 按船号 批量 分段 大小组 分组,排序
- List list1=new ArrayList();
- Map> map= list.stream().collect(Collectors.groupingBy(mx->mx.getDcCh()+mx.getDcPl()+mx.getDcFd()));
-
- for (String key:map.keySet()){
- DmSygdMx mx=map.get(key).get(0);//TODO 测试数据
- Pldto pl=new Pldto();
- //小分段
- DmCzplpNew czplp =plService.getOne(new QueryWrapper()
- .select("DC_CH,DC_PL,stuff( ( SELECT ' ' + c.DC_FD FROM dm_czplp_new c WHERE c.DC_CH=dm_czplp_new.DC_CH and c.DC_PL=dm_czplp_new.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd,dzjsq,xzjsq")
- .eq("DC_CH",mx.getDcCh())
- .eq("DC_PL",mx.getDcPl())
- .groupBy("DC_CH,DC_PL,dzjsq,xzjsq")
- );
-
- if (ObjectUtil.isNotEmpty(czplp)){
- BeanUtils.copyProperties(czplp,pl);
- pl.setGjks_pc(mx.getGjks());//TODO 中日程数据
- pl.setJsq_dz_pc(mx.getGjjsDz());//TODO 中日程数据
- pl.setJsq_xz_pc(mx.getGjjsXz());//TODO 中日程数据
- pl.setMxList(map.get(key));
- list1.add(pl);
+ public List getPl(String begin, String end) {
+ String beginTime_lj = ljService.getOne(new QueryWrapper()
+ .select("top 1 xzglxq ")
+ .inSql("parent_id ", " SELECT dm_sygd_mx.id from dm_sygd_mx WHERE dm_sygd_mx.jssj BETWEEN '" + begin + "' and '" + end + "'")
+ .orderByAsc("xzglxq")).getXzglxq();
+ String endTime_lj = ljService.getOne(new QueryWrapper()
+ .select("top 1 xzglxq ")
+ .inSql("parent_id ", " SELECT dm_sygd_mx.id from dm_sygd_mx WHERE dm_sygd_mx.jssj BETWEEN '" + begin + "' and '" + end + "'")
+ .orderByDesc("xzglxq")).getXzglxq();
+ List pldtoList = baseMapper.getPl(beginTime_lj, endTime_lj);
+ return pldtoList;
+ }
+
+ /**
+ * 提取跨位信息
+ *
+ * @param
+ * @return
+ */
+ @Override
+ public List getKwList(List list,String begin, String end) {
+ List kwdtoList = baseMapper.getkw(begin, end);
+
+ kwdtoList.forEach(l -> {
+ l.setMxList(list.stream().filter(
+ m -> m.getDcCh().equals(l.getCh())
+ && m.getDcPl().equals(l.getPl())
+ && (StrUtil.hasEmpty(m.getKw(),l.getKw())?true: m.getKw().equals(l.getKw()))
+ && m.getJssj().substring(0,7) .equals(l.getYf())
+ ).collect(Collectors.toList()));
+
+// l.setMxList(
+// this.list(new QueryWrapper().eq("dc_ch", l.getCh())
+// .eq("dc_pl", l.getPl())
+// .eq(StrUtil.isNotEmpty(l.getKw()),"kw", l.getKw())
+// .eq("substring(dm_sygd_mx.jssj, 0, 8)", l.getYf())
+// .orderByAsc("jssj")));
+ });
+ return kwdtoList;
+ }
+
+ public List getKwList_n(List list) {
+ //1.将明细信息,按照跨位分组
+ Map> map = list.stream().collect(Collectors.groupingBy(x -> Optional.ofNullable(x.getKw()).orElse("")));
+ List kwdtoList = new ArrayList<>();
+ //2.按照日期,统计每个跨位信息
+ for (String kw : map.keySet()) {
+ //TODO 根据上料日期分组
+ Map> map1 = map.get(kw).stream().collect(Collectors.groupingBy(x -> Optional.ofNullable(x.getSlrq()).orElse("无法")));
+ for (String rq : map1.keySet()) {
+ Kwdto kwdto = new Kwdto();
+// kwdto.setRq(rq);
+ kwdto.setKw(kw);
+ List list1 = map1.get(rq);
+// kwdto.setTlt_sl(list1.size());
+ BigDecimal hx_cd = new BigDecimal(0);
+ BigDecimal qg_cd = new BigDecimal(0);
+ for (DmSygdMx mx : list1) {
+ hx_cd = hx_cd.add(ObjectUtil.isEmpty(mx.getHxcd()) ? new BigDecimal(0) : mx.getHxcd());
+ qg_cd = qg_cd.add(ObjectUtil.isEmpty(mx.getQgcd()) ? new BigDecimal(0) : mx.getQgcd());
+ }
+// kwdto.setHx_cd(hx_cd);
+// kwdto.setQg_cd(qg_cd);
+ kwdto.setMxList(list1);
+ kwdtoList.add(kwdto);
}
- //大组 结束期
- //小组 结束期
}
- list1=list1.stream().sorted(Comparator.comparing(x->x.getDcCh()+x.getDcPl()+x.getJsq_dz_pc()+x.getJsq_xz_pc(),Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- return list1;
+// kwdtoList = kwdtoList.stream().sorted(Comparator.comparing(Kwdto::getRq, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
+ return kwdtoList;
}
/**
* 提取图纸信息
+ *
* @param list
* @return
*/
@Override
public List getTZList(List list) {
//图纸计划 dmTzjh 船号 批量
- List tzjhdtos=new ArrayList<>();
- Map> map= list.stream().collect(Collectors.groupingBy(mx->mx.getDcCh()+mx.getDcPl()));
- for (String key:map.keySet()){
- List list1= map.get(key).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
- DmTzjh tzjh= tzjhService.getOne(new QueryWrapper()
- .select("DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt,stuff( ( SELECT ' ' + c.DC_FD FROM dm_tzjh c WHERE c.DC_CH=dm_tzjh.DC_CH and c.DC_PL=dm_tzjh.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd")
- .eq("DC_CH",list1.get(0).getDcCh())
- .eq("DC_PL",list1.get(0).getDcPl())
- .groupBy("DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt"));
- if (ObjectUtil.isNotEmpty(tzjh)){
- Tzjhdto tzjhdto=new Tzjhdto();
- BeanUtils.copyProperties(tzjh,tzjhdto);
- tzjhdto.setTzxqq(list1.get(0).getSlrq());//todo 使用上料日期作为需求期
- tzjhdto.setMxList(list1);
- tzjhdtos.add(tzjhdto);
- }
+ List tzjhdtos = new ArrayList<>();
+ Map> map = list.stream().collect(Collectors.groupingBy(mx -> mx.getDcCh() + mx.getDcPl()));
+ for (String key : map.keySet()) {
+ List list1 = map.get(key).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
+ DmTzjh tzjh = tzjhService.getOne(new QueryWrapper()
+ .select("DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt,stuff( ( SELECT ' ' + c.DC_FD FROM dm_tzjh c WHERE c.DC_CH=dm_tzjh.DC_CH and c.DC_PL=dm_tzjh.DC_PL FOR xml path ( '' ) ), 1, 1, '' ) AS dcFd")
+ .eq("DC_CH", list1.get(0).getDcCh())
+ .eq("DC_PL", list1.get(0).getDcPl())
+ .groupBy("DC_CH,DC_PL,xfq_lqb,jsq_lqb,xfq_tlt,jsq_tlt"));
+ if (ObjectUtil.isNotEmpty(tzjh)) {
+ Tzjhdto tzjhdto = new Tzjhdto();
+ BeanUtils.copyProperties(tzjh, tzjhdto);
+ tzjhdto.setTzxqq(list1.get(0).getSlrq());//todo 使用上料日期作为需求期
+ tzjhdto.setMxList(list1);
+ tzjhdtos.add(tzjhdto);
+ }
}
- tzjhdtos=tzjhdtos.stream().sorted(Comparator.comparing(Tzjhdto::getTzxqq,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
+ tzjhdtos = tzjhdtos.stream().sorted(Comparator.comparing(Tzjhdto::getTzxqq, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
return tzjhdtos;
}
/**
* 提取到货信息
+ *
* @param list
* @return
*/
@Override
public List getDhList(List list) {
//船号 批量 订单号
- Map> map= list.stream()
- .filter(mx -> Objects.nonNull(mx.getDhqd()))
- .collect(Collectors.groupingBy(mx->mx.getDcCh()+mx.getDcPl()+mx.getDhqd()));
-
- List list1=new ArrayList<>();
- for (String key:map.keySet()){
- for (DmSygdMx mx:map.get(key)){
- Dhdto dhdto=new Dhdto();
- List mxs=new ArrayList<>();
- dhdto.setDcCh(mx.getDcCh());
- dhdto.setDcPl(mx.getDcPl());
- dhdto.setDhqd(mx.getDhqd());
- String[] str= mx.getWpgg().split("\\*");
- dhdto.setWphd(str[0]);
- dhdto.setWpkd(str[1]);
- dhdto.setWpcd(str[2]);
- dhdto.setRkxh(mx.getWpxh());
- dhdto.setGcxqq(mx.getSlrq());
- dhdto=baseMapper.getDhsl(dhdto);
- mxs.add(mx);
- dhdto.setMxList(mxs);
- list1.add(dhdto);
- }
- }
+// Map> map = list.stream()
+// .filter(mx -> Objects.nonNull(mx.getDhqd()))
+// .collect(Collectors.groupingBy(mx -> mx.getDcCh() + mx.getDcPl() + mx.getDhqd()));
+//
+ List list1 = new ArrayList<>();
+// for (String key : map.keySet()) {
+// for (DmSygdMx mx : map.get(key)) {
+// Dhdto dhdto = new Dhdto();
+// List mxs = new ArrayList<>();
+// dhdto.setDcCh(mx.getDcCh());
+// dhdto.setDcPl(mx.getDcPl());
+// dhdto.setDhqd(mx.getDhqd());
+// String[] str = mx.getWpgg().split("\\*");
+// dhdto.setWphd(str[0]);
+// dhdto.setWpkd(str[1]);
+// dhdto.setWpcd(str[2]);
+// dhdto.setRkxh(mx.getWpxh());
+// dhdto.setGcxqq(mx.getSlrq());
+// dhdto = baseMapper.getDhsl(dhdto);
+// mxs.add(mx);
+// dhdto.setMxList(mxs);
+// list1.add(dhdto);
+// }
+// }
//以list为主
return list1;
}
+
+ /**
+ * 生成3月滚动计划
+ *
+ * @return
+ */
+ @Transactional
+ public ResultBean tqSygd() {
+ //1.查询未来3个月明细信息
+ //测试
+// List list=null;
+ List list = this.list(new QueryWrapper()
+ .between("gjks",
+ "2023/08/01",
+ "2023/08/31")
+ );
+ if (ObjectUtil.isEmpty(list) || list.size() < 1) {
+ return new ResultBean(null);
+ }
+ //根据船号+批量分组
+ Map> map = list.stream().collect(Collectors.groupingBy(x -> x.getDcCh() + x.getDcPl()));
+ List sygdList = new ArrayList<>();
+ for (String key : map.keySet()) {
+ DmSygd sygd = new DmSygd();
+ List mxList = map.get(key);
+ sygd.setDcCh(mxList.get(0).getDcCh());
+ sygd.setDcPl(mxList.get(0).getDcPl());
+ sygd.setDcFd(mxList.get(0).getDcFd());
+ sygd.setTltSl(mxList.size());
+ sygd.setSlSl(mxList.size());
+ sygd.setPwSl(mxList.size());
+ //跨位信息
+ Map> kwMap = map.get(key).stream().collect(Collectors.groupingBy(x -> Optional.ofNullable(x.getKw()).orElse("0")));
+ for (String kw : kwMap.keySet()) {
+ //组立信息
+ Map> zlMap = kwMap.get(kw).stream().collect(Collectors.groupingBy(x -> Optional.ofNullable(x.getZl()).orElse("0")));
+ for (String zl : zlMap.keySet()) {
+ //跨位、组立下,多张套料图的最开始加工时间,最后加工时间;(上料日期)
+ List kssj = zlMap.get(zl).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());
+ List jssj = zlMap.get(zl).stream().sorted(Comparator.comparing(DmSygdMx::getSlrq, Comparator.nullsLast(Comparator.naturalOrder())).reversed()).collect(Collectors.toList());
+ String sj = kssj.get(0).getSlrq() + " - " + jssj.get(0).getSlrq();
+
+ if (kw.equals("7")) {//1跨平直大板
+ if (zl.equals("1110")) {//大组
+ sygd.setN1ad(kssj.size());
+ sygd.setN1adSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN1ax(kssj.size());
+ sygd.setN1axSj(sj);
+ }
+ }
+ if (kw.equals("8")) {//1跨进线板
+ sygd.setN1ld(kssj.size());
+ sygd.setN1ldSj(sj);
+ }
+ if (kw.equals("5")) {//2跨T型材面板
+ if (zl.equals("1110")) {//大组
+ sygd.setS2td(kssj.size());
+ sygd.setS2tdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setS2tx(kssj.size());
+ sygd.setS2txSj(sj);
+ }
+
+ }
+ if (kw.equals("9")) {//2跨超长超宽板
+ if (zl.equals("1110")) {//大组
+ sygd.setN2bd(kssj.size());
+ sygd.setN2bdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN2bx(kssj.size());
+ sygd.setN2bxSj(sj);
+ }
+ }
+ if (kw.equals("10")) {//2跨超长超宽曲板
+ if (zl.equals("1110")) {//大组
+ sygd.setN2cd(kssj.size());
+ sygd.setN2cdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN2cx(kssj.size());
+ sygd.setN2cxSj(sj);
+ }
+ }
+ if (kw.equals("11")) {//2跨T型材腹板
+ if (zl.equals("1110")) {//大组
+ sygd.setN2td(kssj.size());
+ sygd.setN2tdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN2tx(kssj.size());
+ sygd.setN2txSj(sj);
+ }
+ }
+ if (kw.equals("12")) {//2跨激光切割板
+ if (zl.equals("1110")) {//大组
+ sygd.setN2jd(kssj.size());
+ sygd.setN2jdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN2jx(kssj.size());
+ sygd.setN2jxSj(sj);
+ }
+
+ }
+ if (kw.equals("14")) {//3跨厚板
+ if (zl.equals("1110")) {//大组
+ sygd.setN3hd(kssj.size());
+ sygd.setN3hdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN3hx(kssj.size());
+ sygd.setN3hxSj(sj);
+ }
+
+ }
+ if (kw.equals("6")) {//3跨平铁
+ if (zl.equals("1110")) {//大组
+ sygd.setS3pd(kssj.size());
+ sygd.setS3pdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setS3px(kssj.size());
+ sygd.setS3pxSj(sj);
+ }
+ if (zl.equals("4230")) {//焊接机器人肘板
+ sygd.setS3xx(kssj.size());
+ sygd.setS3xxSj(sj);
+ }
+
+ }
+ if (kw.equals("13")) {//3跨曲板
+ if (zl.equals("1110")) {//大组
+ sygd.setN3cd(kssj.size());
+ sygd.setN3cdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN3cx(kssj.size());
+ sygd.setN3cxSj(sj);
+ }
+ }
+ if (kw.equals("15")) {//4跨普通板
+ if (zl.equals("1110")) {//大组
+ sygd.setN4pd(kssj.size());
+ sygd.setN4pdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+ sygd.setN4px(kssj.size());
+ sygd.setN4pxSj(sj);
+ }
+ if (zl.equals("4230")) {//焊接机器人肘板
+ sygd.setN4xx(kssj.size());
+ sygd.setN4xxSj(sj);
+ }
+
+ }
+ if (kw.equals("16")) {//7跨型板
+ if (zl.equals("1110")) {//大组
+ //todo 型材米数
+// sygd.setX7xd(kssj.size());
+ sygd.setX7xdSj(sj);
+ }
+ if (zl.equals("1010")) {//小组
+// sygd.setX7xx(kssj.size());
+ sygd.setX7xxSj(sj);
+ }
+ }
+ if (kw.equals("17")) {//光电
+ sygd.setN8gx(kssj.size());
+ sygd.setN8gxSj(sj);
+ }
+ }
+ //1跨 板数 加工 时间
+ //1跨 板数 加工 时间
+ }
+ sygdService.remove(new QueryWrapper().eq("DC_CH", sygd.getDcCh()).eq("DC_PL", sygd.getDcPl()));
+ sygdList.add(sygd);
+ }
+ sygdList = sygdList.stream().sorted(Comparator.comparing(DmSygd::getDcCh).thenComparing(DmSygd::getDcPl)).collect(Collectors.toList());
+ sygdService.saveBatch(sygdList);
+ return new ResultBean(sygdList);
+ }
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdxqServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdxqServiceImpl.java
index 5fa7ac5..41efdc7 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdxqServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmSygdxqServiceImpl.java
@@ -28,6 +28,7 @@ public class DmSygdxqServiceImpl extends ServiceImpl i
@Transactional
public void saveXzList(List list,String username,String day){
list.forEach(l->{
+ l.setDcPl(l.getDcPl().length() == 1 ? "00" + l.getDcPl() : l.getDcPl().length() == 2 ? "0" + l.getDcPl() : l.getDcPl());
DmSygdxq sygdxq=this.getOne(new QueryWrapper()
.eq("dc_ch",l.getDcCh())
.eq("dc_pl",l.getDcPl())
@@ -76,6 +77,7 @@ public class DmSygdxqServiceImpl extends ServiceImpl i
@Transactional
public void saveDzList(List list,String username,String day){
list.forEach(l->{
+ l.setDcPl(l.getDcPl().length() == 1 ? "00" + l.getDcPl() : l.getDcPl().length() == 2 ? "0" + l.getDcPl() : l.getDcPl());
DmSygdxq sygdxq=this.getOne(new QueryWrapper()
.eq("dc_ch",l.getDcCh())
.eq("dc_pl",l.getDcPl())
@@ -104,5 +106,11 @@ public class DmSygdxqServiceImpl extends ServiceImpl i
}
});
}
+
+ //零件信息
+ public void generateLjxx(List list){
+ //根据:本次导入的三月需求期 提取BOM 生成三月需求零件信息
+
+ }
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmYdjhServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmYdjhServiceImpl.java
index 378b55a..f134288 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmYdjhServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmYdjhServiceImpl.java
@@ -1,24 +1,27 @@
package com.dsic.gj_erp.service.jhgk.impl;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsic.gj_erp.bean.jcsj.EmGcrl;
import com.dsic.gj_erp.bean.jhgk.DmQfxq;
import com.dsic.gj_erp.bean.jhgk.DmSygdMx;
import com.dsic.gj_erp.bean.jhgk.DmYdjh;
import com.dsic.gj_erp.mapper.jhgk.DmYdjhMapper;
+import com.dsic.gj_erp.service.jcsj.DmBomService;
+import com.dsic.gj_erp.service.jcsj.EmGcrlService;
import com.dsic.gj_erp.service.jhgk.DmQfxqService;
import com.dsic.gj_erp.service.jhgk.DmSygdMxService;
import com.dsic.gj_erp.service.jhgk.DmYdjhService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
/**
*
- * 服务实现类
+ * 服务实现类
*
*
* @author xn
@@ -27,16 +30,72 @@ import java.util.List;
@Service
public class DmYdjhServiceImpl extends ServiceImpl implements DmYdjhService {
+ @Autowired
private DmQfxqService qfxqService;
+ @Autowired
private DmSygdMxService sygdMxService;
- @Override
- public void tjydjh(){
- //根据 前方需求 三月滚动 排产
- //查看前方需求是否已导入
- List qfxqList= qfxqService.list(new QueryWrapper().eq("substring(db,0,8) ", DateUtil.format(DateUtil.nextMonth(),"yyyy/MM")));
+ @Autowired
+ private DmBomService bomService;
+ @Autowired
+ private EmGcrlService gcrlService;
+
+ @Override
+ public List tjydjh() {
+ //根据 前方需求 三月滚动 排产
+ //1.查看下月的前方需求是否已导入
+ //2.根据前方需求的 船号、批量,查找三月滚动明细(板)
+ //3.根据前方需求期,重新为三月滚动明细排产(板),排产后的数据添加到月度计划,并且反写数据到三月滚动明细
+// List qfxqList= qfxqService.list(new QueryWrapper().eq("substring(db,0,8) ", DateUtil.format(DateUtil.nextMonth(),"yyyy/MM")));
+ int i = qfxqService.count(new QueryWrapper()
+ .eq("substring(db,0,8) ", "2023/08"));
+ if (i < 1) {
+ System.out.println("下月的前方需求信息未导入!");
+ return null;
+ }
+ List sygdmx = baseMapper.getSygdmx("2023/08");
+ if (sygdmx.size() < 1) {
+ System.out.println("请导入零件配套表信息!");
+ }
+
+ //TODO 重新排产
+// pc(sygdMxList);
+
+ return sygdmx;
- sygdMxService.list(new QueryWrapper().eq("",""));
}
+ public void pc(List sygdMxList){
+ //根据jssj从后往前排产
+ //跨位信息 设备信息 设备产能 工厂日历
+ //1.未来工厂日历信息
+ List gcrlList= gcrlService.list(new QueryWrapper()
+ .eq("xxr","1")
+ .eq("substring(gl,0,8) ","2023/08")
+ .orderByAsc("gl"));
+ //2.未来一个月,可用设备()
+ for (EmGcrl emGcrl : gcrlList) {
+ //当天,前方需求的板子
+ List list= sygdMxList.stream().filter(x->x.getJssj().equals(emGcrl.getGl())).collect(Collectors.toList());
+ if (list.size()>260){
+ new Exception("前方需求有问题,每天加工的板数不能大于260张!");
+ }
+ //零件加工:坡口 曲面 打磨
+
+ //切割
+
+ //划线
+
+ //上料
+
+
+
+ }
+
+
+ //3.排产
+
+
+ }
+
}
diff --git a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmZrcjhServiceImpl.java b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmZrcjhServiceImpl.java
index aa6661e..d58eb57 100644
--- a/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmZrcjhServiceImpl.java
+++ b/src/main/java/com/dsic/gj_erp/service/jhgk/impl/DmZrcjhServiceImpl.java
@@ -29,7 +29,7 @@ import java.util.Map;
/**
*
- * 服务实现类
+ * 服务实现类
*
*
* @author xn
@@ -44,79 +44,79 @@ public class DmZrcjhServiceImpl extends ServiceImpl impl
@Override
public List getList(JSONObject json) {
- QueryWrapper queryWrapper=new QueryWrapper<>();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
// if(StringUtils.isNotEmpty(json.getString("dcCh"))){
// queryWrapper.eq("DC_CH",json.getString("dcCh"));
// }
- if(StringUtils.isNotEmpty(json.getString("gjks"))){
- String time=json.getString("gjks");
- String startTime=time.split("~")[0];
- String endTime=time.split("~")[1];
- queryWrapper.between("gjks",startTime,endTime);
+ if (StringUtils.isNotEmpty(json.getString("gjks"))) {
+ String time = json.getString("gjks");
+ String startTime = time.split("~")[0];
+ String endTime = time.split("~")[1];
+ queryWrapper.between("gjks", startTime, endTime);
}
- if(StringUtils.isNotEmpty(json.getString("Zt"))){
- queryWrapper.eq("zt",json.getString("Zt"));
+ if (StringUtils.isNotEmpty(json.getString("Zt"))) {
+ queryWrapper.eq("zt", json.getString("Zt"));
}
queryWrapper.orderByAsc("DC_CH,cast(DC_PL as int)");
- // queryWrapper.orderByAsc("DC_PL");
- List dmZrcjhs=dmZrcjhMapper.selectList(queryWrapper);
+ // queryWrapper.orderByAsc("DC_PL");
+ List dmZrcjhs = dmZrcjhMapper.selectList(queryWrapper);
return dmZrcjhs;
}
@Override
public List upload(MultipartFile file) throws IOException {
- List