作者 xudada

卡口提杆儿逻辑

... ... @@ -14,10 +14,10 @@ spring.mvc.view.suffix=/WEB-INF/jsp/
#\u6620\u5C04\u540E\u7F00
spring.mvc.view.prefix=.jsp
#\u8BBE\u7F6E\u672C\u5730\u6570\u636E\u6E90
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.username=110
spring.datasource.password=QAHqCJf2kFYCLirM
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/station?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.url=jdbc:mysql://118.31.66.166:3306/station?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai
#\u8BBE\u7F6E\u7EBF\u4E0A\u6570\u636E\u6E90
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/station?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai
... ...
... ... @@ -17,6 +17,7 @@ STYP=CARM
#\u8F7D\u91CD\u4E0E\u79F0\u91CD\u7684\u53EF\u63A7\u8303\u56F4 ?%
grossWt=5%
station=4600329012
#\u4E8C\u7EF4\u7801\u5B58\u653E\u8DEF\u5F84\uFF0C\u9879\u76EE\u542F\u52A8\u65F6\u8BBE\u7F6E\uFF0C\u540E\u671F\u4E0D\u80FD\u66F4\u6539\u3002
#barCode = barcode/
... ...
Manifest-Version: 1.0
Class-Path: spring-boot-autoconfigure-2.1.0.RELEASE.jar geronimo-stax-
api_1.0_spec-1.0.1.jar spring-boot-starter-json-2.1.0.RELEASE.jar Xml
Schema-1.4.7.jar snakeyaml-1.23.jar log4j-to-slf4j-2.11.1.jar stax-ap
i-1.0.1.jar com.ibm.mq.defaultconfig.jar javax.annotation-api-1.3.2.j
ar ProcessService.jar jul-to-slf4j-1.7.25.jar druid-1.1.9.jar pagehel
per-spring-boot-autoconfigure-1.2.3.jar spring-boot-starter-web-2.1.0
.RELEASE.jar logback-core-1.2.3.jar wsdl4j-1.6.2.jar com.ibm.mq.fta.j
ar jackson-annotations-2.9.0.jar druid-spring-boot-starter-1.1.9.jar
commons-lang-2.4.jar jboss-logging-3.3.2.Final.jar xml-apis-1.4.01.ja
r com.ibm.mq.jms.Nojndi.jar jackson-databind-2.9.7.jar spring-boot-2.
1.0.RELEASE.jar hibernate-validator-6.0.13.Final.jar mybatis-spring-b
oot-starter-1.3.2.jar mybatis-spring-boot-autoconfigure-1.3.2.jar mys
ql-connector-java-8.0.13.jar UploadService.jar com.ibm.mq.jmqi.jar co
m.ibm.mqjms.jar fastjson-1.2.47.jar spring-jcl-5.1.2.RELEASE.jar xmls
ec-1.4.4.jar jackson-datatype-jdk8-2.9.7.jar apiConfig.jar sigar.jar
com.ibm.mq.axis2.jar spring-aop-5.1.2.RELEASE.jar spring-webmvc-5.1.2
.RELEASE.jar log4j-1.2.17.jar CL3Export.jar mybatis-spring-1.3.2.jar
geronimo-javamail_1.4_spec-1.2.jar mybatis-3.4.6.jar log4j-api-2.11.1
.jar commons-codec-1.11.jar spring-tx-5.1.2.RELEASE.jar com.ibm.mq.so
ap.jar com.ibm.mqetclient.jar jackson-core-2.9.7.jar com.ibm.mq.postc
ard.jar spring-core-5.1.2.RELEASE.jar xmlpull-1.1.3.1.jar xpp3_min-1.
1.4c.jar geronimo-activation_1.1_spec-1.0.1.jar HikariCP-3.2.0.jar sp
ring-boot-starter-2.1.0.RELEASE.jar xmlbeans-2.4.0.jar cxf-2.3.2.jar
spring-boot-starter-logging-2.1.0.RELEASE.jar logback-classic-1.2.3.j
ar jsqlparser-1.0.jar axiom-api-1.2.7.jar com.ibm.mq.pcf.jar jackson-
module-parameter-names-2.9.7.jar cxf-xjc-bug671-2.3.2.jar validation-
api-2.0.1.Final.jar IMFClient.1.0.0.jar httpcore-4.4.10.jar Heartbeat
Service.jar slf4j-api-1.7.25.jar axiom-impl-1.2.7.jar xstream-1.4.10.
jar commons-logging-1.1.1.jar neethi-2.0.4.jar pagehelper-spring-boot
-starter-1.2.3.jar com.ibm.mq.headers.jar com.ibm.mq.jar core-3.3.0.j
ar spring-jdbc-5.1.2.RELEASE.jar httpclient-4.5.5.jar mybatis-generat
or-core-1.3.6.jar spring-beans-5.1.2.RELEASE.jar CL3Nonexport.jar dom
4j-2.1.0.jar jaxen-1.1.6.jar imfmsg.jar com.ibm.mq.tools.ras.jar clas
smate-1.4.0.jar wstx-asl-3.2.4.jar returnXml.jar cxf-xjc-boolean-3.2.
3.jar spring-expression-5.1.2.RELEASE.jar cxf-xjc-dv-2.3.2.jar pagehe
lper-5.1.2.jar cxf-manifest.jar com.ibm.mq.commonservices.jar cxf-xjc
-ts-2.3.2.jar spring-context-5.1.2.RELEASE.jar jackson-datatype-jsr31
0-2.9.7.jar spring-web-5.1.2.RELEASE.jar spring-boot-starter-jdbc-2.1
.0.RELEASE.jar commons-io-2.5.jar connector.jar
Main-Class: com.sy.AnalysisImfApplication
package com.sy;
import com.sy.bwAnalysis.AnalysisRoute;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
... ... @@ -15,5 +16,49 @@ public class AnalysisImfApplication {
public static void main(String[] args) {
SpringApplication.run(AnalysisImfApplication.class, args);
/*String message="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<MSG><META><SNDR>KAO</SNDR><RCVR></RCVR><SEQN>20200924082928</SEQN><DDTM>20200924082928</DDTM><TYPE>KAKO</TYPE><STYP>CARM</STYP></META><GATHER_INFO AREA_ID=\"\t\t4600329012\" CHNL_NO=\"\t\t4600010005\" I_E_TYPE=\"E\" SEQ_NO=\"20200924082701000001\">\n" +
" <IC>\n" +
" <DR_IC_NO/>\n" +
" <IC_DR_CUSTOMS_NO/>\n" +
" <IC_CO_CUSTOMS_NO/>\n" +
" <IC_BILL_NO/>\n" +
" <IC_FORM_TYPE/>\n" +
" <IC_GROSS_WT/>\n" +
" <IC_VE_CUSTOMS_NO/>\n" +
" <IC_VE_NAME/>\n" +
" <IC_CONTA_ID/>\n" +
" <IC_ESEAL_ID/>\n" +
" <IC_REG_DATETIME/>\n" +
" <IC_PER_DAY_DUE/>\n" +
" </IC>\n" +
" <WEIGHT>\n" +
" <GROSS_WT>1120.00</GROSS_WT>\n" +
" </WEIGHT>\n" +
" <CAR>\n" +
" <VE_NAME>苏H630D5\t</VE_NAME>\n" +
" <CAR_EC_NO/>\n" +
" <CAR_EC_NO2/>\n" +
" <VE_CUSTOMS_NO/>\n" +
" <VE_WT/>\n" +
" </CAR>\n" +
" <CONTA>\n" +
" <CONTA_NUM/>\n" +
" <CONTA_RECO>1</CONTA_RECO>\n" +
" <CONTA_ID_F/>\n" +
" <CONTA_ID_B/>\n" +
" <CONTA_MODEL_F/>\n" +
" <CONTA_MODEL_B/>\n" +
" </CONTA>\n" +
" <ORDER_NUM/>\n" +
" <BAR_CODE>20201029163743299076</BAR_CODE>\n" +
" <SEAL>\n" +
" <ESEAL_ID/>\n" +
" <SEAL_KEY/>\n" +
" </SEAL>\n" +
"</GATHER_INFO></MSG>";
AnalysisRoute.analysis(message);*/
}
}
... ...
... ... @@ -40,13 +40,13 @@ public class IMF_Tesk {
/**
* 往IMF发送报文
*/
// if(!KAKO_Sender.isrunning){
// KAKO_Sender kako_sender = new KAKO_Sender(client);
// kako_sender.start();
// logger.info("<<<<<<<<<KAKO发送线程已开启>>>>>>>>>>>>");
// }else {
// logger.info("<<<<<<<<<KAKO发送线程已开启-不再启动线程>>>>>>>>>>>>");
// }
if(!KAKO_Sender.isrunning){
KAKO_Sender kako_sender = new KAKO_Sender(client);
kako_sender.start();
logger.info("<<<<<<<<<KAKO发送线程已开启>>>>>>>>>>>>");
}else {
logger.info("<<<<<<<<<KAKO发送线程已开启-不再启动线程>>>>>>>>>>>>");
}
}
if (!LOGIN_OK){
... ...
... ... @@ -20,6 +20,7 @@ public class KAKO_Reader extends Thread{
while(true) {
if (IMF_Tesk.LOGIN_OK) synchronized (this) {
String message = this.client.getMSG();
if (message != null) {
// logger.info(message);
AnalysisRoute.analysis(message);
... ...
... ... @@ -44,8 +44,8 @@ public class KAKO_Sender extends Thread{
List<File> files = FileTool.readDirectoryFiles(new File(sendDir));
for (File file:files) {
String fileContent = FileTool.readfile(file);
String sendMsg = MakeImfMeta.makeImfDocument(SNDR,RCVR,TYPE,STYP,new DateTimeConverter().dateFormat(),new DateTimeConverter().dateFormat(),fileContent);
String returnMsg = this.client.sendMSG(sendMsg);
// String sendMsg = MakeImfMeta.makeImfDocument(SNDR,RCVR,TYPE,STYP,new DateTimeConverter().dateFormat(),new DateTimeConverter().dateFormat(),fileContent);
String returnMsg = this.client.sendMSG(fileContent);
//发送成功处理,删除已发送成功的目录下的文件
if(returnMsg.indexOf("<CODE>9</CODE>")>=0){
FileUtils.forceDelete(file);
... ...
package com.sy.bwAnalysis;
import com.sy.bwAssist.Message;
import com.sy.logic.LiftBar;
import com.sy.logic.LogicOperation;
import com.sy.model.*;
import com.sy.service.*;
... ... @@ -81,9 +82,11 @@ public class AnalysisRoute {
commandInfo info = commandInfoAnalysis.toJavaBean(message);
route.commandService.save(info);
}else{
//处理车辆过磅数据,结合申请数据,判定是否抬杆
GatherInfo info = gatherInfoAnalysis.toJavaBean(message);
if(info.getBarcode().length()>0){
if(LogicOperation.operation(info)){
//LogicOperation.operation(info)
if(LiftBar.liftBar(info)){
String type = null;
if("I".equals(info.getIetype())){
type="进入";
... ... @@ -101,6 +104,7 @@ public class AnalysisRoute {
LogicOperation.sendData("HK06",info.getVename(),false);
}
}
//todo:这里场站看下
}
route.infoService.save(info);
}
... ...
package com.sy.logic;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.sy.crossDomain.buildBarCode;
import com.sy.model.*;
import com.sy.relation.VeManifestRelation;
import com.sy.service.EnterCancelServer;
import com.sy.service.LandBusListService;
import com.sy.service.LandRoadVeService;
import com.sy.service.ResMessageService;
import com.sy.socket.CommandClient;
import com.sy.utils.FileTool;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.apache.log4j.Logger;
import javax.annotation.PostConstruct;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
public class LiftBar {
private static final Logger logger = Logger.getLogger(LiftBar.class);
@Autowired
private LandBusListService listService;//进出场申请表
@Autowired
private LandRoadVeService veService;//车辆信息备案表
@Autowired
private ResMessageService resMessageService;//查询运单放行表
@Autowired
private EnterCancelServer enterCancelServer;//调拨业务单独记录表
private static LiftBar logic = new LiftBar();
//从配置文件中读取货物重差可控范围
private static String checkWt = FileTool.readProperties("grossWt");
//逻辑判断后的返回信息定义
private static String PERMITTHOUGH = "直接放行";
private static String GROWSSEXCETION = "禁止通行,重量不在可控范围";
private static String NORECORD = "车辆未备案或者识别错误,车牌号:";
private static String INPUTSTATION = "此车辆未做进站申请";
private static String ENTERSTATION = "此车辆未做出站申请";
private static String ISVALID = "二维码数据异常,请使用正确的二维码数据";
private static String ERRORWT = "出起始场站的重量和进目的场站的重量不一致";
private static String IEPORSE = "无相对应进出场申请";
private static String FANGXING="有运单未放行";
@PostConstruct
public void init() {
logic = this;
logic.listService = this.listService;
logic.veService = this.veService;
logic.resMessageService = this.resMessageService;
logic.enterCancelServer = this.enterCancelServer;
}
/**
* @Param info 卡口采集数据
* @Result 计算卡口采集数据并发送报文
*/
public static boolean liftBar(GatherInfo info) {
PropertyConfigurator.configure("config/log4j.properties");
//默认返回值
boolean result = false;
//获取过磅重量
double growssWt = info.getGrosswt().doubleValue();
double goodsWt=0.0,inWt=0.0,diffVal=0.0;
//取车牌号,判定卡口是否取到车牌号
String vaName = info.getVename();
//若无车牌号,返回未识别错误
if (vaName.length() <= 0) {
CommandClient.Client(info, NORECORD + vaName);
return result;
}
//校验车辆是否备案
LandRoadVe ve = logic.veService.selectByFrameNo(vaName);
//若无备案信息,返回车辆未备案或者识别错误
if (ve == null) {
CommandClient.Client(info, NORECORD + vaName);
return result;
}
/**
* 车牌号,二维码,场站ID/号,通道ID/号,进出业务类型标识I/E
* 查询是否已有此场站通道的申请
*/
//通过车牌号,二维码,场站,通道号,进出类型查询进出场站申请列表
LandBusinessTypeList list = logic.listService.selectForOne(info.getVename(), info.getBarcode(), info.getAreaid(), info.getChnlno(), info.getIetype());
//若查询结果为null,返回无相对应进出场申请
if (list == null) {
CommandClient.Client(info, IEPORSE);
return result;
}
//判断进出场申请二维码是否已经失效,若失效,sendError
if ("0".equals(list.getIsvalid())) {
//校验重量开始
boolean checkResult = false;
boolean check = false;
boolean checkMainfest =false;
//判断是进场申请还是出场申请
if("I".equals(info.getIetype())){
//进场申请宽进
checkResult=true;
}else{
//获取对应场站进场申请的货物重量,进场过磅重量
List<LandBusinessTypeList> listWt=logic.listService.selectwt(list.getTrailerFrameNo(),list.getBarcode(),list.getEndstation(),"I");
for(LandBusinessTypeList typeList:listWt){
if(typeList.getRemark()!=null && typeList.getRemark()!=""){
//货物重量
goodsWt=Double.parseDouble(typeList.getRemark());
}
if(typeList.getAislewt()!=null){
//对应场站进场过磅重量
inWt=typeList.getAislewt();
}
diffVal = inWt- growssWt;
}
//判断场站出场是否要重量校验
if(FileTool.readProperties("station").equals(list.getEndstation())){
checkResult=true;
}else if(!"普通货".equals(list.getCocode())){
checkResult=true;
}else {
check = logic.checkResult(growssWt, Double.parseDouble(ve.getSelfWt()), goodsWt,inWt);
if("出口送货".equals(list.getBusinesstype())){
if(check){
checkResult=true;
}else{
CommandClient.Client(info, GROWSSEXCETION);
}
}else{
checkMainfest = logic.checkManifest(list.getMasterList());
if(checkMainfest){
checkResult=check || checkMainfest;
}else{
CommandClient.Client(info, FANGXING);//有运单未放行
}
}
}
}
if(logic.sendBw(info, checkResult)){//发送抬杆儿报文
if ("I".equals(info.getIetype())) {
list.setAislewt(info.getGrosswt().doubleValue());
list.setUpdateDate(new Date());
//list.setRemark(String.format("%.1f", goodsWt));
list.setRemark2(ve.getSelfWt());
list.setContrastflag("已进站");
logic.checkData(list);
} else {
LandRoadVe veName = logic.veService.selectByFrameNo(vaName);
list.setAislewt(info.getGrosswt().doubleValue());
list.setUpdateDate(new Date());
list.setRemark(String.format("%.1f", goodsWt));
list.setRemark1(String.format("%.1f", diffVal));
list.setRemark2(veName.getSelfWt());
list.setContrastflag("已出站");
logic.checkData(list);
}
logic.listService.updateById(list);//更新进出场申请业务表
//进出场申请业务表对应场站的卡口失效
logic.listService.updateisvalid(list.getTrailerFrameNo(),list.getBarcode(),list.getEndstation(),list.getTurnoverflag());
//判断是否为最后一个场站,若是最后个场站申请为出,二维码失效
int count=logic.listService.selectlaststation(list.getTrailerFrameNo(),list.getBarcode());
//二维码失效
if(count==0){
buildBarCode.cancleBarCode(vaName);
}
//调拨货冻结
if (list.getBusinesstype().indexOf("业务") > 0) {
logic.inOrUpEnterCancel(list);
}
}
//绑定车单关系
if(list.getMasterList().length()>0){
boolean flag = VeManifestRelation.createFile(list);
if(flag){
logger.info(">>>>>>>>>>-----车单关系报文生成成功-----<<<<<<<<<<<<");
}
}
} else {
sendError(info);
logger.error("------->>>>>>>二维码数据异常,请使用正确的二维码数据<<<<<<<-----");
}
return true;
}
/**
* 校验重量并发送报文
*/
public boolean sendBw(GatherInfo info, boolean check) {
logger.info(String.format("开始发送指令:车牌%s,场站%s,通道%s,重量%s",info.getVename(),info.getAreaid(),info.getChnlno(),info.getGrosswt()));
boolean flag = false;
if (check) {
CommandClient.Client(info, PERMITTHOUGH);
logger.info("=============>>>>>>>>放行报文发送成功<<<<<<<<<==============");
flag = true;
} else {
CommandClient.Client(info, GROWSSEXCETION);
logger.info("=============>>>>>>>>重量异常报文发送成功<<<<<<<<<==============");
}
return flag;
}
/**
* 给码头发送卡口数据
*
* @param stationCode
* @param carNo
* @param IEtype
*/
public static void sendData(String stationCode, String carNo, boolean IEtype) {
String url = "http://10.50.3.73:8080/air-api/car/channelCar?stationCode=" + stationCode + "&carNo=" + carNo + "&isPickup=" + IEtype;
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
String entityStr = EntityUtils.toString(entity);
logger.info("------------>>>>>>>>>>>>>>发送车辆信息:{stationCode:" + stationCode + ",carNo:" + carNo + ",isPickup:" + IEtype + "}");
logger.info("------------>>>>>>>>>>>>>>响应返回内容:" + entityStr + "<<<<<<<<<<<<-----------");
} catch (Exception e) {
logger.info(e.toString());
}
}
/**
* 给码头发送卡口数据
*
* @param list
*/
public void checkData(LandBusinessTypeList list) {
String sationCode = null;
boolean flag = false;
if ("出口送货".equals(list.getBusinesstype()) || "出口流转".equals(list.getBusinesstype())) {
flag = false;
}
if ("进口提货".equals(list.getBusinesstype()) || "进口流转".equals(list.getBusinesstype())) {
flag = true;
}
if ("4604000000".equals(list.getEndstation())) {
if ("I".equals(list.getTurnoverflag())) {
sationCode = "HK05";
} else {
sationCode = "HK06";
}
//TODO:加场站判定
}
sendData(sationCode, list.getTrailerFrameNo(), flag);
}
/**
* 查询运单是否全部放行
*
* @param manifestList
* @return
*/
public boolean checkManifest(String manifestList) {
if (manifestList.length() < 1) return false;
manifestList = manifestList.replace("-", "");
String[] maifest = manifestList.split(",");
boolean flag = false;
int count = 0;
for (int i = 0; i < maifest.length; i++) {
RESMESSAGE resmessage = logic.resMessageService.selectByManifest(maifest[i]);
if (resmessage != null) {
if ("11".equals(resmessage.getResponsecode())) {
count++;
}
}
}
if (count == maifest.length) {
flag = true;
}
return flag;
}
/**
* 校验载重和称重是否在合理的范围
*
* @Param grossWt 地磅称重
* @Param wt 车辆自重
* @Param goodsWt 货物总重
* @Result 获取运单重量
*/
/**
* 进场卸货误差判定
* 出场重量 = 进场重量 - 货物重量
* 首先计算 进出场差值数 ABS(进场重量-货物重量-出场重量)/出场重量, 计算出出场误差百分比
* (出场重量 - 车辆备案重量) /出场重量
* (出场重量 - (车辆备案重量+货物重量)/出场重量
* (出场重量 - (进场重量+货物重量)/出场重量
*/
public boolean checkResult(double grossWt, double wt, double goodsWt,double inWt) {
DecimalFormat df = new DecimalFormat("0.00");
boolean flag = false;
double result= 0.0,result2= 0.0,result3= 0.0,result4= 0.0;
if(grossWt>0){
result = Double.parseDouble(df.format(Math.abs((inWt - goodsWt - grossWt)) / grossWt));
result2 = Double.parseDouble(df.format(Math.abs((grossWt-wt)) / grossWt));
result3 = Double.parseDouble(df.format(Math.abs((grossWt-wt-goodsWt)) / grossWt));
result4 = Double.parseDouble(df.format(Math.abs((inWt + goodsWt)) / grossWt));
}
if (result <= valueDob() ||result2 <= valueDob() || result3 <= valueDob() || result4 <= valueDob()) {
flag = true;
}
return flag;
}
/**
* 排除当前系统问题发送错误commandInfo
*/
public static void sendError(GatherInfo info) {
//二维码数据异常,请使用正确的二维码数据
CommandClient.Client(info, ISVALID);
}
/**
* @Param mainifast 主单列表
* @Param ietype 进出标志
* 获取货物总重
*/
public double GoodsWt(String mainifast, String ietype) {
Double sum = 0.0;
if (mainifast.length() > 0) {
String[] mainifastList = mainifast.split(",");
for (String mainBill : mainifastList) {
sum += getGrossWt(mainBill, ietype);
}
}
return sum;
}
/**
* @Param waybill 主单号
* @Param imp 进出港标识
* @Result 获取运单重量
*/
public double getGrossWt(String waybill, String imp) {
logger.info("进入获取重量action");
if (!(waybill.indexOf("-") != -1)) {
waybill = waybill.substring(0, 3) + "-" + waybill.substring(3);
}
String url = "http://10.50.3.82:8081/orig/orig?waybill=" + waybill + "&imp=" + imp;
// String url = "http://tjfx.15miaoo.com:8003/tj/orig/orig?waybill=" + waybill + "&imp=" + imp;
StringBuilder json = new StringBuilder();
Map map = null;
double bg = 0;
try {
URL Url = new URL(url);
URLConnection yc = Url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "utf-8"));
String inputLine = null;
while ((inputLine = in.readLine()) != null) {
json.append(inputLine);
}
logger.info("返回数据:" + json);
JSONArray array = JSONArray.parseArray(json.toString());
for (int i = 0; i < array.size(); i++) {
map = JSON.parseObject(array.getString(i));
if (map.containsKey("receiptinformation")) {
if (map.get("receiptinformation").toString().startsWith("41301") || map.get("receiptinformation")
.toString().startsWith("41106") || map.get("receiptinformation")
.toString().startsWith("31301") || map.get("receiptinformation")
.toString().startsWith("31106") || map.get("receiptinformation")
.toString().indexOf("提运单放行") != -1) {
logger.info(map);
bg = Double.parseDouble((String) map.get("totalweight"));
logger.info("for循环取重量:" + bg);
return bg;
}
}
}
logger.info("访问返回的数据重量:" + bg);
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
logger.error(e);
} catch (IOException e) {
e.printStackTrace();
logger.error(e);
}
return bg;
}
/**
* 判断备案车重与运单重量和地磅称重是否在合理范围
*
* @param grossWt
* @param wt
* @return
*/
public boolean checkFlag(double grossWt, double wt) {
DecimalFormat df = new DecimalFormat("0.00");
boolean flag = false;
double reult = Double.parseDouble(df.format(Math.abs((grossWt - wt)) / grossWt));
if (reult <= valueDob()) {
flag = true;
}
return flag;
}
//将获取的checkWt进行小数转化
public static double valueDob() {
NumberFormat nf = NumberFormat.getPercentInstance();
Number m = null;
try {
m = nf.parse(checkWt);//将百分数转换成Number类型
} catch (ParseException e) {
e.printStackTrace();
logger.info(e.getMessage());
}
return m.doubleValue();
}
/**
* 生成或者更新货物冻结标识
*
* @param landBusinessTypeList
*/
public void inOrUpEnterCancel(LandBusinessTypeList landBusinessTypeList) {
if (landBusinessTypeList.getMasterList().length() < 1) return;
String[] list = landBusinessTypeList.getMasterList().split(",");
String flag = null;
for (int i = 0; i < list.length; i++) {
if("调拨业务".equals(landBusinessTypeList.getBusinesstype())){
flag = "E";
}else {
flag = "I";
}
double wt = getGrossWt(list[i],flag);
ENTERCANCCEL entercanccel = logic.enterCancelServer.selectByManifest(list[i]);
if (entercanccel != null) {
if(entercanccel.getVename().equals(landBusinessTypeList.getTrailerFrameNo())){
if ("0".equals(entercanccel.getIsfreeze())) {
entercanccel.setIsfreeze("1");
entercanccel.setEndport(landBusinessTypeList.getEndstation());
entercanccel.setUpdateBy(landBusinessTypeList.getCreateBy());
entercanccel.setUpdateTime(new Date());
logic.enterCancelServer.updateByPermaryKey(entercanccel);
}
}
}else {
if("E".equals(landBusinessTypeList.getTurnoverflag())){
ENTERCANCCEL canccel = new ENTERCANCCEL();
canccel.setIsfreeze("0");
canccel.setVename(landBusinessTypeList.getTrailerFrameNo());
canccel.setId(String.valueOf(System.currentTimeMillis()));
canccel.setVeCompanyName(landBusinessTypeList.getAgentno());
canccel.setBusinesstype(landBusinessTypeList.getBusinesstype());
canccel.setManifest(list[i]);
canccel.setAgentname(landBusinessTypeList.getAgentname());
canccel.setStartport(landBusinessTypeList.getEndstation());
canccel.setGrosswt(landBusinessTypeList.getAislewt());
canccel.setCreateBy(landBusinessTypeList.getCreateBy());
canccel.setCreateTime(new Date());
canccel.setUpdateBy(landBusinessTypeList.getCreateBy());
canccel.setUpdateTime(new Date());
canccel.setWeight(wt);
logic.enterCancelServer.insertEntry(canccel);
}
}
}
}
}
... ...
... ... @@ -87,18 +87,24 @@ public class LogicOperation {
boolean result = false;
//转为double类型
double growssWt = info.getGrosswt().doubleValue();
//取车牌号,判定卡口是否取到车牌号
String vaName = info.getVename();
if (vaName.length() <= 0) {
CommandClient.Client(info, NORECORD + vaName);
return result;
}
//校验车辆是否备案
LandRoadVe ve = logic.veService.selectByFrameNo(vaName);
if (ve == null) {
CommandClient.Client(info, NORECORD + vaName);
return result;
}
LandBusinessTypeList list = logic.listService.selectForOne(info.getVename(), info.getBarcode(), info.getAreaid
(), info.getChnlno(), info.getIetype());
/**
* 车牌号,二维码,场站ID/号,通道ID/号,进出业务类型标识I/E
* 查询是否已有此场站通道的申请
*/
LandBusinessTypeList list = logic.listService.selectForOne(info.getVename(), info.getBarcode(), info.getAreaid(), info.getChnlno(), info.getIetype());
if (list == null) {
CommandClient.Client(info, IEPORSE);
return result;
... ... @@ -116,29 +122,34 @@ public class LogicOperation {
type = "E";
}
logger.info("=======================>>>>>>>>>>" + type + "<<<<<<<<<<========================");
//获取车辆拉货重量
goodsWt = logic.GoodsWt(list.getMasterList(), type);
}
//车自重
double selfWt = Double.parseDouble(ve.getSelfWt());
//重量误差判定,判断过磅重量减去(车备案重量+运单重量)/过磅重量是否在可控范围内
if (!logic.checkFlag(growssWt, (selfWt + goodsWt))) {
//根据二维码标识ID找进出场对应申请,并进行过卡数据与申请数据对碰
List<LandBusinessTypeList> typeLists = logic.listService.selectMessageId(list.getMassageId());
for (int i = 0; i < typeLists.size(); i++) {
//如果业务类型为进口提货,进出业务标识为出场(E),把已检验过进场过卡重量赋为空车重量,否则则取备案重量
if ("进口提货".equals(list.getBusinesstype())) {
//Turnoverflag()进出场标识
if ("E".equals(list.getTurnoverflag())) {
//Contrastflag检验标识,Aislewt过卡重量
if ("I".equals(typeLists.get(i).getTurnoverflag()) && typeLists.get(i).getContrastflag() != null) {
selfWt = typeLists.get(i).getAislewt() > 1 ? typeLists.get(i).getAislewt() : selfWt;
break;
}
}
}
//
if ("出口送货".equals(list.getBusinesstype())) {
if ("E".equals(list.getTurnoverflag())) {
//判断入场是否正常
if ("I".equals(typeLists.get(i).getTurnoverflag()) && typeLists.get(i).getContrastflag() != null) {
if ("1".equals(list.getIsfull())) {
if ("1".equals(list.getIsfull())) {//
if (list.getMasterList().length() > 0) {
selfWt = typeLists.get(i).getAislewt() - Double.parseDouble(typeLists.get(i).getRemark());
} else {
... ... @@ -171,14 +182,16 @@ public class LogicOperation {
}
}
}
//校验重量开始
boolean checkResult = false;
boolean check = false;
boolean checkMainfest =false;
if(!"普通货".equals(list.getCocode())){
checkResult = true;
}else {
}else if(list.getEndstation().equals("4600329012") || list.getEndstation().equals("4612199001")){
checkResult = true;
}else{
check = logic.checkResult(growssWt, selfWt, goodsWt);
checkMainfest = logic.checkManifest(list.getMasterList());
... ... @@ -236,14 +249,33 @@ public class LogicOperation {
count++;
}
}
//决定所有业务走完 二维是否失效
if (list.getBusinesstype().indexOf("业务") > 0) {
logic.inOrUpEnterCancel(list);
if (count == 4) {
buildBarCode.cancleBarCode(vaName);
logic.listService.updateByBarcode(info.getBarcode());
}else if(count==6){
buildBarCode.cancleBarCode(vaName);
logic.listService.updateByBarcode(info.getBarcode());
}
} else {
if (count == 2) {
} else if(list.getBusinesstype().equals("出口送货") && list.getEndport().equals("4620")){
if(list.getIsthree().equals("0")){
if(count==4){
buildBarCode.cancleBarCode(vaName);
logic.listService.updateByBarcode(info.getBarcode());
}
}else{
if(count==2){
buildBarCode.cancleBarCode(vaName);
logic.listService.updateByBarcode(info.getBarcode());
}
}
}else{
if (count == 2 && !list.getEndport().equals("4620")) {
buildBarCode.cancleBarCode(vaName);
logic.listService.updateByBarcode(info.getBarcode());
}
... ... @@ -436,6 +468,7 @@ public class LogicOperation {
} else {
sationCode = "HK06";
}
//TODO:加场站判定
}
sendData(sationCode, list.getTrailerFrameNo(), flag);
}
... ... @@ -446,6 +479,7 @@ public class LogicOperation {
*/
public boolean sendBw(GatherInfo info, boolean check) {
logger.info(String.format("开始发送指令:车牌%s,场站%s,通道%s,重量%s",info.getVename(),info.getAreaid(),info.getChnlno(),info.getGrosswt()));
boolean flag = false;
if (check) {
CommandClient.Client(info, PERMITTHOUGH);
... ... @@ -466,7 +500,7 @@ public class LogicOperation {
}
/**
* 判断空车与地磅称重是否在合理范围
* 判断空车加运单与地磅称重是否在合理范围
*
* @param grossWt
* @param wt
... ...
... ... @@ -35,4 +35,14 @@ public interface LandBusinessTypeListMapper {
List<LandBusinessTypeList> selectMessageId(@Param("massageId")String messageId);
}
\ No newline at end of file
//查询进场过磅重量,货物重量
List<LandBusinessTypeList> selectwt(@Param("trailerFrameNo") String trailerFrameNo, @Param("barcode") String barcode,
@Param("endstation") String endstation, @Param("turnoverflag") String turnoverflag);
//失效已进场或出场的申请记录
int updateisvalid(@Param("trailerFrameNo") String trailerFrameNo, @Param("barcode") String barcode,
@Param("endstation") String endstation, @Param("turnoverflag") String turnoverflag);
//查询出场申请为最后一个
int selectlaststation(@Param("trailerFrameNo") String trailerFrameNo, @Param("barcode") String barcode);
}
... ...
... ... @@ -65,6 +65,16 @@ public class LandBusinessTypeList {
private String remark2;
public String getIsthree() {
return isthree;
}
public void setIsthree(String isthree) {
this.isthree = isthree;
}
private String isthree;
public String getId() {
return id;
}
... ... @@ -312,4 +322,4 @@ public class LandBusinessTypeList {
public void setRemark2(String remark2) {
this.remark2 = remark2 == null ? null : remark2.trim();
}
}
\ No newline at end of file
}
... ...
... ... @@ -13,6 +13,15 @@ public interface LandBusListService {
int saveList(LandBusinessTypeList list);
/**
*
* @param frameNo 车牌号
* @param barcode 二维码
* @param station 场站ID/号
* @param aisle 通道ID/号
* @param flag 进出业务类型标识I/E
* @return
*/
LandBusinessTypeList selectForOne(String frameNo, String barcode, String station, String aisle, String flag);
List<LandBusinessTypeList> selectByBarcode(String barcode);
... ... @@ -20,4 +29,11 @@ public interface LandBusListService {
int updateByBarcode(String barcode);
List<LandBusinessTypeList> selectMessageId(String messageId);
//查询进场过磅重量,货物重量
List<LandBusinessTypeList> selectwt(String frameNo, String barcode, String station, String flag);
//失效已进场或出场的申请记录
int updateisvalid(String frameNo, String barcode, String station, String flag);
//查询出场申请为最后一个
int selectlaststation(String frameNo, String barcode);
}
... ...
... ... @@ -74,4 +74,19 @@ public class LandBusListServiceImpl implements LandBusListService {
public List<LandBusinessTypeList> selectMessageId(String messageiD){
return listMapper.selectMessageId(messageiD);
}
@Override
public List<LandBusinessTypeList> selectwt(String frameNo, String barcode, String station, String flag) {
return listMapper.selectwt(frameNo,barcode,station,flag);
}
@Override
public int updateisvalid(String frameNo, String barcode, String station, String flag) {
return listMapper.updateisvalid(frameNo,barcode,station,flag);
}
@Override
public int selectlaststation(String frameNo, String barcode) {
return listMapper.selectlaststation(frameNo,barcode);
}
}
... ...
... ... @@ -33,13 +33,14 @@
<result column="REMARK" jdbcType="VARCHAR" property="remark" />
<result column="REMARK1" jdbcType="VARCHAR" property="remark1" />
<result column="REMARK2" jdbcType="VARCHAR" property="remark2" />
<result column="ISTHREE" jdbcType="VARCHAR" property="isthree" />
</resultMap>
<sql id="Base_Column_List">
id, MASSAGE_ID, TRAILER_FRAME_NO, TRAILER_LICENSE_NO, MASTER_LIST, PRODECT_TIME,
IS_DELETE, AGENTNO, AGENTNAME, COCODE, DRIVERNAME, DRIVERID, STARTPORT, ENDPORT,
STARTSATATION, ENDSTATION, AISLE, BUSINESSTYPE, TURNOVERFLAG, BARCODE, CONTRASTFLAG,
CREATE_BY, CREATE_DATE, UPDATE_BY, UPDATE_DATE, ISVALID, AISLEWT, ISFULL, REMARK,
REMARK1, REMARK2
REMARK1, REMARK2,ISTHREE
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
... ... @@ -65,7 +66,27 @@
and AISLE = #{aisle,jdbcType=VARCHAR}
and TURNOVERFLAG = #{turnoverflag,jdbcType=VARCHAR}
</select>
<select id="selectwt" parameterType="java.lang.String" resultMap="BaseResultMap">
select REMARK,AISLEWT from land_businesstype_list where
TRAILER_FRAME_NO = #{trailerFrameNo,jdbcType=VARCHAR}
and BARCODE = #{barcode,jdbcType=VARCHAR}
and ENDSTATION = #{endstation,jdbcType=VARCHAR}
and TURNOVERFLAG = #{turnoverflag,jdbcType=VARCHAR}
</select>
<update id="updateisvalid" parameterType="java.lang.String">
update land_businesstype_list set ISVALID = "1" where
TRAILER_FRAME_NO = #{trailerFrameNo,jdbcType=VARCHAR}
and BARCODE = #{barcode,jdbcType=VARCHAR}
and ENDSTATION = #{endstation,jdbcType=VARCHAR}
and TURNOVERFLAG = #{turnoverflag,jdbcType=VARCHAR}
</update>
<select id="selectlaststation" resultType="java.lang.Integer">
select count(*) from land_businesstype_list where
TRAILER_FRAME_NO = #{trailerFrameNo,jdbcType=VARCHAR}
and BARCODE = #{barcode,jdbcType=VARCHAR}
and TURNOVERFLAG = "E"
and ISVALID = "0"
</select>
<select id="selectByBarcode" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
... ...