Browse Source

MQTT 接收订单->子订单制作流程

master
fyf 1 year ago
parent
commit
8ebcb39132
14 changed files with 209 additions and 34 deletions
  1. +1
    -1
      app/src/main/java/com/example/bpa/MainActivity.java
  2. +7
    -0
      app/src/main/java/com/example/bpa/app/ICSApp.java
  3. +22
    -12
      app/src/main/java/com/example/bpa/config/DataBus.java
  4. +2
    -2
      app/src/main/java/com/example/bpa/db/QueryDB.java
  5. +33
    -1
      app/src/main/java/com/example/bpa/db/file/DBHelper.java
  6. +9
    -0
      app/src/main/java/com/example/bpa/db/file/Table.java
  7. +3
    -3
      app/src/main/java/com/example/bpa/db/mode/BPA_SUBORDER.java
  8. +4
    -0
      app/src/main/java/com/example/bpa/helper/MQTT.java
  9. +14
    -11
      app/src/main/java/com/example/bpa/service/BusinessServer.java
  10. +49
    -1
      app/src/main/java/com/example/bpa/service/OrderServer.java
  11. +20
    -2
      app/src/main/java/com/example/bpa/view/adapter/maingoods_adapter.java
  12. +19
    -1
      app/src/main/java/com/example/bpa/view/from/yfpf_activity.java
  13. +6
    -0
      app/src/main/java/com/example/bpa/view/mode/ResGoodsMake.java
  14. +20
    -0
      app/src/main/java/com/example/bpa/view/mode/ResReceiveOrder.java

+ 1
- 1
app/src/main/java/com/example/bpa/MainActivity.java View File

@@ -69,7 +69,7 @@ public class MainActivity extends FragmentActivity implements View.OnClickListen
*/
@Override
protected void onDestroy() {
MQTT.get().ConnMqttBroken(false);//释放mqtt
//MQTT.get().ConnMqttBroken(false);//释放mqtt
ModbusTcpHelper.get().release();//释放modbus
super.onDestroy();
}


+ 7
- 0
app/src/main/java/com/example/bpa/app/ICSApp.java View File

@@ -7,10 +7,12 @@ import android.util.Log;
import com.example.bpa.Model.IMessageLogNotify;
import com.example.bpa.config.ConfigName;
import com.example.bpa.db.QueryDB;
import com.example.bpa.db.file.DBHelper;
import com.example.bpa.db.mode.BPA_ALERTLOG;
import com.example.bpa.db.mode.BPA_LOG;
import com.example.bpa.db.mode.BPA_SILOS;
import com.example.bpa.db.mode.BPA_SILOSANDMATERIAL;
import com.example.bpa.db.mode.BPA_SUBORDER;
import com.example.bpa.db.mode.BPA_SUGAR;
import com.example.bpa.db.mode.BPA_USER;
import com.example.bpa.helper.MessageLog;
@@ -210,4 +212,9 @@ public class ICSApp extends Application {
// QueryDB.AddSugar(sugar_B_2);
// }
}

public void DBdelete()
{
DBHelper.getInstance(ConfigName.getInstance().dishesCon).DeleteCreateTables(BPA_SUBORDER.class,null);
}
}

+ 22
- 12
app/src/main/java/com/example/bpa/config/DataBus.java View File

@@ -2,6 +2,7 @@ package com.example.bpa.config;

