bug修改

dev
wany 2025-03-25 09:14:01 +08:00
parent 30e93a12c5
commit 4e79a6fbc0
23 changed files with 314 additions and 105 deletions

View File

@ -722,4 +722,26 @@ public abstract class BaseOrderTransfer<M extends BaseOrderTransfer<M>> extends
return getStr("ticket_code");
}
/**
* name: ordercluster_id
* type: INT(10)
* isNullable: YES
* isPrimaryKey: NO
* defaultValue:
* @param orderclusterId ordercluste id
*/
@JSONField(name="ordercluster_id")
public void setOrderclusterId(Integer orderclusterId) {
set("ordercluster_id", orderclusterId);
}
/**
* @return ordercluster_id ordercluste id
*/
@JSONField(name="ordercluster_id")
public Integer getOrderclusterId() {
return getInt("ordercluster_id");
}
}

View File

@ -218,7 +218,7 @@ public class OrderclusterService extends BaseService {
Page<Record> page = Db.paginateByFullSql(pp.getPage(), pp.getSize(), totalRowSql, findSql, paraList.toArray());
List<Record> list = page.getList();
setOverWeight(list);
setOverWeight2(list);
setTruckNum(list);
return page;
@ -730,6 +730,50 @@ public class OrderclusterService extends BaseService {
}
}
public void setOverWeight2(List<Record> list) {
// 使用已完成的订单动态计算剩余量
if (list == null || list.isEmpty()) {
return;
}
StringBuilder ids = new StringBuilder();
Map<Integer, Record> map = new HashMap<>();
for (Record record : list) {
if (ids.length() > 0) {
ids.append(", ");
}
record.set("over_weight", record.get("total_weight")); // 默认用 total_weight 填充,下面根据实际的数据覆盖
record.set("complete_weight", 0);
ids.append(record.getStr("id"));
map.put(record.getInt("id"), record);
}
String sql = " select t.ordercluster_id, sum(t.weight) weight from order_transfer t \n" +
" where t.state = ? \n" +
" and t.ordercluster_id in(" + ids.toString() + ") \n" +
" group by t.ordercluster_id ";
List<Record> orderlist = Db.find(sql, OrderStateEnum.RECEIVED.getStateid());
for (Record cli : orderlist) {
int ordercluster_id = cli.getInt("ordercluster_id");
BigDecimal weight = cli.getBigDecimal("weight");
if (map.containsKey(ordercluster_id) && weight != null) {
Record record = map.get(ordercluster_id);
if (record.getBigDecimal("total_weight").compareTo(weight) == 0) {
record.set("over_weight", 0);
} else {
record.set("over_weight", record.getBigDecimal("total_weight").subtract(weight).setScale(2, BigDecimal.ROUND_HALF_UP));
}
record.set("complete_weight", weight.setScale(2, BigDecimal.ROUND_HALF_UP));
}
}
}
/**
*
*

View File

@ -165,7 +165,6 @@ public class OrderEndService extends BaseService {
log.info("数据结果为空");
if (StrKit.notBlank(customerId) &&StrKit.notBlank(tm) &&StrKit.notBlank(supermarketId)
&&StrKit.notBlank(String.valueOf(saleType))
&&StrKit.notBlank(String.valueOf(invoiceType))
&&StrKit.notBlank(String.valueOf(productId))
&&StrKit.notBlank(String.valueOf(orderclusterId))
){
@ -173,7 +172,6 @@ public class OrderEndService extends BaseService {
"_" + tm +
"_" + supermarketId +
"_" + saleType +
// "_" + invoiceType +
"_" + productId +
"_" + orderclusterId;
Record first = Db.findFirst("select * from order_end WHERE ID = '" + id + "'");
@ -216,7 +214,6 @@ public class OrderEndService extends BaseService {
"_" + DateTimeUtil.sdf.get().format(o.getDate("date")) +
"_" + o.getSupermarketId() +
"_" + o.getSaleType() +
// "_" + o.getInvoiceType() +
"_" + o.getProductId() +
"_" + o.getOrderclusterId());
return o;

View File

@ -524,7 +524,7 @@ public class OrderTempService extends BaseService {
"SUM( TOTAL_PRICE ) TOTAL_PRICE,\n" +
"SALE_TYPE,\n" +
"PRODUCT_ID,\n" +
"INVOICE_TYPE,\n" +
// "INVOICE_TYPE,\n" +
"ORDERCLUSTER_ID,\n" +
"ifnull(COUNT( SN ), 0 ) COUNT \n" +
"FROM\n" +

View File

@ -630,7 +630,8 @@ public class OrderStatService {
List<Record> sale_list = Db.find("SELECT\n" +
" s.id AS sandfarm_id,\n" +
" s.NAME AS sandfarm_name,\n" +
" IFNULL( SUM( CASE WHEN t.supermarket_id = 1 THEN t.count END ), 0 ) AS xsl_1,\n" +
// " IFNULL( SUM( CASE WHEN t.supermarket_id = 1 THEN t.count END ), 0 ) AS xsl_1,\n" +
" 0 AS xsl_1,\n" +
" IFNULL( SUM( CASE WHEN t.supermarket_id = 1 THEN t.source_weight END ), 0 ) AS xse_1,\n" +
" IFNULL( SUM( CASE WHEN t.supermarket_id = 1 THEN t.weight END ), 0 ) AS xss_1,\n" +
" IFNULL( SUM( t.weight ), 0 ) AS weight \n" +
@ -3246,7 +3247,7 @@ public class OrderStatService {
" ifnull( sum( CASE WHEN g.supermarket_id = 2 THEN g.count END ), 0 ) xsc_2,\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 2 THEN g.source_weight END ), 0 ) xss_2,\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 2 THEN g.weight END ), 0 ) xsw_2,\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 2 THEN g.trans_price END ), 0 ) xst_2,\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 2 THEN g.trans_price END ), 0 ) xst_2\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 3 THEN g.count END ), 0 ) xsc_3,\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 3 THEN g.source_weight END ), 0 ) xss_3,\n" +
" ifnull( sum( CASE WHEN g.supermarket_id = 3 THEN g.weight END ), 0 ) xsw_3,\n" +
@ -3261,7 +3262,7 @@ public class OrderStatService {
" ifnull( t.trans_co_id, ifnull( ot.trans_co_id, 0 ) ) trans_co_id,\n" +
" t.supermarket_id,\n" +
" t.truck_license license,\n" +
" ifnull( count( t.sn ), 0 ) count,\n" +
" ifnull( count( ot.sn ), 0 ) count,\n" +
" ifnull( sum( t.weight ), 0 ) weight,\n" +
" ifnull( sum( ot.weight ), 0 ) source_weight,\n" +
" ifnull( sum( ot.trans_price ), 0 ) trans_price \n" +

View File

@ -188,38 +188,39 @@ public class DeviceThread extends Thread {
// 一个摄像头只能连一次
Camera camera = new Camera(which + "_camera", cameraconf.getString("ip"));
LEDThread led = new LEDThread(which + "_led", ledconf.getString("ip"), ledconf.getIntValue("port"));
AbsScale scale;
AbsScale scale = null;
// 根据砂站id兼容不同的表头
if (supermarket_id == 3) { // 城隍用了耀华的表头
if (supermarket_id == 1) { // 城隍用了耀华的表头
scale = new YaoHuaScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
} else if (supermarket_id == 4) { // 石畈用了两个不一样的表头
if (scaleconf.getIntValue("port") == 10001) { // 根据现场实际接线配置
// scale = new YaoHuaScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// 2021-03-07 原来地方1号传感器故障让二期地磅厂家更换传感器
scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
} else {
scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
}
} else if (supermarket_id == 5) {
// 2021-04-15 融嘉入口磅换了
if (which.startsWith(Enums.CtrlFlowEnum.R.name())) {
scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
} else {
scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
}
} else if (supermarket_id == 7) {
if (which.startsWith(Enums.CtrlFlowEnum.C.name())) {
scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
} else {
scale = new KeLiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
}
} else if (supermarket_id == 8 || supermarket_id == 9) {
scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
} else {
scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
}
// else if (supermarket_id == 4) { // 石畈用了两个不一样的表头
// if (scaleconf.getIntValue("port") == 10001) { // 根据现场实际接线配置
//// scale = new YaoHuaScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
//
// // 2021-03-07 原来地方1号传感器故障让二期地磅厂家更换传感器
// scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// } else {
// scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// }
// } else if (supermarket_id == 5) {
// // 2021-04-15 融嘉入口磅换了
// if (which.startsWith(Enums.CtrlFlowEnum.R.name())) {
// scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// } else {
// scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// }
// } else if (supermarket_id == 7) {
// if (which.startsWith(Enums.CtrlFlowEnum.C.name())) {
// scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// } else {
// scale = new KeLiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// }
// } else if (supermarket_id == 8 || supermarket_id == 9) {
// scale = new DingsongScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// } else {
// scale = new XiShuiScale(which + "_scale", scaleconf.getString("ip"), scaleconf.getIntValue("port"));
// }
PLC plc = null;
for (Map.Entry<String, PLC> entry : plcMap.entrySet()) {

View File

@ -160,18 +160,18 @@ public class InController extends Controller implements Runnable {
log.error(e.getMessage(), e);
}
log.debug("%s 【%s】上磅重置地感线圈状态", getWhich(), pair.license);
log.debug("%s 【%s】上磅重置雷达信号状态", getWhich(), pair.license);
try {
getPlc().write(getSensor1Reset()); // 重置前地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
log.debug("%s 【%s】上磅等待地感线圈状态", getWhich(), pair.license);
log.debug("%s 【%s】上磅等待雷达信号状态"+getSensor1(), getWhich(), pair.license);
try {
while (!getResetFlow()) { // 流程没有被重置,就一直等待地感线圈状态
while (!getResetFlow()) { // 流程没有被重置,就一直等待雷达信号状态
if (getPlc().read(getSensor1())) { // 读取前地感状态
break;
}
@ -181,7 +181,7 @@ public class InController extends Controller implements Runnable {
log.error(e.getMessage(), e);
}
// 重置流程,这个位置要重置地感线圈状态
// 重置流程,这个位置要重置雷达信号状态
if (getResetFlow()) {
try {
getPlc().write(getSensor1Reset()); // 重置前地感状态
@ -293,13 +293,13 @@ public class InController extends Controller implements Runnable {
try {
getPlc().write(getSensor2Reset()); // 重置后地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
log.debug("%s 【%s】下磅等待地感线圈状态", getWhich(), pair.license);
log.debug("%s 【%s】下磅等待雷达信号状态", getWhich(), pair.license);
try {
while (!getResetFlow()) { // 流程没有被重置,就一直等待地感线圈状态
while (!getResetFlow()) { // 流程没有被重置,就一直等待雷达信号状态
if (getPlc().read(getSensor2())) { // 读取后地感状态
break;
}
@ -313,7 +313,7 @@ public class InController extends Controller implements Runnable {
try {
getPlc().write(getSensor2Reset()); // 重置后地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
setResetFlow(false);
@ -328,7 +328,7 @@ public class InController extends Controller implements Runnable {
try {
getPlc().write(getSensor2Reset()); // 重置后地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
setResetFlow(false);

View File

@ -159,18 +159,18 @@ public class OutController extends Controller implements Runnable {
log.error(e.getMessage(), e);
}
log.debug("%s 【%s】上磅重置地感线圈状态", getWhich(), pair.license);
log.debug("%s 【%s】上磅重置雷达信号状态", getWhich(), pair.license);
try {
getPlc().write(getSensor1Reset()); // 重置前地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
log.debug("%s 【%s】上磅等待地感线圈状态", getWhich(), pair.license);
log.debug("%s 【%s】上磅等待雷达信号状态", getWhich(), pair.license);
try {
while (!getResetFlow()) { // 流程没有被重置,就一直等待地感线圈状态
while (!getResetFlow()) { // 流程没有被重置,就一直等待雷达信号状态
if (getPlc().read(getSensor1())) { // 读取前地感状态
break;
}
@ -180,10 +180,10 @@ public class OutController extends Controller implements Runnable {
log.error(e.getMessage(), e);
}
// 获取到地感线圈状态后,等待 5 秒后开始称重
// 获取到雷达信号状态后,等待 5 秒后开始称重
Thread.sleep(getScaleWaitTime());
// 重置流程,这个位置要重置地感线圈状态
// 重置流程,这个位置要重置雷达信号状态
if (getResetFlow()) {
try {
getPlc().write(getSensor1Reset()); // 重置前地感状态
@ -203,7 +203,7 @@ public class OutController extends Controller implements Runnable {
log.error(e.getMessage(), e);
}
// 获取到地感线圈状态后,等待 5 秒后开始称重
// 获取到雷达信号状态后,等待 5 秒后开始称重
Thread.sleep(getScaleWaitTime());
double weight = 0;
@ -303,13 +303,13 @@ public class OutController extends Controller implements Runnable {
try {
getPlc().write(getSensor2Reset()); // 重置后地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
log.debug("%s 【%s】下磅等待地感线圈状态", getWhich(), pair.license);
log.debug("%s 【%s】下磅等待雷达信号状态", getWhich(), pair.license);
try {
while (!getResetFlow()) { // 流程没有被重置,就一直等待地感线圈状态
while (!getResetFlow()) { // 流程没有被重置,就一直等待雷达信号状态
if (getPlc().read(getSensor2())) { // 读取后地感状态
break;
}
@ -323,7 +323,7 @@ public class OutController extends Controller implements Runnable {
try {
getPlc().write(getSensor2Reset()); // 重置后地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
setResetFlow(false);
@ -338,7 +338,7 @@ public class OutController extends Controller implements Runnable {
try {
getPlc().write(getSensor2Reset()); // 重置后地感状态
} catch (IOException e) {
log.debug("%s 【%s】 重置地感线圈状态失败", getWhich(), pair.license);
log.debug("%s 【%s】 重置雷达信号状态失败", getWhich(), pair.license);
log.error(e.getMessage(), e);
}
setResetFlow(false);

View File

@ -275,7 +275,7 @@ public class PLC extends Device {
public static void main(String[] args) {
try {
PLC plc = new PLC("_plc", "192.168.20.20", 502, com.cowr.local.ssjygl.devicectrl.common.DeviceThread.defaultAddressTable);
PLC plc = new PLC("_plc", "192.168.20.21", 502, com.cowr.local.ssjygl.devicectrl.common.DeviceThread.defaultAddressTable);
plc.connect();
plc.isConnected();
// plc.write("rodIn1Down");

View File

@ -110,7 +110,7 @@ public class YaoHuaScale extends AbsScale {
public static void main(String[] args) {
YaoHuaScale s = new YaoHuaScale("scale", "192.168.20.30", 10001);
YaoHuaScale s = new YaoHuaScale("scale", "192.168.20.31", 10001);
try {
boolean connect = s.connect();
@ -123,9 +123,20 @@ public class YaoHuaScale extends AbsScale {
for (int i = 0; i < 100; i++) {
try {
st = System.currentTimeMillis();
if (!s.isConnected()) {
s.connect();
}
double weigh = s.weigh15();
System.out.println("end:" + weigh + ", tm: " + (System.currentTimeMillis() - st));
if (weigh > 0) {
} else {
// 读数错误,断开连接,下次读取时重连
s.disconnect();
}
st = System.currentTimeMillis();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {

View File

@ -29,7 +29,7 @@ public class ExcelHelper {
log.debug("读取模板耗时:" + (System.currentTimeMillis() - st));
Sheet sheet = workbook.getSheetAt(0);
if ("tpl_bill_full.xlsx".equals(tplFile.getName())) {
if ("tpl_bill_full.xlsx".equals(tplFile.getName()) || "tpl_bill_full1.xlsx".equals(tplFile.getName())) {
addrMap = JsdCellAddresses.addrMap;
datetimePrint = JsdCellAddresses.datetimePrint;
} else {

View File

@ -8,10 +8,14 @@ import java.util.Map;
// 保存预设的发票内容单元格位置
// 结算单
public class JsdCellAddresses {
// 订单号
public static final CellAddress sn = makeCellAddress("d8");
// 开票时间
public static final CellAddress datetimePrint = makeCellAddress("o8");
// 客户名称
public static final CellAddress clientName = makeCellAddress("c9");
public static final CellAddress productName = makeCellAddress("b14");
// 净重
public static final CellAddress goodsNetWeight = makeCellAddress("g18");
@ -31,17 +35,23 @@ public class JsdCellAddresses {
public static final CellAddress priceGoodsTotalUpper = makeCellAddress("m17");
// 备注
public static final CellAddress remark = makeCellAddress("m20");
public static final CellAddress memo = makeCellAddress("m21");
// 开票人
public static final CellAddress drawer = makeCellAddress("e24");
// 车牌号
public static final CellAddress truckLicense = makeCellAddress("m11");
public static final CellAddress dest = makeCellAddress("d9");
public static final CellAddress origin = makeCellAddress("e20");
public static Map<String, CellAddress> addrMap = new HashMap<>();
static {
addrMap.put("datatimePrint", datetimePrint);
addrMap.put("goodsSetWeight", goodsSetWeight);
addrMap.put("clientName", clientName);
addrMap.put("goodsName", productName);
addrMap.put("goodsNetWeight", goodsNetWeight);
addrMap.put("goodsTareWeight", goodsTareWeight);
addrMap.put("goodsGrossWeight", goodsGrossWeight);
@ -51,6 +61,10 @@ public class JsdCellAddresses {
addrMap.put("remark", remark);
addrMap.put("drawer", drawer);
addrMap.put("truck_license", truckLicense);
addrMap.put("dest", dest);
addrMap.put("origin", origin);
addrMap.put("sn", sn);
addrMap.put("memo", memo);
}
private static CellAddress makeCellAddress(String addr) {

View File

@ -50,6 +50,10 @@ public class HbrsmsService {
public void put(OrderTemp order, Transport transport) {
}
public void put1(OrderTemp order, Transport transport) {
Hbrsms hbrsms = new Hbrsms();
hbrsms.setCategory(0); //0砂石1卵石2 - 土
String billerName = Config.configprop.get("hbrsms.billerName");

View File

@ -148,8 +148,12 @@ public class LocalOrderService {
try {
printdata.set("first_weight", transport.getFirstWeight());
printdata.set("second_weight", transport.getSecondWeight());
if (printerId == Enums.PrinterIdEnum.printer2.name()){
Config.deviceThread.print(printerId, getPrintFile1(printdata));
} else {
Config.deviceThread.print(printerId, getPrintFile(printdata));
}
Config.deviceThread.print(printerId, getPrintFile(printdata));
out.set("print", true);
} catch (Exception e) {
out.set("print", "打印指令发送失败");
@ -224,6 +228,7 @@ public class LocalOrderService {
String transDistance = ""; // 运输距离
String priceTransTotal = ""; // 运输总价
String priceTransTotalUpper = ""; // 运输总价大写
String memo = "";
if (sntype == OrderTypeEnum.SALE.getTypeid()) {
@ -251,12 +256,12 @@ public class LocalOrderService {
return null;
}
origin = supermarket.getName(); // 运输起点
// origin = supermarket.getName(); // 运输起点
dest = clientName; // 运输终点
vendor = CacheData.print_vendor; // 销售方名称
vendorTaxId = CacheData.print_vendorTaxId; // 销售方纳税人识别号
remark = "销售订单:" + sn;
// remark = "销售订单:" + sn;
if (order.get("total_price") != null) {
paid = String.format("%.2f", order.getBigDecimal("total_price")); // 总价
@ -284,13 +289,13 @@ public class LocalOrderService {
goodsGrossWeight = String.format("%.2f", first_weight); // 毛重
goodsSetWeight = goodsNetWeight;
goodsNetWeight = String.format("%.2f", second_weight.subtract(first_weight)); // 计算净重
goodsNetWeight = String.format("%.2f", first_weight.subtract(second_weight)); // 计算净重
Sandfarm sandfarm = Sandfarm.dao.findById(order.get("sandfarm_id"));
Supermarket sandfarm = Supermarket.dao.findById(order.get("sandfarm_id"));
if (sandfarm == null) {
log.error("获取场信息失败 %s", order.getInt("sandfarm_id"));
log.error("获取取土场信息失败 %s", order.getInt("sandfarm_id"));
return null;
}
@ -304,24 +309,24 @@ public class LocalOrderService {
origin = sandfarm.getName(); // 运输起点
dest = supermarket.getName(); // 运输终点
remark = "转运订单:" + sn;
remark = "原材料运输订单";
if (order.get("source_weight") != null) {
remark += String.format("\n底单重量%.2f", order.getBigDecimal("source_weight"));
}
// 运输单价,车辆载重对应的起步价
priceTrans = TransPriceService.me.getOrderStartTransPrice(order.getInt("trans_co_id"), Math.abs(order.getDouble("weight"))) + "";
priceGoods = StrUtil.getRecordStr(order, "unit_price"); // 商品单价
transDistance = StrUtil.getRecordStr(order, "trans_distance"); // 运输距离
priceTransTotal = StrUtil.getRecordStr(order, "trans_price"); // 运输总价
if (order.get("trans_price") != null) {
priceTransTotalUpper = ChineseNumberUtil.getChineseNumber(order.getBigDecimal("trans_price").doubleValue());
} else {
priceTransTotalUpper = ""; // 运输总价大写
}
// priceTrans = TransPriceService.me.getOrderStartTransPrice(order.getInt("trans_co_id"), Math.abs(order.getDouble("weight"))) + "";
//
priceGoods = StrUtil.getRecordStr(order, "sn"); // 商品单价
// transDistance = StrUtil.getRecordStr(order, "trans_distance"); // 运输距离
// priceTransTotal = StrUtil.getRecordStr(order, "trans_price"); // 运输总价
//
// if (order.get("trans_price") != null) {
// priceTransTotalUpper = ChineseNumberUtil.getChineseNumber(order.getBigDecimal("trans_price").doubleValue());
// } else {
// priceTransTotalUpper = ""; // 运输总价大写
// }
} else if (sntype == OrderTypeEnum.TEMP.getTypeid()) {
int decimal;
int total_weight_decimal = 0;
@ -364,7 +369,7 @@ public class LocalOrderService {
return null;
}
origin = supermarket.getName(); // 运输起点
origin = "结算重量";
dest = StrUtil.getRecordStr(order, "customer_receiver_address"); // 运输终点
vendor = CacheData.print_vendor; // 销售方名称
@ -379,6 +384,8 @@ public class LocalOrderService {
}
}
memo = StrUtil.getRecordStr(order, "memo");
// if(StrKit.notBlank(origin)){
// remark += "\r\n发货地" + origin;
// }
@ -457,6 +464,7 @@ public class LocalOrderService {
out.put("goodsTareWeight", new BigDecimal(goodsTareWeight).setScale(2, RoundingMode.HALF_UP).toString());
out.put("goodsGrossWeight", new BigDecimal(goodsGrossWeight).setScale(2, RoundingMode.HALF_UP).toString());
// out.put("qrcode", sn);
out.put("sn",sn);
out.put("serial", sn);
out.put("datetimePrint", sdf.get().format(new Date()));
out.put("clientName", clientName);
@ -485,6 +493,7 @@ public class LocalOrderService {
out.put("vendor", vendor);
out.put("vendorTaxId", vendorTaxId);
out.put("remark", remark);
out.put("memo", memo);
out.put("drawer", StrUtil.getRecordStr(order, "settlement_user_name"));
out.put("truck_license", StrUtil.getRecordStr(order, "truck_license"));
@ -511,14 +520,68 @@ public class LocalOrderService {
Workbook wb = null;
try {
Object invoice_type = data.get("invoice_type"); // 可能是 null
wb = ExcelHelper.genExcel(data, new File(PathKit.getRootClassPath() + "/tpl_bill_full.xlsx"));
if ("2".equals(invoice_type)) { // 2020-09-29 开专票的订单先用结算单模板
wb = ExcelHelper.genExcel(data, new File(PathKit.getRootClassPath() + "/tpl_bill_full.xlsx"));
} else { // 其他的用冠名发票
wb = ExcelHelper.genExcel(data, new File(PathKit.getRootClassPath() + "/tpl.xlsx"));
// Object invoice_type = data.get("invoice_type"); // 可能是 null
//
// if ("2".equals(invoice_type)) { // 2020-09-29 开专票的订单先用结算单模板
// wb = ExcelHelper.genExcel(data, new File(PathKit.getRootClassPath() + "/tpl_bill_full.xlsx"));
// } else { // 其他的用冠名发票
// wb = ExcelHelper.genExcel(data, new File(PathKit.getRootClassPath() + "/tpl.xlsx"));
// }
if (wb == null) {
log.error("获取 Workbook 失败");
return null;
}
log.debug("生成文件耗时1%s", System.currentTimeMillis() - st);
File out = new File(String.format("%s%s%s-%d.xlsx",
Config.getRootPath() + File.separator + Const.PringExcelTmpFolder,
File.separator,
order.getStr("sn"),
System.currentTimeMillis()
));
try (FileOutputStream output = new FileOutputStream(out)) {
wb.write(output);
log.debug("生成票据打印文件: %s", out.getAbsolutePath());
log.debug("生成文件耗时2%s", System.currentTimeMillis() - st);
return out;
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
} finally {
if (wb != null) {
try {
wb.close();
wb = null;
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
}
public File getPrintFile1(Record order) {
long st = System.currentTimeMillis();
Map<String, Object> data = getPrintModel(order);
if (data == null) {
return null;
}
Workbook wb = null;
try {
wb = ExcelHelper.genExcel(data, new File(PathKit.getRootClassPath() + "/tpl_bill_full1.xlsx"));
if (wb == null) {
log.error("获取 Workbook 失败");
return null;
@ -597,7 +660,12 @@ public class LocalOrderService {
cmd.set("printer", printerId);
try {
Config.deviceThread.print(printerId, getPrintFile(printdata));
if(printerId == Enums.PrinterIdEnum.printer2.name()){
Config.deviceThread.print(printerId, getPrintFile1(printdata));
}else {
Config.deviceThread.print(printerId, getPrintFile(printdata));
}
cmd.set("status", true);
ActionCmdLogSyncService.me.save(cmd.toJson(), sysuser);

View File

@ -246,7 +246,8 @@ public class OrderTempController extends BaseController {
String sn = get("sn");
String printer = get("printer", Enums.PrinterIdEnum.printer1.name());
if (Integer.parseInt(sn.substring(10, 12)) != OrderTypeEnum.TEMP.getTypeid()) {
if (Integer.parseInt(sn.substring(10, 12)) != OrderTypeEnum.TEMP.getTypeid() &&
Integer.parseInt(sn.substring(10, 12)) != OrderTypeEnum.TRANSFER.getTypeid()) {
renderJson(Result.failed("sn 不能为 null"));
} else {
renderJson(LocalOrderService.me.print(sn, printer, tokenuser));

View File

@ -742,6 +742,7 @@ public class OrderTempSyncService {
// 根据客户消息判断是否需要打折
CustomerDiscount customerDiscount = CustomerDiscountService.me.getDiscountByCustomerId(customer.getId()); // 预付费结算
if (Objects.nonNull(customerDiscount) && Objects.nonNull(customerDiscount.getDiscount()) && 12 != transport.getSupermarketId()){
order.setMemo("水杂点"+(100-customerDiscount.getDiscount())+"%");
net_weight = net_weight.multiply(BigDecimal.valueOf(customerDiscount.getDiscount()/100));
}
@ -870,7 +871,7 @@ public class OrderTempSyncService {
order.setState(OrderStateEnum.RECEIVED.getStateid()); // 直接完成,没有前面的过程
order.setSaleType(ordercluster.getSaleType());
order.setCreateTime(now);
order.setMemo(memo); // 备注
// order.setMemo(memo); // 备注
// 更新 transport 出入场信息
transport.setState(OrderStateEnum.RECEIVED.getStateid()); // 标记 transport state 为 5 ,表示出入场记录完成

View File

@ -53,10 +53,11 @@ public class OrderTransferController extends BaseController {
String transport_id = get("transport_id");
String old_sn = get("old_sn");
Integer product_id = getInt("product_id",1);
String printer = get("printer", Enums.PrinterIdEnum.printer1.name());
String printer = get("printer", Enums.PrinterIdEnum.printer2.name());
Double source_weight = getParaToDouble("source_weight");
String ticket_code = get("ticket_code");
renderJson(OrderTransferSyncService.me.pay(uuid, transport_id, old_sn, product_id, printer, source_weight, tokenuser, ticket_code));
Integer ordercluster_id = getInt("ordercluster_id");
renderJson(OrderTransferSyncService.me.pay(uuid, transport_id, old_sn, product_id, printer, source_weight, tokenuser, ticket_code,ordercluster_id));
}
/**
@ -87,7 +88,7 @@ public class OrderTransferController extends BaseController {
}
String sn = get("sn");
String printer = get("printer", Enums.PrinterIdEnum.printer1.name());
String printer = get("printer", Enums.PrinterIdEnum.printer2.name());
if (Integer.parseInt(sn.substring(10, 12)) != OrderTypeEnum.TRANSFER.getTypeid()) {
renderJson(Result.failed("sn 不能为 null"));

View File

@ -12,7 +12,7 @@ public class OrderTransferPayValidator extends CrudParamValidator {
validateString("uuid", 32, 32, "uuid", "uuid 长度 32必填");
validateString("transport_id", 32, 32, "transport_id", "transport_id 长度 32必填");
// validateInteger("sandfarm_id", 1, 2147483647, "sandfarm_id", "sandfarm_id 范围 1~2147483647");
validateString("old_sn", 1, 16, "old_sn", "old_sn 长度 1~16");
// validateString("old_sn", 1, 16, "old_sn", "old_sn 长度 1~16");
if (StrKit.notBlank(c.get("source_weight"))) {
validateDouble("source_weight", 0.01, 9999, "source_weight", "source_weight 范围 0.01~999");

View File

@ -45,7 +45,8 @@ public class OrderTransferSyncService {
String printerId,
Double source_weight,
Sysuser sysuser,
String ticket_code
String ticket_code,
Integer ordercluster_id
) {
Transport transport = Transport.dao.findById(transport_id);
if (transport == null) {
@ -86,19 +87,20 @@ public class OrderTransferSyncService {
OrderTransfer order = new OrderTransfer();
order.setUuid(uuid);
if (old_sn.length() != 16) {
return Result.failed("【%s】取土场订单编号错误", old_sn);
}
// if (old_sn.length() != 16) {
// return Result.failed("【%s】取土场订单编号错误", old_sn);
// }
// YYYYMMDD + 两位销售点id避免离线生成订单号重复 + 两位订单类型 + 四位序列号
Integer sandfarm_id = Integer.valueOf(old_sn.substring(8, 10));
// Integer sandfarm_id = Integer.valueOf(old_sn.substring(8, 10));
Supermarket byId = Supermarket.dao.findById(sandfarm_id);
if (Objects.isNull(byId) || byId.getType() != 1) {
return Result.failedstr("当前订单号不是取土场订单");
}
// Supermarket byId = Supermarket.dao.findById(sandfarm_id);
// if (Objects.isNull(byId) || byId.getType() != 1) {
// return Result.failedstr("当前订单号不是取土场订单");
// }
order.setOldSn(old_sn);
order.setSandfarmId(sandfarm_id);
order.setOrderclusterId(ordercluster_id);
if (order.checkDuplicate("uuid")) {
return Result.failed("【%s】已经存在", uuid);
@ -120,6 +122,15 @@ public class OrderTransferSyncService {
order.setSourceWeight(new BigDecimal(source_weight));
}
Ordercluster ordercluster = Ordercluster.dao.findById(ordercluster_id);
if (ordercluster == null) {
return Result.failedstr("原材料运输订单【%s】信息不存在", ordercluster_id);
}
if (ordercluster.getState() == OrderStateEnum.INVALID.getStateid()) {
return Result.failedstr("原材料运输订单【%s】已完结请重新下单", ordercluster_id);
}
order.setSandfarmId(ordercluster.getSupermarketId());
TicketReceive ticketReceive = TicketReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), ticket_code);
if (ticketReceive == null) {
return Result.failed("没有有效的结算单领用记录,或者结算单已经被使用");
@ -174,7 +185,7 @@ public class OrderTransferSyncService {
}
BigDecimal distance = SupermarketSandfarmDistanceService.me.getDistance(transport.getSupermarketId(), sandfarm_id);
BigDecimal distance = SupermarketSandfarmDistanceService.me.getDistance(transport.getSupermarketId(), ordercluster.getSupermarketId());
order.setTransDistance(distance); // 转运运距
BigDecimal transUnitPrice = new BigDecimal(TransPriceService.me.getTransferStartTransPrice(order.getTransDistance().doubleValue()));
order.setTransUnitPrice(transUnitPrice); // 转运单价
@ -201,6 +212,18 @@ public class OrderTransferSyncService {
return false;
}
if (ordercluster.getState() == OrderStateEnum.INITIAL.getStateid()) {
ordercluster.setState(OrderStateEnum.ENTERED.getStateid());
ret = ordercluster.update();
if (!ret) {
return false;
}
synctask.addUpdateData(ordercluster);
}
// Stock stock = Stock.dao.findByIds(transport.getSupermarketId(), product_id);
// if (stock == null) {
// log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId());

View File

@ -3,8 +3,10 @@ package com.cowr.local.ssjygl.transport;
import com.cowr.common.base.BaseController;
import com.cowr.common.enums.Enums;
import com.cowr.common.view.Result;
import com.cowr.local.ssjygl.devicectrl.device.YaoHuaScale;
import com.cowr.local.ssjygl.main.AuthInterceptor;
import com.cowr.local.ssjygl.main.CliCacheData;
import com.cowr.local.ssjygl.main.Config;
import com.cowr.local.ssjygl.system.sysuser.SysuserSyncService;
import com.cowr.model.Sysuser;
import com.cowr.ssjygl.transport.LicenseValidator;
@ -16,6 +18,7 @@ import com.jfinal.kit.StrKit;
import com.jfinal.upload.UploadFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@ -292,6 +295,24 @@ public class TransportController extends BaseController {
renderJson(result ? Result.success(true) : Result.failed("抬闸失败"));
}
@Clear(AuthInterceptor.class)
public void getLedInfo() {
String which = getUpperCaseVal("which");
String text = get("text");
Config.deviceThread.getController(which).getLed().setInfo(" ", text);
}
@Clear(AuthInterceptor.class)
public void getWeightInfo() throws IOException {
YaoHuaScale s = new YaoHuaScale("scale", "192.168.20.30", 10001);
if(!s .isConnected()){
s.connect();
}
String which = getUpperCaseVal("which");
double v = Config.deviceThread.getController(which).getScale().weigh15();
renderJson(v);
}
@Before(TransportIdValidator.class)
public void cmdScale() {
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));

View File

@ -4,7 +4,7 @@
#user=root
#password=19999999
jdbcUrl=jdbc:mysql://192.168.66.47:3306/ssjy_xsct?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true
jdbcUrl=jdbc:mysql://192.168.20.2:3306/ssjy_xsct?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&useInformationSchema=true&serverTimezone=GMT%2B8&autoReconnect=true
user=root
password=Ssjy_xsx_890