From 740c681766dcad6aee7250de0d4fc36043776a81 Mon Sep 17 00:00:00 2001 From: "lisai17@sina.com" Date: Thu, 20 Aug 2020 17:30:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=9B=86=E5=9B=A2=E8=AE=A2?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cowr/common/utils/DateTimeUtil.java | 26 ++ .../com/cowr/model/base/BaseCustomer.java | 24 +- .../com/cowr/model/base/BaseOrdercluster.java | 180 +++++++----- .../com/cowr/model/base/BaseSupermarket.java | 52 +++- .../ssjygl/customer/CustomerValidator.java | 11 + .../ordercluster/OrderclusterService.java | 35 ++- .../ordercluster/OrderclusterValidator.java | 9 +- .../supermarket/SupermarketService.java | 6 - .../supermarket/SupermarketValidator.java | 5 +- .../product/SupermarketProductService.java | 2 +- .../ssjygl/devicectrl/device/LEDThread.java | 267 ++++++++++++++++++ .../order/ordersale/OrderSaleSyncService.java | 8 +- .../order/ordertemp/OrderTempSyncService.java | 33 ++- .../prepaytruck/PrepayTruckController.java | 82 ------ .../transport/TransportQueryService.java | 2 +- .../src/main/resources/dev/config.properties | 2 + .../ordercluster/OrderclusterSyncService.java | 55 +++- .../prepaydetail/PrepayDetailSyncService.java | 2 +- .../prepay/prepaytruck/DayValidator.java | 22 ++ .../prepaytruck/PrepayTruckController.java | 82 ++++++ .../prepaytruck/PrepayTruckSyncService.java | 147 ++++++++++ .../prepaytruck/PrepayTruckValidator.java | 37 +++ .../refunddetail/RefundDetailSyncService.java | 2 +- .../ssjygl/synctask/SyncTaskService.java | 3 +- .../system/sysuser/RegisterUserValidator.java | 21 +- .../system/sysuser/SysuserController.java | 9 +- .../system/sysuser/SysuserSyncService.java | 69 +++++ 27 files changed, 972 insertions(+), 221 deletions(-) rename {ssjygl-xsx-local/src/main/java/com/cowr/local => ssjygl-xsx-common/src/main/java/com/cowr}/ssjygl/supermarket/product/SupermarketProductService.java (97%) create mode 100644 ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java create mode 100644 ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/DayValidator.java create mode 100644 ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckSyncService.java create mode 100644 ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckValidator.java diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java b/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java index 8bd0010..a5279a6 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java @@ -4,6 +4,7 @@ import com.jfinal.kit.StrKit; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; public class DateTimeUtil { @@ -64,4 +65,29 @@ public class DateTimeUtil { return false; } } + + public static boolean isEarlyDate(String date, Date flag){ + try { + Date d = sdf.get().parse(date); + Calendar c = Calendar.getInstance(); + c.setTime(flag); + c.set(Calendar.HOUR_OF_DAY,0); + c.set(Calendar.MINUTE,0); + c.set(Calendar.SECOND,0); + c.set(Calendar.MILLISECOND,0); + + return d.getTime() < c.getTime().getTime(); + }catch (Exception e){ + return false; + } + } + + /** + * 是否早于当天 + * @param date + * @return + */ + public static boolean isEarlyToday(String date){ + return isEarlyDate(date, new Date()); + } } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseCustomer.java b/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseCustomer.java index 22ad4d1..377bfb2 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseCustomer.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseCustomer.java @@ -5,7 +5,7 @@ import com.jfinal.plugin.activerecord.IBean; import com.alibaba.fastjson.annotation.JSONField; /** - * Generated by COWR Sun May 17 21:43:18 CST 2020 + * Generated by COWR Thu Aug 20 11:16:08 CST 2020 * TableName: customer * Remarks: 客户相关 - 客户 * PrimaryKey: id @@ -262,5 +262,27 @@ public abstract class BaseCustomer> extends BaseModel< return getInt("type"); } + /** + * name: invoice_type + * type: INT(10) + * isNullable: NO + * isPrimaryKey: NO + * defaultValue: 1 + * @param invoiceType 1.普票,2.专票 + */ + @JSONField(name="invoice_type") + public void setInvoiceType(Integer invoiceType) { + set("invoice_type", invoiceType); + } + + + /** + * @return invoice_type 1.普票,2.专票 + */ + @JSONField(name="invoice_type") + public Integer getInvoiceType() { + return getInt("invoice_type"); + } + } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseOrdercluster.java b/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseOrdercluster.java index 4102022..989dcb9 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseOrdercluster.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseOrdercluster.java @@ -5,9 +5,9 @@ import com.jfinal.plugin.activerecord.IBean; import com.alibaba.fastjson.annotation.JSONField; /** - * Generated by COWR Fri Apr 17 16:59:35 CST 2020 + * Generated by COWR Thu Aug 20 14:45:13 CST 2020 * TableName: ordercluster - * Remarks: 订单相关 - 订单 + * Remarks: 订单相关 - 订单(固定供砂客户配额) * PrimaryKey: id */ @SuppressWarnings("serial") @@ -29,7 +29,7 @@ public abstract class BaseOrdercluster> extends Ba * @param id 主键 */ @JSONField(name="id") - public void setId(java.lang.Integer id) { + public void setId(Integer id) { set("id", id); } @@ -38,7 +38,7 @@ public abstract class BaseOrdercluster> extends Ba * @return id 主键 */ @JSONField(name="id") - public java.lang.Integer getId() { + public Integer getId() { return getInt("id"); } @@ -51,7 +51,7 @@ public abstract class BaseOrdercluster> extends Ba * @param uuid UUID 唯一验证 */ @JSONField(name="uuid") - public void setUuid(java.lang.String uuid) { + public void setUuid(String uuid) { set("uuid", uuid); } @@ -60,7 +60,7 @@ public abstract class BaseOrdercluster> extends Ba * @return uuid UUID 唯一验证 */ @JSONField(name="uuid") - public java.lang.String getUuid() { + public String getUuid() { return getStr("uuid"); } @@ -136,7 +136,7 @@ public abstract class BaseOrdercluster> extends Ba * isNullable: NO * isPrimaryKey: NO * defaultValue: - * @param cutoffTime 客户要求的送货截止时间 + * @param cutoffTime 客户要求的送货截止时间(限定的执行日期,只能在执行当前进行) */ @JSONField(name="cutoff_time") public void setCutoffTime(java.util.Date cutoffTime) { @@ -145,7 +145,7 @@ public abstract class BaseOrdercluster> extends Ba /** - * @return cutoff_time 客户要求的送货截止时间 + * @return cutoff_time 客户要求的送货截止时间(限定的执行日期,只能在执行当前进行) */ @JSONField(name="cutoff_time") public java.util.Date getCutoffTime() { @@ -177,10 +177,10 @@ public abstract class BaseOrdercluster> extends Ba /** * name: unit_price * type: DECIMAL(12,2) - * isNullable: NO + * isNullable: YES * isPrimaryKey: NO * defaultValue: - * @param unitPrice 单价 + * @param unitPrice 单价,以实际结算时的商品单价为准 */ @JSONField(name="unit_price") public void setUnitPrice(java.math.BigDecimal unitPrice) { @@ -189,7 +189,7 @@ public abstract class BaseOrdercluster> extends Ba /** - * @return unit_price 单价 + * @return unit_price 单价,以实际结算时的商品单价为准 */ @JSONField(name="unit_price") public java.math.BigDecimal getUnitPrice() { @@ -205,7 +205,7 @@ public abstract class BaseOrdercluster> extends Ba * @param state 1.新建, 2.执行中 5.完成,9.取消 */ @JSONField(name="state") - public void setState(java.lang.Integer state) { + public void setState(Integer state) { set("state", state); } @@ -214,7 +214,7 @@ public abstract class BaseOrdercluster> extends Ba * @return state 1.新建, 2.执行中 5.完成,9.取消 */ @JSONField(name="state") - public java.lang.Integer getState() { + public Integer getState() { return getInt("state"); } @@ -227,7 +227,7 @@ public abstract class BaseOrdercluster> extends Ba * @param supermarketId 超市id */ @JSONField(name="supermarket_id") - public void setSupermarketId(java.lang.Integer supermarketId) { + public void setSupermarketId(Integer supermarketId) { set("supermarket_id", supermarketId); } @@ -236,7 +236,7 @@ public abstract class BaseOrdercluster> extends Ba * @return supermarket_id 超市id */ @JSONField(name="supermarket_id") - public java.lang.Integer getSupermarketId() { + public Integer getSupermarketId() { return getInt("supermarket_id"); } @@ -271,7 +271,7 @@ public abstract class BaseOrdercluster> extends Ba * @param payType 支付方式: 1,现场支付; 2,在线支付 */ @JSONField(name="pay_type") - public void setPayType(java.lang.Integer payType) { + public void setPayType(Integer payType) { set("pay_type", payType); } @@ -280,7 +280,7 @@ public abstract class BaseOrdercluster> extends Ba * @return pay_type 支付方式: 1,现场支付; 2,在线支付 */ @JSONField(name="pay_type") - public java.lang.Integer getPayType() { + public Integer getPayType() { return getInt("pay_type"); } @@ -293,7 +293,7 @@ public abstract class BaseOrdercluster> extends Ba * @param createUserId 创建该记录的用户id */ @JSONField(name="create_user_id") - public void setCreateUserId(java.lang.Integer createUserId) { + public void setCreateUserId(Integer createUserId) { set("create_user_id", createUserId); } @@ -302,7 +302,7 @@ public abstract class BaseOrdercluster> extends Ba * @return create_user_id 创建该记录的用户id */ @JSONField(name="create_user_id") - public java.lang.Integer getCreateUserId() { + public Integer getCreateUserId() { return getInt("create_user_id"); } @@ -315,7 +315,7 @@ public abstract class BaseOrdercluster> extends Ba * @param createUserName 创建用户名 */ @JSONField(name="create_user_name") - public void setCreateUserName(java.lang.String createUserName) { + public void setCreateUserName(String createUserName) { set("create_user_name", createUserName); } @@ -324,7 +324,7 @@ public abstract class BaseOrdercluster> extends Ba * @return create_user_name 创建用户名 */ @JSONField(name="create_user_name") - public java.lang.String getCreateUserName() { + public String getCreateUserName() { return getStr("create_user_name"); } @@ -337,7 +337,7 @@ public abstract class BaseOrdercluster> extends Ba * @param reqReceipt 是否需要发票,0 默认不需要,1需要 */ @JSONField(name="req_receipt") - public void setReqReceipt(java.lang.Integer reqReceipt) { + public void setReqReceipt(Integer reqReceipt) { set("req_receipt", reqReceipt); } @@ -346,7 +346,7 @@ public abstract class BaseOrdercluster> extends Ba * @return req_receipt 是否需要发票,0 默认不需要,1需要 */ @JSONField(name="req_receipt") - public java.lang.Integer getReqReceipt() { + public Integer getReqReceipt() { return getInt("req_receipt"); } @@ -375,13 +375,13 @@ public abstract class BaseOrdercluster> extends Ba /** * name: product_id * type: INT(10) - * isNullable: YES + * isNullable: NO * isPrimaryKey: NO * defaultValue: * @param productId 品类id */ @JSONField(name="product_id") - public void setProductId(java.lang.Integer productId) { + public void setProductId(Integer productId) { set("product_id", productId); } @@ -390,20 +390,20 @@ public abstract class BaseOrdercluster> extends Ba * @return product_id 品类id */ @JSONField(name="product_id") - public java.lang.Integer getProductId() { + public Integer getProductId() { return getInt("product_id"); } /** * name: product_name * type: VARCHAR(255) - * isNullable: YES + * isNullable: NO * isPrimaryKey: NO * defaultValue: * @param productName 品类名称 */ @JSONField(name="product_name") - public void setProductName(java.lang.String productName) { + public void setProductName(String productName) { set("product_name", productName); } @@ -412,20 +412,20 @@ public abstract class BaseOrdercluster> extends Ba * @return product_name 品类名称 */ @JSONField(name="product_name") - public java.lang.String getProductName() { + public String getProductName() { return getStr("product_name"); } /** * name: customer_id * type: INT(10) - * isNullable: YES + * isNullable: NO * isPrimaryKey: NO * defaultValue: * @param customerId */ @JSONField(name="customer_id") - public void setCustomerId(java.lang.Integer customerId) { + public void setCustomerId(Integer customerId) { set("customer_id", customerId); } @@ -434,7 +434,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_id */ @JSONField(name="customer_id") - public java.lang.Integer getCustomerId() { + public Integer getCustomerId() { return getInt("customer_id"); } @@ -447,7 +447,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerName */ @JSONField(name="customer_name") - public void setCustomerName(java.lang.String customerName) { + public void setCustomerName(String customerName) { set("customer_name", customerName); } @@ -456,7 +456,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_name */ @JSONField(name="customer_name") - public java.lang.String getCustomerName() { + public String getCustomerName() { return getStr("customer_name"); } @@ -469,7 +469,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerTexpayerName 客户开票公司名称 */ @JSONField(name="customer_texpayer_name") - public void setCustomerTexpayerName(java.lang.String customerTexpayerName) { + public void setCustomerTexpayerName(String customerTexpayerName) { set("customer_texpayer_name", customerTexpayerName); } @@ -478,7 +478,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_texpayer_name 客户开票公司名称 */ @JSONField(name="customer_texpayer_name") - public java.lang.String getCustomerTexpayerName() { + public String getCustomerTexpayerName() { return getStr("customer_texpayer_name"); } @@ -491,7 +491,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerTexpayerNum 客户纳税人识别号 */ @JSONField(name="customer_texpayer_num") - public void setCustomerTexpayerNum(java.lang.String customerTexpayerNum) { + public void setCustomerTexpayerNum(String customerTexpayerNum) { set("customer_texpayer_num", customerTexpayerNum); } @@ -500,7 +500,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_texpayer_num 客户纳税人识别号 */ @JSONField(name="customer_texpayer_num") - public java.lang.String getCustomerTexpayerNum() { + public String getCustomerTexpayerNum() { return getStr("customer_texpayer_num"); } @@ -513,7 +513,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerAddress */ @JSONField(name="customer_address") - public void setCustomerAddress(java.lang.String customerAddress) { + public void setCustomerAddress(String customerAddress) { set("customer_address", customerAddress); } @@ -522,7 +522,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_address */ @JSONField(name="customer_address") - public java.lang.String getCustomerAddress() { + public String getCustomerAddress() { return getStr("customer_address"); } @@ -535,7 +535,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerPhone */ @JSONField(name="customer_phone") - public void setCustomerPhone(java.lang.String customerPhone) { + public void setCustomerPhone(String customerPhone) { set("customer_phone", customerPhone); } @@ -544,7 +544,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_phone */ @JSONField(name="customer_phone") - public java.lang.String getCustomerPhone() { + public String getCustomerPhone() { return getStr("customer_phone"); } @@ -557,7 +557,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerBankName */ @JSONField(name="customer_bank_name") - public void setCustomerBankName(java.lang.String customerBankName) { + public void setCustomerBankName(String customerBankName) { set("customer_bank_name", customerBankName); } @@ -566,7 +566,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_bank_name */ @JSONField(name="customer_bank_name") - public java.lang.String getCustomerBankName() { + public String getCustomerBankName() { return getStr("customer_bank_name"); } @@ -579,7 +579,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerBankAccount */ @JSONField(name="customer_bank_account") - public void setCustomerBankAccount(java.lang.String customerBankAccount) { + public void setCustomerBankAccount(String customerBankAccount) { set("customer_bank_account", customerBankAccount); } @@ -588,7 +588,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_bank_account */ @JSONField(name="customer_bank_account") - public java.lang.String getCustomerBankAccount() { + public String getCustomerBankAccount() { return getStr("customer_bank_account"); } @@ -601,7 +601,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerReceiverName 收货人 */ @JSONField(name="customer_receiver_name") - public void setCustomerReceiverName(java.lang.String customerReceiverName) { + public void setCustomerReceiverName(String customerReceiverName) { set("customer_receiver_name", customerReceiverName); } @@ -610,7 +610,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_receiver_name 收货人 */ @JSONField(name="customer_receiver_name") - public java.lang.String getCustomerReceiverName() { + public String getCustomerReceiverName() { return getStr("customer_receiver_name"); } @@ -623,7 +623,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerReceiverPhone 收货人电话 */ @JSONField(name="customer_receiver_phone") - public void setCustomerReceiverPhone(java.lang.String customerReceiverPhone) { + public void setCustomerReceiverPhone(String customerReceiverPhone) { set("customer_receiver_phone", customerReceiverPhone); } @@ -632,7 +632,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_receiver_phone 收货人电话 */ @JSONField(name="customer_receiver_phone") - public java.lang.String getCustomerReceiverPhone() { + public String getCustomerReceiverPhone() { return getStr("customer_receiver_phone"); } @@ -645,7 +645,7 @@ public abstract class BaseOrdercluster> extends Ba * @param customerReceiverAddress 送货地址 */ @JSONField(name="customer_receiver_address") - public void setCustomerReceiverAddress(java.lang.String customerReceiverAddress) { + public void setCustomerReceiverAddress(String customerReceiverAddress) { set("customer_receiver_address", customerReceiverAddress); } @@ -654,7 +654,7 @@ public abstract class BaseOrdercluster> extends Ba * @return customer_receiver_address 送货地址 */ @JSONField(name="customer_receiver_address") - public java.lang.String getCustomerReceiverAddress() { + public String getCustomerReceiverAddress() { return getStr("customer_receiver_address"); } @@ -711,7 +711,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoId 物流公司 */ @JSONField(name="trans_co_id") - public void setTransCoId(java.lang.Integer transCoId) { + public void setTransCoId(Integer transCoId) { set("trans_co_id", transCoId); } @@ -720,7 +720,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_id 物流公司 */ @JSONField(name="trans_co_id") - public java.lang.Integer getTransCoId() { + public Integer getTransCoId() { return getInt("trans_co_id"); } @@ -733,7 +733,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoName */ @JSONField(name="trans_co_name") - public void setTransCoName(java.lang.String transCoName) { + public void setTransCoName(String transCoName) { set("trans_co_name", transCoName); } @@ -742,7 +742,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_name */ @JSONField(name="trans_co_name") - public java.lang.String getTransCoName() { + public String getTransCoName() { return getStr("trans_co_name"); } @@ -755,7 +755,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoTexpayerName 物流公司开票公司名称 */ @JSONField(name="trans_co_texpayer_name") - public void setTransCoTexpayerName(java.lang.String transCoTexpayerName) { + public void setTransCoTexpayerName(String transCoTexpayerName) { set("trans_co_texpayer_name", transCoTexpayerName); } @@ -764,7 +764,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_texpayer_name 物流公司开票公司名称 */ @JSONField(name="trans_co_texpayer_name") - public java.lang.String getTransCoTexpayerName() { + public String getTransCoTexpayerName() { return getStr("trans_co_texpayer_name"); } @@ -777,7 +777,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoTexpayerNum */ @JSONField(name="trans_co_texpayer_num") - public void setTransCoTexpayerNum(java.lang.String transCoTexpayerNum) { + public void setTransCoTexpayerNum(String transCoTexpayerNum) { set("trans_co_texpayer_num", transCoTexpayerNum); } @@ -786,7 +786,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_texpayer_num */ @JSONField(name="trans_co_texpayer_num") - public java.lang.String getTransCoTexpayerNum() { + public String getTransCoTexpayerNum() { return getStr("trans_co_texpayer_num"); } @@ -799,7 +799,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoAddress */ @JSONField(name="trans_co_address") - public void setTransCoAddress(java.lang.String transCoAddress) { + public void setTransCoAddress(String transCoAddress) { set("trans_co_address", transCoAddress); } @@ -808,7 +808,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_address */ @JSONField(name="trans_co_address") - public java.lang.String getTransCoAddress() { + public String getTransCoAddress() { return getStr("trans_co_address"); } @@ -821,7 +821,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoPhone */ @JSONField(name="trans_co_phone") - public void setTransCoPhone(java.lang.String transCoPhone) { + public void setTransCoPhone(String transCoPhone) { set("trans_co_phone", transCoPhone); } @@ -830,7 +830,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_phone */ @JSONField(name="trans_co_phone") - public java.lang.String getTransCoPhone() { + public String getTransCoPhone() { return getStr("trans_co_phone"); } @@ -843,7 +843,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoBankName */ @JSONField(name="trans_co_bank_name") - public void setTransCoBankName(java.lang.String transCoBankName) { + public void setTransCoBankName(String transCoBankName) { set("trans_co_bank_name", transCoBankName); } @@ -852,7 +852,7 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_bank_name */ @JSONField(name="trans_co_bank_name") - public java.lang.String getTransCoBankName() { + public String getTransCoBankName() { return getStr("trans_co_bank_name"); } @@ -865,7 +865,7 @@ public abstract class BaseOrdercluster> extends Ba * @param transCoBankAccount */ @JSONField(name="trans_co_bank_account") - public void setTransCoBankAccount(java.lang.String transCoBankAccount) { + public void setTransCoBankAccount(String transCoBankAccount) { set("trans_co_bank_account", transCoBankAccount); } @@ -874,9 +874,53 @@ public abstract class BaseOrdercluster> extends Ba * @return trans_co_bank_account */ @JSONField(name="trans_co_bank_account") - public java.lang.String getTransCoBankAccount() { + public String getTransCoBankAccount() { return getStr("trans_co_bank_account"); } + /** + * name: time_interval + * type: SMALLINT(5) + * isNullable: NO + * isPrimaryKey: NO + * defaultValue: 1 + * @param timeInterval 1.全天,2.上午,3.下午 + */ + @JSONField(name="time_interval") + public void setTimeInterval(Integer timeInterval) { + set("time_interval", timeInterval); + } + + + /** + * @return time_interval 1.全天,2.上午,3.下午 + */ + @JSONField(name="time_interval") + public Integer getTimeInterval() { + return getInt("time_interval"); + } + + /** + * name: mini_truck + * type: INT(10) + * isNullable: NO + * isPrimaryKey: NO + * defaultValue: 1 + * @param miniTruck 最少指派的车辆数 + */ + @JSONField(name="mini_truck") + public void setMiniTruck(Integer miniTruck) { + set("mini_truck", miniTruck); + } + + + /** + * @return mini_truck 最少指派的车辆数 + */ + @JSONField(name="mini_truck") + public Integer getMiniTruck() { + return getInt("mini_truck"); + } + } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseSupermarket.java b/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseSupermarket.java index b3836b4..944b47b 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseSupermarket.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/model/base/BaseSupermarket.java @@ -5,7 +5,7 @@ import com.jfinal.plugin.activerecord.IBean; import com.alibaba.fastjson.annotation.JSONField; /** - * Generated by COWR Fri Apr 17 16:59:35 CST 2020 + * Generated by COWR Thu Aug 20 11:16:08 CST 2020 * TableName: supermarket * Remarks: 基础配置 - 销售点(超市) * PrimaryKey: id @@ -29,7 +29,7 @@ public abstract class BaseSupermarket> extends Base * @param id */ @JSONField(name="id") - public void setId(java.lang.Integer id) { + public void setId(Integer id) { set("id", id); } @@ -38,7 +38,7 @@ public abstract class BaseSupermarket> extends Base * @return id */ @JSONField(name="id") - public java.lang.Integer getId() { + public Integer getId() { return getInt("id"); } @@ -51,7 +51,7 @@ public abstract class BaseSupermarket> extends Base * @param name */ @JSONField(name="name") - public void setName(java.lang.String name) { + public void setName(String name) { set("name", name); } @@ -60,7 +60,7 @@ public abstract class BaseSupermarket> extends Base * @return name */ @JSONField(name="name") - public java.lang.String getName() { + public String getName() { return getStr("name"); } @@ -73,7 +73,7 @@ public abstract class BaseSupermarket> extends Base * @param name2 名称简写 */ @JSONField(name="name2") - public void setName2(java.lang.String name2) { + public void setName2(String name2) { set("name2", name2); } @@ -82,7 +82,7 @@ public abstract class BaseSupermarket> extends Base * @return name2 名称简写 */ @JSONField(name="name2") - public java.lang.String getName2() { + public String getName2() { return getStr("name2"); } @@ -139,7 +139,7 @@ public abstract class BaseSupermarket> extends Base * @param address 地址 */ @JSONField(name="address") - public void setAddress(java.lang.String address) { + public void setAddress(String address) { set("address", address); } @@ -148,7 +148,7 @@ public abstract class BaseSupermarket> extends Base * @return address 地址 */ @JSONField(name="address") - public java.lang.String getAddress() { + public String getAddress() { return getStr("address"); } @@ -161,7 +161,7 @@ public abstract class BaseSupermarket> extends Base * @param phone 电话 */ @JSONField(name="phone") - public void setPhone(java.lang.String phone) { + public void setPhone(String phone) { set("phone", phone); } @@ -170,7 +170,7 @@ public abstract class BaseSupermarket> extends Base * @return phone 电话 */ @JSONField(name="phone") - public java.lang.String getPhone() { + public String getPhone() { return getStr("phone"); } @@ -183,7 +183,7 @@ public abstract class BaseSupermarket> extends Base * @param del 逻辑删除标志 */ @JSONField(name="del") - public void setDel(java.lang.Integer del) { + public void setDel(Integer del) { set("del", del); } @@ -192,7 +192,7 @@ public abstract class BaseSupermarket> extends Base * @return del 逻辑删除标志 */ @JSONField(name="del") - public java.lang.Integer getDel() { + public Integer getDel() { return getInt("del"); } @@ -206,7 +206,7 @@ public abstract class BaseSupermarket> extends Base 本地程序以超市为单位部署,云端只对已部署的本地程序发送数据,并记录日志,可在本地程序重新上线后,补发数据 */ @JSONField(name="isdeploy") - public void setIsdeploy(java.lang.Integer isdeploy) { + public void setIsdeploy(Integer isdeploy) { set("isdeploy", isdeploy); } @@ -216,9 +216,31 @@ public abstract class BaseSupermarket> extends Base 本地程序以超市为单位部署,云端只对已部署的本地程序发送数据,并记录日志,可在本地程序重新上线后,补发数据 */ @JSONField(name="isdeploy") - public java.lang.Integer getIsdeploy() { + public Integer getIsdeploy() { return getInt("isdeploy"); } + /** + * name: invoice_type + * type: INT(10) + * isNullable: NO + * isPrimaryKey: NO + * defaultValue: 1 + * @param invoiceType 1.普票,2.专票 + */ + @JSONField(name="invoice_type") + public void setInvoiceType(Integer invoiceType) { + set("invoice_type", invoiceType); + } + + + /** + * @return invoice_type 1.普票,2.专票 + */ + @JSONField(name="invoice_type") + public Integer getInvoiceType() { + return getInt("invoice_type"); + } + } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/customer/CustomerValidator.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/customer/CustomerValidator.java index b14c3ec..dac45f9 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/customer/CustomerValidator.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/customer/CustomerValidator.java @@ -25,9 +25,20 @@ public class CustomerValidator extends CrudParamValidator { validateString("address", 0, 256, "address", "address 长度 0~256"); validateString("phone", 0, 11, "phone", "phone 长度 0~11"); validateString("texpayer_name", 0, 255, "texpayer_name", "texpayer_name 长度 0~255"); + validateString("texpayer_num", 0, 20, "texpayer_num", "texpayer_num 长度 0~20"); validateString("bank_name", 0, 128, "bank_name", "bank_name 长度 0~128"); validateString("bank_account", 0, 20, "bank_account", "bank_account 长度 0~20"); + + if (StrKit.notBlank(c.get("invoice_type"))) { + validateInteger("invoice_type", 1, 2, "invoice_type", "invoice_type 范围 1~2"); + + if(c.getInt("invoice_type") == 2){ + validateString("texpayer_num", 1, 20, "texpayer_num", "开具专票必须录入有效纳税人识别号"); + validateString("bank_name", 1, 128, "bank_name", "开具专票必须录入有效开户行信息"); + validateString("bank_account", 1, 20, "bank_account", "开具专票必须录入有效开户行账号"); + } + } validateString("memo", 0, 256, "memo", "memo 长度 0~256"); // 使用 model 更新时,model 不能只有主键有值 diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java index bca8e18..422c78a 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java @@ -108,13 +108,30 @@ public class OrderclusterService extends BaseService { } /** - * 查询未完成的集团订单 + * 指定超市未执行完成的集团订单 * * @param supermarket_id * @param customer_id * @return */ - public List undoneOrdercluster(int supermarket_id, Integer customer_id) { + public List undonlist(int supermarket_id, Integer customer_id, String date) { + String sql = "select * from ordercluster t \n" + + " where t.state < ? \n" + + " and t.supermarket_id = ? \n" + + " and t.customer_id = ? \n" + + " and t.cutoff_time like ? \n"; + + return Db.find(sql, OrderStateEnum.RECEIVED.getStateid(), supermarket_id, customer_id, date + "%"); + } + + /** + * 指定超市未执行完成的集团订单 + * + * @param supermarket_id + * @param customer_id + * @return + */ + public List undonlist(int supermarket_id, Integer customer_id) { String sql = "select * from ordercluster t \n" + " where t.state < ? \n" + " and t.supermarket_id = ? \n"; @@ -127,7 +144,19 @@ public class OrderclusterService extends BaseService { paraList.add(customer_id); } - List list = Db.find(sql, paraList.toArray()); + return Db.find(sql, paraList.toArray()); + } + + /** + * 查询未完成的集团订单 + * 设置已执行、剩余量 + * + * @param supermarket_id + * @param customer_id + * @return + */ + public List undoneOrdercluster(int supermarket_id, Integer customer_id) { + List list = undonlist(supermarket_id, customer_id); setOverWeight(list); diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterValidator.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterValidator.java index 50726b3..f977737 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterValidator.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterValidator.java @@ -1,5 +1,6 @@ package com.cowr.ssjygl.order.ordercluster; +import com.cowr.common.utils.DateTimeUtil; import com.cowr.common.utils.StrUtil; import com.jfinal.core.Controller; import com.jfinal.kit.StrKit; @@ -10,7 +11,7 @@ import com.cowr.model.Ordercluster; /** * Generated by COWR Fri Apr 17 16:59:39 CST 2020 * TableName: ordercluster - * Remarks: 订单相关 - 订单 + * Remarks: 订单相关 - 订单(固定供砂客户配额) * PrimaryKey: id */ public class OrderclusterValidator extends CrudParamValidator { @@ -33,6 +34,10 @@ public class OrderclusterValidator extends CrudParamValidator { validateString("cutoff_time", 1, 19, "cutoff_time", "cutoff_time 长度 1~19"); validateDate("cutoff_time", "yyyy-MM-dd HH:mm:ss", false, "cutoff_time", "cutoff_time 格式 yyyy-MM-dd HH:mm:ss"); // 默认时间时间字符串格式,生成后根据情况调整 + if(StrKit.notBlank(c.get("cutoff_time")) && DateTimeUtil.isEarlyToday(c.get("cutoff_time"))){ + addError("cutoff_time", "截止时间不能早于今天"); + } + validateInteger("supermarket_id", 1, 2147483647, "supermarket_id", "supermarket_id 范围 1~2147483647"); validateInteger("pay_type", 0, 1, "pay_type", "pay_type 范围 0~1"); validateInteger("req_receipt", 0, 1, "req_receipt", "req_receipt 范围 0~1"); @@ -53,6 +58,8 @@ public class OrderclusterValidator extends CrudParamValidator { validateBigDecimal("customer_receiver_lttd", new java.math.BigDecimal(3.75), new java.math.BigDecimal(53.7), "customer_receiver_lttd", "customer_receiver_lttd 范围 3.75~53.7"); } + validateInteger("time_interval", 1, 3, "time_interval", "time_interval 范围 1~3"); + validateInteger("mini_truck", 1, 2147483647, "mini_truck", "mini_truck 范围 1~2147483647"); // 使用 model 更新时,model 不能只有主键有值 // 这里用 getActionMethodName 写死,判断是 update 时,才做验证 diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketService.java index aca0e13..eb4b974 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketService.java @@ -26,12 +26,6 @@ import java.util.Map; public class SupermarketService extends BaseService { public static final SupermarketService me = new SupermarketService(); - public BigDecimal getSupUnitPrice(Integer supermarket_id, Integer product_id){ - SupermarketProduct sp = SupermarketProduct.dao.findByIds(supermarket_id, product_id); - - return sp == null ? new BigDecimal(0) : sp.getUnitPrice(); - } - /** * 获取所有超市和商品的配置 * 数据量不多,都加载进来 diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketValidator.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketValidator.java index e877090..ed02aaa 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketValidator.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/SupermarketValidator.java @@ -20,13 +20,16 @@ public class SupermarketValidator extends CrudParamValidator { validateRequired("id", "id", "id 必填"); validateInteger("id", 1, 2147483647, "id", "id 范围 1~2147483647"); } - + validateString("name", 1, 128, "name", "name 长度 1~128"); validateString("name2", 0, 128, "name2", "name2 长度 0~128"); validateBigDecimal("lgtd", new java.math.BigDecimal(74), new java.math.BigDecimal(135), "lgtd", "lgtd 范围 74~135"); validateBigDecimal("lttd", new java.math.BigDecimal(3.75), new java.math.BigDecimal(53.7), "lttd", "lttd 范围 3.75~53.7"); validateString("address", 0, 256, "address", "address 长度 0~256"); + if (StrKit.notBlank(c.get("invoice_type"))) { + validateInteger("invoice_type", 1, 2, "invoice_type", "invoice_type 范围 1~2"); + } validateString("phone", 0, 11, "phone", "phone 长度 0~11"); // 使用 model 更新时,model 不能只有主键有值 diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/supermarket/product/SupermarketProductService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/product/SupermarketProductService.java similarity index 97% rename from ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/supermarket/product/SupermarketProductService.java rename to ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/product/SupermarketProductService.java index c6bbc38..5436e27 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/supermarket/product/SupermarketProductService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/product/SupermarketProductService.java @@ -1,4 +1,4 @@ -package com.cowr.local.ssjygl.supermarket.product; +package com.cowr.ssjygl.supermarket.product; import com.cowr.common.Const; import com.cowr.common.base.BaseService; diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java new file mode 100644 index 0000000..b99793b --- /dev/null +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/devicectrl/device/LEDThread.java @@ -0,0 +1,267 @@ +package com.cowr.local.ssjygl.devicectrl.device; + +import com.jfinal.log.Log; +import org.apache.poi.util.HexDump; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.charset.Charset; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.locks.ReentrantLock; + +public class LEDThread extends Device implements Runnable { + private static Log log = Log.getLog(LED.class); + private static final String LEDWeightFormat = "%s\\n %s \\n重: %s吨"; + private static final String LEDInfoFormat = "%s\\n %s \\n%s"; + + private String license = ""; + private String text = "系统启动"; + private String format = LEDInfoFormat; + + private boolean running = true; + + public void setRunning(boolean running) { + this.running = running; + } + + public void setInfo(String license, String text) { + this.license = license; + this.text = text; + this.format = LEDInfoFormat; + } + + public void setWeightInfo(String license, String text) { + this.license = license; + this.text = text; + this.format = LEDWeightFormat; + } + + private static final ThreadLocal sdf = new ThreadLocal() { + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("MM-dd HH:mm"); + } + }; + + private ReentrantLock lock = new ReentrantLock(); + protected Socket socket; + + public LEDThread(String id, String ip) { + super(id, ip); + } + + public LEDThread(String id, String ip, int port) { + super(id, ip, port); + } + + @Override + public void run() { + while (this.running){ + try { + screen(); + + Thread.sleep(1000); + }catch (Exception e){ + log.error(e.getMessage(), e); + } + + System.out.println("running:" + running); + } + + System.out.println("led 线程退出"); + } + + public void screen() { + lock.lock(); + try { + if (this.license == null) { + return; + } + + // 重连一次 + if (!isConnected()) { + connect(); + } + + String date = sdf.get().format(new Date()); + String dataStr = String.format(this.format, date, this.license, this.text); + byte[] data = dataStr.getBytes(Charset.forName("gb2312")); + int dataLen = data.length; + byte[] msg = new byte[frameHead.length + packetHead.length + b.length + dataLen]; + System.arraycopy(frameHead, 0, msg, 0, frameHead.length); +// System.out.println(HexDump.toHex(msg)); + packetHead[packetHead.length - 2] = (byte) (b.length + dataLen); + System.arraycopy(packetHead, 0, msg, frameHead.length, packetHead.length); +// System.out.println(HexDump.toHex(msg)); + int areaLen = b.length - 9 + dataLen; + b[7] = (byte) areaLen; + b[32] = (byte) dataLen; + System.arraycopy(b, 0, msg, packetHead.length + frameHead.length, b.length); +// System.out.println(HexDump.toHex(msg)); + System.arraycopy(data, 0, msg, packetHead.length + frameHead.length + b.length, dataLen); +// System.out.println(HexDump.toHex(msg)); + + byte[] toCrc = new byte[msg.length - 8]; + System.arraycopy(msg, 8, toCrc, 0, toCrc.length); + int crc = CalcCRC(toCrc, toCrc.length); + + byte[] msgCrc = new byte[msg.length + 3]; + System.arraycopy(msg, 0, msgCrc, 0, msg.length); +// System.out.println(HexDump.toHex(msgCrc)); + msgCrc[msgCrc.length - 2] = (byte) (crc >> 8); + msgCrc[msgCrc.length - 3] = (byte) crc; + msgCrc[msgCrc.length - 1] = frameTail; +// System.out.println(HexDump.toHex(msgCrc)); + + socket.getOutputStream().write(msgCrc); + socket.getOutputStream().flush(); + + InputStream in = socket.getInputStream(); + byte[] buf = new byte[in.available()]; + in.read(buf); + // LED 返回 +// BufferedInputStream bis = new BufferedInputStream(socket.getInputStream()); +// byte[] y = new byte[128]; +// int read = bis.read(y); +// while (!(read > 0)) { +// read = bis.read(y); +// } +// byte[] z = new byte[read]; +// System.arraycopy(y, 0, z, 0, read); +// System.out.println("LED 返回:"); +// System.out.println(HexDump.toHex(z)); +// socket.close(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } finally { + lock.unlock(); + } + } + + private static byte[] frameHead = new byte[]{(byte) 0xa5, (byte) 0xa5, (byte) 0xa5, (byte) 0xa5, (byte) 0xa5, (byte) 0xa5, (byte) 0xa5, (byte) 0xa5}; + private static byte[] packetHead = new byte[]{ + (byte) 0xfe, (byte) 0xff,//屏号 + 0x00, (byte) 0x80, //客户端 + 0x00, 0x00, 0x00, //Reserved + 0x00, //option + 0x00, //CheckMode + 0x00,//DisplayMode + 0x61, //设备型号 + 0x02,//协议版本 + 0x00, 0x00//datalen + }; + private static byte[] b = new byte[]{ + (byte) 0xa3,//指令分组,发送实时显示区域数据 + 0x06,//结合上一个 + 0x01,//0x01需要回复,0x02不用回复 + 0x00,//ProcessMode,无用 + 0x00,//Reserved + 0x00,//删除编号区域,无用 + 0x01,//本次命令更新区域个数 + 0x00, 0x00,//区域0数据长度动态计算,下标9~len-1 + //区域0数据 + 0x00,//AreaType,未知 + 0x00, (byte) 0x80, //AreaX + 0x00, 0x00, //AreaY + 0x60, (byte) 0x80,//width + 0x30, 0x00,//height + 0x00,//DynamicAreaLoc + 0x00,//Lines_sizes + 0x01,//Runmode + 0x02, 0x00, //timeout + 0x00,//sound mode + 0x00, 0x00,////Reserved + 0x02,//多行,0x01单行 + 0x01,//手动换行 + 0x02,//display mod 静止 + 0x00,//exit mod + 0x02,//speed + 0x00,//stay time + 0x00, 0x00, 0x00, 0x00,//data len, 下标31,32,33,34 + //data + //...区域n数据长度,区域n数据,无用 + }; + private static byte[] ping = new byte[]{ + 0x05, 0x00,//长度 + (byte) 0xa2, + 0x00, + 0x01, + 0x00, 0x00 + }; + private static byte frameTail = 0x5a; + + + private static int CRC(int crc, byte b) { + return (((crc) >> 8) ^ tabel[((crc) ^ (int) (b)) & 0XFF]); + } + + private static int[] tabel = new int[]{0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241, 0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440, 0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40, 0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841, 0XD801, 0X18C0, 0X1980, 0XD941, 0X1B00, 0XDBC1, 0XDA81, 0X1A40, 0X1E00, 0XDEC1, 0XDF81, 0X1F40, 0XDD01, 0X1DC0, 0X1C80, 0XDC41, 0X1400, 0XD4C1, 0XD581, 0X1540, 0XD701, 0X17C0, 0X1680, 0XD641, 0XD201, 0X12C0, 0X1380, 0XD341, 0X1100, 0XD1C1, 0XD081, 0X1040, 0XF001, 0X30C0, 0X3180, 0XF141, 0X3300, 0XF3C1, 0XF281, 0X3240, 0X3600, 0XF6C1, 0XF781, 0X3740, 0XF501, 0X35C0, 0X3480, 0XF441, 0X3C00, 0XFCC1, 0XFD81, 0X3D40, 0XFF01, 0X3FC0, 0X3E80, 0XFE41, 0XFA01, 0X3AC0, 0X3B80, 0XFB41, 0X3900, 0XF9C1, 0XF881, 0X3840, 0X2800, 0XE8C1, 0XE981, 0X2940, 0XEB01, 0X2BC0, 0X2A80, 0XEA41, 0XEE01, 0X2EC0, 0X2F80, 0XEF41, 0X2D00, 0XEDC1, 0XEC81, 0X2C40, 0XE401, 0X24C0, 0X2580, 0XE541, 0X2700, 0XE7C1, 0XE681, 0X2640, 0X2200, 0XE2C1, 0XE381, 0X2340, 0XE101, 0X21C0, 0X2080, 0XE041, 0XA001, 0X60C0, 0X6180, 0XA141, 0X6300, 0XA3C1, 0XA281, 0X6240, 0X6600, 0XA6C1, 0XA781, 0X6740, 0XA501, 0X65C0, 0X6480, 0XA441, 0X6C00, 0XACC1, 0XAD81, 0X6D40, 0XAF01, 0X6FC0, 0X6E80, 0XAE41, 0XAA01, 0X6AC0, 0X6B80, 0XAB41, 0X6900, 0XA9C1, 0XA881, 0X6840, 0X7800, 0XB8C1, 0XB981, 0X7940, 0XBB01, 0X7BC0, 0X7A80, 0XBA41, 0XBE01, 0X7EC0, 0X7F80, 0XBF41, 0X7D00, 0XBDC1, 0XBC81, 0X7C40, 0XB401, 0X74C0, 0X7580, 0XB541, 0X7700, 0XB7C1, 0XB681, 0X7640, 0X7200, 0XB2C1, 0XB381, 0X7340, 0XB101, 0X71C0, 0X7080, 0XB041, 0X5000, 0X90C1, 0X9181, 0X5140, 0X9301, 0X53C0, 0X5280, 0X9241, 0X9601, 0X56C0, 0X5780, 0X9741, 0X5500, 0X95C1, 0X9481, 0X5440, 0X9C01, 0X5CC0, 0X5D80, 0X9D41, 0X5F00, 0X9FC1, 0X9E81, 0X5E40, 0X5A00, 0X9AC1, 0X9B81, 0X5B40, 0X9901, 0X59C0, 0X5880, 0X9841, + + 0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40, 0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41, 0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641, 0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040}; + + private static int CalcCRC(byte[] data, int size) { + int i; + int crc = 0; + for (i = 0; i < size; i++) { + crc = CRC(crc, data[i]); + } + return crc; + } + + @Override + public boolean connect() throws IOException { + lock.lock(); + try { + socket = new Socket(); + socket.setSoTimeout(1000); + socket.connect(new InetSocketAddress(getIp(), getPort()), 3000); + } finally { + lock.unlock(); + } + + return isConnected(); + } + + @Override + public boolean isConnected() { + return socket != null && socket.isConnected() && !socket.isClosed(); + } + + @Override + public void disconnect() { + try { + log.debug("销毁LED连接"); + if (socket != null) { + socket.close(); + } + + running = false; + } catch (Exception e) { + log.error(e.getMessage(), e); + } + socket = null; + } + + public static void main(String[] args) { + try { + LEDThread led = new LEDThread("", "192.168.1.16", 5005); + Thread thread = new Thread(led); + thread.setDaemon(true); + thread.start(); +// thread.interrupt(); + + System.out.println("LED 启动"); + + Thread.sleep(10000); + + led.running = false; + + Thread.sleep(10000); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordersale/OrderSaleSyncService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordersale/OrderSaleSyncService.java index 22a8d9d..39006e7 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordersale/OrderSaleSyncService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordersale/OrderSaleSyncService.java @@ -7,7 +7,7 @@ import com.cowr.common.utils.DateTimeUtil; import com.cowr.common.view.Result; import com.cowr.local.ssjygl.order.OrderService; import com.cowr.local.ssjygl.order.orderseq.OrderSeqService; -import com.cowr.local.ssjygl.supermarket.product.SupermarketProductService; +import com.cowr.ssjygl.supermarket.product.SupermarketProductService; import com.cowr.local.ssjygl.synctask.SyncTaskService; import com.cowr.local.ssjygl.system.sysuser.SysuserSyncService; import com.cowr.model.*; @@ -54,7 +54,7 @@ public class OrderSaleSyncService { return Result.failed("进出场记录以完成,或者已经被取消,不能使用"); } - if(Truck.dao.findById(transport.getTruckLicense()) == null){ + if (Truck.dao.findById(transport.getTruckLicense()) == null) { return Result.failedstr("【%s】不是物流公司车辆", transport.getTruckLicense()); } @@ -241,7 +241,7 @@ public class OrderSaleSyncService { return Result.failed("进出场记录以完成,或者已经被取消,不能使用"); } - if(Truck.dao.findById(transport.getTruckLicense()) == null){ + if (Truck.dao.findById(transport.getTruckLicense()) == null) { return Result.failedstr("【%s】不是物流公司车辆", transport.getTruckLicense()); } @@ -290,7 +290,7 @@ public class OrderSaleSyncService { return Result.failedstr("【%s】不是今日预付费车辆", transport.getTruckLicense()); } - if(pt.getType() != OrderTypeEnum.SALE.getTypeid()){ + if (pt.getType() != OrderTypeEnum.SALE.getTypeid()) { return Result.failedstr("【%s】不是配送预付费车辆", transport.getTruckLicense()); } diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java index 7134316..430bfe1 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java @@ -6,9 +6,10 @@ import com.cowr.common.enums.OrderTypeEnum; import com.cowr.common.utils.DateTimeUtil; import com.cowr.common.view.Result; import com.cowr.local.ssjygl.invoice.log.InvoiceLogSyncService; +import com.cowr.local.ssjygl.main.Config; import com.cowr.local.ssjygl.order.OrderService; import com.cowr.local.ssjygl.order.orderseq.OrderSeqService; -import com.cowr.local.ssjygl.supermarket.product.SupermarketProductService; +import com.cowr.ssjygl.supermarket.product.SupermarketProductService; import com.cowr.local.ssjygl.synctask.SyncTaskService; import com.cowr.local.ssjygl.system.sysuser.SysuserSyncService; import com.cowr.model.*; @@ -84,6 +85,10 @@ public class OrderTempSyncService { return Result.failedstr("重量数据有误,第一次称重:%.4f,第二次称重:%.4f", transport.getFirstWeight(), transport.getSecondWeight()); } + if(transport.getSecondWeight().compareTo(BigDecimal.valueOf(Config.configprop.getInt("weigh.max"))) > 0){ + return Result.failedstr("毛重不能超过 %.2f 吨", Config.configprop.getInt("weigh.max")); + } + BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 if (req_receipt == 1) { // 需要同时开具发票 @@ -113,7 +118,7 @@ public class OrderTempSyncService { order.setProductName(product.getName()); // 支付信息 - order.setUnitPrice(SupermarketService.me.getSupUnitPrice(transport.getSupermarketId(), product.getId())); + order.setUnitPrice(SupermarketProductService.me.getUnitPrice(transport.getSupermarketId(), product.getId())); order.setWeight(net_weight); // 使用净重更新重量 order.setTotalPrice(TransPriceService.me.caleTotalPrice(up, net_weight)); // 获取根据净重和单价计算的总价,作为实付金额 order.setPaid(order.getTotalPrice()); // 实际应付金额,预付费走另外的接口 @@ -129,12 +134,12 @@ public class OrderTempSyncService { // 更新 transport 出入场信息 // 线下支付才同步将出入场记录设置为完成 - if (order.getPayType() == 1) { +// if (order.getPayType() == 1) { transport.setArriveTime(now); order.setState(OrderStateEnum.RECEIVED.getStateid()); // 直接完成,没有前面的过程 - } else { - order.setState(OrderStateEnum.LEAVE.getStateid()); // 等等付款 - } +// } else { +// order.setState(OrderStateEnum.LEAVE.getStateid()); // 等等付款 +// } transport.setState(order.getState()); // 使用 order 的 state transport.setType(OrderTypeEnum.TEMP.getTypeid()); @@ -202,11 +207,11 @@ public class OrderTempSyncService { } }); - if (order.getPayType() == 1) { +// if (order.getPayType() == 1) { return OrderService.me.orderPayComplete(ret, order.toRecord(), transport, printerId); - } else { - return ret ? Result.success(order) : Result.failed("结算失败"); - } +// } else { +// return ret ? Result.success(order) : Result.failed("结算失败"); +// } } public Result payordercluster( @@ -271,6 +276,10 @@ public class OrderTempSyncService { return Result.failedstr("重量数据有误,第一次称重:%.4f,第二次称重:%.4f", transport.getFirstWeight(), transport.getSecondWeight()); } + if(transport.getSecondWeight().compareTo(BigDecimal.valueOf(Config.configprop.getInt("weigh.max"))) > 0){ + return Result.failedstr("毛重不能超过 %.2f 吨", Config.configprop.getInt("weigh.max")); + } + BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 if (req_receipt == 1) { // 需要同时开具发票 @@ -474,6 +483,10 @@ public class OrderTempSyncService { return Result.failedstr("重量数据有误,第一次称重:%.4f,第二次称重:%.4f", transport.getFirstWeight(), transport.getSecondWeight()); } + if(transport.getSecondWeight().compareTo(BigDecimal.valueOf(Config.configprop.getInt("weigh.max"))) > 0){ + return Result.failedstr("毛重不能超过 %.2f 吨", Config.configprop.getInt("weigh.max")); + } + BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 if (ordercluster_id != null) { diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/prepay/prepaytruck/PrepayTruckController.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/prepay/prepaytruck/PrepayTruckController.java index 71a9d92..2b94c58 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/prepay/prepaytruck/PrepayTruckController.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/prepay/prepaytruck/PrepayTruckController.java @@ -1,17 +1,12 @@ package com.cowr.local.ssjygl.prepay.prepaytruck; -import com.alibaba.fastjson.JSONArray; import com.cowr.common.base.BaseController; import com.cowr.common.view.PageParam; import com.cowr.common.view.Result; -import com.cowr.local.ssjygl.system.sysuser.SysuserSyncService; import com.cowr.model.PrepayTruck; -import com.cowr.model.Sysuser; import com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckPKValidator; import com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckService; -import com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckValidator; import com.jfinal.aop.Before; -import com.jfinal.log.Log; /** * Generated by COWR Sun Feb 23 21:22:12 CST 2020 @@ -20,7 +15,6 @@ import com.jfinal.log.Log; * PrimaryKey: id */ public class PrepayTruckController extends BaseController { - private static Log log = Log.getLog(PrepayTruckController.class); /** * 按主键检查对象是否存在 @@ -34,82 +28,6 @@ public class PrepayTruckController extends BaseController { renderJson(PrepayTruckService.me.checkExistsByPk(model)); } - /** - * 新增 prepay_truck 每日超市指定预付费车辆 - */ - @Before(PrepayTruckValidator.class) - public void save() { - Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); - - if (tokenuser == null) { - renderJson(Result.noauth()); - return; - } - - - try { - String trucks = get("trucks"); - JSONArray truckarr = JSONArray.parseArray(trucks); - - if (truckarr == null) { - renderJson(Result.failed("trucks 参数格式错误")); - } else { - renderJson(PrepayTruckSyncService.me.save(truckarr, tokenuser)); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - renderJson(Result.failed("参数解析格式不正确")); - } - } - - /** - * 删除 prepay_truck 每日超市指定预付费车辆 - */ - @Before(PrepayTruckPKValidator.class) - public void del() { - Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); - - if (tokenuser == null) { - renderJson(Result.noauth()); - return; - } - - PrepayTruck model = getModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 - renderJson(PrepayTruckSyncService.me.delete(model, tokenuser)); - } - - /** - * 恢复 prepay_truck 每日超市指定预付费车辆 - */ - @Before(PrepayTruckPKValidator.class) - public void restore() { - Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); - - if (tokenuser == null) { - renderJson(Result.noauth()); - return; - } - - PrepayTruck model = getModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 - renderJson(PrepayTruckSyncService.me.restore(model, tokenuser)); - } - - /** - * 修改 prepay_truck 每日超市指定预付费车辆 - */ - @Before(PrepayTruckValidator.class) - public void edit() { - Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); - - if (tokenuser == null) { - renderJson(Result.noauth()); - return; - } - - PrepayTruck model = getModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 - renderJson(PrepayTruckSyncService.me.update(model, tokenuser)); - } - /** * 分页查找 prepay_truck 每日超市指定预付费车辆 */ diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportQueryService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportQueryService.java index b57d19c..00d41c4 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportQueryService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportQueryService.java @@ -8,7 +8,7 @@ import com.cowr.common.utils.ImageUtil; import com.cowr.common.view.Result; import com.cowr.local.ssjygl.main.Config; import com.cowr.local.ssjygl.order.OrderService; -import com.cowr.local.ssjygl.supermarket.product.SupermarketProductService; +import com.cowr.ssjygl.supermarket.product.SupermarketProductService; import com.cowr.model.*; import com.cowr.ssjygl.order.ordersale.OrderSaleService; import com.cowr.ssjygl.order.ordertemp.OrderTempService; diff --git a/ssjygl-xsx-local/src/main/resources/dev/config.properties b/ssjygl-xsx-local/src/main/resources/dev/config.properties index b6ff62d..805aa7f 100644 --- a/ssjygl-xsx-local/src/main/resources/dev/config.properties +++ b/ssjygl-xsx-local/src/main/resources/dev/config.properties @@ -19,6 +19,8 @@ print.vendorTaxId=91421125MA49GYYK2B #如果物流车辆入场重量大大超过皮重(>=10%),则认为是转运车辆 #2019-08-01 暂定 50% weight.distinguish=0.5 +#最大毛重不超过 49 吨,超过 49 吨不能上高速 +weigh.max=49 #起步运输距离 start.trans.distance=5 diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java index 8ab7e3c..713dac3 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java @@ -2,12 +2,16 @@ package com.cowr.service.ssjygl.order.ordercluster; import com.cowr.common.enums.Enums; import com.cowr.common.enums.OrderStateEnum; +import com.cowr.common.utils.DateTimeUtil; import com.cowr.common.view.Result; import com.cowr.model.*; import com.cowr.service.ssjygl.base.BaseSyncService; import com.cowr.service.ssjygl.synctask.SyncTaskService; import com.cowr.ssjygl.modifylog.ModifyLogService; +import com.cowr.ssjygl.order.ordercluster.OrderclusterService; +import com.cowr.ssjygl.prepay.prepaycustomer.PrepayCustomerService; import com.cowr.ssjygl.supermarket.SupermarketService; +import com.cowr.ssjygl.supermarket.product.SupermarketProductService; import com.jfinal.log.Log; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.IAtom; @@ -16,6 +20,7 @@ import com.jfinal.plugin.activerecord.Record; import java.math.BigDecimal; import java.sql.SQLException; import java.util.Date; +import java.util.List; public class OrderclusterSyncService extends BaseSyncService { public static OrderclusterSyncService me = new OrderclusterSyncService(); @@ -43,17 +48,43 @@ public class OrderclusterSyncService extends BaseSyncService { model.setTransCoTexpayerNum(transCoObj.getTexpayerNum()); } - Customer customerObj = Customer.dao.findById(model.getCustomerId()); + Supermarket supermarket = Supermarket.dao.findById(model.getSupermarketId()); + if (supermarket == null) { + return Result.failed("超市信息无效"); + } + Customer customerObj = Customer.dao.findById(model.getCustomerId()); if (customerObj == null) { return Result.failed(false, "新增失败, 客户信息验证失败"); } + List list = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId()); + + if(list != null && !list.isEmpty()){ + return Result.failed("还有未完成的集团订单"); + } + + PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(model.getCustomerId(), model.getSupermarketId()); + if (prepayCustomer == null) { + return Result.failed("不是预付费用户"); + } + Product product = Product.dao.findById(model.getProductId()); if (product == null) { return Result.failedstr("没有找到商品信息【%s】", model.getProductId()); } + BigDecimal unitprice = SupermarketProductService.me.getUnitPrice(model.getSupermarketId(), model.getProductId()); + if (unitprice == null) { + return Result.failed("未配置商品单价"); + } + + if(unitprice.multiply(model.getTotalWeight()).compareTo(prepayCustomer.getSurplus()) > 0){ + return Result.failedstr("余额 %.2f 不足以购买 %.2f 吨 %s", prepayCustomer.getSurplus(), model.getTotalWeight(), product.getName()); + } + + // TODO 最少车辆数需要在前端计算,计算结果用户可以修改 + model.setProductName(product.getName()); // 客户信息 @@ -66,7 +97,7 @@ public class OrderclusterSyncService extends BaseSyncService { model.setCustomerTexpayerName(customerObj.getTexpayerName()); model.setCustomerTexpayerNum(customerObj.getTexpayerNum()); - model.setUnitPrice(SupermarketService.me.getSupUnitPrice(model.getSupermarketId(), model.getProductId())); // 后端获取数据库中单价 + model.setUnitPrice(unitprice); // 后端获取数据库中单价 model.setCreateTime(new Date()); // 当前系统时间 model.setCreateUserId(sysuser.getId()); // 当前用户id model.setCreateUserName(sysuser.getName()); @@ -82,7 +113,7 @@ public class OrderclusterSyncService extends BaseSyncService { public boolean run() throws SQLException { try { return model.save() - && SyncTaskService.me.save(new SyncTask().addSaveData(model)) + && SyncTaskService.me.save(new SyncTask().addSaveData(model), model.getSupermarketId()) && ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), sysuser); } catch (Exception e) { log.error(e.getMessage(), e); @@ -117,7 +148,7 @@ public class OrderclusterSyncService extends BaseSyncService { oldobj.setAvgWeight(model.getAvgWeight()); } - if(model.getTotalWeight() != null ){ + if (model.getTotalWeight() != null) { String sql = "select t.ordercluster_id, sum(t.weight) weight from order_sale t \n" + " where t.state = ? \n" + " and t.ordercluster_id = ? \n" + @@ -130,13 +161,13 @@ public class OrderclusterSyncService extends BaseSyncService { Record record = Db.findFirst(sql, OrderStateEnum.RECEIVED.getStateid(), model.getId(), OrderStateEnum.RECEIVED.getStateid(), model.getId()); - if(record != null){ - if(model.getTotalWeight().compareTo(record.getBigDecimal("weight")) < 0){ + if (record != null) { + if (model.getTotalWeight().compareTo(record.getBigDecimal("weight")) < 0) { return Result.failedstr("总量不能低于已运输量(%.2f)", record.getBigDecimal("weight")); - }else{ + } else { oldobj.setTotalWeight(model.getTotalWeight()); } - }else{ + } else { oldobj.setTotalWeight(model.getTotalWeight()); } } @@ -144,19 +175,19 @@ public class OrderclusterSyncService extends BaseSyncService { oldobj.setCutoffTime(model.getCutoffTime()); oldobj.setAvgWeight(model.getAvgWeight()); - if(model.getTransDistance() != null){ + if (model.getTransDistance() != null) { oldobj.setTransDistance(model.getTransDistance()); } - if(model.getReqReceipt() != null) { + if (model.getReqReceipt() != null) { oldobj.setReqReceipt(model.getReqReceipt()); } - if(model.getCustomerTexpayerName() != null){ + if (model.getCustomerTexpayerName() != null) { oldobj.setCustomerTexpayerName(model.getCustomerTexpayerName()); } - if(model.getCustomerTexpayerNum() != null){ + if (model.getCustomerTexpayerNum() != null) { oldobj.setCustomerTexpayerNum(model.getCustomerTexpayerNum()); } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaydetail/PrepayDetailSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaydetail/PrepayDetailSyncService.java index 48bae2d..902c41f 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaydetail/PrepayDetailSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaydetail/PrepayDetailSyncService.java @@ -66,7 +66,7 @@ public class PrepayDetailSyncService extends BaseSyncService { synctask.addSaveData(model); synctask.addSaveData(his); - return SyncTaskService.me.save(synctask) + return SyncTaskService.me.save(synctask, model.getSupermarketId()) && ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), user); } }); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/DayValidator.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/DayValidator.java new file mode 100644 index 0000000..495b841 --- /dev/null +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/DayValidator.java @@ -0,0 +1,22 @@ +package com.cowr.service.ssjygl.prepay.prepaytruck; + +import com.cowr.common.validator.CrudParamValidator; +import com.cowr.common.view.Result; +import com.jfinal.core.Controller; +import com.jfinal.kit.StrKit; + +/** + * Generated by COWR Thu Jun 27 17:01:16 CST 2019 + */ +public class DayValidator extends CrudParamValidator { + @Override + protected void validate(Controller c) { + if(StrKit.notBlank(c.get("valid_date"))){ + validateDate("valid_date", "yyyy-MM-dd","valid_date","valid_date 格式必须为 yyyy-MM-dd"); + } + } + + protected void handleError(Controller c) { + c.renderJson(Result.failed(getErrmsg())); + } +} \ No newline at end of file diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckController.java index 1239603..b888e5e 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckController.java @@ -1,13 +1,18 @@ package com.cowr.service.ssjygl.prepay.prepaytruck; +import com.alibaba.fastjson.JSONArray; import com.cowr.common.base.BaseController; import com.cowr.common.view.PageParam; import com.cowr.common.view.Result; import com.cowr.model.PrepayTruck; +import com.cowr.model.Sysuser; +import com.cowr.service.ssjygl.system.sysuser.SysuserSyncService; import com.cowr.ssjygl.prepay.prepaytruck.DayValidator; import com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckPKValidator; import com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckService; +import com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckValidator; import com.jfinal.aop.Before; +import com.jfinal.log.Log; /** * Generated by COWR Sun Feb 23 21:22:12 CST 2020 @@ -16,6 +21,7 @@ import com.jfinal.aop.Before; * PrimaryKey: id */ public class PrepayTruckController extends BaseController { + private static Log log = Log.getLog(PrepayTruckController.class); /** * 按主键检查对象是否存在 @@ -29,6 +35,82 @@ public class PrepayTruckController extends BaseController { renderJson(PrepayTruckService.me.checkExistsByPk(model)); } + /** + * 新增 prepay_truck 每日超市指定预付费车辆 + */ + @Before(com.cowr.ssjygl.prepay.prepaytruck.PrepayTruckValidator.class) + public void save() { + Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); + + if (tokenuser == null) { + renderJson(Result.noauth()); + return; + } + + + try { + String trucks = get("trucks"); + JSONArray truckarr = JSONArray.parseArray(trucks); + + if (truckarr == null) { + renderJson(Result.failed("trucks 参数格式错误")); + } else { +// renderJson(PrepayTruckSyncService.me.save(truckarr, tokenuser)); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + renderJson(Result.failed("参数解析格式不正确")); + } + } + + /** + * 删除 prepay_truck 每日超市指定预付费车辆 + */ + @Before(PrepayTruckPKValidator.class) + public void del() { + Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); + + if (tokenuser == null) { + renderJson(Result.noauth()); + return; + } + + PrepayTruck model = getModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 + renderJson(PrepayTruckSyncService.me.delete(model, tokenuser)); + } + + /** + * 恢复 prepay_truck 每日超市指定预付费车辆 + */ + @Before(PrepayTruckPKValidator.class) + public void restore() { + Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); + + if (tokenuser == null) { + renderJson(Result.noauth()); + return; + } + + PrepayTruck model = getModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 + renderJson(PrepayTruckSyncService.me.restore(model, tokenuser)); + } + + /** + * 修改 prepay_truck 每日超市指定预付费车辆 + */ + @Before(PrepayTruckValidator.class) + public void edit() { + Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); + + if (tokenuser == null) { + renderJson(Result.noauth()); + return; + } + + PrepayTruck model = getModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 + renderJson(PrepayTruckSyncService.me.update(model, tokenuser)); + } + /** * 分页查找 prepay_truck 每日超市指定预付费车辆 */ diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckSyncService.java new file mode 100644 index 0000000..db3e401 --- /dev/null +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckSyncService.java @@ -0,0 +1,147 @@ +package com.cowr.service.ssjygl.prepay.prepaytruck; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cowr.common.utils.DateTimeUtil; +import com.cowr.common.view.Result; +import com.cowr.model.*; +import com.cowr.service.ssjygl.base.BaseSyncService; +import com.cowr.ssjygl.order.ordercluster.OrderclusterService; +import com.jfinal.kit.StrKit; +import com.jfinal.log.Log; +import com.jfinal.plugin.activerecord.Db; +import com.jfinal.plugin.activerecord.IAtom; +import com.jfinal.plugin.activerecord.Record; + +import java.sql.SQLException; +import java.util.*; + +public class PrepayTruckSyncService extends BaseSyncService { + public static PrepayTruckSyncService me = new PrepayTruckSyncService(); + private static Log log = Log.getLog(PrepayTruckSyncService.class); + + /** + * @param truckarr [ + * { + * customer_id + * truck_license + * supermarket_id + * valid_date + * type + * } + * ] + * @param sysuser + * @return + */ + public Result save(int customer_id, String truckarr, Date valid_date, int supermarket_id, Sysuser sysuser) { + try { + Customer customer = Customer.dao.findById(customer_id); + if (customer == null) { + return Result.failed("客户信息无效"); + } + + Supermarket supermarket = Supermarket.dao.findById(supermarket_id); + if (supermarket == null) { + return Result.failed("超市信息无效"); + } + + List list = OrderclusterService.me.undonlist(supermarket_id, customer_id, DateTimeUtil.sdf.get().format(valid_date)); + + if(list == null || list.isEmpty()){ + return Result.failed("未找到有效的集团订单信息"); + } + + // TODO: 过期订单怎么处理?顺延?取消 + +// +// List ts = new ArrayList<>(); +// List tsql = new ArrayList<>(); +// +// Map co_trucks = new HashMap<>(); // 物流公司车辆 +// List co_tsql = new ArrayList<>(); +// +// List pts = new ArrayList<>(); +// +// for (int i = 0; i < truckarr.size(); i++) { +// JSONObject obj = truckarr.getJSONObject(i); +// +// ts.add(obj.getString("truck_license")); +// tsql.add("?"); +// +// if (obj.getIntValue("type") == 1) { +// co_trucks.put(obj.getString("truck_license"), true); +// co_tsql.add("?"); +// } +// } +// +// List list = Blacklist.dao.find( +// "select * from blacklist \n" + +// " where remove_user_id is null \n" + +// " and truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray()); +// +// if (list != null && !list.isEmpty()) { +// ts = new ArrayList<>(); +// +// for (Blacklist bl : list) { +// ts.add(bl.getTruckLicense()); +// } +// +// return Result.failed(StrKit.join(ts, ",") + " 车牌号在黑名单中"); +// } +// +// if (!co_trucks.isEmpty()) { +// List trucks = Truck.dao.find( +// "select * from truck where license in (" +// + StrKit.join(co_tsql, ",") + ")", co_trucks.keySet().toArray()); +// +// if (trucks != null && !trucks.isEmpty()) { +// for (Truck bl : trucks) { +// co_trucks.remove(bl.getLicense()); +// } +// +// ts = new ArrayList<>(); +// +// for (String s : co_trucks.keySet()) { +// ts.add(s); +// } +// } +// +// if (!co_trucks.isEmpty()) { +// return Result.failed(StrKit.join(ts, ",") + " 车牌不是物流公司车辆"); +// } +// } +// +// for (int i = 0; i < truckarr.size(); i++) { +// JSONObject obj = truckarr.getJSONObject(i); +// Record record = new Record().setColumns(obj.getInnerMap()); +// record.set("create_user_id", sysuser.getId()); +// pts.add(record); +// } +// +// if (pts.isEmpty()) { +// return Result.failed("truck_license 参数错误"); +// } +// +// // TODO: 这里要不要加入同步,上传到服务端。预付费车辆只再本超市使用 +// boolean ret = Db.tx(new IAtom() { +// @Override +// public boolean run() throws SQLException { +// int[] ret = Db.batchSave(PrepayTruck.tablename, pts, pts.size()); +// +// return ret.length == pts.size(); +// } +// }); + +// return ret ? Result.success() : Result.failed(false, "新增失败"); + return null; + } catch (Exception e) { + if (e.getMessage().contains("prepay_truck_license_customer")) { + return Result.failed("同一辆车同一天只能分配一次"); + } + + log.error(e.getMessage(), e); + return Result.failed(false, e.getMessage()); + } + } + +} diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckValidator.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckValidator.java new file mode 100644 index 0000000..50341f6 --- /dev/null +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/prepaytruck/PrepayTruckValidator.java @@ -0,0 +1,37 @@ +package com.cowr.service.ssjygl.prepay.prepaytruck; + +import com.cowr.common.validator.CrudParamValidator; +import com.cowr.common.view.Result; +import com.cowr.model.PrepayTruck; +import com.jfinal.core.Controller; + +/** + * Generated by COWR Sun Feb 23 21:22:13 CST 2020 + * TableName: prepay_truck + * Remarks: 每日超市指定预付费车辆 + * PrimaryKey: id + */ +public class PrepayTruckValidator extends CrudParamValidator { + @Override + protected void validate(Controller c) { + // 默认新增时,前端不需要传主键。若需要前端传主键,需要去掉这个判断 + if (!"save".equals(getActionMethodName())) { + validateRequired("id", "id", "id 必填"); + + validateInteger("id", 1, 2147483647, "id", "id 范围 1~2147483647"); + } + + validateRequired("trucks", "trucks", "trucks 必填"); + + // 使用 model 更新时,model 不能只有主键有值 + // 这里用 getActionMethodName 写死,判断是 update 时,才做验证 + // 如果确实是需要将主键外的字段置为 null,可以在代码生成后删掉这段 + if ("edit".equals(getActionMethodName())) { + validateUpdateModel(PrepayTruck.class, "", true); // 忽略不在model中的字段 + } + } + + protected void handleError(Controller c) { + c.renderJson(Result.failed(getErrmsg())); + } +} \ No newline at end of file diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/refunddetail/RefundDetailSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/refunddetail/RefundDetailSyncService.java index 9a3dd45..809ab88 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/refunddetail/RefundDetailSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/prepay/refunddetail/RefundDetailSyncService.java @@ -86,7 +86,7 @@ public class RefundDetailSyncService extends BaseSyncService { synctask.addSaveData(model); synctask.addSaveData(his); - return SyncTaskService.me.save(synctask) + return SyncTaskService.me.save(synctask, model.getSupermarketId()) && ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), user); } }); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java index d9113e7..f3b6650 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java @@ -75,6 +75,7 @@ public class SyncTaskService { int[] ret = Db.batchSave(list, list.size()); for (int i : ret) { + // 必须是每条 sql 修改一条记录 if (i != 1) { return false; } @@ -165,7 +166,7 @@ public class SyncTaskService { List list = unsynclist(); if (!list.isEmpty()) { - log.debug("开始下发未同步完成的数据"); + log.debug("开始下发未同步完成的数据 " + list.size()); } for (SyncTask obj : list) { diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/RegisterUserValidator.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/RegisterUserValidator.java index ed25c60..a4c3658 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/RegisterUserValidator.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/RegisterUserValidator.java @@ -4,6 +4,7 @@ import com.cowr.common.utils.StrUtil; import com.cowr.common.validator.CrudParamValidator; import com.cowr.common.view.Result; import com.jfinal.core.Controller; +import com.jfinal.kit.StrKit; public class RegisterUserValidator extends CrudParamValidator { @Override @@ -13,12 +14,22 @@ public class RegisterUserValidator extends CrudParamValidator { validateString("sysuser.password", 6, 20, "sysuser.password", "用户密码长度在6~20之间"); // 必填项,字段长度必须大于0,不能超过最大长度 validateString("customer.texpayer_name", 1, 255, "customer.texpayer_name", "公司名称的长度在1~255之间"); - validateString("customer.address", 1, 256, "customer.address", "公司地址的长度在1~255之间"); - validateString("customer.phone", 1, 20, "customer.phone", "开票电话格式不正确"); - validateString("customer.texpayer_num", 1, 20, "customer.texpayer_num", "纳税人识别号格式不正确"); - validateString("customer.bank_name", 1, 128, "customer.bank_name", "开户银行名称格式不正确"); - validateString("customer.bank_account", 1, 20, "customer.bank_account", "开户银行账号格式不正确"); validateString("customer.memo", 0, 256, "customer.memo", "备注长度在0~256之间"); + validateInteger("customer.invoice_type", 0, 3, "invoice_type", "请选择是开具普票还是专票"); + + if(c.getInt("customer.invoice_type") == 2){ + validateString("customer.texpayer_num", 1, 20, "customer.texpayer_num", "开具专票必须录入有效纳税人识别号"); + validateString("customer.bank_name", 1, 128, "customer.bank_name", "开具专票必须录入有效开户行信息"); + validateString("customer.bank_account", 1, 20, "customer.bank_account", "开具专票必须录入有效开户行账号"); + validateString("customer.address", 1, 256, "customer.address", "公司地址的长度在1~255之间"); + validateString("customer.phone", 1, 20, "customer.phone", "开票电话格式不正确"); + }else{ + validateString("customer.texpayer_num", 0, 20, "customer.texpayer_num", "纳税人识别号格式不正确"); + validateString("customer.bank_name", 0, 128, "customer.bank_name", "开户银行名称格式不正确"); + validateString("customer.bank_account", 0, 20, "customer.bank_account", "开户银行账号格式不正确"); + validateString("customer.address", 0, 256, "customer.address", "公司地址的长度在1~255之间"); + validateString("customer.phone", 0, 20, "customer.phone", "开票电话格式不正确"); + } validateString("receiver.name", 1, 128, "receiver.name", "收货人姓名在1~8之间"); validateRegex("receiver.phone", StrUtil.regphone, "receiver.phone", "收货人手机号格式不正确"); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java index 72176be..116a36a 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java @@ -218,13 +218,6 @@ public class SysuserController extends Controller { Customer customer = getModel(Customer.class, "customer", true); CustomerReceiver receiver = getModel(CustomerReceiver.class, "receiver", true); - renderJson(CustomerRegisterService.me.save(sysuser, customer, receiver)); - } - - @Clear(AuthInterceptor.class) - public void checkRegister() { - String sysuser_phone = get("sysuser_phone", ""); - - renderJson(CustomerRegisterService.me.checkRegister(sysuser_phone)); + renderJson(SysuserSyncService.me.register(sysuser, customer, receiver)); } } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java index 91a6fe0..2a355b3 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java @@ -682,4 +682,73 @@ public class SysuserSyncService extends BaseSyncService { return Db.find("select * " + sqlbuf.toString(), paraList.toArray()); } + + public Result register(Sysuser sysuser, Customer customer, CustomerReceiver receiver){ + if(sysuser.checkDuplicate("phone")){ + return Result.failedstr("手机号 %s 已存在", sysuser.getPhone()); + } + + customer.setName(customer.getTexpayerName()); + + if(customer.checkDuplicate("name")){ + return Result.failed("用户已存在"); + } + + if(customer.checkDuplicate("texpayer_name")){ + return Result.failed("用户已存在"); + } + + // 开专票的,必填验证 + if(customer.getInvoiceType() == 2){ + if(customer.checkDuplicate("texpayer_num")){ + return Result.failed("用户已存在"); + } + + if(customer.checkDuplicate("bank_account")){ + return Result.failed("用户已存在"); + } + } + + sysuser.setType(UserTypeEnum.CUSTOMER.getTypeid()); + sysuser.setPassword(getPwdMD5(sysuser.getPhone(), sysuser.getPassword())); + + boolean ret = Db.tx(new IAtom() { + @Override + public boolean run() { + try{ + boolean ret = customer.save(); + + if(!ret){ + log.debug("客户信息保存失败"); + return false; + } + + sysuser.setEntityId(customer.getId()); + sysuser.setRole(RoleEnum.CUSTOMER.getRoleid()); + + receiver.setCustomerId(customer.getId()); + + ret = sysuser.save() && receiver.save(); + + if(!ret){ + log.debug("用户或者收获信息保存失败"); + return false; + } + + SyncTask synctask = new SyncTask(); + synctask.addSaveData(sysuser); + synctask.addSaveData(customer); + synctask.addSaveData(receiver); + + return SyncTaskService.me.save(synctask); + }catch (Exception e){ + log.error(e.getMessage(), e); + } + + return false; + } + }); + + return ret ? Result.success("注册成功") : Result.failed("注册失败"); + } }