Administrator
2022-10-09 23f93897d618a5253a18b65b124196f95891f240
提交 | 用户 | 时间
58d006 1 package com.mandi.webservice.service.impl;
A 2
3 import java.util.ArrayList;
4 import java.util.Date;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.UUID;
9
10 import javax.annotation.Resource;
11
12 import com.mandi.fendan.util.ConvertTool;
13 import com.mandi.servlet.file.impl.FileLoadImpl;
14 import org.apache.commons.lang3.StringUtils;
15 import org.apache.log4j.Logger;
16 import org.springframework.stereotype.Service;
17 import org.springframework.transaction.annotation.Transactional;
18
19 import com.google.gson.JsonArray;
20 import com.google.gson.JsonElement;
21 import com.google.gson.JsonObject;
22 import com.google.gson.JsonParser;
23 import com.mandi.basicconfig.mapper.FdRepertoryNexusMapper;
24 import com.mandi.basicconfig.mapper.NczsjMapper;
25 import com.mandi.basicconfig.persist.FdRepertoryNexus;
26 import com.mandi.basicconfig.persist.Ncck;
27 import com.mandi.basicconfig.persist.Ncdepart;
28 import com.mandi.basicconfig.persist.Ncworker;
29 import com.mandi.basicconfig.persist.Ncywdy;
30 import com.mandi.common.JSONobj;
31 import com.mandi.common.Wxhtmethod;
32 import com.mandi.common.ParamFileter.BigDecimalfiter;
33 import com.mandi.dao.common.ObjectResult;
34 import com.mandi.dao.common.PageResult;
35 import com.mandi.fendan.mapper.BsheetEcgbMapper;
36 import com.mandi.fendan.mapper.BusinessMapper;
37 import com.mandi.fendan.mapper.Fd_BsheetMapper;
38 import com.mandi.fendan.mapper.Fd_CompanyMapper;
39 import com.mandi.fendan.mapper.Fd_GbxstdMapper;
40 import com.mandi.fendan.mapper.Fd_GbxstdmxMapper;
41 import com.mandi.fendan.mapper.Fd_VehicleMapper;
42 import com.mandi.fendan.mapper.Fd_XSTDMXMapper;
43 import com.mandi.fendan.mapper.Fd_XSTDMapper;
44 import com.mandi.fendan.mapper.Fd_YKTMapper;
45 import com.mandi.fendan.mapper.VehicleXSTDMapper;
46 import com.mandi.fendan.persist.BsheetEcgb;
47 import com.mandi.fendan.persist.Fd_Bsheet;
48 import com.mandi.fendan.persist.Fd_Company;
49 import com.mandi.fendan.persist.Fd_Gbxstd;
50 import com.mandi.fendan.persist.Fd_Gbxstdmx;
51 import com.mandi.fendan.persist.Fd_XSTD;
52 import com.mandi.fendan.persist.Fd_XSTDMX;
53 import com.mandi.fendan.persist.Vehicle_XSTD;
54 import com.mandi.fendan.util.Contants;
55 import com.mandi.fendan.util.persist.Serviceenum;
56 import com.mandi.fendan.util.persist.WaitXSTDMX;
57 import com.mandi.fendan.util.persist.Yktbsitem;
58 import com.mandi.webservice.service.IFdXSTDService;
59
60 @Service
61 public class FdXSTDService implements IFdXSTDService{
62
63     @Resource
64     private Fd_XSTDMapper tdper;
65     @Resource
66     private Fd_XSTDMXMapper tdmxper;
67     @Resource
68     private Fd_YKTMapper yktper;
69     @Resource
70     private VehicleXSTDMapper vhxper;
71     @Resource
72     private Fd_VehicleMapper  vhper;
73     @Resource
74     private NczsjMapper zsjper;
75     @Resource
76     private Fd_BsheetMapper fbper;
77     @Resource
78     private Fd_CompanyMapper cmper;
79     @Resource
80     private Fd_GbxstdMapper gbper;
81     @Resource
82     private Fd_GbxstdmxMapper gbmxper;
83     @Resource
84     private BusinessMapper bsper;
85     @Resource
86     private BsheetEcgbMapper beper;
87     @Resource
88     private FdRepertoryNexusMapper reNxPer;
89
90     private Logger log= Logger.getLogger(FileLoadImpl.class);
91
92     @Override
93     @Transactional(rollbackFor=Exception.class)
94     public ObjectResult<Boolean> saveFd_xstd(String dataArr) throws Exception {
95         ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
96         JsonArray ja=null;
97         try {
98             JsonParser jp=new JsonParser();
99              ja=jp.parse(dataArr).getAsJsonArray();
100         } catch (Exception e) {
101             throw new Exception("数据解析错误,参数不是json数组!");
102         }
103         if(ja!=null){
104             for (JsonElement je : ja) {
105                 JsonObject jo=je.getAsJsonObject();
106                 JsonObject objJo=null;
107                 JsonArray tdmxArr=null;
108                 try {
109                      objJo=jo.getAsJsonObject("head");
110                      tdmxArr=jo.getAsJsonArray("body");
111                 } catch (Exception e) {
112                     throw new Exception("数据解析错误,数据格式不正确!");
113                 }
114                 String ztbz=JSONobj.getstring(objJo, "td_ztbz");
115                 Fd_XSTD xstd=new Fd_XSTD();
116                 xstd=JSONobj.getobj(objJo, xstd);
117                 if("01".equals(ztbz)){
118                     xstd.setTd_ztbz(2);
119                 }else if("02".equals(ztbz)){
120                     xstd.setTd_ztbz(1);
121                 }else if("03".equals(ztbz)){
122                     xstd.setTd_ztbz(3);
123                 }else{
124                     xstd.setTd_ztbz(1);
125                 }
126                 //明细业务单元
127                 String mxywyd="";
128                 //根据仓库查找对应的厂区编号
129                 String ckNo="";//明细仓库编号
130
131                 Ncywdy cn=this.zsjper.getNcywdybyCode(xstd.getTd_ywdybh());
132                 //系统部门找不到不做处理
133                 if(cn==null||cn.getYktCode()==null||StringUtils.isEmpty(cn.getYktCode())){
134                     continue;
135                 }
136                 Ncworker ncw=this.zsjper.getNcworkerbyCode(xstd.getTd_zdr());
137                 Ncdepart ncd=this.zsjper.getNcdepartbyCode(xstd.getTd_bmbh());
138                 if(ncw!=null)
139                     xstd.setTd_zdrmc(ncw.getName());
140                 if(ncd!=null)
141                     xstd.setTd_bmmc(ncd.getName());
142                 int td_wfdsl=0;//未分单数量
143                 double td_wfdzl=0;//未分单重量
144                 String td_tdls=xstd.getTd_tdls();//提单流水号
145                 for (int i = 0; i < tdmxArr.size(); i++) {
146                     objJo=tdmxArr.get(i).getAsJsonObject();
147                     String h=JSONobj.getstring(objJo, "h");
148                     String k=JSONobj.getstring(objJo, "k");
149                     String c=JSONobj.getstring(objJo, "c");
150                     Fd_XSTDMX xstdmx=new Fd_XSTDMX();
151                     xstdmx=JSONobj.getobj(objJo,xstdmx);
152                     double mz=xstdmx.getTdmx_mz();
153
154                     xstdmx.setTdmx_ggxh((h==null?"C":h)+"*"+(k==null?"C":k)+"*"+(c==null?"C":c));
155                     if(StringUtils.isEmpty(td_tdls)){
156                         td_tdls=xstdmx.getTdmx_tdls();
157                     }
158                     if(StringUtils.isBlank(mxywyd)){
159                         cn=this.zsjper.getNcywdybyCode(xstdmx.getTdmx_fhzz());
160                         //系统部门找不到不做处理
161                         if(cn!=null && StringUtils.isNotBlank(cn.getYktCode())){
162                             mxywyd=xstdmx.getTdmx_fhzz();
163                         }else{
164                             continue;
165                         }
166                         if(StringUtils.isBlank(ckNo)) {
167                             Ncck ck=this.zsjper.getNcckbyPkid(xstdmx.getTdmx_ck());
168                             if(ck!=null)
169                                 ckNo=ck.getCode();
170
171                         }
172                     }
173                     //有上次已装车记录
174                     Fd_XSTDMX ccr=this.tdmxper.get(xstdmx.getTdmx_tdfl());
175                     if(ccr!=null&&ccr.getTdmx_zcbz()>0){
176                         continue;
177                     }else{
178                         if(ccr!=null){
179                             this.tdmxper.del(xstdmx.getTdmx_tdfl());
180                         }
181                     }
182
183
184                     if(Contants.NcNosend.equals(mxywyd)){
185                         this.tdmxper.delbyTDLS(xstd.getTd_tdls());
186                         this.tdper.del(xstd.getTd_tdls());
187                         break;
188                     }
189                     this.tdmxper.insert(xstdmx);
190                     //如果这次推过来的是关闭的 明细保存  表头不增加未分单数量
191                     if(xstdmx.getTdmx_gbbz()==0){
192                         td_wfdsl++;
193                         td_wfdzl+=mz;
194                     }
195
196                 }
197
198                 if(!Contants.NcNosend.equals(mxywyd)){
199                     //获取生成厂区编号
200                     FdRepertoryNexus renx=this.reNxPer.getbyckNoAndYwdyNo(ckNo,mxywyd);
201                     if(renx!=null)
202                         xstd.setTd_cqNo(renx.getSdepartNo());
203                     xstd.setTd_wfdsl(td_wfdsl);
204                     xstd.setTd_wfdzl(td_wfdzl);
205                     xstd.setTd_ywdybh(mxywyd);
206                     this.tdper.insert(xstd);
207                 }
208             }
209         }
210         orr.setCode(0);
211         orr.setErrmsg("新增成功!");
212         return orr;
213     }
214
215     @Override
216     @Transactional(rollbackFor=Exception.class)
217     public ObjectResult<Boolean> delFd_xstd(String dataArr) throws Exception {
218         ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
219         JsonArray ja=null;
220         try {
221             JsonParser jp=new JsonParser();
222             ja=jp.parse(dataArr).getAsJsonArray();
223         } catch (Exception e) {
224             throw new Exception("数据解析错误,参数不是json数组!");
225         }
226         if(ja!=null){
227             for (JsonElement je : ja) {
228                 JsonObject jo=je.getAsJsonObject();
229                 JsonObject objJo=null;
230                 try {
231                      objJo=jo.getAsJsonObject("head");
232                 } catch (Exception e) {
233                     throw new Exception("数据解析错误,数据格式不正确!");
234                 }
235                 String td_tdls=JSONobj.getstring(objJo, "td_tdls");
236                 if(StringUtils.isBlank(td_tdls)){
237                     throw new Exception("数据解析错误,提单流水号不能为空!");
238                 }
239
240                 Fd_XSTD td_xstd=this.tdper.get(td_tdls);
241                 if(td_xstd!=null){
242                     int c=this.tdmxper.getbytdlswithZCorFD(td_tdls);
243                     if(c>0){
244                         throw new Exception("发货单:"+td_xstd.getTd_tdbh()+" 已经分单或装车,不能删除!");
245                     }
246 //                    //只删除标志是未装车的
247                     this.tdmxper.delbyTDLS(td_tdls);
248                     this.tdper.del(td_tdls);
249                     this.gbper.del(td_xstd.getTd_tdbh());
250                     this.gbmxper.del(td_xstd.getTd_tdbh());
251                 }
252             }
253         }
254         orr.setCode(0);
255         orr.setErrmsg("删除成功!");
256         return orr;
257     }
258
259     @Override
260     @Transactional(rollbackFor=Exception.class)
261     public ObjectResult<Boolean> closeFd_xstd(String dataArr) throws Exception {
262         ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
263         JsonArray ja=null;
264         try {
265             JsonParser jp=new JsonParser();
266             ja=jp.parse(dataArr).getAsJsonArray();
267         } catch (Exception e) {
268             throw new Exception("数据解析错误,参数不是json数组!");
269         }
270         if(ja!=null){
271             for (JsonElement je : ja) {
272                 JsonObject jo=je.getAsJsonObject();
273                 JsonObject objJo=null;
274                 JsonArray tdmxArr=null;
275                 try {
276                      objJo=jo.getAsJsonObject("head");
277                      tdmxArr=jo.getAsJsonArray("body");
278                 } catch (Exception e) {
279                     throw new Exception("数据解析错误,数据格式不正确!");
280                 }
281
282                 //提单流水号
283                 String td_tdls=objJo.get("td_tdls")==null?"":objJo.get("td_tdls").getAsString();
284                 Fd_XSTD xstd=this.tdper.get(td_tdls);
285                 if(xstd!=null){
286                     for (int i = 0; i < tdmxArr.size(); i++) {
287                         objJo=tdmxArr.get(i).getAsJsonObject();
288                         String tdmx_tdfl=objJo.get("tdmx_tdfl")==null?"":objJo.get("tdmx_tdfl").getAsString();
289                         String sfckgb=objJo.get("sfckgb")==null?"":objJo.get("sfckgb").getAsString();
290                         Fd_XSTDMX tdmx=this.tdmxper.get(tdmx_tdfl);
291                         if(tdmx!=null&&tdmx.getTdmx_gbbz()==0){
292                             tdmx.setTdmx_gbbz(1);
293                             this.tdmxper.updateGB(tdmx);
294 //                            if(tdmx.getTdmx_zcbz()!=0){
295 //                                continue;
296 //                            }
297                             if(tdmx.getTdmx_fdbz()!=0){
298                                 //已分单未装车
299                                 if("N".equals(sfckgb)){
300                                     if(tdmx.getTdmx_zcbz()==0){
301                                         throw new Exception("提单明细:批次号:"+tdmx.getTdmx_pch()+" 已分单未装车,请联系物流公司取消分单!");
302                                     }
303                                 }
304                             }
305 //                            if(tdmx.getTdmx_zcbz()!=0){
306 //                                throw new Exception("提单流水号:"+xstd.getTd_tdls()+" 已扫码装车,不能关闭!");
307 //                            }
308
309                             if(tdmx.getTdmx_fdbz()==0){
310                                 xstd.setTd_wfdsl(xstd.getTd_wfdsl()-1);
311                                 xstd.setTd_wfdzl(xstd.getTd_wfdzl()-tdmx.getTdmx_mz());
312                                 this.tdper.updateFD(xstd);
313                             }else{
314                                 if(tdmx.getTdmx_zcbz()==0){
315                                     tdmx.setTdmx_fdywbh(null);
316                                     tdmx.setTdmx_fdwlgsbh(null);
317                                     tdmx.setTdmx_fdbz(0);
318                                     tdmx.setTdmx_fdcph(null);
319                                     this.tdmxper.updateFD(tdmx);
320                                 }
321                             }
322
323                             //这个关闭记录表示的是一卡通里的关闭操作
324                             Fd_Gbxstdmx gbmx=this.gbmxper.get(tdmx_tdfl);
325                             if(gbmx!=null){
326                                 Fd_Gbxstd gb=this.gbper.get(xstd.getTd_tdbh());
327                                 if(gb!=null){
328                                     gb.setTd_gbsl(gb.getTd_gbsl()-1);
329                                     gb.setTd_gbzl(BigDecimalfiter.sub(gb.getTd_gbzl(),tdmx.getTdmx_mz()));
330                                     this.gbper.update(gb);
331                                 }
332                                 this.gbmxper.delbyId(tdmx_tdfl);
333                             }
334                         }
335                     }
336                 }
337             }
338         }
339         orr.setCode(0);
340         orr.setErrmsg("关闭成功!");
341         return orr;
342     }
343
344     @Override
345     @Transactional(rollbackFor=Exception.class)
346     public ObjectResult<Boolean> openFd_xstd(String dataArr) throws Exception {
347         ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
348         JsonArray ja=null;
349         try {
350             JsonParser jp=new JsonParser();
351              ja=jp.parse(dataArr).getAsJsonArray();
352         } catch (Exception e) {
353             throw new Exception("数据解析错误,参数不是json数组!");
354         }
355         if(ja!=null){
356             for (JsonElement je : ja) {
357                 JsonObject jo=je.getAsJsonObject();
358                 JsonObject objJo=null;
359                 JsonArray tdmxArr=null;
360                 try {
361                      objJo=jo.getAsJsonObject("head");
362                      tdmxArr=jo.getAsJsonArray("body");
363                 } catch (Exception e) {
364                     throw new Exception("数据解析错误,数据格式不正确!");
365                 }
366
367                 //提单流水号
368                 String td_tdls=objJo.get("td_tdls")==null?"":objJo.get("td_tdls").getAsString();
369                 Fd_XSTD xstd=this.tdper.get(td_tdls);
370                 if(xstd!=null){
371                     for (int i = 0; i < tdmxArr.size(); i++) {
372                         objJo=tdmxArr.get(i).getAsJsonObject();
373                         String tdmx_tdfl=objJo.get("tdmx_tdfl")==null?"":objJo.get("tdmx_tdfl").getAsString();
374                         Fd_XSTDMX tdmx=this.tdmxper.get(tdmx_tdfl);
375                         if(tdmx!=null&&tdmx.getTdmx_gbbz()==1){
376                             tdmx.setTdmx_gbbz(0);
377                             this.tdmxper.updateGB(tdmx);
378                             if(tdmx.getTdmx_fdbz()==0){
379                                 xstd.setTd_wfdsl(xstd.getTd_wfdsl()+1);
380                                 xstd.setTd_wfdzl(xstd.getTd_wfdzl()+tdmx.getTdmx_mz());
381                                 this.tdper.updateFD(xstd);
382                             }
383                         }
384                     }
385                 }
386             }
387         }
388         orr.setCode(0);
389         orr.setErrmsg("打开成功!");
390         return orr;
391     }
392
393     @Override
394     @Transactional(rollbackFor=Exception.class)
395     public PageResult<Map<String, Object>> addZCMX(String cardID,String yktywdh, JsonArray dataArr) throws Exception {
396         PageResult<Map<String, Object>> prr=new PageResult<Map<String,Object>>();
397         List<Map<String, Object>> relist=new ArrayList<Map<String,Object>>();
398         if(StringUtils.isEmpty(yktywdh)){
399             prr.setCode(1);
400             prr.setErrmsg("参数:一卡通业务单号为空!");
401             return prr;
402         }
403         //根据卡号判断分单信息
404         //循环批次号 如果没有分单 修改为分单和装车
405         Fd_Bsheet fdb=this.fbper.getbybsNo(StringUtils.isNotBlank(yktywdh)?yktywdh:"");
406         String vehicleId="";
407         if(fdb==null){
408             prr.setCode(1);
409             prr.setErrmsg("一卡通业务单未找到,请确认单号是否正确!");
410             return prr;
411         }else{
412             if(fdb.getStatus()!=Serviceenum.在办){
413                 prr.setCode(2);
414                 prr.setErrmsg("一卡通业务单不是在办状态,系统不做处理!");
415                 return prr;
416             }
417             if(StringUtils.isBlank(cardID)){
418                 prr.setCode(1);
419                 prr.setErrmsg("参数:一卡通卡号为空!");
420                 return prr;
421             }
422             if(dataArr==null){
423                 prr.setCode(1);
424                 prr.setErrmsg("参数:批次号为空!");
425                 return prr;
426             }
427
428             Map<String, Object> mp=this.yktper.getcardinuse(cardID);
429             if(mp==null){
430                 throw new Exception("卡号不正确未找到在用卡!");
431             }
432             vehicleId=mp.get("numberplates")==null?"":mp.get("numberplates").toString();
433             if(!vehicleId.equals(fdb.getVehicleId())){
434                 prr.setCode(1);
435                 prr.setErrmsg("参数:卡号关联的车牌号和业务单关联的车牌号不一致");
436                 return prr;
437             }
438             yktywdh=fdb.getBsNo();
439         }
440
441         int wcnum=this.bsper.getweightDoc(vehicleId, fdb.getBsNo());
442         if(wcnum<=0){
443             prr.setCode(1);
444             prr.setErrmsg("车辆:"+vehicleId+" 未找到过磅单,请先过磅!");
445             return prr;
446         }
447         yktywdh=fdb.getBsNo();
448         //是否郑州厂区
449         boolean iszz=false;
450
451         //检查是否装车完成
452         Map<String, Object> mmr=this.bsper.selectTaskTime(fdb.getBsNo());
453         try {
454             if(mmr!=null&&mmr.get("zcWc")!=null&&Boolean.valueOf(mmr.get("zcWc").toString())) {
455                 prr.setCode(1);
456                 prr.setErrmsg("联系成品库办公室取消装车完成!");
457                 return prr;
458             }
459         } catch (Exception e) {
460             // TODO: handle exception
461         }
462
463
464         //第一次添加装卸记录发送装车信息
465         int sfzc=this.fbper.getbsitembyNo(fdb.getBsNo());
466         if(sfzc<=0) {
467             //发送微信公众号提醒信息
468             String url=Contants.yktLocalAdd+"/routine/sendZcMsg.htm";
469             Map<String, String> mp=new HashMap<String, String>();
470             mp.put("sdepartNo", fdb.getSdepartNo());
471             mp.put("vehicleId", vehicleId);
472             mp.put("businessNo", fdb.getBsNo());
473             Wxhtmethod.postJson(url, mp);
474         }
475         //现场过完毛重后出现扫码装车的,必须重新过磅
476         int grossNum=this.bsper.getgrosstDoc(vehicleId, fdb.getBsNo());
477
478         for (JsonElement je : dataArr) {
479             JsonObject jo=je.getAsJsonObject();
480             String tdmx_pch = jo.get("tdmx_pch").getAsString();
481 //            Fd_XSTDMX tdmx=this.tdmxper.getbyPCH(tdmx_pch);
482             Fd_XSTDMX tdmx=this.tdmxper.getbyPCHONE(tdmx_pch,vehicleId);
483             if(tdmx==null){
484                 prr.setCode(1);
485                 prr.setErrmsg("车辆:"+vehicleId+"没有该明细的分单记录或已关闭,不能添加装车!");
486                 return prr;
487             }
488             // 下面部分注释掉,改为sql语句中判断是否为未关闭
489             /*if(tdmx.getTdmx_gbbz()!=0){
490                 prr.setCode(1);
491                 prr.setErrmsg("明细:"+tdmx.getTdmx_pch()+" 在NC是已关闭状态,不能添加装车!");
492                 return prr;
493             }*/
494
495
496 //            boolean booff=false;
497 //            if(tdmx.getTdmx_zcbz()!=0){
498 //                booff=true;
499 //                throw new Exception("批次号:"+tdmx_pch+" 已经提交装车,不能重复提交装车!");
500 //            }
501             Fd_XSTD xstd=this.tdper.get(tdmx.getTdmx_tdls());
502             if(Contants.nc_ywdy_ZZ.equals(xstd.getTd_cqNo())&&!iszz){
503                 iszz=true;
504             }
505             Vehicle_XSTD vxs=this.vhxper.getVhicleByIDs(vehicleId, xstd.getTd_tdbh());
506             if(vxs==null) {
507                 prr.setCode(1);
508                 prr.setErrmsg("未找到配车关联记录,不能添加装车!");
509                 return prr;
510             }
511             //修改提单的未分单数量和重量
512             //修改提单vehicle_XSTD表
513             Fd_Company fdc=null;
514             //是否分单
515             if(tdmx.getTdmx_fdbz()==0){
516                 fdc=this.cmper.getByCompanyNo(vxs.getCompanyNo());
517                 tdmx.setTdmx_fdbz(1);
518                 tdmx.setTdmx_fdcph(vehicleId);
519                 tdmx.setTdmx_fdywbh(yktywdh);
520                 tdmx.setTdmx_fdwlgsbh(vxs.getCompanyNo());
521                 xstd.setTd_wfdsl(xstd.getTd_wfdsl()-1);
522                 xstd.setTd_wfdzl(xstd.getTd_wfdzl()-tdmx.getTdmx_mz());
523                 this.tdper.updateFD(xstd);
524                 vxs.setFd_num(vxs.getFd_num()+1);
525                 vxs.setFd_weight(vxs.getFd_weight()+tdmx.getTdmx_mz());
526                 this.vhxper.updatewithIDs(vxs);
527             }else {
528                 fdc=this.cmper.getByCompanyNo(tdmx.getTdmx_fdwlgsbh());
529             }
530             tdmx.setTdmx_zcbz(1);
531             tdmx.setTdmx_zccph(vehicleId);
532             tdmx.setTdmx_zcwlgsName(fdc.getName());
533             tdmx.setTdmx_zcdriver(fdb.getDriver());
534             tdmx.setTdmx_zcphone(fdb.getPhone());
535             this.tdmxper.updateZCnoFD(tdmx);
536
537             WaitXSTDMX wx=this.fbper.getWaittdmx(tdmx.getTdmx_tdls(), tdmx.getTdmx_tdfl());
538             this.fbper.delbsitem(tdmx.getTdmx_pch(), fdb.getBsNo());
539             Yktbsitem bsi=new Yktbsitem();
540             bsi.setId(UUID.randomUUID()+"");
541             bsi.setBussinessNo(fdb.getBsNo());
542             bsi.setName(wx.getTdmx_wlmc());
543             bsi.setMaterielNo(tdmx.getTdmx_wlbh());
544             bsi.setNorms(wx.getTdmx_ggxh());
545             bsi.setUnitname("Kg");
546             bsi.setNum(1);
547             bsi.setWeight(BigDecimalfiter.mulcon(tdmx.getTdmx_jz(), 1000, Contants.scale));
548             bsi.setPrice(0);
549             bsi.setPreweight(BigDecimalfiter.mulcon(tdmx.getTdmx_jz(), 1000, Contants.scale));
550             bsi.setPici(tdmx.getTdmx_pch());
551             bsi.setHejin(wx.getTdmx_hjzt());
552             bsi.setGross(BigDecimalfiter.mulcon(tdmx.getTdmx_mz(), 1000, Contants.scale));
553             bsi.setTaotongWeight(0);
554             bsi.setMoney(0);
555             bsi.setCdepart("");
556             bsi.setCdepartid(0);
557             bsi.setCname("");
558             bsi.setCreateid("");
559             bsi.setCtime(new Date());
560             bsi.setLoadbuild(false);
561             bsi.setFachang(false);
562             bsi.setFachang(true);
563             bsi.setFcnum(0);
564             if(StringUtils.isBlank(xstd.getTd_fpbh())){
565                 bsi.setRecompany(wx.getTdmx_shdw());
566             }else{
567                 bsi.setRecompany(
568                         /*xstd.getTd_ywdybh().equals(Contants.nc_ywdy_ZZ)?"郑州报关":
569                             xstd.getTd_ywdybh().equals(Contants.nc_ywdy_MT)?"河南报关":
570                                 xstd.getTd_ywdybh().equals(Contants.nc_ywdy_MS)?"明晟报关":
571                             "科技报关"*/
572                           ConvertTool.covertToCustoms(xstd.getTd_ywdybh())
573                             );
574             }
575             bsi.setReID("");
576             /*bsi.setDecompany(xstd.getTd_ywdybh().equals(Contants.nc_ywdy_ZZ)?"郑州明泰":
577                     xstd.getTd_ywdybh().equals(Contants.nc_ywdy_MS)?"河南明晟新材料":
578                 "眀泰科技");*/
579             bsi.setDecompany(ConvertTool.ncCovertToFactoryName(xstd.getTd_ywdybh()));
580             bsi.setDeID("");
581             bsi.setFrombatch("ERP系统");
582             bsi.setForshowindx(1);
583             bsi.setReserved11(0);
584             bsi.setReserved12(0);
585             bsi.setReserved13(0);
586             bsi.setJsnum(0);
587             this.fbper.insertbsitem(bsi);
588             Map<String, Object> remp=new HashMap<String, Object>();
589             remp.put("tdmx_pch",tdmx.getTdmx_pch());
590             remp.put("td_tdls",tdmx.getTdmx_tdls());
591             remp.put("tdmx_tdfl",tdmx.getTdmx_tdfl());
592             relist.add(remp);
593         }
594
595         if(grossNum>0) {
596             Map<String, Object> xstm=new HashMap<String, Object>();
597             xstm.put("canCm",false);
598             xstm.put("businessNo",fdb.getBsNo());
599             this.bsper.updateCanCm(xstm);
600             this.bsper.updatecanFb(vehicleId, fdb.getBsNo());
601         }
602
603         //如果是郑州的销售业务单删除排队信息
604         if(iszz){
605             int ca=this.bsper.getvehicleQ(vehicleId);
606             if(ca>0){
607 //                this.bsper.delvehicleQ(vehicleId);
608                 //删除车辆排队信息
609                 String url=Contants.yktLocalAdd+"/search/vehicleQueue/delItem.htm";
610                 Map<String, String> mp=new HashMap<String, String>();
611                 mp.put("vehicleID", vehicleId);
612                 Wxhtmethod.postJson(url, mp);
613             }
614         }
615
616         prr.setCode(0);
617         prr.setErrmsg("装车操作成功!");
618         prr.setList(relist);
619         return prr;
620     }
621
622     @Override
623     @Transactional(rollbackFor=Exception.class)
624     public ObjectResult<Boolean> delZCMX(String cardID, String yktywdh,JsonArray dataArr) throws Exception {
625         ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
626         //根据卡号判断分单信息
627         //循环批次号 如果没有分单 修改为分单和装车
628         Fd_Bsheet fdb=this.fbper.getbybsNo(StringUtils.isNotBlank(yktywdh)?yktywdh:"");
629         String vehicleId="";
630         if(fdb==null){
631             orr.setCode(1);
632             orr.setErrmsg("一卡通业务单未找到,请确认单号是否正确!");
633             return orr;
634         }else{
635             if(fdb.getStatus()!=Serviceenum.在办){
636                 orr.setCode(1);
637                 orr.setErrmsg("一卡通业务单不是在办状态,系统不做处理!");
638                 return orr;
639             }
640             if(StringUtils.isBlank(cardID)){
641                 orr.setCode(1);
642                 orr.setErrmsg("参数:一卡通卡号为空!");
643                 return orr;
644             }
645             if(dataArr==null){
646                 orr.setCode(1);
647                 orr.setErrmsg("参数:批次号为空!");
648                 return orr;
649             }
650
651             Map<String, Object> mp=this.yktper.getcardinuse(cardID);
652             if(mp==null){
653                 throw new Exception("卡号不正确未找到在用卡!");
654             }
655             vehicleId=mp.get("numberplates")==null?"":mp.get("numberplates").toString();
656             if(!vehicleId.equals(fdb.getVehicleId())){
657                 orr.setCode(1);
658                 orr.setErrmsg("参数:卡号关联的车牌号和业务单关联的车牌号不一致");
659                 return orr;
660             }
661             yktywdh=fdb.getBsNo();
662         }
663         //检查是否装车完成
664         Map<String, Object> mmr=this.bsper.selectTaskTime(fdb.getBsNo());
665         try {
666             if(mmr!=null&&mmr.get("zcWc")!=null&&Boolean.valueOf(mmr.get("zcWc").toString())) {
667                 orr.setCode(1);
668                 orr.setErrmsg("联系成品库办公室取消装车完成!");
669                 return orr;
670             }
671         } catch (Exception e) {
672             // TODO: handle exception
673         }
674 //        Fd_Bsheet nr=this.fbper.getbyVehicleId(vehicleId, Serviceenum.在办);
675 //        if(nr==null){
676 //            orr.setCode(1);
677 //            orr.setErrmsg("卡号:"+cardID+" 未找到在办销售发货单!");
678 //            return orr;
679 //        }
680
681 //        Fd_Vehicle fdv=this.vhper.getByVehicleId(vehicleId);
682 //        if(fdv==null){
683 //            orr.setCode(1);
684 //            orr.setErrmsg("车牌号:"+cardID+" 未录入车辆信息!");
685 //            return orr;
686 //        }
687         //现场过完毛重后出现扫码装车的,必须重新过磅
688         int grossNum=this.bsper.getgrosstDoc(vehicleId, fdb.getBsNo());
689         if(grossNum>0) {
690             Map<String, Object> xstm=new HashMap<String, Object>();
691             xstm.put("canCm",false);
692             xstm.put("businessNo",fdb.getBsNo());
693             this.bsper.updateCanCm(xstm);
694             this.bsper.updatecanFb(vehicleId, fdb.getBsNo());
695         }
696         for (JsonElement je : dataArr) {
697             JsonObject jo=je.getAsJsonObject();
698             String tdmx_pch=jo.get("tdmx_pch").getAsString();
699 //            Fd_XSTDMX tdmx=this.tdmxper.getbyPCH(tdmx_pch);
700             Fd_XSTDMX tdmx=this.tdmxper.getbyPCHONE(tdmx_pch,vehicleId);
23f938 701             if(tdmx == null) {
A 702                 String errMsg = "一卡通卸车失败,请查看【" + tdmx_pch +"】出库关闭标志!";
703                 throw  new Exception(errMsg);
704             }
58d006 705 //            if(tdmx.getTdmx_zcbz()!=1){
A 706 ////                throw new Exception("批次号:"+tdmx_pch+" 已经提交装车,不能重复提交装车!");
707 //                continue;
708 //            }
709 //            Fd_XSTD xstd=this.tdper.get(tdmx.getTdmx_tdls());
710 //            if(xstd==null){
711 //                continue;
712 //            }
713             //修改Fd_Bsheetitem表  这张表去掉了
714             this.fbper.delbsitem(tdmx.getTdmx_pch(), yktywdh);
715 //            //修改一卡通明细表bsitem
716 //            if(tdmx.getTdmx_zcbz()==0){
717 //                continue;
718 //            }
719             tdmx.setTdmx_zcbz(0);
720             tdmx.setTdmx_zccph(null);
721             tdmx.setTdmx_zcdriver(null);
722             tdmx.setTdmx_zcphone(null);
723             tdmx.setTdmx_zcwlgsName(null);
724             this.tdmxper.updateZCnoFD(tdmx);
725         }
726
727         orr.setCode(0);
728         orr.setErrmsg("取消装车操作成功!");
729         return orr;
730     }
731
732     @Override
733     public ObjectResult<Map<String, Object>> getcInfo(String cardID) {
734         ObjectResult<Map<String, Object>> orr=new ObjectResult<Map<String,Object>>();
735         Map<String, Object> rem=new HashMap<String, Object>();
736         Map<String, Object> mp=this.yktper.getcardinuse(cardID);
737         if(mp==null){
738             orr.setCode(1);
739             orr.setErrmsg("卡号不正确未找到在用卡!");
740             return orr;
741         }
742         String vehicleId=mp.get("numberplates")==null?"":mp.get("numberplates").toString();
743         List<Fd_Bsheet> fd_bList = this.fbper.getListbyVehicleId(vehicleId, Serviceenum.在办);
744         if (fd_bList == null||fd_bList.isEmpty()) {
745             orr.setCode(1);
746             orr.setErrmsg("车辆未找到在办分单!");
747             return orr;
748         }
749         Fd_Bsheet fd_b=null;
750         if(fd_bList.size()>1) {
751             for (Fd_Bsheet fd_Bsheet : fd_bList) {
752                 int wd=this.bsper.getweightDoc(vehicleId, fd_Bsheet.getBsNo());
753                 if(wd>0) {
754                     fd_b=fd_Bsheet;
755                     break;
756                 }
757             }
758             if(fd_b==null) {
759                 orr.setCode(1);
760                 orr.setErrmsg("车辆:"+vehicleId+" 当前业务未找到绑定的过磅单,请先过磅或者重绑磅单!");
761                 return orr;
762             }
763         }else {
764             fd_b=fd_bList.get(0);
765             int wcnum=this.bsper.getweightDoc(vehicleId, fd_b.getBsNo());
766             if(wcnum<=0){
767                 orr.setCode(1);
768                 orr.setErrmsg("车辆:"+vehicleId+" 当前业务未找到绑定的过磅单,请先过磅或者重绑磅单!");
769                 return orr;
770             }
771         }
772         String businessNo = bsper.getBusinessNoByCardNo(cardID);
773         if(StringUtils.isBlank(businessNo)) {
774             orr.setCode(1);
775             orr.setErrmsg("未找到该卡的在办业务单!");
776             return orr;
777         }
778 //        List<Vehicle_XSTD> vxl=this.vhxper.getlistbyVehicleId(vehicleId);
779         List<Vehicle_XSTD> vxl= this.vhxper.getlistbyVehicleIdandbsNoGp(vehicleId, businessNo);
780         List<Map<String, Object>> datamp=new ArrayList<Map<String, Object>>();
781         for (Vehicle_XSTD vx : vxl) {
782             String tdbh=vx.getXstdNo();
783             Fd_XSTD td=this.tdper.getbyTDBH(tdbh);
784             String wlgsbh=vx.getCompanyNo();
785             Fd_Company fd_c=this.cmper.getByCompanyNo(wlgsbh);
786             Map<String, Object> tdm=new HashMap<String, Object>();
787             if(fd_c!=null){
788                 tdm.put("td_wlgs", fd_c.getName());//物流公司
789             }else{
790                 tdm.put("td_wlgs", "");//物流公司
791             }
792             if(td==null){
793                 continue;
794             }
795             // List<Fd_XSTDMX> tdmxl=this.tdmxper.getbytdls(td.getTd_tdls());
796             List<Fd_XSTDMX> tdmxl= tdmxper.getListByTdlsAndCph(td.getTd_tdls(),vehicleId);
797             if(tdmxl==null||tdmxl.size()<=0){
798                 continue;
799             }
800             Map<String, Object> mm=new HashMap<String, Object>();
801             tdm.put("td_tdbh", td.getTd_tdbh());
802             tdm.put("td_tdls", td.getTd_tdls());
803             tdm.put("td_jylx", td.getTd_jylx());
804             mm.put("td", tdm);
805             mm.put("tdmx", tdmxl);
806             datamp.add(mm);
807         }
808         rem.put("cph", vehicleId);
809         rem.put("sjmc", fd_b.getDriver());
810         rem.put("dh", fd_b.getPhone());
811 //        rem.put("sjmc", fdv.getDriver());
812 //        rem.put("dh", fdv.getPhone());
813         rem.put("ywdh", fd_b.getBsNo());
814         rem.put("respcode", 111);
815         rem.put("data", datamp);
816
817         //修改装车记录
818         Map<String, Object> mr=this.bsper.selectTaskTime(fd_b.getBsNo());
819         if(mr!=null) {
820             if(mr.get("firstzxhtime")!=null) {
821                 mr.put("lastzxhtime", new Date());
822             }else {
823                 mr.put("firstzxhtime", new Date());
824             }
825             this.bsper.updateTaskTime(mr);
826         }else {
827             orr.setCode(1);
828             orr.setErrmsg("未找到装车记录");
829             return orr;
830         }
831
832         orr.setCode(0);
833         orr.setItem(rem);
834         return orr;
835     }
836
837     @Override
838     public ObjectResult<Map<String, Object>> getxstdInfo(String xstdNo) {
839         ObjectResult<Map<String, Object>> orr=new ObjectResult<Map<String,Object>>();
840         Fd_XSTD xstd=this.tdper.getbyTDBH(xstdNo);
841         if(xstd==null){
842             orr.setCode(1);
843             orr.setErrmsg("提单未找到!");
844             return orr;
845         }
846         Map<String, Object> rm=new HashMap<String, Object>();
847         List<Fd_XSTDMX> tdmxlist=this.tdmxper.getListbytdls(xstd.getTd_tdls());
848         rm.put("code", 0);
849         rm.put("item", xstd);
850         rm.put("itemList", tdmxlist);
851         orr.setCode(0);
852         orr.setItem(rm);
853         return orr;
854     }
855
856     @Override
857     @Transactional(rollbackFor=Exception.class)
858     public ObjectResult<Boolean> savewdControl(JsonArray dataArr)throws Exception {
859         ObjectResult<Boolean> orr=new ObjectResult<Boolean>();
860         if(dataArr==null){
861             orr.setCode(0);
862             orr.setErrmsg("添加过磅控制成功!");
863             return orr;
864         }
865         for (JsonElement je : dataArr) {
866             JsonObject jo=je.getAsJsonObject();
867             String bsNo=jo.get("yktywdh").getAsString();
868             BsheetEcgb be=this.beper.getbyNo(bsNo);
869             if(be==null){
870                 be=new BsheetEcgb();
871                 be.setBsNo(bsNo);
872                 be.setCtime(new Date());
873                 be.setCname("生产系统添加");
874                 be.setSate(1);
875                 this.beper.insert(be);
876             }
877         }
878         orr.setCode(0);
879         orr.setErrmsg("添加过磅控制成功!");
880         return orr;
881     }
882
883
884
885
886 }