import com.example.bpa.Model.ResultA;
import com.example.bpa.R;
import com.example.bpa.db.mode.BPA_SUBORDER;
import com.example.bpa.service.DeviceData;
import com.example.bpa.db.QueryDB;
import com.example.bpa.db.mode.BPA_ALERTLOG;
@@ -65,16 +66,17 @@ public class DataBus {
*/
public makegood_adapter goodmakeadapter;
/**
* 增加一个商品
* @param id
* 增加一个订单商品
* @param suborder
*/
public void AddGoodsMake(String id)
public void AddGoodsMake(BPA_SUBORDER suborder)
{
try
{
ResGoodsMake make=new ResGoodsMake();
make.recipes=QueryDB.GetGoodsSrecipeList(id);
make.good=QueryDB.GetGoodsId(id);
make.recipes=QueryDB.GetGoodsSrecipeList(suborder.goodsID);
make.good=QueryDB.GetGoodsId(suborder.goodsID);
make.subOrder=suborder;
make.makeStatus= MakeStatus.等待制作;
make.makeMs="";
make.makeProcess=0;
@@ -85,19 +87,25 @@ public class DataBus {
}

/**
* 根据商品id,物料id修改制作进度
* @param id
* 根据子订单id,物料id修改制作进度
* @param suborderID
* @param makeMs
* @param count
*/
public void UpdateGoodsMake(String id,String makeMs,int count)
public void UpdateGoodsMake(String suborderID,String makeMs,int count)
{
try
{
for (int m=0;m<GoodsMake.size();m++)
{
if(GoodsMake.get(m).good.id.equals(id))
if(GoodsMake.get(m).subOrder.id.equals(suborderID))
{
if(GoodsMake.get(m).subOrder.status==0)
{
GoodsMake.get(m).subOrder.status=1;
QueryDB.UpdateSubOrder(GoodsMake.get(m).subOrder);
}

GoodsMake.get(m).makeStatus= MakeStatus.制作中;
GoodsMake.get(m).makeMs=makeMs;
GoodsMake.get(m).makeProcess=(count/ GoodsMake.get(m).recipes.size())*100;
@@ -109,20 +117,22 @@ public class DataBus {
}
}
/**
* 根据商品id,设置商品制作完成
* 根据子订单id,设置订单制作完成
*/
public void DeleteGoodsMake(String id)
public void DeleteGoodsMake(String suborderID)
{
try
{
ResGoodsMake good=null;
for (ResGoodsMake item:GoodsMake)
{
if(item.good.id.equals(id))
if(item.subOrder.id.equals(suborderID))
{
item.makeStatus=MakeStatus.制作完成;
item.makeMs="";
item.makeProcess=100;
item.subOrder.status=2;
QueryDB.UpdateSubOrder(item.subOrder);
good=item;
}
}


+ 2
- 2
app/src/main/java/com/example/bpa/db/QueryDB.java View File

@@ -1783,8 +1783,8 @@ public class QueryDB {
data = new BPA_SUBORDER();
//私有
((BPA_SUBORDER) data).orderID = cursor.getString((int) cursor.getColumnIndex("orderID"));
((BPA_SUBORDER) data).goodsID = cursor.getInt((int) cursor.getColumnIndex("goodsID"));
((BPA_SUBORDER) data).number = cursor.getString((int) cursor.getColumnIndex("number"));
((BPA_SUBORDER) data).goodsID = cursor.getString((int) cursor.getColumnIndex("goodsID"));
((BPA_SUBORDER) data).number = cursor.getInt((int) cursor.getColumnIndex("number"));
((BPA_SUBORDER) data).status = cursor.getInt((int) cursor.getColumnIndex("status"));
break;
case "BPA_ALERTLOG":


+ 33
- 1
app/src/main/java/com/example/bpa/db/file/DBHelper.java View File

@@ -180,6 +180,38 @@ public class DBHelper extends SQLiteOpenHelper {
db.endTransaction();
}

/**
* 删除在创建
* @param c
* @param premarykey
*/
public void DeleteCreateTables(Class c,String premarykey)
{
if (premarykey == null){


premarykey="";
}
SQLiteDatabase db =this.getWritableDatabase();
db.beginTransaction();
String TabName= c.getSimpleName();//表名称
ArrayList<Table> tables = new ArrayList<Table>();
Table t;
t = new Table(TabName); // 创建表名称
for (Field field : c.getFields()){
String name=field.getName();
String type=field.getType().getSimpleName();
if(type.equals("String") || type.equals("Date"))
{
type="text";
}
t.addFeild(new Feild(name, type)); // 字段名称
}
tables.add(t);
for (Table table : tables) {
db.execSQL(table.deleteSql());
db.execSQL(table.createSQL(premarykey));
}
db.setTransactionSuccessful();
db.endTransaction();
}
}

+ 9
- 0
app/src/main/java/com/example/bpa/db/file/Table.java View File

@@ -81,4 +81,13 @@ public class Table {
Log.i("sql:",sb.toString());
return sb.toString();
}

/**
* 删除表
* @return
*/
public String deleteSql()
{
return "drop table "+this.name;
}
}

+ 3
- 3
app/src/main/java/com/example/bpa/db/mode/BPA_SUBORDER.java View File

@@ -8,9 +8,9 @@ public class BPA_SUBORDER extends ModeBase{
//主订单ID
public String orderID;
//商品ID
public int goodsID;
public String goodsID;
//数量:例如 *1 *2
public String number;
//状态:0 未开始 1 制作 2 已超时
public int number;
//状态:0 未开始 1 制作 2 已制作 3 已超时
public int status;
}

+ 4
- 0
app/src/main/java/com/example/bpa/helper/MQTT.java View File

@@ -54,6 +54,7 @@ public class MQTT {
public IMessage callback=null;//消息回调
public IRun ConnectOk=null;
public IRun Disconnect=null;
public boolean IsConnect=false;
//endregion

//region 公有函数
@@ -82,6 +83,7 @@ public class MQTT {
mqttClient.setCallback(new MqttCallback() {
@Override//连接丢失后,会执行这里
public void connectionLost(Throwable throwable) {
IsConnect=false;
MessageLog.ShowInfo("mqtt断开连接,尝试重新连接...");
if(Disconnect!=null)
{
@@ -122,6 +124,7 @@ public class MQTT {
mqttClient.connect(options);//连接服务器,连接不上会阻塞在这
}
MessageLog.ShowInfo("mqtt连接成功!");
IsConnect=true;
if(ConnectOk!=null)
{
ConnectOk.Run();
@@ -134,6 +137,7 @@ public class MQTT {
if (mqttClient!=null && mqttClient.isConnected()) {
mqttClient.disconnect();
}
IsConnect=false;
MessageLog.ShowInfo("mqtt断开成功!");
} catch (MqttException e) {
MessageLog.ShowError("mqtt断开失败!"+e.getMessage());


+ 14
- 11
app/src/main/java/com/example/bpa/service/BusinessServer.java View File

@@ -8,6 +8,7 @@ import com.example.bpa.config.DataBus;
import com.example.bpa.db.QueryDB;
import com.example.bpa.db.mode.BPA_GOODS;
import com.example.bpa.db.mode.BPA_SILOS;
import com.example.bpa.db.mode.BPA_SUBORDER;
import com.example.bpa.db.mode.BPA_SUGAR;
import com.example.bpa.helper.MessageLog;
import com.example.bpa.helper.ModbusTcpServer;
@@ -39,14 +40,14 @@ public class BusinessServer {
/**
* 商品制作队列
*/
ConcurrentLinkedQueue<String> Commoditys = new ConcurrentLinkedQueue<String>();
ConcurrentLinkedQueue<BPA_SUBORDER> Commoditys = new ConcurrentLinkedQueue<BPA_SUBORDER>();

/**
* 增加一个订单
* 增加一个订单
*
* @param info 配方信息
*/
public void AddCommodity(String info) {
public void AddCommodity(BPA_SUBORDER info) {
//1.添加制作队列
Commoditys.offer(info);
//2.数据中心添加制作队列商品数据
@@ -62,7 +63,8 @@ public class BusinessServer {
public void Run() throws InterruptedException {
while (Commoditys.size() > 0) {
//1.取出需要制作的订单商品 验证物料是否充足
String GoodId = Commoditys.poll();
BPA_SUBORDER suborder=Commoditys.poll();
String GoodId = suborder.goodsID;
// boolean IsMake=true;
ResultA resultA= DataBus.getInstance().InspectMaterial(GoodId);
// if(resultA.IsMake==false)//如果商品物料不足
@@ -96,7 +98,7 @@ public class BusinessServer {
List<ResGoodsRecipe> goodsRecipes= entry.getValue();
String RecipesNames="";
for (ResGoodsRecipe item:goodsRecipes ){RecipesNames+=item.materialName+",";}
DataBus.getInstance().UpdateGoodsMake(good.id,"步骤【" + key+ "】准备下发物料:"+RecipesNames,count);
DataBus.getInstance().UpdateGoodsMake(suborder.id,"步骤【" + key+ "】准备下发物料:"+RecipesNames,count);
for (int m = 0; m < goodsRecipes.size(); m++) {
ResGoodsRecipe recipe=goodsRecipes.get(m);
int materialType = recipe.materialType;
@@ -166,12 +168,12 @@ public class BusinessServer {
}
//更新缓存商品制作列表状态
count+=goodsRecipes.size();
DataBus.getInstance().UpdateGoodsMake(good.id,"步骤【" + key+ "】:"+RecipesNames+"-配料完成!",count);
DataBus.getInstance().UpdateGoodsMake(suborder.id,"步骤【" + key+ "】:"+RecipesNames+"-配料完成!",count);
MessageLog.ShowUserMessage(UserLogEnum.订单处理日志,"["+good.name+"]步骤【" + key + "】下发"+RecipesNames+"执行完成!");
}
//endregion
//5.设置数据中心商品已制作完成
DataBus.getInstance().DeleteGoodsMake(GoodId);
DataBus.getInstance().DeleteGoodsMake(suborder.id);
MessageLog.ShowUserMessage(UserLogEnum.订单处理日志,"["+good.name+"]-订单执行完成,请取餐!");
}
Thread.sleep(1000);
@@ -190,7 +192,8 @@ public class BusinessServer {
public void Run() throws InterruptedException {
while (Commoditys.size() > 0) {
//1.取出需要制作的订单商品 验证物料是否充足
String GoodId = Commoditys.poll();
BPA_SUBORDER suborder=Commoditys.poll();
String GoodId = suborder.goodsID;
// boolean IsMake=true;
// ResultA resultA= DataBus.getInstance().InspectMaterial(GoodId);
// if(resultA.IsMake==false)//如果商品物料不足
@@ -223,7 +226,7 @@ public class BusinessServer {
List<ResGoodsRecipe> goodsRecipes= entry.getValue();
String RecipesNames="";
for (ResGoodsRecipe item:goodsRecipes ){RecipesNames+=item.materialName+",";}
DataBus.getInstance().UpdateGoodsMake(good.id,"步骤【" + key+ "】准备下发物料:"+RecipesNames,count);
DataBus.getInstance().UpdateGoodsMake(suborder.id,"步骤【" + key+ "】准备下发物料:"+RecipesNames,count);
for (int m = 0; m < goodsRecipes.size(); m++) {
ResGoodsRecipe recipe=goodsRecipes.get(m);
int materialType = recipe.materialType;
@@ -292,12 +295,12 @@ public class BusinessServer {
// }
//更新缓存商品制作列表状态
count+=goodsRecipes.size();
DataBus.getInstance().UpdateGoodsMake(good.id,"步骤【" + key+ "】:"+RecipesNames+"-配料完成!",count);
DataBus.getInstance().UpdateGoodsMake(suborder.id,"步骤【" + key+ "】:"+RecipesNames+"-配料完成!",count);
MessageLog.ShowUserMessage(UserLogEnum.订单处理日志,"["+good.name+"]步骤【" + key + "】下发"+RecipesNames+"执行完成!");
}
//endregion
//5.设置数据中心商品已制作完成
DataBus.getInstance().DeleteGoodsMake(GoodId);
DataBus.getInstance().DeleteGoodsMake(suborder.id);
MessageLog.ShowUserMessage(UserLogEnum.订单处理日志,"["+good.name+"]-订单执行完成,请取餐!");
}
Thread.sleep(1000);


+ 49
- 1
app/src/main/java/com/example/bpa/service/OrderServer.java View File

@@ -3,9 +3,15 @@ package com.example.bpa.service;
import com.example.bpa.Model.IMessage;
import com.example.bpa.Model.IRun;
import com.example.bpa.Model.IThread;
import com.example.bpa.db.QueryDB;
import com.example.bpa.db.mode.BPA_SUBORDER;
import com.example.bpa.helper.Json;
import com.example.bpa.helper.MQTT;
import com.example.bpa.helper.MessageLog;
import com.example.bpa.helper.ThreadManager;
import com.example.bpa.view.mode.ResReceiveOrder;

import java.util.concurrent.ConcurrentLinkedQueue;

/**
* 订单服务
@@ -26,7 +32,14 @@ public class OrderServer {
}
//endregion

//region
//region 变量
/**
* 订单接收队列
*/
ConcurrentLinkedQueue<ResReceiveOrder> Commoditys = new ConcurrentLinkedQueue<ResReceiveOrder>();
//endreigon

//region 公共函数

/**
* 初始化
@@ -57,6 +70,14 @@ public class OrderServer {
@Override
public void MessageRecive(String topic, String Message) {
MessageLog.ShowInfo("收到主题:"+topic+",数据:"+Message);
try {
if(!Message.isEmpty())
{
ResReceiveOrder model=new Json<ResReceiveOrder>().jsonToobject(ResReceiveOrder.class,((String)Message));
Commoditys.offer(model);
}
} catch (Exception e) {
}
}
};
//连接成功标志
@@ -69,6 +90,33 @@ public class OrderServer {
};
//初始化MQTT连接
MQTT.get().Connect("emqx_u_block","emqx_p_admin8765490789","10.2.1.21",1883);

ThreadManager.Get().StartLong("云订单接收处理", true, new IThread() {
@Override
public void Run() throws InterruptedException {
if(MQTT.get().IsConnect)
{
while (Commoditys.size() > 0) {
//1.取出订单
ResReceiveOrder order = Commoditys.poll();
if(order.order!=null && order.subOrder!=null)
{
QueryDB.AddOrder(order.order);
for(BPA_SUBORDER suborder: order.subOrder)
{
QueryDB.AddSubOrder(suborder);
//向订单执行队列增加子订单
BusinessServer.Get().AddCommodity(suborder);
}
}
}
}
Thread.sleep(2000);
}
@Override
public void RunComplete() throws InterruptedException {
}
});
}
//endregion
}

+ 20
- 2
app/src/main/java/com/example/bpa/view/adapter/maingoods_adapter.java View File

@@ -12,6 +12,10 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.bpa.R;
import com.example.bpa.config.ConfigName;
import com.example.bpa.db.QueryDB;
import com.example.bpa.db.mode.BPA_ORDER;
import com.example.bpa.db.mode.BPA_SUBORDER;
import com.example.bpa.service.BusinessServer;
import com.example.bpa.config.DataBus;
import com.example.bpa.helper.T;
@@ -85,8 +89,22 @@ public class maingoods_adapter extends RecyclerView.Adapter<RecyclerView.ViewHol
T.show(view.getContext(),"PLC未连接,不允许下单!");
return;
}

BusinessServer.Get().AddCommodity(id);
BPA_ORDER order=new BPA_ORDER();
order.thirdPartyID="手动下单";
order.status=0;
order.deviceID = ConfigName.getInstance().DeviceId;
order.userID = ConfigName.getInstance().user.userID;
QueryDB.AddOrder(order);

BPA_SUBORDER suborder=new BPA_SUBORDER();
suborder.deviceID = ConfigName.getInstance().DeviceId;
suborder.userID = ConfigName.getInstance().user.userID;
suborder.orderID = order.id;
suborder.goodsID = id;
suborder.number = 1;
suborder.status=0;
QueryDB.AddSubOrder(suborder);
BusinessServer.Get().AddCommodity(suborder);
T.show(view.getContext(),"开始制作商品:"+goodname.getText().toString());
}



+ 19
- 1
app/src/main/java/com/example/bpa/view/from/yfpf_activity.java View File

@@ -14,7 +14,10 @@ import android.widget.ListView;
import android.widget.TextView;

import com.example.bpa.R;
import com.example.bpa.config.ConfigName;
import com.example.bpa.config.DataBus;
import com.example.bpa.db.mode.BPA_ORDER;
import com.example.bpa.db.mode.BPA_SUBORDER;
import com.example.bpa.service.BusinessServer;
import com.example.bpa.config.MessageName;
import com.example.bpa.db.QueryDB;
@@ -180,7 +183,22 @@ public class yfpf_activity extends AppCompatActivity implements View.OnClickList
T.show(this,"PLC未连接,不允许下单!");
return;
}
BusinessServer.Get().AddCommodity(((BPA_GOODS) data).id);
BPA_ORDER order=new BPA_ORDER();
order.thirdPartyID="手动下单";
order.status=0;
order.deviceID = ConfigName.getInstance().DeviceId;
order.userID = ConfigName.getInstance().user.userID;
QueryDB.AddOrder(order);

BPA_SUBORDER suborder=new BPA_SUBORDER();
suborder.deviceID = ConfigName.getInstance().DeviceId;
suborder.userID = ConfigName.getInstance().user.userID;
suborder.orderID = order.id;
suborder.goodsID = ((BPA_GOODS) data).id;
suborder.number = 1;
suborder.status=0;
QueryDB.AddSubOrder(suborder);
BusinessServer.Get().AddCommodity(suborder);
T.show(this, "下发成功!");
break;
case R.id.button_qy://启用按钮


+ 6
- 0
app/src/main/java/com/example/bpa/view/mode/ResGoodsMake.java View File

@@ -1,6 +1,7 @@
package com.example.bpa.view.mode;

import com.example.bpa.db.mode.BPA_GOODS;
import com.example.bpa.db.mode.BPA_SUBORDER;

import java.util.ArrayList;
import java.util.List;
@@ -17,6 +18,10 @@ public class ResGoodsMake {
* 商品制作配方
*/
public ArrayList<ResGoodsRecipe> recipes;
/**
* 商品订单数据
*/
public BPA_SUBORDER subOrder;
/**
* 制作状态
*/
@@ -36,6 +41,7 @@ public class ResGoodsMake {
public ResGoodsMake()
{
good=new BPA_GOODS();
subOrder=new BPA_SUBORDER();
recipes=new ArrayList<>();
makeStatus=MakeStatus.等待制作;
makeMs="";


+ 20
- 0
app/src/main/java/com/example/bpa/view/mode/ResReceiveOrder.java View File

@@ -0,0 +1,20 @@
package com.example.bpa.view.mode;

import com.example.bpa.db.mode.BPA_ORDER;
import com.example.bpa.db.mode.BPA_SUBORDER;

import java.util.List;

/**
* 接收订单Model
*/
public class ResReceiveOrder {
/**
* 主订单
*/
public BPA_ORDER order;
/**
* 子订单
*/
public List<BPA_SUBORDER> subOrder;
}

Loading…
Cancel
Save