package com.mandi.fendan.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.UUID;
|
|
import javax.annotation.Resource;
|
|
import com.mandi.basicconfig.mapper.NczsjMapper;
|
import com.mandi.basicconfig.persist.Nckh;
|
import com.mandi.fendan.mapper.*;
|
import com.mandi.fendan.util.ConvertTool;
|
import com.mandi.servlet.file.impl.FileLoadImpl;
|
import com.mandi.springmvc.logs.OpLogs;
|
import com.mandi.system.persist.ModuleEnum;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.log4j.Logger;
|
import org.apache.poi.ss.usermodel.charts.ScatterChartSeries;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.google.gson.JsonArray;
|
import com.google.gson.JsonElement;
|
import com.google.gson.JsonObject;
|
import com.google.gson.JsonParser;
|
import com.mandi.basicconfig.penum.PrefixEnum;
|
import com.mandi.common.BigDecimalfiter;
|
import com.mandi.common.JSONobj;
|
import com.mandi.common.Jacksonmethod;
|
import com.mandi.common.Wxhtmethod;
|
import com.mandi.common.ParamFileter.Fileoperation;
|
import com.mandi.dao.common.ObjectResult;
|
import com.mandi.fendan.persist.Fd_Bsheet;
|
import com.mandi.fendan.persist.Fd_Company;
|
import com.mandi.fendan.persist.Fd_Company_Vehicle;
|
import com.mandi.fendan.persist.Fd_Vehicle;
|
import com.mandi.fendan.persist.Fd_XSTD;
|
import com.mandi.fendan.persist.Fd_XSTDMX;
|
import com.mandi.fendan.persist.Fd_wlgs_fhdq;
|
import com.mandi.fendan.persist.VehicleStatus;
|
import com.mandi.fendan.persist.VehicleType;
|
import com.mandi.fendan.persist.Vehicle_XSTD;
|
import com.mandi.fendan.service.Ifd_bsheetService;
|
import com.mandi.fendan.util.Contants;
|
import com.mandi.fendan.util.FdtoNc;
|
import com.mandi.fendan.util.persist.Serviceenum;
|
import com.mandi.fendan.util.persist.WaitXSTD;
|
import com.mandi.fendan.util.persist.YktBsheet;
|
import com.mandi.system.persist.Login;
|
import com.mandi.system.persist.UserType;
|
|
import static com.mandi.fendan.util.Contants.*;
|
|
@Service
|
public class Fd_BsheetService implements Ifd_bsheetService {
|
private Logger log= Logger.getLogger(Fd_BsheetService.class);
|
|
@Resource
|
private Fd_BsheetMapper bsper;
|
@Resource
|
private Fd_VehicleMapper fdvper;
|
@Resource
|
private Fd_BsheetitemMapper bsiper;
|
@Resource
|
private VehicleXSTDMapper vhxper;
|
@Resource
|
private Fd_CompanyMapper fdcper;
|
@Resource
|
private Fd_ComVehicleMapper cvper;
|
@Resource
|
private Fd_XSTDMXMapper mxper;
|
@Resource
|
private Fd_XSTDMapper tdper;
|
@Resource
|
private Fd_fhdqMapper dqper;
|
@Resource
|
private FdtoNc fdtonc;
|
@Resource
|
private Fd_YKTMapper yktmper;
|
@Resource
|
private FdMxWlgsMapper fdMxWlgsMapper;
|
|
@Resource
|
private NczsjMapper zsjper;
|
|
@Override
|
@Transactional(rollbackFor=Exception.class)
|
public ObjectResult<Map<String, Object>> saveFd_Bsheet(String vehicleInfo,String xstdNo, String bsitemlistStr, Login lg) throws Exception {
|
ObjectResult<Map<String, Object>> orr=new ObjectResult<Map<String,Object>>();
|
if(StringUtils.isEmpty(bsitemlistStr)){
|
orr.setCode(1);
|
orr.setErrmsg("业务参数为空,不能保存!");
|
return orr;
|
}
|
if(lg==null){
|
orr.setCode(1);
|
orr.setErrmsg("请登录账号!");
|
return orr;
|
}
|
if(StringUtils.isBlank(xstdNo)){
|
orr.setCode(1);
|
orr.setErrmsg("提单编号为空!");
|
return orr;
|
}
|
if(UserType.admin.toString().equals(lg.getWorkerno())){
|
orr.setCode(1);
|
orr.setErrmsg("管理员账号没有分单权限!");
|
return orr;
|
}
|
Fd_Company fdc=fdcper.getByCompanyNo(lg.getDepartno());
|
if(fdc==null){
|
orr.setCode(1);
|
orr.setErrmsg("账号没有配置物流公司,请联系管理员进行配置!");
|
return orr;
|
}
|
|
Fd_XSTD xstd=this.tdper.getbyttdbh(xstdNo);
|
if(xstd==null){
|
orr.setCode(1);
|
orr.setErrmsg("提单编号:"+xstdNo+" 不正确,未查询到该提单!");
|
return orr;
|
}
|
if(xstd.isTd_zcwcbz()){
|
orr.setCode(1);
|
orr.setErrmsg("该提单已经完成装车,不能分单!");
|
return orr;
|
}
|
if(xstd.getTd_wfdsl()<=0){
|
orr.setCode(1);
|
orr.setErrmsg("该提单已经分单完成,不能分单!");
|
return orr;
|
}
|
//送货
|
if(xstd.getTd_ztbz()==2){
|
if(fdc!=null){
|
if(!fdc.isHasSPR()){
|
orr.setCode(1);
|
orr.setErrmsg("该账号没有自提权限!");
|
return orr;
|
}
|
}
|
}else{
|
Fd_wlgs_fhdq wldq = this.dqper.getbyNos(lg.getDepartno(),xstd.getTd_shddbh(), ConvertTool.ncGetDefault(xstd.getTd_ywdybh()));
|
int total = fdMxWlgsMapper.selectCountByTdTdls(xstd.getTd_tdls());
|
if(wldq==null && total == 0){
|
orr.setCode(1);
|
orr.setErrmsg("该账号没有配置该地区的分单权限!");
|
return orr;
|
}
|
}
|
String Rcompany="";
|
Map<String, Object> mm=this.dqper.getKH(xstd.getTd_khbh());
|
if(StringUtils.isBlank(xstd.getTd_fpbh())){
|
if(mm!=null)
|
Rcompany=mm.get("name")==null?"":mm.get("name").toString();
|
// 判断是否存在客户
|
if(mm == null || mm.size() == 0) { // 客户必须存在,否则无法分单
|
orr.setCode(1);
|
orr.setErrmsg("该提单客户不存在,请检查数据!");
|
return orr;
|
}
|
}else{
|
Rcompany = ConvertTool.covertToCustoms(xstd.getTd_ywdybh());
|
}
|
|
List<Fd_XSTD> tdl= new ArrayList<Fd_XSTD>();
|
Map<String, List<Fd_XSTDMX>> mxMp=new HashMap<String, List<Fd_XSTDMX>>();
|
List<Fd_XSTDMX> mxl=new ArrayList<Fd_XSTDMX>();
|
//是否保存一卡通业务单表头信息
|
boolean saveBT=false;
|
String bsDE = ConvertTool.ncCovertToYkt(xstd.getTd_cqNo());
|
String bbsNo="";
|
String ziti="";//是否自提
|
// 系统部门未找到
|
if (StringUtils.isBlank(bsDE)) {
|
orr.setCode(1);
|
orr.setErrmsg("提单未找到系统部门字段,请重新操作!");
|
return orr;
|
}
|
try {
|
JsonParser jp=new JsonParser();
|
JsonObject vjo=jp.parse(vehicleInfo).getAsJsonObject();
|
Fd_Vehicle fdv=new Fd_Vehicle();
|
fdv=JSONobj.getobj(vjo, fdv);
|
String driver=JSONobj.getstring(vjo, "driver");
|
String phone=JSONobj.getstring(vjo, "phone");
|
String vehicleId=JSONobj.getstring(vjo, "vehicleId").toUpperCase();
|
// String IDNum=JSONobj.getstring(vjo, "IDNum");
|
fdv.setVehicleId(vehicleId);
|
if(StringUtils.isEmpty(fdv.getVehicleId())||StringUtils.isEmpty(fdv.getDriver())||StringUtils.isEmpty(fdv.getIDNum())||StringUtils.isEmpty(fdv.getPhone())){
|
orr.setCode(1);
|
orr.setErrmsg("车辆必填项不能为空!");
|
return orr;
|
}
|
Fd_Vehicle fdv1=this.fdvper.getByVehicleId(fdv.getVehicleId());
|
if(fdv1==null){
|
fdv.setCompanyNo(lg.getDepartno());
|
fdv.setId(UUID.randomUUID()+"");
|
fdv.setNote("");
|
fdv.setState(true);
|
fdv.setStatus(VehicleStatus.已配车);
|
fdv.setType(VehicleType.临时车);
|
fdvper.insert(fdv);
|
}else{
|
if(fdv1.getType()==VehicleType.临时车){
|
fdv.setDriver(fdv.getDriver());
|
fdv.setPhone(fdv.getPhone());
|
fdv.setIDNum(fdv.getIDNum());
|
fdvper.update(fdv1);
|
}
|
}
|
|
// xstd.getTd_ywdybh().equals(Contants.zzywdyNo)?Contants.zzSdepartNo:Contants.kjSdepartNo
|
Fd_Bsheet fb=this.bsper.getbyVehicleId(fdv.getVehicleId(), Serviceenum.在办,bsDE);
|
if(fb==null){
|
JsonObject pfob=Wxhtmethod.postJsonStr(Contants.YKTgetPrefix_url,PrefixEnum.productsale.toString());
|
ObjectResult<String> pfor=new ObjectResult<String>();
|
String bsNo=JSONobj.getstring(pfob, "item");
|
int code=JSONobj.getint(pfob, "code");
|
String errmsg=JSONobj.getstring(pfob, "errmsg");
|
pfor.setCode(code);
|
pfor.setErrmsg(errmsg);
|
pfor.setItem(bsNo);
|
if(pfor==null||pfor.getCode()!=0){
|
throw new Exception(pfor.getErrmsg());
|
}
|
fb=new Fd_Bsheet();
|
fb.setBsNo(pfor.getItem());
|
fb.setCompanyName(lg.getDepartname());
|
fb.setCompanyNo(lg.getDepartno());
|
fb.setCreateid(lg.getUserid());
|
fb.setCreateName(lg.getWorkername());
|
fb.setCtime(new Date());
|
fb.setDriver(driver);
|
fb.setFdsheetNo(pfor.getItem());
|
fb.setId(UUID.randomUUID()+"");
|
fb.setPhone(phone);
|
fb.setSendmsg(false);
|
fb.setStatus(Serviceenum.在办);
|
fb.setVehicleId(fdv.getVehicleId());
|
fb.setSdepartNo(bsDE);
|
fb.setUpdateTime(new Date());
|
this.bsper.insert(fb);
|
saveBT=true;
|
}else{
|
fb.setDriver(driver);
|
fb.setPhone(phone);
|
fb.setUpdateTime(new Date());
|
this.bsper.update(fb);
|
}
|
Fd_Company_Vehicle fdcv=cvper.getbyIDs(fdv.getVehicleId(), lg.getDepartno(),bsDE);
|
if(fdcv==null){
|
fdcv=new Fd_Company_Vehicle();
|
fdcv.setCompanyNo(lg.getDepartno());
|
fdcv.setVehicleId(fdv.getVehicleId());
|
fdcv.setSdepartNo(bsDE);
|
cvper.insertIDs(fdcv);
|
}
|
// if(StringUtils.isBlank(fb.getSdepartNo())){
|
// if(xstd.getTd_ywdybh().equals(Contants.zzywdyNo)){
|
// this.bsper.updatesdepartNo(fb.getId(), Contants.zzSdepartNo);
|
// fb.setSdepartNo(Contants.zzSdepartNo);
|
// Fd_Company_Vehicle fdcv=cvper.getbyIDs(fdv.getVehicleId(), lg.getDepartno(),Contants.zzSdepartNo);
|
// if(fdcv==null){
|
// fdcv=new Fd_Company_Vehicle();
|
// fdcv.setCompanyNo(lg.getDepartno());
|
// fdcv.setVehicleId(fdv.getVehicleId());
|
// fdcv.setSdepartNo(Contants.zzSdepartNo);
|
// cvper.insertIDs(fdcv);
|
// }
|
// }else{
|
// this.bsper.updatesdepartNo(fb.getId(), Contants.kjSdepartNo);
|
// fb.setSdepartNo(Contants.kjSdepartNo);
|
// Fd_Company_Vehicle fdcv=cvper.getbyIDs(fdv.getVehicleId(), lg.getDepartno(),Contants.kjSdepartNo);
|
// if(fdcv==null){
|
// fdcv=new Fd_Company_Vehicle();
|
// fdcv.setCompanyNo(lg.getDepartno());
|
// fdcv.setVehicleId(fdv.getVehicleId());
|
// fdcv.setSdepartNo(Contants.kjSdepartNo);
|
// cvper.insertIDs(fdcv);
|
// }
|
// }
|
// }
|
if(StringUtils.isBlank(ziti)){
|
ziti=xstd.getTd_ztbz()==2?"自提":"非自提";
|
}
|
// if(StringUtils.isBlank(fb.getSdepartNo())){
|
// throw new Exception("生成的分单业务单:"+fb.getFdsheetNo()+"厂区未找到!");
|
// }
|
//郑州
|
// if(fb.getSdepartNo().equals(Contants.zzSdepartNo)){
|
// if(!xstd.getTd_ywdybh().equals(Contants.zzywdyNo)){
|
//// throw new Exception("车辆生成的是郑州厂区一卡通业务单,科技提单:"+xstd.getTd_tdbh()+"不能配车!");
|
// if(saveBT){
|
// throw new Exception("科技厂区提单和郑州厂区提单不能同时使用同一辆车!");
|
// }else{
|
// throw new Exception(fb.getVehicleId()+" 有郑州厂区一卡通销售业务单,科技提单:"+xstd.getTd_tdbh()+"不能使用该车!");
|
// }
|
// }
|
// }else{
|
// if(xstd.getTd_ywdybh().equals(Contants.zzywdyNo)){
|
//// throw new Exception("车辆生成的是科技厂区一卡通业务单,郑州提单:"+xstd.getTd_tdbh()+"不能配车!");
|
// if(saveBT){
|
// throw new Exception("科技厂区提单和郑州厂区提单不能同时使用同一辆车!");
|
// }else{
|
// throw new Exception(fb.getVehicleId()+" 有科技厂区一卡通销售业务单,郑州提单:"+xstd.getTd_tdbh()+"不能使用该车!");
|
// }
|
// }
|
// }
|
|
JsonArray ja=jp.parse(bsitemlistStr).getAsJsonArray();
|
//分单数量和毛重
|
int fdsl=0;
|
double fdmz=0;
|
for (JsonElement je: ja) {
|
JsonObject itemJo=je.getAsJsonObject();
|
//主键
|
String tdmx_tdfl=JSONobj.getstring(itemJo, "tdfl");
|
Fd_XSTDMX tdmx=this.mxper.get(tdmx_tdfl);
|
//未找到的过滤掉 已分单的过滤掉 已装车的不处理
|
if(tdmx==null||tdmx.getTdmx_fdbz()!=0||tdmx.getTdmx_zcbz()!=0){
|
continue;
|
}
|
//关闭标志不为0不做处理
|
if(tdmx.getTdmx_gbbz()!=0){
|
continue;
|
}
|
fdsl++;
|
fdmz=BigDecimalfiter.addscal(fdmz, tdmx.getTdmx_mz(), Contants.scale);
|
|
tdmx.setTdmx_fdbz(1);
|
tdmx.setTdmx_fdcph(fdv.getVehicleId());
|
tdmx.setTdmx_fdywbh(fb.getBsNo());
|
tdmx.setTdmx_fdwlgsbh(lg.getDepartno());
|
this.mxper.updateFD(tdmx);
|
mxl.add(tdmx);
|
|
}
|
Vehicle_XSTD vhxstd=this.vhxper.getbyIDs(fdv.getVehicleId(), xstdNo,lg.getDepartno());
|
if(vhxstd==null){
|
vhxstd=new Vehicle_XSTD();
|
vhxstd.setBsNo(fb.getBsNo());
|
vhxstd.setCompanyNo(lg.getDepartno());
|
vhxstd.setFd_num(fdsl);
|
vhxstd.setFd_weight(fdmz);
|
vhxstd.setVehicleId(fdv.getVehicleId());
|
vhxstd.setXstdNo(xstdNo);
|
this.vhxper.insert(vhxstd);
|
}else{
|
vhxstd.setBsNo(fb.getBsNo());
|
vhxstd.setCompanyNo(lg.getDepartno());
|
vhxstd.setFd_num(vhxstd.getFd_num()+fdsl);
|
vhxstd.setFd_weight(BigDecimalfiter.add(vhxstd.getFd_weight(),fdmz));
|
vhxstd.setVehicleId(fdv.getVehicleId());
|
vhxstd.setXstdNo(xstdNo);
|
this.vhxper.updatewithIDs(vhxstd);
|
}
|
xstd.setTd_wfdsl(xstd.getTd_wfdsl()-fdsl);
|
xstd.setTd_wfdzl(BigDecimalfiter.subscal(xstd.getTd_wfdzl(), fdmz, Contants.scale));
|
this.tdper.updateFD(xstd);
|
if(saveBT){
|
YktBsheet bs=new YktBsheet();
|
// if(iskj==1){
|
// bs.setSdepartNo(Contants.kjSdepartNo);
|
// bs.setDcompany("明泰科技");
|
// }else{
|
// bs.setSdepartNo(Contants.zzSdepartNo);
|
// bs.setDcompany("郑州眀泰");
|
// }
|
bs.setSdepartNo(fb.getSdepartNo());
|
/*bs.setDcompany(fb.getSdepartNo().equals(Contants.kjSdepartNo)?"明泰科技":
|
fb.getSdepartNo().equals(Contants.msSdepartNo)?"河南明晟新材料":
|
"郑州眀泰"
|
);*/
|
bs.setDcompany(ConvertTool.covertToFactoryName(fb.getSdepartNo()));
|
bs.setDriver(fdv.getDriver());
|
bs.setNumberplates(StringUtils.upperCase(fdv.getVehicleId()));
|
bs.setPhone(fdv.getPhone());
|
bs.setRcompany(Rcompany);
|
bs.setBussinessNo(fb.getBsNo());
|
bs.setNote(ziti+";"+lg.getDepartname()+":"+lg.getWorkername()+"; 分单系统自动生成");
|
String bsStr=Jacksonmethod.tojson(bs, false);
|
bsDE=bs.getSdepartNo();
|
bbsNo=bs.getBussinessNo();
|
JsonObject joADDYWD=Wxhtmethod.postJsonStr(Contants.YKTaddYwd_url,bsStr);
|
ObjectResult<String> ors=new ObjectResult<String>();
|
String bsNo=JSONobj.getstring(joADDYWD, "item");
|
int code=JSONobj.getint(joADDYWD, "code");
|
String errmsg=JSONobj.getstring(joADDYWD, "errmsg");
|
ors.setItem(bsNo);
|
ors.setCode(code);
|
ors.setErrmsg(errmsg);
|
if(ors.getCode()!=0){
|
throw new Exception(ors.getErrmsg());
|
}
|
this.bsper.updateShdw(fb.getId(), StringUtils.isBlank(Rcompany)?"未知发货单位":Rcompany);
|
}else {
|
List<WaitXSTD> l=this.bsper.getAllKH(fb.getBsNo(), fb.getId());
|
if(l!=null) {
|
boolean iscz=false;//收货单位在明细中是否存在
|
WaitXSTD wt=null;
|
for (WaitXSTD waitXSTD : l) {
|
if(fb.getShdw().equals(waitXSTD.getTd_khmc())) {
|
iscz=true;
|
break;
|
}else {
|
if(wt==null&&StringUtils.isNotBlank(waitXSTD.getTd_khmc())) {
|
wt=waitXSTD;
|
}
|
}
|
}
|
if(!iscz&&wt!=null) {
|
fb.setShdw(wt.getTd_khmc());
|
this.yktmper.updateshcompany(fb.getBsNo(), wt.getTd_khmc(),wt.getTd_shdd());
|
}
|
}
|
|
}
|
tdl.add(xstd);
|
mxMp.put(xstdNo, mxl);
|
//分单推送NC系统
|
if(tdl!=null&&tdl.size()>0){
|
String fdhx=this.fdtonc.getNcdata(tdl, mxMp);
|
Fileoperation.AppendContentToFile(Fileoperation.gettestFileName(), "明细配车 请求参数 ::"+fdhx);
|
//todo 先注释掉NC部分,接口不通
|
JsonObject joADDYWD=Wxhtmethod.postJsonStr(Contants.NCfdhx_url,fdhx);
|
Fileoperation.AppendContentToFile(Fileoperation.gettestFileName(), "明细配车 url返回值 ::"+joADDYWD);
|
if(joADDYWD==null||JSONobj.getint(joADDYWD, "code")!=0){
|
throw new Exception(StringUtils.isEmpty(joADDYWD.get("msg").getAsString())?"分单回写NC系统出错!":joADDYWD.get("msg").getAsString());
|
}else{
|
String restult=joADDYWD.get("result").getAsString();
|
JsonObject jr=jp.parse(restult).getAsJsonObject();
|
if(jr==null||JSONobj.getint(jr, "respcode")!=111){
|
throw new Exception(jr.get("respmsg").getAsString());
|
}
|
}
|
}
|
}catch(Exception e){
|
e.printStackTrace();
|
if(saveBT){
|
JsonObject jo=new JsonObject();
|
jo.addProperty("bussinessNo", bbsNo);
|
jo.addProperty("sdepartNo",bsDE);
|
Wxhtmethod.postJsonStr(Contants.YKTdelYwd_url,jo.toString());
|
}
|
throw new Exception(StringUtils.isEmpty(e.getMessage())?"提单明细分单出错!":e.getMessage());
|
}
|
|
orr.setCode(0);
|
Map map = new HashMap<>();
|
// 返回业务单号,给前端使用
|
map.put("businessNo",bbsNo);
|
orr.setItem(map);
|
return orr;
|
}
|
|
@Override
|
@Transactional(rollbackFor=Exception.class)
|
public ObjectResult<String> sendMsg(Login lg, String bussinessNo)throws Exception {
|
ObjectResult<String> orr=new ObjectResult<String>();
|
if(lg==null){
|
orr.setCode(1);
|
orr.setErrmsg("请登录账号!");
|
return orr;
|
}
|
if(UserType.admin.toString().equals(lg.getWorkerno())){
|
orr.setCode(1);
|
orr.setErrmsg("管理员账号没有分单权限!");
|
return orr;
|
}
|
if(StringUtils.isEmpty(bussinessNo)){
|
orr.setCode(1);
|
orr.setErrmsg("业务单参数为空!");
|
return orr;
|
}
|
Fd_Bsheet fdb=bsper.getbybsNo(bussinessNo);
|
if(fdb==null){
|
orr.setCode(1);
|
orr.setErrmsg("业务单未找到!");
|
return orr;
|
}
|
if(fdb.getStatus()!=Serviceenum.在办){
|
orr.setCode(1);
|
orr.setErrmsg("业务单不是在办状态!");
|
return orr;
|
}
|
JsonObject jos=new JsonObject();
|
jos.addProperty("bussinessNo", bussinessNo);
|
JsonObject jo=Wxhtmethod.postJsonStr(Contants.YKTsendMsg_url,jos.toString());
|
if(jo==null||jo.get("code").getAsInt()!=0){
|
throw new Exception(jo.get("errmsg").getAsString());
|
}
|
fdb.setSendmsg(true);
|
fdb.setInvitecode(jo.get("item").getAsString());
|
bsper.updateInvitaCode(fdb);
|
|
orr.setCode(0);
|
return orr;
|
}
|
|
}
|