From fe2044950325bdac47faa61dfca6e24f69f4b53b Mon Sep 17 00:00:00 2001 From: chfei Date: Tue, 25 Aug 2026 09:21:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4KJD=20WebService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KJDService/Dll/MySql.Data.dll | Bin 1489920 -> 0 bytes KJDService/Dll/Newtonsoft.Json.dll | Bin 489472 -> 0 bytes KJDService/KJD_WebService.sln | 25 - .../App_Data/ApiLogs/.gitignore | 2 - .../KJD_WebService/BLL/BXX/BXXPriceManage.cs | 851 ---- .../BLL/BXX/BXXProductManage.cs | 3851 ----------------- .../BLL/BXX/BXXProductThirdManage.cs | 745 ---- .../KJD_WebService/BLL/BXX/BXXShopManage.cs | 1446 ------- .../KJD_WebService/BLL/BXX/BXXUserManage.cs | 887 ---- .../KJD_WebService/BLL/DYXD/DYShopManage.cs | 782 ---- .../KJD_WebService/BLL/DYXD/DYUserManage.cs | 475 -- .../KJD_WebService/BLL/KJD/OrderManage.cs | 668 --- .../KJD_WebService/BLL/KJD/PriceManage.cs | 600 --- .../KJD_WebService/BLL/KJD/ProductManage.cs | 1804 -------- .../BLL/KJD/ProductThirdManage.cs | 1468 ------- .../KJD_WebService/BLL/KJD/ShopManage.cs | 1123 ----- .../KJD_WebService/BLL/KJD/ToolManage.cs | 225 - .../KJD_WebService/BLL/KJD/UpdateManage.cs | 223 - .../KJD_WebService/BLL/KJD/UserManage.cs | 549 --- .../BLL/WXXD/WXExpressOptimizeManage.cs | 877 ---- .../KJD_WebService/BLL/WXXD/WXOemManage.cs | 139 - .../KJD_WebService/BLL/WXXD/WXOrderManage.cs | 2474 ----------- .../BLL/WXXD/WXProductManage.cs | 1360 ------ .../KJD_WebService/BLL/WXXD/WXShopManage.cs | 1867 -------- .../BLL/WXXD/WXShopRevenueStatisticsManage.cs | 301 -- .../KJD_WebService/BLL/WXXD/WXUserManage.cs | 1734 -------- .../KJD_WebService/BXXPriceService.asmx | 1 - .../KJD_WebService/BXXPriceService.asmx.cs | 198 - .../KJD_WebService/BXXProductService.asmx | 1 - .../KJD_WebService/BXXProductService.asmx.cs | 581 --- .../BXXProductThirdService.asmx | 1 - .../BXXProductThirdService.asmx.cs | 221 - KJDService/KJD_WebService/BXXShopService.asmx | 1 - .../KJD_WebService/BXXShopService.asmx.cs | 335 -- KJDService/KJD_WebService/BXXUserService.asmx | 1 - .../KJD_WebService/BXXUserService.asmx.cs | 258 -- KJDService/KJD_WebService/DYShopService.asmx | 1 - .../KJD_WebService/DYShopService.asmx.cs | 208 - KJDService/KJD_WebService/DYUserService.asmx | 1 - .../KJD_WebService/DYUserService.asmx.cs | 178 - KJDService/KJD_WebService/Global.asax | 1 - KJDService/KJD_WebService/Global.asax.cs | 199 - .../KJD_WebService/KJD_WebService.csproj | 341 -- .../KJD_WebService/Model/CommentParam.cs | 15 - .../Model/DBPriceResultParam.cs | 28 - .../DBProdDbIdMapProductIdResultParam.cs | 28 - .../Model/DBProductResultParam.cs | 115 - .../Model/ErpModel/ErpMerchantInfo.cs | 64 - .../Model/JSTDownProdSkuInfo.cs | 61 - KJDService/KJD_WebService/Model/OrderParam.cs | 14 - .../Model/PddModel/BuyerLoginInfo.cs | 21 - .../Model/PddModel/PDDMaterialInfo.cs | 17 - .../PddModel/PDDProductDecorationInfo.cs | 65 - .../Model/PddModel/PDDProductDetailInfo.cs | 331 -- .../Model/PddModel/PDDProductInfo.cs | 33 - .../Model/PddModel/PDDProductPropertyInfo.cs | 46 - .../Model/PddModel/PDDSizeSpecInfo.cs | 119 - .../Model/ProductPurchasePriceResultParam.cs | 27 - .../Model/ProductSelectResultParam.cs | 47 - KJDService/KJD_WebService/Model/Result.cs | 47 - .../Model/ShopModel/JSTListProductSkuInfo.cs | 47 - .../Model/ShopModel/JitCardCodeParam.cs | 28 - .../Model/ShopModel/ShopParam.cs | 91 - .../Model/ShopModel/sku_img_replace.cs | 19 - .../KJD_WebService/Model/SkuImgResult.cs | 24 - .../KJD_WebService/Model/TemuDBOrderInfo.cs | 57 - .../Model/UserLoginResultParam.cs | 109 - .../KJD_WebService/Model/WXAddressInfo.cs | 18 - .../Model/WXShopDefaultAddressInfo.cs | 22 - .../Model/WxModel/WXBuyUrlNotesInfo.cs | 40 - .../Model/WxModel/WXClientProductInfoLite.cs | 169 - .../Model/WxModel/WXGetEditProductInfoLite.cs | 191 - .../Model/WxModel/WXOrderAmountInfo.cs | 94 - .../WxModel/WXOrderDecryptAddressInfo.cs | 17 - .../Model/WxModel/WxOptimizeExpressInfo.cs | 44 - .../WxModel/distrib_return_order_info.cs | 48 - .../KJD_WebService/Model/WxModel/oem.cs | 19 - ...ei_external_procurement_after_sale_info.cs | 100 - .../oms_wei_external_procurement_log.cs | 75 - .../Model/WxModel/oms_wei_order.cs | 245 -- .../Model/WxModel/oms_wei_order_item.cs | 153 - .../Model/WxModel/oms_wei_refund.cs | 151 - .../Model/WxModel/order_item_ext.cs | 31 - .../WxModel/order_pdd_buyer_after_sale.cs | 33 - .../Model/WxModel/order_pdd_buyer_order.cs | 35 - .../WxModel/user_operate_task_status_info.cs | 133 - .../Model/WxModel/user_payment_record_info.cs | 69 - .../Model/WxModel/user_points_record_info.cs | 27 - .../WxModel/wx_qualification_image_info.cs | 19 - .../Model/WxProdSecretSpuIdShopIdMapParam.cs | 16 - KJDService/KJD_WebService/OrderService.asmx | 1 - .../KJD_WebService/OrderService.asmx.cs | 153 - KJDService/KJD_WebService/PriceService.asmx | 1 - .../KJD_WebService/PriceService.asmx.cs | 149 - KJDService/KJD_WebService/ProductService.asmx | 1 - .../KJD_WebService/ProductService.asmx.cs | 335 -- .../KJD_WebService/ProductThirdService.asmx | 1 - .../ProductThirdService.asmx.cs | 268 -- .../KJD_WebService/Properties/AssemblyInfo.cs | 35 - KJDService/KJD_WebService/ShopService.asmx | 1 - KJDService/KJD_WebService/ShopService.asmx.cs | 271 -- KJDService/KJD_WebService/ToolService.asmx | 1 - KJDService/KJD_WebService/ToolService.asmx.cs | 64 - KJDService/KJD_WebService/UpdateService.asmx | 1 - .../KJD_WebService/UpdateService.asmx.cs | 94 - .../KJD_WebService/Upload/Prod/BaseClass.cs | 54 - .../KJD_WebService/Upload/Prod/BaseWxProd.cs | 408 -- .../KJD_WebService/Upload/Prod/WXProd.aspx | 32 - .../KJD_WebService/Upload/Prod/WXProd.aspx.cs | 44 - .../Upload/Prod/WXProd.aspx.designer.cs | 80 - .../KJD_WebService/Upload/Prod/WXProdHot.aspx | 32 - .../Upload/Prod/WXProdHot.aspx.cs | 44 - .../Upload/Prod/WXProdHot.aspx.designer.cs | 80 - KJDService/KJD_WebService/UserService.asmx | 1 - KJDService/KJD_WebService/UserService.asmx.cs | 396 -- .../KJD_WebService/Utils/ApiRequestLogger.cs | 431 -- KJDService/KJD_WebService/Utils/EncrypUtil.cs | 60 - .../Utils/Extension/Extension.Convert.cs | 728 ---- .../Utils/Extension/Extension.Enum.cs | 114 - .../Utils/Extension/Extension.Exception.cs | 18 - .../Utils/Extension/Extension.Linq.cs | 110 - .../Utils/Extension/Extension.Validate.cs | 117 - .../KJD_WebService/Utils/Helper/HtmlHelper.cs | 215 - .../KJD_WebService/Utils/Helper/JsonHelper.cs | 122 - .../Utils/Helper/ReflectionHelper.cs | 220 - .../Utils/Helper/RegexHelper.cs | 81 - KJDService/KJD_WebService/Utils/HtmlUtils.cs | 416 -- KJDService/KJD_WebService/Utils/HttpUtils.cs | 379 -- KJDService/KJD_WebService/Utils/JsonUtils.cs | 138 - KJDService/KJD_WebService/Utils/MySqlUtils.cs | 805 ---- .../KJD_WebService/Utils/RandomUtils.cs | 69 - KJDService/KJD_WebService/Utils/RegexUtils.cs | 763 ---- KJDService/KJD_WebService/Utils/TimeUtils.cs | 58 - KJDService/KJD_WebService/WXOrderService.asmx | 1 - .../KJD_WebService/WXOrderService.asmx.cs | 593 --- .../KJD_WebService/WXProductService.asmx | 1 - .../KJD_WebService/WXProductService.asmx.cs | 461 -- .../WXShopRevenueStatistics.asmx | 1 - .../WXShopRevenueStatistics.asmx.cs | 68 - KJDService/KJD_WebService/WXShopService.asmx | 1 - .../KJD_WebService/WXShopService.asmx.cs | 510 --- KJDService/KJD_WebService/WXUserService.asmx | 1 - .../KJD_WebService/WXUserService.asmx.cs | 306 -- KJDService/KJD_WebService/Web.Debug.config | 31 - KJDService/KJD_WebService/Web.Release.config | 32 - KJDService/KJD_WebService/Web.config | 71 - KJDService/KJD_WebService/packages.config | 4 - 147 files changed, 39677 deletions(-) delete mode 100644 KJDService/Dll/MySql.Data.dll delete mode 100644 KJDService/Dll/Newtonsoft.Json.dll delete mode 100644 KJDService/KJD_WebService.sln delete mode 100644 KJDService/KJD_WebService/App_Data/ApiLogs/.gitignore delete mode 100644 KJDService/KJD_WebService/BLL/BXX/BXXPriceManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/BXX/BXXProductManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/BXX/BXXProductThirdManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/BXX/BXXShopManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/BXX/BXXUserManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/DYXD/DYShopManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/DYXD/DYUserManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/OrderManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/PriceManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/ProductManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/ProductThirdManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/ShopManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/ToolManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/UpdateManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/KJD/UserManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXExpressOptimizeManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXOemManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXOrderManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXProductManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXShopManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXShopRevenueStatisticsManage.cs delete mode 100644 KJDService/KJD_WebService/BLL/WXXD/WXUserManage.cs delete mode 100644 KJDService/KJD_WebService/BXXPriceService.asmx delete mode 100644 KJDService/KJD_WebService/BXXPriceService.asmx.cs delete mode 100644 KJDService/KJD_WebService/BXXProductService.asmx delete mode 100644 KJDService/KJD_WebService/BXXProductService.asmx.cs delete mode 100644 KJDService/KJD_WebService/BXXProductThirdService.asmx delete mode 100644 KJDService/KJD_WebService/BXXProductThirdService.asmx.cs delete mode 100644 KJDService/KJD_WebService/BXXShopService.asmx delete mode 100644 KJDService/KJD_WebService/BXXShopService.asmx.cs delete mode 100644 KJDService/KJD_WebService/BXXUserService.asmx delete mode 100644 KJDService/KJD_WebService/BXXUserService.asmx.cs delete mode 100644 KJDService/KJD_WebService/DYShopService.asmx delete mode 100644 KJDService/KJD_WebService/DYShopService.asmx.cs delete mode 100644 KJDService/KJD_WebService/DYUserService.asmx delete mode 100644 KJDService/KJD_WebService/DYUserService.asmx.cs delete mode 100644 KJDService/KJD_WebService/Global.asax delete mode 100644 KJDService/KJD_WebService/Global.asax.cs delete mode 100644 KJDService/KJD_WebService/KJD_WebService.csproj delete mode 100644 KJDService/KJD_WebService/Model/CommentParam.cs delete mode 100644 KJDService/KJD_WebService/Model/DBPriceResultParam.cs delete mode 100644 KJDService/KJD_WebService/Model/DBProdDbIdMapProductIdResultParam.cs delete mode 100644 KJDService/KJD_WebService/Model/DBProductResultParam.cs delete mode 100644 KJDService/KJD_WebService/Model/ErpModel/ErpMerchantInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/JSTDownProdSkuInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/OrderParam.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/BuyerLoginInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/PDDMaterialInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/PDDProductDecorationInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/PDDProductDetailInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/PDDProductInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/PDDProductPropertyInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/PddModel/PDDSizeSpecInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/ProductPurchasePriceResultParam.cs delete mode 100644 KJDService/KJD_WebService/Model/ProductSelectResultParam.cs delete mode 100644 KJDService/KJD_WebService/Model/Result.cs delete mode 100644 KJDService/KJD_WebService/Model/ShopModel/JSTListProductSkuInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/ShopModel/JitCardCodeParam.cs delete mode 100644 KJDService/KJD_WebService/Model/ShopModel/ShopParam.cs delete mode 100644 KJDService/KJD_WebService/Model/ShopModel/sku_img_replace.cs delete mode 100644 KJDService/KJD_WebService/Model/SkuImgResult.cs delete mode 100644 KJDService/KJD_WebService/Model/TemuDBOrderInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/UserLoginResultParam.cs delete mode 100644 KJDService/KJD_WebService/Model/WXAddressInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/WXShopDefaultAddressInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/WXBuyUrlNotesInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/WXClientProductInfoLite.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/WXGetEditProductInfoLite.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/WXOrderAmountInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/WXOrderDecryptAddressInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/WxOptimizeExpressInfo.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/distrib_return_order_info.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/oem.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_after_sale_info.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_log.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/oms_wei_order.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/oms_wei_order_item.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/oms_wei_refund.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/order_item_ext.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_after_sale.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_order.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/user_operate_task_status_info.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/user_payment_record_info.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/user_points_record_info.cs delete mode 100644 KJDService/KJD_WebService/Model/WxModel/wx_qualification_image_info.cs delete mode 100644 KJDService/KJD_WebService/Model/WxProdSecretSpuIdShopIdMapParam.cs delete mode 100644 KJDService/KJD_WebService/OrderService.asmx delete mode 100644 KJDService/KJD_WebService/OrderService.asmx.cs delete mode 100644 KJDService/KJD_WebService/PriceService.asmx delete mode 100644 KJDService/KJD_WebService/PriceService.asmx.cs delete mode 100644 KJDService/KJD_WebService/ProductService.asmx delete mode 100644 KJDService/KJD_WebService/ProductService.asmx.cs delete mode 100644 KJDService/KJD_WebService/ProductThirdService.asmx delete mode 100644 KJDService/KJD_WebService/ProductThirdService.asmx.cs delete mode 100644 KJDService/KJD_WebService/Properties/AssemblyInfo.cs delete mode 100644 KJDService/KJD_WebService/ShopService.asmx delete mode 100644 KJDService/KJD_WebService/ShopService.asmx.cs delete mode 100644 KJDService/KJD_WebService/ToolService.asmx delete mode 100644 KJDService/KJD_WebService/ToolService.asmx.cs delete mode 100644 KJDService/KJD_WebService/UpdateService.asmx delete mode 100644 KJDService/KJD_WebService/UpdateService.asmx.cs delete mode 100644 KJDService/KJD_WebService/Upload/Prod/BaseClass.cs delete mode 100644 KJDService/KJD_WebService/Upload/Prod/BaseWxProd.cs delete mode 100644 KJDService/KJD_WebService/Upload/Prod/WXProd.aspx delete mode 100644 KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.cs delete mode 100644 KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.designer.cs delete mode 100644 KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx delete mode 100644 KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.cs delete mode 100644 KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.designer.cs delete mode 100644 KJDService/KJD_WebService/UserService.asmx delete mode 100644 KJDService/KJD_WebService/UserService.asmx.cs delete mode 100644 KJDService/KJD_WebService/Utils/ApiRequestLogger.cs delete mode 100644 KJDService/KJD_WebService/Utils/EncrypUtil.cs delete mode 100644 KJDService/KJD_WebService/Utils/Extension/Extension.Convert.cs delete mode 100644 KJDService/KJD_WebService/Utils/Extension/Extension.Enum.cs delete mode 100644 KJDService/KJD_WebService/Utils/Extension/Extension.Exception.cs delete mode 100644 KJDService/KJD_WebService/Utils/Extension/Extension.Linq.cs delete mode 100644 KJDService/KJD_WebService/Utils/Extension/Extension.Validate.cs delete mode 100644 KJDService/KJD_WebService/Utils/Helper/HtmlHelper.cs delete mode 100644 KJDService/KJD_WebService/Utils/Helper/JsonHelper.cs delete mode 100644 KJDService/KJD_WebService/Utils/Helper/ReflectionHelper.cs delete mode 100644 KJDService/KJD_WebService/Utils/Helper/RegexHelper.cs delete mode 100644 KJDService/KJD_WebService/Utils/HtmlUtils.cs delete mode 100644 KJDService/KJD_WebService/Utils/HttpUtils.cs delete mode 100644 KJDService/KJD_WebService/Utils/JsonUtils.cs delete mode 100644 KJDService/KJD_WebService/Utils/MySqlUtils.cs delete mode 100644 KJDService/KJD_WebService/Utils/RandomUtils.cs delete mode 100644 KJDService/KJD_WebService/Utils/RegexUtils.cs delete mode 100644 KJDService/KJD_WebService/Utils/TimeUtils.cs delete mode 100644 KJDService/KJD_WebService/WXOrderService.asmx delete mode 100644 KJDService/KJD_WebService/WXOrderService.asmx.cs delete mode 100644 KJDService/KJD_WebService/WXProductService.asmx delete mode 100644 KJDService/KJD_WebService/WXProductService.asmx.cs delete mode 100644 KJDService/KJD_WebService/WXShopRevenueStatistics.asmx delete mode 100644 KJDService/KJD_WebService/WXShopRevenueStatistics.asmx.cs delete mode 100644 KJDService/KJD_WebService/WXShopService.asmx delete mode 100644 KJDService/KJD_WebService/WXShopService.asmx.cs delete mode 100644 KJDService/KJD_WebService/WXUserService.asmx delete mode 100644 KJDService/KJD_WebService/WXUserService.asmx.cs delete mode 100644 KJDService/KJD_WebService/Web.Debug.config delete mode 100644 KJDService/KJD_WebService/Web.Release.config delete mode 100644 KJDService/KJD_WebService/Web.config delete mode 100644 KJDService/KJD_WebService/packages.config diff --git a/KJDService/Dll/MySql.Data.dll b/KJDService/Dll/MySql.Data.dll deleted file mode 100644 index 54f5e6042af0844b6c57fbcd5cb632c9b4e1a92b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1489920 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

GF5 z+=4sEpSfJ!l~AAcgRJ@T{_xq5MEBnZZ1kJ(Y$n&+ix~dL2=8vmKtuS!HTf|xGRYP_ zdYL#6n(CUJY;&s64f&y1CgoiUSMSFlaS`6Aax$rm{ax%jENaHyLnc1^NpL(GE0-J1 z2|h?=S015?&%z!?Ci$&QV)pB}d7nwDs90!XyG#s{dT!ow)-K-9s`>%_D5cbvCAeUp z*<7E+o>;KY%t2r6Gk?r@vbRq5nWwc#<>HW1E!48ZE;dGGtyoV+V0R>j%}w`mBt1Nu zBrNkr_LUjbg>pz?sX@0{0}%I`H6=IP4HAwYR^Z}Ab~k*l9A3OAUFg(YY#_-XECf$X z7yHh(vq+J#6RtFfiB}sW<(;USRe4%gh7Kes+bCn}+V1hN+X}iBG5J1~Zgv<-Q5T3x zy5W^6P?ueqCjIDb8zmp)Da@~oCgcN3`rL0J67in(u0VE+lNF?1-dbOWSJ6`A)6>rK z@1ZD531|7KsQF?en*8G!{^W(XTnb7UWIrFHh%s{$V>;(=+i|?P5;3AYCFLzm?#_L6?;(Y-US}#UA?@rkr-%?|@J~*v80m-c^Vy@3?0YtjpWp zPhrOc4fj}F3-iwIzWBCC9$V4|Xopm=k7Z5=hKG6_{j~f>td=@m| zp^8bY#vReDaZMjZmdDe1?)PEvu1BQoawr^N)`xx*7SsTET2Jtgev_f&agpyI5s-N7h*vh82#OTUaU zU(vsb(Y%$hg!RBV%_g8f2l_#5xIfidz5xWM?A+>8;K}0#wvvSLa* zIqxIm#x6+k!ZjAkT%Og27I-dkLKJ5W+?L zK=<{f@ZbeXykT?@jBPAg$~E6VkdNNb5!|t)$%JkunT4 zosXe2#{-JF-m%kVE>PxJz8F6}E9o+JhVFa}oevaey0{lG`m8E8j2Dwwd>jtN06@wU z-%RKr1^`VVAO--KV0IeY)1_0R*5Cec*2#5hdTL_2&Kzj&?0YFCxh(Ya* zQXZlc{9ay;jN&DmQFLRN+Fgdc+9Ncp?N(7Z`6Ga8Hs zG1YW0L=f*_#FMu6@{0J@C&cPM$Zeggk^Edvx|PR-IuZ@TRbO0C_^1765y;x>m`yNF zce?kZ{gslI5_nmd_g{%{RHDfX^GKYNWvu;oLWAeaBy#(7Vcz`-`|-Wh%v4Tb9RH1w zv|{^*hI9P);Y%F^%m{o{C7z&-=~ti*=_Ez6Wntd&(}~dk#vA&Nxew5P3d&?;Oksfb ze-t3@t_uRhMcAJKdj3%W+kG$ypmg#s3@XRn36*pwoH09=jBeeDw8bmYr;t2bu26BT4JPVUBZTJjK_1M?F1O8w=4A#=CSYgzy z&*JnZSYfDnuW3v%rVJ`M7C#u!a_$2Nh$|lt@{@I+!3UFG_ikFP(J3qwl#P5TQ%*zZ z4fxcsD-#2NX(1p609_#<1^^g`Revo80MkQ23;;F?0WkoW5dvZWuyF{80YFa(hyg%v z2#A5aX&M`$OuJa7FQTtPnLdX+rVEYW#8&_WcBk~Foxco9?NxraG|h$HT!2-3Gf2xxgq}YB(&DHiP|BqZ@P$ zo(O}MR@*F%j+`7Hy3Zr!;sO3)IG2R9lhlZiDRE<$tBPPP%YBNp-8H{2Wp`~eu(8v% zO`jI0mY&2P%wPXOz>LCOvCb53_Eo16Ubj|2X zCAvy|@kG}wxF_6~ftMOh_cgksT3*FhRZ(l742?`w5umnNJmdkTtm=Osd^bWKMC71+ zrD6isDF#O21qTNTL+B>UJEG85fG_Y0C^n8nazb^T3DbQ90YGHHJ@?r%8p+ui=H$i< z#BYIG6ygM0X5pD`RWo!@e1PR}Hg9#62DVq;bBk(-pH@u5YzccDp$hbQPE(K;|$;fk*p*B6or zbsu&SZ<(>wAr`1%v0F;b@&V`(k69H@T2&T<~yX#=-ReKg>{f&jc0wRT*aIjWo zW+^iF4TLG}QWywbD*41#x9}GBla;3#iu@`MDtk>PW?zr4jJ%B94aOs67$a zt#J#ygP}McU{9Yq^HASQ24Y>y6MdAM zivc<%w-5s^w-3@l=F4DmUrgY~V-%Iy$7|-umhi&YKKS))QrR*}GxW$=#%&;KrqIaz z_~)}@xC}j^JC0aV|ZxDWT9+ONZi`dM@-ik0ycuv{YrsU{M z<5*+cYm5}KC~f!}eC5ncQM3g2@XRkV9ufZ(QN)yK`==v8$!hnPF=MMzD}@I4?}hGC zMx(3~pf~6!s|@I)I?CDt`j(EeGJ&R3wPi0XpsHRm2;aqns(JkO`Tg)(o`wdnqR&64 zVz%>qpD`wH2I0Oi_>O#wI~Z#NK2q!xu-%%p?Ag{2eg(ynkeyq{cArDpHpdg*YBYmP zyc^;g#z5LnrjefPi{aeoY{jYr4gO-lxt4NHvyOf})1f*6+J;gRgD+VJS* zg%7J0ImFy|jBdrx2rY9tkjIr-)GuI%wGu`oN1q3g<_JR!UH@xY#=kN;fH`i$_(Z^Mp|mXI#i!QPvapJTC-{R1VHY>E z#eZ90K^Z#wHd2Q6fhJoBRC9Sq)uf>EG&{Ngu_wGilzGuiq>$=cNVRl=T0gf`Zi1-2 zVbe$&C$3WKXUE8O`>2Ciql`iL< zlw0XTd9~s}Z|I%*Ba6(DjF+aUYVeOnlk8N_7~tVHY%XkqEXpyG<-HC6v+n|La9n_l zjxh^yl{?T>QiVBIY=J}=lzV%{PQI!xgi2Fm5dLCJxy5~%SZqOVQGH?`ys9mcUvDFp z?Ga%C(hn*=DdW-xK7SKN(}x#NgOnwu=hg((T3W-{7w=8T?2Ufu%v^ZpE2p`HFHJEaQBxlbWuIX(DF{#4aF;7dk}^L$3xKQ4Qx++PaHH$S0# zJA(2(1F_52RVl&JElw!idt^OWLOd4scM5H$RZ|LBJO8zgoe=Qv}r*Q z&xS!{AD{~3+Bx@mYW4xJ<%0u%S@&bMO+v7mU;vEsQm)@e(Fcoq!ZnL}N6c8%*QA?J zq15JAL()G7{2%D6z$${n+?1rM(!Y`^5>kn|ppSvPzFOO>2vt-#ZCoV2)Xos56pV%H zaTcKCsKzC6*rMB-`%iqZkMu(zAt+wOFLP?CmBQdU+p>$Z)Ee928k=itEts;Xpo$r; zo#=s7aREK0Ln}W=6@}1QNatiTu9j%_t=A&o1HvDqIE9DJ|8e58+To#Esges}-{PGL z5BN6NgG}Sq4sf98&xLr&t|&GxZAoz3M0z?LAr1$xbHM(^wq$mc18Xu_GitNnRl$=U zYf<_z?03tba;R<5^zzYJ!n$-~j%1hSuKZ48oQ9bmXAIuonBD@j{2soe%t5f>5N=aj zLM~+TgvgwX+YlL+Ua*r2-I$vxeb}L*VQL?^oP#T7j1{TA(R~c}(-`yKlyBU7L%z26mV6!W9r-4__vDL`lW)pQiSvGoFh#V}iX|}q4tV)}c;rU^dVFzA5IFrFPI4}w z0@0f5v)Z5sE8XdoKY-tcWQS+Oxj2$&|G)qnV})D?%ro(0dlr7N;J$!ErigSw_+k9G zAb`l8vt%VWZ5@=i$u-A=NU#}Ei5WNGViV%+bT`8ZPK}=$(J`hosTs@MhPtEh?t-YC z&&Xbol9yOwTx8Wvx)jq@mKiw3m?P~;(xV`JF^?uwvE|&Y!QIV}N5tMnChmU&(aI<- zm5%Eh^Wa>LgFu`~W$l)-4I{covIJ#zBqA0e2bLlDEySgM>f;_3#8^B9w?Zj38TkG) zePhpCg3{uD8;N#$Utw!ZyI<$wm8=%mU5s4FWzibX?#A%8mM+as*#R*)xN}y~-fh(5 zF1dtB058^O5(0Ti*l?tm!e`}vpnGgFewvezamyr|QtouLrm_72CA~DmO$sdaus}d= zr?ExiHU@8{dS%Ia4R8z`j)y~Yy3m}7jWPC2`dbHML7B#q8CUKE!twC)ID0E%nOTSn zO;A!4KHxOQ+Ia93oOj@zXvDuO=ARbSQ@U@1(|A4Ja$AwNP%gaHw*5K5u+QlJPsM{;vAe{XIz`LHJ|mHl1ex^fngtR$b6S0Un+?>qm0?6!Sho7 zg|aiF2f)o7;cxJ=4Q{9+afQc5m(V#r`U!sU?A3wtjgKCLuZ%^w?oK(=jOwUO)lpmC zvnV6<*E#myaqoTF8spOMwopo7JG5gp$6SE$Td@D|o`xp~SuMu6thSWf@lD~s3IBy@ zm}qa$Q26d3Uw0?<*_j{rayDu?B2s&ZPa)8t#7q8nb5gz{iDi3juoRQ(`wg6CZ^5u4 zoS?9=?}kh5^I%wSAJ3(BI|B8rq>GESULoz2f*7)A<8F(Osw#KDOFic6Owshl@#}R0 zGQEk-ZL<3nCV4jlsV6F`<-U8jK~^Lo*MJ~|57=$X=;*$Jt);6!_6}6NiAjDpzxCz zaBe>xMF6(lomrzEJxEgS`%O8r95Q?gqQPpwgX*pL#4u{)J!-42D?@1jU1w z<<+tOtQ3@1x-KFvy==lQI#JxWz?1Cp@lm^d|BANdnbSz<-_vEXcljQIUs`jSK9~$5be(+jULlI0Dj$r@#7T~ zumt7@-9u`SPw0qOgh%jqOzyM%Z|2?u%&w~H<34lFopbNpDao{ZCv}FB;V=!75C{p7 z08(G13MRDBg@_)wHv!2oArxr_1Z+qVMS_aGR}=v&mLMvMFoI%7vFmFI-|xTnIk(JA zV(|T*@A>ZY+_U#yd+oK??rrV0_oK{xW7}Q>Tv;%TXaqF3qiSt|D`w|Ly8(-6 zc=lTFTIIYdsaYtRi&B7D09>2`%mUywDZnfME=d7q+0P$ksLu2@&x}gs3Gzx6K=5d^ z2GE%N^?0z%xkW=OvZrxEf;qPsMCA%z+LvfPa#T_-l>${EMrZOt%E<~;Boljdb`>7I zqQ-t+js2C_HTDKxAGEa>#?3HJn5Qq`gt;eET-n>Z>Wm`i2?3Tf!&Q&!$%IU!Q{-!@ zN&6p-{dM8}y727VKV{dW%hXZjaVEM1S_7OR7ov5tsjjE{iGK7N zK>nyOZ#-`|HYO~LLD?!pYCwU*o4FM69b$?u6@i1DIrj`_p7y9Jgarv4K95l+crtsZ zgD49Z$25-IMD8u4ow+tOxH8-K0FYJoT}Y)A2ie|bt19%%Vq5D~^$PAlA~}3u4{l5_ zYn5E3YR(pR|4rCCk~B$UcV6@GovyJB6HgSUC1CU48t2Ut*^W781D zH6=x&fy~t*X>szTgSy@7fD_JhLE;4vRBO)$3!V#Ixg8nw?yxZHmp=#^_JFgJG${A`^V?y-H z3t?)^aJl1i9q=IDLkTxI39T;cf!R*1}48(X!5%c9`iQHCt?9J81IWaKgj<7epupV z`YhLHe?HBFQ8qpROYb7P-oT!v7|F#40@K;8bG-yt)}2Oeu0IWftNidibthCz7H4Zw zaEQ0Zs5_(bz1_UiUhnMc%X-QCgGd84q*y+M#OBM_^F?$zew~t@jc&picykb2sf;T5 zvAR(QD8{j{g6L*pK}&OMoe3Wd%|1!EByZ(5FJ|3^1cee2A4D2j21nWGI~ZGQPfu^V z-P+J`uU%v43#TJScrAygcAcR;6T};dpea5C{C=h&@u66>Ib!5HLr!v0XLJpdIJEqf z-vw@GcKq1>@gl44FEh+BUWoJJ3Ri$nYL5{LOD^Gr*Ii*_vmw30rp7a4+0l5F?}gI5 zQV%nV_#UOO-R`$VB!$)J;>*3@E?XBL<}JO-D+;O`Ew6izt4}nKD~VLi-;sx)tXX7WlnRD45qL=Iau3V`6fv-287$%-1L8O)@nQm<0ki3qX35HnuqIm!!>g z3W~`uA5LM6DKfwOKe8%5zkGzOijtdoh4M?~QiSe3jYtK;5sRYsO##`MBJ-^i8Z!nh zUf=sV<{{KaKT>hRoDpHTv9Ou)C{Q}t@`acd5OE{4XxxD_ET78P`YP*FxrrsW#?u8) zF$V+fPD6XEz(>NNtrHS7jk2J%3hix%cAL z+(oQWdBGE8sLpJUCS8Y;E_Wr?aS|Uxpyt8Z^nJ%-i&f%l|4e;q;ayBR$9K^f@H-B_ z;UBppTCPT1ZfKU&bt;nIbdH5uE~5bE1*Eur81MOE-xWR`7J=ZZ#W*k6ReF+}9Kh#VbBg6bGA853XT4Q=ppIO(%z zc$CSRcKd8aeiU zJjfdvg=l}kieG)<)@eMnoiuz;XZyy7(RbDMN3`#uU0saP0Ys>6!!L=XAw?&`RU#%T zrfe>LJak@4dXQPEq4b0(HJ8?r)oz2ZhA1K$A6Js*_d1IkO~x{eAaAS_@*Xl9ivUwBUKj|qUPntO_XZuFQ_DyV;eT&bQZZ3%XmvQ3?D|fQ}!iLS*d64LQE|$&P%uC+xZNv?a z0+#9$;dglJYKgtALhP}6VsciA$u%Xh@75CA zR3Y}gdSY@`iODr3vG0pmQ~tfcf8E+5Es)o^ zXffX;%m9;T1qf|7G_D+qV zH#!}|j_hX0_9su#g@xiBj${}=YLTaTa*XP_8(A`AKPDE&_ou~H^lP!z;fI%=N|n1z z^~1mPCwwEc0=tpwR`Hu#FR$nqV7vahe!=3_WV5_QN2hC)R_`tFdo1zV+0SnX$Yn8_ z2x=j;F?pbMa!l~W&FG&j-e>e3RqU6k-2G9p=teQepEbgczzq9D8OLRqEsjiQzE&Jl zUN%MFQR)+;lyA2Lh-6IyXy>76Jw8r6Mq-eB;EglTTx<-OnU2P&*`gTErsUo*H96~7 zBp3Ixt<#HIUIZ=m@5ig$MmY-P_yN%zSzM=$b_eVsouOdXX?OV3yeONN+8?ImG8`ya zcsHK$CMI#5U~wqfE=#HK`JsrH!Y>spLfwI8RK?PT9ki3IwaA)mbmdhSGDvDr6Cs(u z7E3#JHe8TvTCbk0Cgi|5JUt3%czQ6zHo;>Q0Oco$+H!-(?81J|t9lK?)itIbId=y` zcQ3xH!0w!g>F!@dL(3Vn%wo>>E-1ZR=}cx<(GLjVDt}AH+CXcEmve1E-I{;tpZQkX zz(+|zHk_COUPvDmUXukZT&C`*(Z5uc*)oI~lb@DHcb8F^PzlGos#gVaLrnB{W%9>O z6Sw}KO;)NP!T z=vvMj(qPxYIl(4!PMxTT)F!gLUEaBurtLrHT?LOTD?Bp9X~=X@QA4Uxg^{8%k%^v? zB5Q99C&s3nRtU{uJACprs0R7l)Im^P@+5_9CCz-P(eC4%2tOSGqc0>vNc4x+j$HMn z_vO67L84W3hl7pw93m0cG^{JStvAuoUt5_qZ^+nrB0|ya@at-j+JMdX#}#a<8e};U za{J!b+`YQoSlJ+9+Uoo_#AA|b$#(WG`>Z@q}=l8q4^aiM@+8(qx5$2#c4?^bTJCFKUr*CpR_#*}VR6=ePN?{TC7WDY$Hz-E8fBP!pIF)piX3KLm zVbC39_lU#N9)NI3Vq<7#HhLwV<@5REQB7Go7Ed<`DBV}FhV0G#p7KKAJo=-|{NQuB zF#0oAuH60!WBB)j+5$=DPdj*RyLm0MaB7b7Rp6^sr=sV<+<=5pCi*S5^++UT)^AGF zcn_8>;dM&mt1ON3(e1oJO`88f1+X*K(v`>>Thle=`F5_GA79qL9$~A@`g`lCU0@Z6IATvT+(%N1O+Q__@p5iT28r3%}Cyl3B8t;cu z)@Wf*WsTOm+(;v1&HS(m<{-r#{DmtMwd2iMYb$3!OJ`B^0Iwz^5O|O_4lZ)`1xLG! zz0n`YzM)p$B}i00AHy|sofIP*@g(st_iTj?`%eJ^Zbg2`hz&3%}5!f{M-;M8ee z?@m!nB*S^EOU=qM>Qu*=i4D2iho$=}jyYlJQx(VD!N?ERH>xWA zg}gv>c3>62xlj&imCIZKGbdHv;alviE@N-xp02X$9d%{C0Ezib^jB~O{Ph`V_QV&c zJ^95Gu;|S4g?Pp#K5p;fEXvF1O$Td#)TB>9G^ zbdGjuGf7Ou`&eeU)KyaOVft$8$Ok@OIj`FH&JAL@T!x2qUp7vC-}{oGQRfO5Yb$@ z>T+gA>L2yXcB^LE0R}ylE3GmJY-Y0WX&J>)l zE0Jg?x$bqba@nM?elyW#3XM_Gp;ZAp3qa*U^3S%li;0PZo4FBMGZV=)#yIu4tI6my zRo`?QoC<RWhvVOSm|u669~)~<0Dfw%QFj@JJ}q~$EqGOZ!H6avlJ zrLx~m{uh?kSW|oKWbZy4> zdf@GB^_S*F!+ttC4{yKlw51)flt>9omS_|6=tR86kozN#^xbM6?F-)4^N6%6bP$~a zn&p5*Py~uju0YO6kro2#icYO~sO`ISoMY)wI7`P#peP*zC>>%VNe4NB1Yjn51t4XM zIZmr}oL%cUr`BXU)T-n39_o@o-C5<{L-@wD8a@#>_OSFP^42AHVVuev{Qtp zoddIgfA9?9&z^uE9S_}s6V{&!It!rU23ZQxNf(nl-Wt28RJi6Gd zruyU(=XsqoUN6IL3y(38;Dq#9CPZV5;nv5o)^ePh1=d+nIe=LJuqJZ=vjAYF@ zz{1J_%mRRQg#(xc04oUxFbe>d2@YTu04xn0z$^e*COCju05DT`0J8vK#_9lO0l@6i z0n7q`sg(nm1pw122QUi&<%r7Fvf~QmgvhK^lJF|B)vZtbuINp8XuT77Z=`OXN8Lm= zGg<=_QRuF!xUYfY4b-&a2r96J5MM4=9-XLNTY~7VKpcGZT|^$lPxG>q1C-x|A5w%H z6zB>9#aHra9^WNE5si_uAn}h05zl8NLew~k;wliI%qC~I^SvdnG*#Z-o^bwJyrNqn zN&5(DTslK$iSMl@E#<30Vk_Hlufaat#B(Uu$}$_iE%m&m5MKvme7eMJu9uCCo7Z86 z@kYLC=Wf4wj@Lfo<=uXBqxV!e?S%?as zLn`242&`2V=isS+bOl&LAl+VphNbsZ?CWoU8Lr6f6qY^>(3NTFD_Bd92#E*B^6`z} z^s}*0gW_O*bffV=q>oleiZy|YV(pm;j#0XwjBV58$7lDKTBScin>P9JwmO%%q0J&A zre9~L*M^uHCzjaRR^beyVP^EUglFWFL-`=9;Uc`X`@a`JEugx8Uu3 zy651dPtQc3UVzomv65I5ZdZj{#Ag!41GgFOe-!TJQ-wQQKKe|eSO&OtPR11O8a^{7 zrr=GLaKf3Gf=vpi&!m)puo6z*6T^L0;q;lr=hx)(_*6d6%jchbCdJh>H%*&xCdO67 zck0~QsS-{&6T>Z3IDIC?w|^y^yeEb`OyTsIl(ysLbLLb&V*p+02xlV28x&5TNfd9d zgj4OD81DTFr&ckkR6i-7FY=j`w#Ve7&!o713~=i;=y`?v=TzZZd-3VzGl}B9@;Qvp zBraYqpR=b5Gb*3!rt*0wK*yhOCg#Pbx9R)sZTkLfo4$X+x1`Uc^aXwRwDXzdGbo?E zrt&!qpi6~tCZ^(6RHtm+_c&42XHtBp%SWF{KCyhX-95?Y%B}jmVXHpxkk9-1OrrMC zR(&4ds?Sg5^QWn(HSe%BpE+Cg8J5o?K9hJm5TMIdwU~){zSoVOYeh3B_KnAh;wnCq z>hFc}xqK?0*URU2K9i`uUq1TO__#G?#@^3*wdSw8GQ4fLlrhO&;vB3OQVCmO@gdX4uST}h9v-D6h7!<-b~1tTW69lBe%#*rVtnHU)Gh2_U@!78A_M6Ds?)nnrMd$MPj34Fz)QJ_~YCvf4%R zz8jb?oQQZefYS%I_|dH}&q4ZIWgx=Kh0HPLVZ19>{;KTEY!U(9G1fK`o@0@b@n^)h zDbYwRZX$z_0=->Mz3O+b+?nWO7_Xt2vjSwvG-$w-94|Tbf-b2oWwz9 zmi{70w1$O9#8x;0jALQ}@i%d#wK3}{mt$t3u$2`4^Z;41hvtxN#(a-fwtZY;t>vN4^H@Bi&!`Y;gS<@8klhw7V5 z)is&SE*<}70l);-0n7q`DXRmR1ppm{1DFK>U4jFc1ps}51DFK>P1pg<0)S@h0A>L| z({KQ@%q-8KLBL=1QSr^%e9f@7hpeUp{kTg_^vTrsHS)D;4=vi4qh*$_yS#Akem2_f z19@s$n&i^ksGaeC+G!|84~XIdKfVjt8YIZ=tje#-=Ucd8>RZ!J)HmG@xB8Y)qUp1> zkx-B4Kys_7bMcfG^M{B~NJojD1gMRkYjc6^tzV$EOAvhz#2{Wvu%1=yhXvO2_Lrvb zj5c880QL>C@!N^MB^M?d!P;`1O6nLgeuv;L*K)=9Y_b+)b>#8geB6zw_?=i6e8%c% z#(O<=^g`n0v~xZ8n?$%dTN)xRQz6hj(v>ZkGg1U-6i^f_-c>NXFQO>oK|axPQq+=L z%bi_+Xs6sJnXMh@ai5!4YRaT0Y}zPj{0Z91U~2-)nbV!68fVKclEOjTWBLxfmEeu{ zeyucAvR#9Xqwl5Id91@==J4Zt;EMO>Zh;fYzoWnv{noJ}%z_-sG= z2;kw}owuuiHcmQ}_$hp)2>H91<9k)*iMVAade%A9pf_W8(V@E6A=hXu&Bph_0a{UN zboQA-l!l0`@J79+tK7Ked++v|KAhV3_BMXW*-QQ?J5d?yC1i=uB_~ntDtlUYURLR6 z)EAkI2w9HWMHu^$*mHf=aGHzAknCW4XogBJ?Rq2Y$ktLg@xK&D^f*E7W{h%Tpr&38GSdOp%L2Gv&w^c4jNmhZ8`^=oAVfXHVa? zO9E0ep(Kp5O^Tmqr1#k^_UK)zGTi3siij#dbO6dvbMe=O+v?1CjHGs=&2zYa1{!8~ zo(;VCJ_XC6pJCi<&-HMfyi7w$dMy{BAHNSs`4y0|3gmaMj^3-Bir){sj|%B6Y%6V` zkeX~*ZXFzQUd4qwHJM&M*C{OQrmFvzfI}^%w^gxgb7BQ!ksgz_UM~y!xRr?Nm^AZP zUDKdR{#oQRQKs)Vm7B>cn`8{O%6TCeZq8vL3UPxfbr3xxVvb5sj!8~ulZ%{Z+*I|b zN$TH|crpaS;{&9zzu4T~)R}+kS(;2IQ#chUPtos7m@P9qb-_@8mK2Z_dAv9N(N2_7 zd#h8rfrgnjd;H5iDaHFx3`{1jYs z<)YSV42;Q|Jg_;yhFe{vZ7$L+GaY|v-xpgWOj>GIj{}N>C()L~TXk+`-L4Jk{U3H6 z#7@joB?r0?ljh}pgXz0`W>W6^W1fWBj`{To@beS+BNO0bz-NNboi?L$A8uVD{S>CQ z)3o=EQKA19;1}aY=ZlZk;D5$!gBjiB)lcwm^5+>0Zz1p&0r_b@b&9ikfxXf+y&)*w zr*Z0sMuU0L%y_n4|NOw$F7BetqwS=`l1@H7Dd=UExYFC*gq?~X5>slG-HZCsB9XXn~k~q z@1~tCVJx3qT%gS3iK=|W8SV$xu&MIr1sG-R-SZ?v6jpP zMIJNA*wD-)(!Pz>c1V#QZ$VG6;f#A-C?+SI%7{l>z1cgtvo8(mzkoH@uEI*a^ha6T zX4L-PSJzT~w7UHa{POFNBpeeC{k)7~z|(a%2*@ItwUfRB-wCR3*!4R+n6^-(Vx4;+ zX08k38wt9Gp3mm_{|7#J9U(J`5A{#~Cz}8Fv~5C)xMAS0u3cICTkYyxggD^fdfu*c zlC3>nvo4O@I~Q!yx_`xcP97dl_%@8`Aqp z@yAu6vxWIhTzNC`&HQ?fM>E6wPSnT!o_Ypu5d*(Q4rAU1`P8WAR&b*cniffQqZ~=! zPn{TMO7jWgi$0ITfr9vx0AO4)J;=g&mstO#_PFF|oGv>GvyHXV&*=x;<77*C4}lR| z1FlUFOMk{IeuiP*^j9VwTKQ|}y+RE@DeOMU$= zOo80_;DKb2ewF7q*wJFM%alkgA|PEytdYKoI{#u8aKWhnNXbXI0E5k1#M271gKN$)x15 zcOVT+Ww;+XDy|E~_~!(szcSa&dc>^T9x(&Y^`Fd*W_pc};Y@k`TrGR|%TeLz^R-@I zsPlS2F4{)Mdji@|OU8M4dg)}9d81fd%vilHQ&&TFOHkn=}be`kgmTxIfbx+R=<&XUYb0c4B_ zW><_kx;4~yp+8sPs83R?BIw_P+PT{?EHlAB$8CBIN%!zhT6?2Z8omsqj z?iuK1mVeL9XvaZYm^o%9{1^1Uh5;kq}kP_#trDKEq8DONFDRhM_dwcwVp@lGUz`3*fRX$%4QV z<@)SKyB|1e>9%^P3f#M3^=>GL^hXWyFcIagjWlO_UlV^1glyj(@Zzk+V);v8%+n>f z3Wf9HCqc7H?bmxmA!(1kOo*0jE_x2E!c0S^@4!(*V*xBsIGU467Wh(lEV7N2L0Tcm z-OM}XEBgNM0(U1+{g>F>L-&mfp3YJ%A)}J^fSc*B$ExX5YUa(jxn)M-4nJyym)0gK zN0sw@VKtekgfLAiG#OL1Ts1dI&x(O{SL(budOn<&=vT+j!ahEVKr8G*dv*@~(ccBm z7Q#Mw^;WO?j-DL}=bl;P>_Nv;t$RieoSEo!t^}BstqU-l^i>16vQ>oa^TgJ#i2a@q)AM!bDjt)UUvkZ2bC4{a?$$gg?alU!t`}jyPg5Y;W6DGixUG zgbM}^VD%&{+#Fg130>Pr^3w7vJ9CBM^YoMp5?Br5oWcko8gBe^jA5}dTlxxl>FTL_ zBl$ApkEw7b&*&ONU&Vh73i|yP|58D7+30_mkL1Jb!XIxd+}F1=+y;w}iE?dxJd&XJ z1SLL}s*~fJ7|!C`S~!M;N8rb4osMQu9!^Ee80(+Rz$g5uU7$$YMAc&z^h3nV!F5%W zu?jip_!~)H{TF9COy}HgxLMd9|7Z#@3jii@4#O;m`;|?=u7S~S%I|6i3dZE3i()4# zV?L7E>s1{)(jQfp*=;k}JzcP?ecNmwMp?N6u?Gl~(v^cu!p=dvpsk2CPQD;vGLFd&;MWjis@L~H$r zNg8TOa@e=lbN%9w5=cw&DIuK^ zbfbYSS|Gb0m>6HQP!0}y7R%%s)CTw}GN-U@uw+t*coRG)IQbgVD?J# zG~l*d%~lSgpQ|8O`UQb)4rs9?#kIAJuQ~cpYmrVhZT~r`K0*9<%4xi-dc4BhMu}7a z$E4P@ll_X*y|&oZE$MPwa7nt?71(~oRpJ@FHB`xk8FySFyTs9D>Tx`(gRJFmljwLe zpLA?lPMY=e?NpuQOMh9#VJb7v^FZ1fn$@afSJ z^d^bN(?mA3PvX#_M|3rw>))HM@$bX3C47_C_zzOq=WUQrj4HdqLiAEF2Rm!Rl7B}7 z>#qStCu^3%ltf$)qaoMWQA7pb&Qk{Wtw~XSa5wAfhN1*fd=Jk`>)dxpsq{M?MI@}y zAAq46yrC5?Y&|*$mxkVC=sY9}#iYvW_`)*tTgq7`{PDN&bXlK^AH*IN@fqC9p-n^& zqo3mI&=WS65T-mvS7ZUloBPu$#fE>eV3o_!^5b8q0A2LzQisxfw34FXj6*8%|B?Jt zUWGi&1FDvfTj|~7$H*wEycNMrerm@d2 zx~i=9wLg1}`hA{1^HOgg-}9QW>ug}pvgBOYVztwLx5xY;{H|8}u|y_aH`i8I!h?wh zAc^!nMO7WsEJK^KHA7;UwftrC&k9OMXYnI^YTRLbDaouG0Uh$s!5fcw4}qN{^kiC61MWO`k+<+%*DsL_@3PChKBbc+dw1RCbZcoHR5`D$ zX=QsPys1(R?NXQe7QfpDs`&esZY3#tigK0+lBG{9C!LY40dyB#Kj$qO6`>X4apAeC zTEjrn*-?BohquBT+94sUY|}$aOEB35N{DW!qBcmKjX3%sH>69&S2Wm8Vsktu(c4Fp+vt|Bw8pa+OQ^CDzV#>8SxgL z?)9rYHBOGg|23+ot_;=3)Kp3Izn)3vU@Vgn*y{zckjfo!#Zv`iO0>HaQ)=FoOfoKY z@m>;1R@Knqspb(>FTwQJ9fufSzPG2hK7v6kQZ8G>a0%puY=+2`kmPcMw9rc`io5bXU(Ua17VUM z;9>@7N8{Erar^9P@-K_q31`kaiQl)%rJh6Z>9X_c!h=TOrvsx z=zm==%p?y z=4ig%r?1A9wsAE)(rf5M|`E;JNzpGug<}pIesxf^SWI>DbN1xuf3||59E@*0h+Q zEB=*3w>Cwv?QT={$|(WV7XLuF*QqUbMZbm|yX`f-x0E2N_1j83UdMokmZk)&v=hCK zlS9)SH?RpLtH$F)n=)z^Tt77oW6d6|6RYX;c=j#&jYv+ycLN84l;WUjwDhy+!@BUw~))4IhZM;=bejv zR5RiHjE~E88#*|6uCO`JaXzr5&^x322e{gxtpRO`aLnPhQq02g`j1Ncx{6FQhaDMK zc+}~58R;G4BqTF%BRU>2by!m{2$~*o$IHQBdLg^^Vngp4(#$faJ>cLV@O5wyEuj2L z2dPHc0Rc)|SKz_P!C<|IKRn$|9!e`KxTq|1pff9=MhG{u{hbm%uj&I~JRm$@gsUEH zXbEh?r>$|f>Cu_;yQC7Rtr5ZD=p+HZ@NWvpSVZ7)W~Pz%L#516M#If*negV*zjKEP zBepdzc*d1+=zWy*-bfiIN?OwAD55`+sq>;g^L1K>;=f>J3*F3S^9W2GQA_T|^RhRd zx59SvTXTh`0sz}m&K8=SpShYWq;{rnJg?}mwL4wt?Ye`97TO!pGnnh*8L-9tUfU~V#V>;GN&9L_($OA-C^|#9R3mKXU;## z&Ly5Cjjtz-s2+b|*=pX4V&nRS7aCTxRC0&FJ}*tZN;Sd0&GQOx&KBN$dU#4p@y*$y zEa=T`%=N53iG2grYda}6skgy}sD?tr!z&4GyX>&M6VdTow*18CuVh-{JbL+xNADz= zE0pTwHP44KL(8h+Cxm;nGh67)4HnqC&%IukK<6FSo<0519Jef(Y3Du_zTazDBdBi3p4*aPxyj4m?xs9e@r zj(uM6?$u-W%S8J!MvzF>O%LM#g<21rZ^bbV2(60{g1QP0t6W!M766<`Ie=LJa3bIU zW;xuCB+RR$-@-t2ho*S-pxXsv6jCyDc+a#_ak7#a6>sO^C3D#CPHg8%$kYUzm;hq? z2fW7rRDtE)o{COTZdUsBK3q0$S8689jYHTn9Li>+e+xB?K1#mT6vGxlHP6@`x^J-Xh3Hf81_7iB{h?{$ zCYf5eOlN;(Al&pxoYE>Zg5dYZs-&W;2qj)J9x_ed8|!H)5JK`{uo+=2_pD-cH32rs znGjVRB5LjUchGnfG|<`gPIz2^Xvhng(Px!!JhGDT_;KhC_k?Tjmx(0U>oh3XR=NK;v*D9r)^jwhTS%ZYV#pt0;dHwJXUnixwZL zKw6G&i%rvgch98t5@vNWY(4EO>fL*&NDqr z(Kv;K-@uz)5XBM;Mj+8C3s8H<_UX=!XA)j z_LSvrJyU!anG@U=FIRP}G=*p*<$#loJynfOpQd!HzHy+8QawL|e0j6gO@~N57b;Kw zS&(Mrl3i{_D^)L0>^iERcl7Ig#=a2H_qrx+8)SQGZaR%>yByr%aQ!@bmjRro;;cp< z-ITEAYVD@a)U%cmYc|&$g15KS^Cn!iL78eF>qVKTRY-d@px7!I5I5G*xwW3oXA?Ry zMQ39Toe$}-xk@KY==gT;@U5cb`sEj2Mrr0owVAdDnKsaH>+cmLa$9K zo_bU}G^}PxlVyqZv!}wx?Z$@_)eYCOnr&d+uu0~C>voylTlZVuTWo|T|1s1Zu8|x_ zGp)aO`ob&^Jj)XqHRi3=E^Gbb`clois4M;I9rby@wyV_-naYEQln3f&xm!`&&B|F* z#?3}G?W^ysr}>41rcBY?oYIs8qLq{Dx=kRlnn^8nG~ZTF^MQn>OwoKYrK$N-4NW=! zt4={ZW^mgmt3(~fTZPr5z?#ZvT&V9{9GvNsrZR4ww}x{4FUFfstJA8CH%?vjb`Lt) zLb+9$R?WjVXgIdAmK@Pt^?7I`+0cZMtY*L<`78r7*#b2z2AP^?9fjMJtwa*NTlHOi zVSzZ_UK7WrhbSFR&Z7o3LYFTzF4team_DE~KF9k&X=s-)-WRjCc_D9usq1oQ-@6QP zR{C)*k;C;(uAx|0d}PuUQ%$U2fsGj0(r`c=4?`k{o_bJyL4b5-fQIl_Ub6-m8 zw@lUV*~&q+!!`BwTh3~EM;|bvX*;~Tp5~VmnleRm*OVrLueEJP&KjB@s-yYNdYa6g zt-p{dnu}7J$JW!7)9!|~seA^t7a8oc3bq4}xf zNJhfnJ3!j|?PNtwGG{K=eM?7WEnAMfNaV*eD*VPu6AMu!OO#Zb<~6xa%dUSW_dO-4 zt27LDB?@;c$gFlB&c%O&igEL$DLF4zIbZxOW5>c9zl;;L{1%tLzY5TG$t8DI-MZSf zzDb2qlOz{DjNeBl zB($_h9X`($LsA&`!D{zv=_a#smy_c(m+PBAkL_BVEmXT#FYKbKSRTC-FSo=VlqjmL zwQGDw)NQTSt+H0{;)-C4#@tvDz+@Q(S zyv?_y_b#$laiW(>qGC5~RCv&IY3}iwcJOvq{%YO-Aob*@jAxr+ewIz7HlGWo+2Rhk z(JpY@iDi>825RswO1pfAht^+P!*3LP60)A>sUZq-ti6Mcf=@!OOg<}=W6fhX3O)(B zGD236BaO8i1)qdmnSxf3W6fply3!=%$~aj;wgGpe;FFMF25>?GHKW}q_$1`YXj!GK zVRxh8laRG)#x` zY{l!9TMu=^*1g^(uWFsCjqB6f_KIi2axtF6H{ttB3NUq&eztY5U}USIcG$YtQS2^k zrbv@|Q_J_h3N>|-j+fWeIU8?1)RkNJx^wGZAKkjwV_Wz7?bf~Ky+D$uPS*=lgevm1 z`(ic?lc|c$gLAjFhVfiVOp`>bf=#xXk9&auQO(P8j@Rt;XC_cpx~6z<-KEbpjdI$Y z8EkcCQ#=gxq$+k(yeojt#-?~sCetyLpFmiZv%T?L8=PEZq4QAHY!7Qa;DWM6B2ar| zDPtUXd*Ecep5VuB3O03X_QmuOd6}&OjqhqeQz4&h`r*icGEPgX}q{qkbwZetwfbEaM2PsaZSVVnIV zLhT9|zW|~n+|A*UVLDG!qQ?$k766FiI)GUKASmVlW&wa?rURG- zz;{!CSpXnm;4sVr0AWD~FpKSNbdZnC7+Dl2S0HB1awk#}$g)K6=vmlD&%_Of4H|wLhdM%gu04k&*>Y!gY{eVHKo(FFCLbm_PBLgi+9R--pq6z{3hzg`zS}# z;g~P|t&#$iSZNj5GPqP5L%AkX(N*X%JzSj`+&U>YCeZ?c97JQ>Px5SIC}$mPapnB4 z<(&4$`^WRuixw*0U%}d#j;n4s7*Jp1UKGMA&~7| zVy^?)Reg7wIa|BFn#VSJ95#5|n_(}}D#BHeLQjg7Wa+j_lxb%9<*!kFqQ^}U2c7)Hn+lP5TD_G*LQL*JhzaX=69C9 zS{whBQ0XTx*~qfIOk~GhUQ+h-8@|`?9s24tAA7y)-tF>H=`4}X52_vv5gkvmRY)W3 zWxBFlW#|iYPJt(CsI9CfKq<$XAOeh5BwJ7ZLEZbJ07M9)IX9#kzDa(BL) zd$=g)>S&06hgVCkdm&4T9Qq>sAXmPP3N{dC%Wsv*eNl};Tp!J;l_X9gZ<4d$?=Hm8 zL&D;BGRPlReTcpau>2O%jsC~@lj_RYn|%(T&*e(((e@Jro&#->cpo85aKmDDN2E)y zHKd#08TxKZKUna*V(0oF3Xb6ugXxQazxah)bNgO<7D>2^ z*{JHb?!V37-`iV#gO7dnIwnW_B;KvbRkB!R7~74CXvYXh73L{pWNhclc7Pu=nhi-N zgtIdPw+W!#Q27c-=L#d&1eHEl5n~LtjXEfpJgvbBjTnwhG3z^{U@0SF^tK=Lo;F$+J6&R zk(mVm!eb6#768b9Ie=LJAY|nLW&yx3;s9njfU;5gv_HTM#@A(Y2iTARm{16yqm>3K zyE$eWYU1cIhvx7Hs_^;wkyb%{|BH12JMZTB7moQ%2F&qWVypQ49>;vp6icrTfqZh7 zE=hTTRj&r$B3HnMLL$G-uN?4CHb$idAMi~R)VW^DD3 zsu-NC^O3X;C9got^heL(;YYS?RIaP+I4AWzWCp#DsU2pb-C>GK6v-Gx_Bi9DCl~v+ zG;)qXKiUg_z3o|z>Tse$QAPsN94YD-k!Z0{R|mzF2Q?`<{M-2V^WSg6e*x~9{0H~( z`~Jd=%(xiv`~F&E|96f3Z#DLRRqc`1q`btTyc3^$UkA-vR?io!7wh6qmHkVAF-fZe z)&XeA@~DUJR_S|E+mW)%)0Yf)=7y#t4XCsDSa6;_MDTnbQpYM=zh;f6^J>4_)%KaL zF&Iz7#|Bo77Pk6*sx+2VG^6(Y16~FET?H5geX3&uszy1?&Y`78egmwiqG6RzCC z`7L(ZAm5b->9XSjU_O7D`X4djpTd^`cWu|TcD3-6`AhNM-uTu2Hzn}JdsrZ~f|WB4 z{5?=tB~}&>6q~LB& z(6musrWfT$$i?55pL<0NI`oj z8C~4jE!_{vo!uxy#P$>APn&0MOSk0N+H)Ia40JSY>HebJO&etlbmX^me^&1NMi~nH zyaGR%INmD9=Mu*>IVc-~HE-!w@wYcyEf^^6NY%6h(sg8x=7;BCe$wVs)>^d~rC&lH z%id}LO|E@)FGPyVS>s1oWFU@Q>$In5(28fe;9ZYZ=dBgtn7TCvtsq(g;pjjb0Bs^; z@vA+R4u-SRhxl|wOTm~o++6yqnAJ(=x_P!>Dn>6Mm|62Yplc$Q$*Z>c(#S&I&b1ey z>=4NwbIym+K1xP5bU~S`DbABf^QTC2PpT|^Ibl(jUOGXh=E!^V?zHqEOKU-E>3qOV z_S&2FVI9fNV5kZE!7wx^&7+57sXR~pMJKQHBkJC#i6v}BVj1_i(>2(X~h43W9+&A4;f?LC7GX9^h2MaoJ-y!U26Rr zm4=$9r?1se%FD^zdGY>yo8trcmJj69!qumjVCJGjs5vdUVyU0Nc15#VF_3PIN+<6LMv0HTf99%jV^isx*LiI5Czaz; zc^?e6F47d@L$Jk%>T{T2xy6#eXwNwXp3hNZJDbogd^mnX7bTYXe}tJIJh(mY&=?OI zI-Aimd;}iGw#l^(%>(pOfs_ab>PX{+){%JikM}`^#+o1g@OXE7-V}m%wzRjP(X+*A z^n@AtFL?!bOhCy^g_0zs$<^*$>7F!^@lixFJV>4kG$GGBTiaVp4-2l=YWXwRQxn+b zjDaVIo%Qy@%?f9Spa5@+YZ?S{AP;Rmyn?eyymG2Um@ zuTM<2&)`vo)s%HU-1{a1g_b)UMh&j7tqBRD%DfQ2oUbcabyBVnkJvW075VR!3tyyp z49%UyLmJ#FfSr|OmyJ@oz6}~Hh%q{h%%s$<57)T0z2ipVzaKYTP$Jdd!=H)sbN_8S zFIC!DYg0|GyB5|scsOlwnA)?(nis9mHLrz<#rlDGrSjc!Qaysp_x6Muh-uqtbZzJT zG>k^qFsNFzovdp+DCo34r>^obu%(qR<0@aqRlZDYmCxK!izvyBp+%^_7jaB`~qXga%WJ-2Q$!;8bxKd23b@=1i;AW&G^ zd9MlpIhxFPS94&Gn$&E~*2w%I@N}9UcP(^-{x!|jlqjg#h$g; z;#F7~{!YW_p8`h=)ZrNW(dnQMcbMHei$WNkAqwo!M6V)|HL1(G)HMv48K1dTG$oMH zVZF=*&FVGn*Xp$&okdvRFI|4QcfmY%E^&qNIeb}_M@Q2V$l>GEAlQ0%1>iONu$5)| zO6Lkm`>LIcOJ7h~B>JeEBcvWeQx&z&DT$5Rbrj^=ExWj&Z7Q>dUGaL-)$E&^=J-4a zW=8|$u;K@l+|{^S7T?6|CKtaFd#gQYVrSGxl7mg970Sm)RQwtXQrU!yu&{|n>){tnfFWeMP%x_BgG}h2H4SdBxsc-D?!i&z>=E&6=WORXWo@jIe1Y{sD_K2{8<{ zwKrDv{tlhQaT1h^D;Z*I;Y{FNkZhLg!~ETIO_iv3QPexuMBSNdV&d@&Xc6*>G_vLj z3xiiRx$#Nbx|}{~zjSL_*lywCR~v%8G{)|;KYJi7y{RSb(NVJ%mOeo!*TMTe12fdf z%T$XsgKFeB)>IsOvJt(u;<7&EOybrrU=8(o=(smVk?gz(JbOA|hzsEH#d5tsVut)+ zAn|oL?rW0>uDDA^Q@4!jOh?5ZJBw9~h>7ujvo}D_rw%YiHtMNH*nu4O0Jx>nQ zvV}mZyAYi$^2}RlsNv696D~P)))<7ar^hTqW6*2Brr+#SQZM1tJh&*)L;r3nG)p9j zc*N`Q3F1*9J+1>W>zWczC+(4_r+;V)_4Hx#o?4f;|M8x7Qpl6Q`!ME%@DR9nk3)M& z#7#9XC7%AUbRl{ZO5xr_p8#Hd1%Q+Iq<}IiuuB~^7}AMdnq33v$6gw!0qiNjk{ZBE z1UR$?@LoFF(y}Pzvm2s7y&RJeD)+-F)i-2Tm=WOh^>298c#R?L&{| z0&NZM@?uZ&;vwb5T8&ZpzztXde?lzXP6A1xnFUjSn5gWzclJ z24^MF2IV8r%j=+5B+x7CpjRc(*VaL=7LGo&-b%{m%j8v8KA1U@59W?c zLwV##C!46Rg897kGrrO+oVi~pOE@&-Zuk%F>`YTuILwVGdllw#%7>e@X1_-9LSOCs zEX=PEPx)Ga`9Q-K;6!zBvJ@qXA{E)l@^X7DVMmaH`E8=_(+_H|+( zbJ61v{|;XXQD`5Fw}r%s#lGMpY!&H@e?^|7jVkzZR%0snW$>hOukkC)M`?>N3snwC zyk0aILKBS4_?BuK-+-069=}nbE|-57IRb$Zh~I=yCVn&DH5_d;42*Cf-IghThLTS0 zpOpR8u46#;rF9T~u$B#GKmJhSr{*d@nfNW2-^b)v(QkE?TyDL05b0uTyS;ohX`foZ z)ogSmMQ?#CsYtpGG^Zlzdf7NTejR2QZ{(};b22bXT!i;wfR|1M5m5X~eh*{DdhPj_ftdA23_a1Et{ z60wX^dNo%{uNtG@|(-dhnMmJ6!=ahNdt0>{-j_r?gj@OmMd9c_` zlX8<~FMVXA$*NS#w5>kkMwiw;ODloz+@6@z`a9R_PIST@>Ecd_-{R67O3!6YyJ-vS zl#7Kf?j4i33H-M0i9OBh;v$#V6XJg3e;M~(|4rN{r0GtR_U1I-vmP?;wQ0}Rr9JD? zzH=q*5P19ca8S+r8GE_(SKHLB7J1r^zpno39njpCPPe<0INyosI;?wSqr=*S8OHbW zrNf%oj%(V~Z7#oEo2tf{R>UdW)VrXnZgQKkrsbTrsk-`oN1D&Be%Hji?fU)h?TI-} z?^f&g+gzGm{jQ1oKh^K|Y)|ZIy3_hyE#J4-mG2`e-}|7rt@3?u665YvSE@`F?nNVxC;Sl`;R`G+y7^ z-ZB3pNtFNfnE&n}-uje-x*_`03Cd^cP(CZD)@GkeE%&DugM6L+ z9pMB+Iky>tB)bWp*ryPEUf6z6>ynUPqw|>Sm+x0zD1t8t6Ts&Mn7KZ~6qr{AO6Rho zj~>8p4Q~j{66B4OAfKy14o+}>S%F;69GdBKNsu7=qKhPYQ056G#7ZuR9>Tu%K+ra% zaoVww#fcbwgF*|EgoXnhPCA}ae?h9$9~O1+{$HVEYnT~~+b`#kGde~qc_c=OA&mdd zHb=Ped6om3zo+uF-%uU?3J6Hwj(rs~LEjR74M+LweBwv=xPS*c-}oDX9Ios;+%G>1 z;W5SGN8jYj+Q+GU%|uUH)wOl*!NmDZ#q}*vre1$YM{8sB6k*g}z73x1?>EavfBz^Z znl$-N(cddQY?OH4A`Yrd^kc~6O_Vu|A0tToT|N?AaLz*fJpuc+=~IZmkH4fyyNsUl zO>KW?%x^26L>Y9f#eGPm&xrS09naZhKP}59v)ht3V#0%%)|;n8YqRo2s?_srflHS< zGF!KcqnAbM-^_Q4vQDE!Wp0%jv!*^7=aZC|>fUzoW99ea`Kg&p zJ|~8>KGUB0b;^TrvM)dNT*H(SH%31p%y#Nsp6hk&?&i#?@=4VpoqIg?|4JRQoe}ml z?5$HfDyyyY*G#N8s`I~78E(7Ii^o^O<9Dav@l&eqncC{!IJ8saf3EK6i*0iH6`BW| zP$g;4z1MSYP3=!AkP*Kt=qg6Pm;FT7YUf#_?Fupl2Np^uL9u{;6>_z`e{ZU^|NTFw z-Dn99T4`B*e~Nr~@$KEN=hUZ|JXSxb`tUe$^f68JZdl;6PrW{5gmh0T~L|i2r zG#OF#$3IZMMgJfJhLP4N--1j}-WMagCb6`x&k=9a&FEAsePt%w^hh7k?KH)20JXoC z!*98+$?enWT zG-zL(WTQ|231%4oly9X^udYwiOzw(uir5V>W<9_)-YQeP zNJwkWI1bZr85gdSPgQ=mQ8wxvwwu>EUb+V;j_51uIcl89QCHMfO^I2nyqdGZD@Voc zDN(f^XT4eAGU9MdFI=MZLrug=}G-c^|T`J*j(`=hP; z#=j!be*A0u{zl)?W`jS6y*!r$qf!31*iBXe`|o6zOak`jWtW@-_TS6?2WS7I?0+(Q zv=b!aosG_D8*21hhPfp zM}L)1?{td+!F7@pNg$&JIVIylaAhW%A%wt$Nc>EEw;@Qj5QppKb=KU!)0pIde7j%B@S0!iMZG+*?1oR5dc#{hVtq$bQ*9V+K@pPtS z%>tk+1(*eZY74jjg6KeHMj*EHV7dUxmqTmvHH@mLd3|NbzW~s#U z?zPw51H{_HzCR=Fvog6m(r7ZJ7C+FAm+!J?;;X! zIxdYP?id-wR7|5Cs4=eGP~l#N?kGfiDz|Ea>Hfw-9$XWlO}g74<&1YCjWsmOkN-}A z^Aebuw)(>F-T3u$twXpq)B?IbahY^q`%As!XMA_{X(R{+8!i1~);qdPu&X%n{`Vu7?rek<$5Qrryv6J!;q}~~@7uI!zg*uZ+IB_Ku}@Sp*8Tlnn3|Bbx-3^Shq=&Z3@N-?F#v{m962=Uz%?dW$Iw z{GT}M#-AZUJ9w zz}HlOIRP&);JjQ)Q}uH(vN6zXt^kpf^A;a$z!??buLPWLz<+1c;7DFfbH0ZQs<@mCG_u?p}W0Y7TM%@yG70=~_F2Q5oP zFPGdXpt817^W3FMSB-m;+UPDO-@F*7en}6&@TQ)?bwI())r@d*JMGfboWoQoN|Alyr!7SkZy4elIczaE z^TZ0m)wHYOg!0<8!p`(AUp>& zkhzIDJ27XanC+=$dTMD+EydK*|TLzu_# z*PSofb*-?G|Kxf{AEx7qPbX&)AjZ?f-HW} z-2dk5+#fObmWumsbN_`TIR9JZE;_sFir(6wSRsJkzIl=F7 zmY2Fq&(5*jpW!Tf`F(1c&N1N6b(S6cKDABf=wfcCu@7Cac5B!iE>C+~7bYXUH7MSK z>X4@P8M=b2w(3wPj+q>TjLwE&{0~}U#qrNt$G_zGwO{@>=9qBN?t|4YZ)6}Fn`3|% z0F-~Bee$_-7sh&J*v@Q)sF#Hf%bsYZ23q!wGSSJh33OrwbdqezLcOf1eWZP0Cr{W; zGT8B9KB`-y*P;$Ij82m;OTA24iv@>lPOV#<)3z_mvny`afxdSFq@J<)fhE5I=JJEB zD1Y&>b;Ub^jU&J@{A)zb&;@f$Mbs?GvJ9U7s4^gKG^^5XR^}ku@9@1AZ)U%fMLQ=^ z*cyVlptxWJ_ElQl$JP^wuz z?2t(2a=SCZ??!>J6>sRMmUdjqxld^cU-xMDPuPp%i9=;Uf};JkLE>flL_SyIEo>!d zm=vPz%jupf6x*4YqVnu8-CuAKOim!ebIQ1^EsNq#R$Tr5sPeBKBF1>AvB|Pm0o)CQ zApSjd%>}51*xWDh`V;=Ulj5Pe#Cb??8fS4-+&uA<&KGwf%unGxSbHdkUnF39={00i ziASN52f5O0YOa)zx_Qf|jLRpNCf*UQCa2;M^NqamR^dBwz%qH4k*<929prgH#1Ga- z99Skf-3+sW(wY0{;^OJl7`vNMy|&@-s3q=^sO2LwQtPsjwy~k%AB=x4S+j>81*jBqtUfW^qb~duntXE@pCiBBfLPydZ(^5)X^r+I{65n}F zq~LsK<10EYJlp2HYeB9S%y*~|ok-P5QvEeN-6iO0e)JwiyJOl=S_m?Y^_w+d^)AJg z(S2YH(hmwofcN4I;#U0p#8r&Ww6>=5a8V>4HAOQSj;OnO1Z37Vrp+g>tX;-x%_u@E zjZr3a7ff>9)2LK$SDDvS-aHr%&fpWOYF5@7>67*)e?1r##Ft^qhnd~vXhi6=xN=^8 zu#u2lC~DP?hzq+siJRx)lCIk|T&p8#v~;a!R8pBuT=s07Z!9nP68qPIcR-a7>tDJ< zUP7~i3EX{x8mR94)I&#dei$7|Gy`2pyVDr^tlCf>pR@2`5c0DF+vu`#Ntab0ATzX; z?uLleckfL+KT|yM%amz@U8t0jR4&6gQn}fZe93tLpCl zljWQ5ZGYc0jg+Aq+*SGMI8Z+|M2lv`bTEx$8#PiXjVfcE<%&m_6m`sXJO*X87#l_V ztxg;b{?BXrK{piAxZ9yj{c=M^2M#)HHKK4*7hVU+7OcV9d5QK!egSRrpc4WVdfbI+ zewxeuQhpYL8wD!}=_I9F*rkd-B2KsUl-v$78pn3TaP{K`X#L7)3Bw*a%ZHrFWINdT zp~kSi38A>iXKW`h2D80qMLoFuQ3Z(gNb~S>{-`M0qt-z@!+aG}bQKkwOLvcel;Cfm zd7?4J1=efSOn^k!u61Rjexj_YbJM-j74EEDb?9Jt)h~%{Ch-LEtoqm-WlP7l(d77YN|b6^I(b$>&F=?`u}0?%j4uK zs{L>7?Y_OuB^ow@Vptwaf>3aqxG+o%A|e=gkEe(P z5eY=a4G>WQ*<=%ZNJMZ02HBNGHcQvRK zs#8^`PGJ>{AB=o0__Eapj`}3KftzY5;_E6!mPWPE=i<~9{QOH__!;E=1=Q8L+c9^O z1rmFl{HXzOvPyu12&LCy&ZXbG-lmZFwTz?8$zj5O7R^r0Maj3V*c5Bcox&F13Tk ztS~Ms^_!Cg^z0K7NauKSBmS|kKaVvTaQtn%g1wmZM3K_sT|yafCQ6K$W6_7xRnM3C z3GzTY2+kv3Mqcdk5unM1=J^Q*>3@o3)Ep4Z6gwdbV+dhm3w`z%K;g(VKyv{qKZ6Md z?uEo)X3nyp{~!q_qRV#B8rnh6BmVc(T=m~bGfsP}50uZYXg=fW{F+3cZk^E}pBpdK z`Q+Hev50>>8~G*&R+&vW%lAdYDd)T^L`&qYXrcq_v(nCKd~1)h($ob=UDrZR!_^ij zZ`iLm)-urj3+m0g8(VXwHhHLf5r*?!$NLIC9I3+8miR1P9CX!I2*CX4At2(WK3*(c zP9@aCh_+2`WK@pdN3BHyV%4@?w2FrW{eN6+x?TYvj@Iv|j5zt=H0>FeDOeY5al~{yaWkho7j5=+_QZ!PbWf|)_HoFc^d38nd%ENW!Uj=5rRE( zv~x|NS08R)gS<6hE}y}Z(jjKZe@_GE=Czon;6S|rbFdaOEZM#WOim{vsR#Kk^oN+H z^jhXUFTQ0rkP!h7#}^ zX?VPgV`uawN1-pti*GJ0JovBiJKIlfkCl^8VCBTc^|a`i3hFjA%)FY1&dTq{OZ98S z3;xy&-ijdmrns!@l3rg(Z!aLMar6H1^6c@?lxMGhF`saukB5IVeu8xTXAvXx42~aQ9`H#Fb&Q}$#?ID`L_MV5!wam zY9qWRE$&af4m#S3%s&>`av~jU+{U!UaxCFH3xlvz@^BAe&)7^Szq&NTm6P87S$Lf{ zJs;p})O?isuv6L&sJ&xbJ3XsQV=!{SretmoY{ae!shRI@jDFu!`+eWst)1TY`Toi1 z_r1aQL5lqe&1GiCDwnR|5mWb5p(1m9yi4NI5%4o<06rdG`9h;M4Y>#Uqf3g3neO)*H|7(RPP2 zW{+<|XC`vB?!(AK33D#*&qy~jdEDeC+A;mdW7sI~j9|i28>mIOBdf~L--Us^pWlg$ z_4r%Lv)A8`PupLLN0lKC2AUylj}3OLfdOk1Y_#I;HSI(14f5wGas#iI9s+hvVI{Y z{zh==A8uUH?~5M_LILItV7W9qr5?ujWv_-39YTbZ{jymLO$II0KO5hfX8IY9}dM)u7!AxHwc1>8g44EMGahfD8pMC3felkYCDjR~i;A#>Wv8FAq5|sS@`5 z8TiB_cj@9s&;q}K%%zL_L>wYzibW&ePN`SA#ZCu)<3drCZfH&Lsgd{xY9!vLPAQEp zsF&@nt(OOSea!kWWS@V6SGgI?6nxf9eXA=-JvBmEYmHF)Wr|#~B<;2!UTYe0>DZ|e zO4mt^P&!L$q|33d5lSyf>#&`!S7Vgnfqs!1anD6fG^Tby`~+oS&eUT;ww>fQFfMcKA7>-MfiDA_)l9fqwot^)z&n}D=WTJQwK zwnb~LuGv<0Z%lmOp?*TKdJEFalBm?|EUh+VLB)*-RP>e6obk+Wtx;d#Lrj8XqEa9}La^>}TZzejO9AxMYssd#^G>E---82z_W4o`~b=wC1Xz{^qm{`Po`5P z3?0%XbN;FOmAfvygb$Rx7?Thcz=g%!2gz3?B-#CIUSFvN%OvoFU&|HN=~w>e zPh2>gA_s!HI%BcYbTrrgx#?Kn>QWp(JOIZlROCWlQGK#;t>VyGnp~Y|J6RVlV7%*4 zE0b;Tphm$Jft(zK@3`+^SuC0&cTnL=Zd(kJr|Y3?!5;L)%7tg6zfq1o+ADm{+U$EU zT9CgJtb=a024VCz#kMxLZhbzG?>N^1E!d=(`3@G1=nsuPndu0P>lS;V?ABDaLyGBm zokPD&zAg5zt7J3rpC&>xR(NTH5_-OezXqa{QyN2(YmVI z-K_z19tGM__u$*kING~>0?%_CX_N5P(&?naz8$aHrq%}{R2J1JU zh)N~Rb85`wzg_1UQm{RW9Ay(~mkVa1rZo}GJ9XTTpmxlcn@3BFPHlxN|9D^+#uA#b zVLj%=tW&gbSdM5jU4rF^4r5mZ-ax6tpdn!d*Gx03jucc?;d7*heDjw2o+^-y8bu5}Ta(Vt*CBO)Mb`+hO?EQAV{xH2v+x2qjd zpzbDodQ228zSNcQ={8YE5>C>)0rh3b&U+rE;wBvLhk)q;aNffJCH*tQvYt;P!K8o8 zKP^-E^S>hi64kYV+r9jYLi}>4<5PXoNl31WXC(c#RfG_)sjcGSN&mXW_dgy8 z-fx@q@2I{<0@TE!2?T@muYeV-Aq0gH7GWq|rBYIRZu}Bv?WMt_|7b|Olui22hp`23 z@D4?@=8$#7?_^DFk&o(JLB=zzS4jTrz~y1hb>yWq2Hiz_Uq{zzB%ta5ba4c^Jl&KU zm!}LS_1p-G%vTJ(D?rbw`VtlAp@&wxge2rLW_=13xd&`_{5O$fXq;)Y_AOz%C3Jz9Q2TWNXYT4{zuURr$@HjrG0 zazd||QHPxH$QW)dl+4zGUFS+wSTDojGYiknt(KPAwsD>^qGPq^3~nPa^Wt0#y!xC$6bgfSeWD-&{QoBk z{{M-B|BELIwB+d%1v=d085m~VmI?O;Fga16-wy;Z^iKgEP867rX=`o5edgI8ypt0J z8ZQ^Xd)qPp@7GLws*64y(=d<8m*^2(p zAwCoT!}D1qAN+ilW(VgBn47wjSzLR*6X5V%R%4feb6MFdFff^OS+^rYwdb-3*}%Ch zmVoV5KO+}BmnEM;1Bsr?@_q_roXe7@45HY(uQ``hrN(nvHu+?5%HKowW?80R9T)k?Oy@tlNmvAhJTKO^! zN9~FaVD(Ab&WJJI_U=av#@h?_$H;?2S7~j${UD$^H;(!c)A^9e8yQ_iRzxOK*3}p* z_*c0L#kX=xq_cuQ{&IR3J_AIn3tifGedQZKRCnV?Bc4UXAJ!mhUqbbW4+F=4j)+HK z4?xVS@~arkt+-x%8eB%728;1y;$LI@2>x7Io8(1EvTNP`!E)cw3z!|QVl-Eu<~ekD zyu|@XljE19sqgb{z}yK){(;2YJiu(8-%o80#IJk+#9K-6p$~xg7!hCn0Em~fsNb$Z z>}tr!MhAl0F8HZtq!H<}MEVhtU^A@iBDadc268VEv*(}X+`98eD8n0j!3;|e1%BgdLN{lh_tQ_$*^-}9XnUG zV#hidM7r=(71>;KaUCJ%F2rmpgn?d-WiT#|WNn!lgv#|{bUE)`rglR!4}nJ*7x+Kr zTIcaN7AOr=Z0OTDxP8IJyRN9Q<#spX_CDjS3Xe;;5j8!pu-KCBjORMtdEW*Xyz5}K z`Ur`i!VJhPh6eP$_zDlBGM7IM80yQIdXzgbvtJR$V%bD7?jLl4b&A|$(~Y%e-_EMdUXoOcst z;}zI)A89Gh>JaFsnfs!r8r37)m1(ziK zFSiE^#pRpw}H8hh_i|@|FH&i_O*g8vdat-;`lE#V6wBV#U#Y>|IvWS-nJH# z5XVn{xW3TX-PU3f;`jp%nCx$BF$r<}u?9?by0w^uIR1eRnCy84b1l1D78N0mbiV%S z4e0ECYY7wL_}^{7d^2EnEjwNkCd83$*#BLK4sGZKh>oZ?FES9w61%$Eln8PBKZTzL znCxC_F$r<}>v-U}Mn2ic)?yOk_*XPwvX2zZwSmA9Vgzn|0}JdZYY7vACAUKY7O2;5 zjWq?zhO?Pml-i!{FY7 zX>hSKnV64DB6%U(_kkr%TXy40Q{y-zHzVu=1BB%eB#p2W`s@lSPgue7Z$g_{VY!_Q zu7NKWEXyD>v!?aLY>hg8~0hXRN%@xDlz?a_+i?ABVv9%xjNngj)hTPz$ciVdi z!;A5uC8dl`e=iIH3QqmfZN-n6OYJyb{BR)-h*WU0|6u?lg(V zT9adeJzjQ9`x+ZV2KGGugC+4LyyxwlSEJ&w$OE%)IHOGCcozlZs2mx*W6A0=n zHeu!`$+V}sv@45EN{^D#Yc-VeGIj?%T~kNt+E$cOi(v!Sil6K1sQjQ6m0nQsx4}<~BD%hg&<|S? zI*NqOCn1h1qRI^pXw}=4(G7K^e$FgUZxTB89&sq_=vKf*3!oCei{*(AwcRW-v z5j$@HyR>Der#L0Iiol>{-C39LU9A#M908g$@Kddq+BSN39i@9(QQDG}j;Wz!)QQ8tj{10z{(gSsre%XrB zMWl2yDOKBPZ%sRWu#VKaR-`sr0#f_or&@Wn+51%;rH5KkT1!g5sG(FV2EVSO^l&Rm zZ<12~kx`y%DLqn0={Kz??FJ(LNi~#ebNAaiO22DG>0(m4WdoFcUq|T=tth=qN}C@Q z&0Q@|kJeFotQDojAmV>&1C$=Gqcquy(q*J{%?2nvQAg>Ittj0|N>6Nn(vx+Ro@zzu zJyPmDx^+1{T}SDeR+M%F5&u+D!jS)L_{VI3(pzoCEz7>&a$F(N%UL6rD*DwLWM2F{9X=4)SJkCpC3S?Jy z#7d<1Tg(*U{*4Dn?C5cGYL~Jqp^gPwTX7JM4~|2qU9V-PWGy14uH__Wcfj%bcs$C# zo9yYZ*XO>ABcXcoTRof3`If$4Zwsq*q&}l-!(RHpldI=FW&_6+9yxclog7>S!@EWe zZ`l9Cq5j%a>3UzT%gPostzhws)3@4{Cqf*5N0eyo;uq&oe+b5P6IlpRJCjq;`kRgU~k@Zfem9G3c2S>T}6iOfB1lIQ}*bn4GHAViMx`l?F`CS2PQp zny|_Vab%+6|9b;E)&5$J2{9aB*MLslz80MjgZ@YZIu-a@bV3aJyA9~n(lvS@u7ntI zow2mO_^653QYXYv-?;&uv#wfnLJYcUK8(X4#Gv2ZfKJU;qf@hG^B}|#-PV7i0iD`wEpDvg|ilu5J%t6B$(KI+?LChFo2nmKrqNr z&D1;vjfxP{s5WoN0(HsSED&O{uwMf@mBw1?gc#~e8qld3)}j+)&_CUPPVKLb8A0bD z>|fr1P8F{foe;zOZ4Kzu<7&|fG3YNgpi@~B^su%Fas2j=)r$c&vRX_+9Dj!fOs+)M zvOtJo;nWZvV=(st7UCJ*2XNI-xb#0&KXH`lIH-FguEGYFK=}mpql9`pVZ+4H_N-jD z->HEX_MY6*G*|Iy!}9!SO$=9(2$)ZT53Q%B^~bY7PwS5#gBGwsZE>4GThtn2skepJ zSOgxo#Jmb0yrhuT*M|9n^-xS(tzEofN~th4wGA_3`B0CFQ@s{Cj1#d(mw^E1)t(+8}aaS zUZ_~-N3t=qr!;1L;TByEC)?i1P?xo#IIi;2(aOQx`oOzWYTq%c-_hQ2hLM*@@xj?! zTU4xM|A=#mBY~SldBQ~zwoQ{Aj`oV?cqgFF2>|55jUR9Cuvk$p)Ql4Hl<# z9Uzjo!aI)z{ssQ5;?KYH=Rf#!K7K~}{O_Ryz~d1lBp>Te2p81Fjs3gWpHutuJmmrW zITcd{!IS)mECXVVY@yR5@5?}MBq)!S%#`;$N<5@ z|FIripc20FEPx-027e{8RB#eUxx10Db^>s%i-!<;SAu^$kP1 zuN$5gR z^3>u-J|m8KOfg_$EG4m~&}RxmPmA@(Xp>W8-{WqKr!5ID4EV)F08tP4Gzs*T-<(XZ6iekd>ID z?|2Dc5;ywt8N^2}FkjvU@y=Z+{`Ti$0qSeur+>Z8TXAx<0+)1&L$1CWaAg90-eqJz zVB&eueF*otXeMxl<8w^NymizgjNy{k98Ls#SM$RN>SKJV&j!py-91Zt4R0-wa1G^H z%kh;ykRsmUAwnJ65giFc{y8F$%Vxnw=^^i%`LD4!(y>H;nu)p;X zhTgw}A5-SeQgs8nXc>q113ms#KbMLrwZSO>YX}*b({4KtNBZQDjHa)190E1%t-u9) zUhk)54)mGlPCTWIyjuWGJ5nYgFRt|&yq{j}hbX9~x$CyyR*Z@K7@+jZvoguVh0x~{ z7k1BmDzPkrzgY8}PDWr$-CQlsQtuy9Fzf(8Tlf1e4#aqvkioMCogI&V4KE#aB3c@K zNZZymEHBn|Wf{tG;!3;@To9{&L(V2HC&W?5G5mFg?QuRP)-ar_z#cF?0q>qL5fe;# zxm8<$rN8#>z}E&;`54lkxQt&^PGXQ8!9)6V+xG4Uns+OH#Q!-8fS;c{_AJt00BB_b ztKAc80ps{{6`x$9kpKYl0;32Cs*^!Fx8BC-rfS?CXR=D+)gn^(MnFLV0DLn5NI>>- z9z*$LQIB1yJ|RrM);05-JHc6LBlGqYyj7>-CqVZRj?Q@8(xyE0g>TeM{0#jGg@35} z8|r2<1Giq!A<&h^oTD_`RewjMj487Q7NL&FcPB7G*ebrmk5a?7_aFfHq>P@7C5WUY zpY@yy)K!&wjz*?z!6OsXt~CG_us4x=Q);jp_RPEN-=C(H(9xL8fRb4jQ2E{ zz@>%1!UJ;?NAB+F5V;R|i0pQ0&Kz|bc;NY4;y7wKV#872#~7-a^`!0H&Aj4*b{0W# z^GFp$i8>-PQ3Ccj1v!F)MG8<*f5e=0{OCE*hYwO3;JfWvc2C-FNZF>w>V^!CIzY8U)u zK{igZo3b4i@KeU!hX2JZVnK#k1F=tnSozzNeVi8@5gv)F$}f&x3G2}LQ>e3`j?b}vwukmd#yQ`|0Hd$!h`dCKET|o+t3nWy zy0TkvQp2sTyQ#K!7wWJKp??xjvyL*=+HNn+ANklBd~{M~G+EqSmd?$Z8chUllx*)l z%JyV`raPg2%Xv?cdtVVw*7u=z)^o}kR%+Plr_54cIU4l4NWZ?_!PC6-jW|Dp`{F^q zJyo((Bf4-CIdv~4zoj8pa5`fhv7`q#^Elzt5%>1OtEG!GiQMeFy>micRL@fn4a+s` zF{0&~_wGSb#i9BxLnOff*=?Ah^klOiik2+~A?DMDD!OCn!!KrCgmk-+&&sFpby~QF zjv4Y0SwAY`UIKxi4ovBh+?PP;pTEHz7O%LjN`3$27Z|3gg1duZk7jmmQKWw zSOI8+)n%sFo_$$#fl0Na=DVBs}UOdAzrK`=UwaFr%=WfSYD^QBrm$79a;!`>_rhk1@_kImDk`C z?@W-vcfaFzpFvoig`Y;~X8|4Q^L`IBtqW* znm}PCq3Y})nGGR*j;Yd*nnF4_sgV`?2D!aDTyax0$*&n~Y&8OoaN(hnF~bJO-Z`Lz z<7~91PpQu%QYgoUyNYpHBaxei(v#CVW8Qu|6cDTAV9S0wzSCYxtwq zw9PQRWxr3~>Un8ne?XGy6|9-aFe!1j!%^oV#o<)B+pgROymk#wsq+9XCQ`PdrjWvl zY#LX9nClp@`WndlG;6^gI{iIuwGPr+DBHtWd;Kqbh4WHT&@TvLdz>P=+8#286y7-5 zha3MV1VQ%~mX%6b&Q@4NV}FDbAyyCaBFsfvuEcHi1@Kz7C$}`wRfx8&p!_A(`3U2} za!@ueF94usXrs*Nc967o+EeF+<##3Ey{*zz{|+*h|G-Z{=&B15RR77J8=>;G6|tJ+ z-Gq>23gMd(F2AVP_2G4{!9v7)1T2=el!p>2{WSn0wOyVEsV%m9zXAjmh6T6uutXHr zxYDKP16kP8>fP5e<4V#x_;8(LSG3i`^;pWd!6}c(o3ks*4d#>3d|Jp6seReyhrntG>cd z;wY`ScL{=e=#6`;5k_fE?TD|>9TN_{$fx+(+SA(jM4dPGx5pd5ksM2VzpnGoG3Mi_ zzXD{ec!(}IOJN5mT{_rRheHFvs`4g4u&lk`UFgB=Mt9C07WUJnIk@@hFyMG$6+k$# z)SeCq)z`q+q}qmV$7zplh4~Z8IasM;AL+mY804O9ar|0HB?dWoJNh~LhSM5&+il%udkrA7|HM5uVyKm< zuKZ|w-h83XMBKa*SH~X$QYHe(tK9(60CCFc|FwWc^C!`@iqEb>y^G$q8t1%N8Em(c zDeoN+!9H4-CL}I_JL4;`Eu=N;TctT?*qkp#TPv*O8}D#7=dZF!y2U*(pSg@d_{Ym8 z#&1Mnh}%8*NjnQ!7}jfGb~fSt4M|P*bz&w=u@dK?*`)UmK+z}nPFf%Yc}|zV4|jVm zj)obRytemupk!m6smY;8{u7dax*F2u_gN(NSe8CU(e~kC(CX=&(x>M>Pg#e|o6<%o zJPBE^>_26QVYZu1@f-}>8?Feev_Um3;Pxmypc}EhVei;N3|1236i+>Ft@s+UtS-lo ztl^>mu!h2R#O*w%f@=;*f_Vjr7-FuPMnaOd_ML=7oY_hrx_neMg`)B?+2%gzJpY!+Iqh#61km z1xp!@%hsDpAUXd=EII1ErCrPy!#2G7{S!&(6aWV~>8$aIW+z8F+6*UcS;ItIl!8JPaMTx zCq0ZY>_D)z^$Vvd|+!X*M0Kgpt+;8{kHO|`*GhSKf(xx)* z&~4M;>?wt-BP+d}Vd3m;AD^0rw2zp@A!wcS$?;5a2J9!?MG4tPYfF~hN(`OZ>27in zTqnyq#1k?<#5TQ!6(;C@2RGb1ky;w3JmmVkjaeMF#Ck8xFM4Q#<*MVk3-vR9 z;lR<0bg<{b!RbdYG9^(^+!RbK62bvlDIyjurfj5*_i0E7D`(bc15UU*I61Y=I~giW zK3T~#yBKG=34p(^e8rl&6m5rdd~SIUOTR#xxWVnKc=REY%XCF=HQhT2M2619E{ZNT z*q!L)X2YupYMLpxyUCPPGq-EtQ93nnOf}lGC^a}e67OAv@?a@&$O=j%8~dv5Ws#p! zw|*)YWuBXZ?s5oFhzo@r$@DE!+_E%6|2Tq))Z$DswWuwT+wN#IIPOpAd%3tLe!Jk*ucD#j#itE(94lgP-A zJP*tdV2jAO5Ql%uPheod_IkJ2Zmv;lfev5%{77TN0sH%5f3u3+^ZwZ1BKG#e3FI2S zk{J(XF)RFaFea&74cJQNMQ7;Sj7koDTo#K6ba398i2e8{fP}lgA7l0*JDkI3DOC8g zbLzXmokX4OjIs0*187GTfc%YN9-;9?2gd*<+B5E`W7<)Z7v@Q?LmX&LKRQ^4_}6&3K1^8W4ZLi2 zO32Hs{}wNyztM?5gLAuk;z^bkD&|k-8N~l+;!m6B3+DMepBQBLxvb2Gk)NYFMh?(Zq>>8T+Q8Txgu@SbzGhV&?$Q4&*>& zhwD4E0l;cKd}q|436ecdRK+2v)b3w~BFuN`{;>nY6W@8qgQN|smt*jpU{-NY4K(hg zw<7@S`>J=z?7g>@<~mkj%b@ot7XmBT$JL3^@CudT)t7J+dADXq>Qf763)olyRTv8Y0|A3b>uzMkNg+%`$9}$>*1{ zoX~?XqSX_=l9r(nC_CyAREnXikwj9WUv@rEcg;m-Q*yG3eKBO>A)Eh~N(9g-a1%B$hHhKCax<}U1;1C3i#v;`$f$WCbHfzBiXG2t1ihN18u4aHTbkc?BtnoKz zj^%KFL&C6?y&prSgtxYauMNUSSY4d+!RkGh>4@#aF#Fzb0J1syzacIc!L&t7;-<_^ zhlva$qTLIo+@X~qyzIyTZ*Sto-5x;PArRmz1VF5c(+8XqzGUKnI(;aExZB5|ln31N zi1ham&vgLc7e{+84{4R zIT(TKkJ#oya%>Mhqj~d+vA$7$%TMH6D;AJrNQ0!;ko+N}LDNGlgfwVj2tr7MtfXNL zJx>6d9)hL=#6nw1bj({tpLhzl^BL}B$1LG*ed?4`rcbdQ2o<}$ymt$y!jx1kuQ7Em zC#SNGv8$#3pk`6~2u6-@NYsFw>W6eSbaaDR-HmnSrG1R7HdIibz3MxtBPf|N5ZmKV zgZRLa(y5Eyhy_#&c52Wm<~NYdYpNP91SVm^;w=CR=9(UEpR)l`@~H;#sd8koOWMD& ziQR~KbF6|F$T>Dp7gg=Xxn=;5l$dWy$5!nv2B$V~5a<$lETs%b^sXEYUZ6JwbHUlO zt?6t>)SLE0I~t)Lq50!%tUS`#wo4exb*IHvuQ-&e4(7#tH-xZ^)RWy*FaTy@4!*HO zN)s1MY4*R1@?M(mb{C$5Y#D)Q(Pn3xPxQzhY2FD8^ZPUDgm(ZRIQFm~o?yCK!d3Lr zbZ=*>Fgu_XYDL9cP#bs4``5ACfjCQBv_c2n$x)!c^xzmmM<0{3tL3tHoYaTnu~T5$qlmU&L9-5awauBAVe6nz>G=;$dp~iu zCF}iMKiUpLAo_FH#B)g18B8r2I85{m%mYN+&8iW@+5qqy5TIe(tz3tk$ww#>nfnhw zj!P($Zj1%vq*mHVKb@XM>IcBawI`cFVHD@+a)CfxepLr7PRd?P&BM#`P()7C#g1sq z?OwKiN+wZ0Djsn{ez2*-eZf|FH#fIz&Q2>{LE>6pH=lEn#RR#~;%bvh1wX9t@fH&s zQRN}^nA!oqykUv?jg4ciGA0Xl8W0&yp&3e%B-Bo5h;7N`H=;F_hLUUfZ0~SlKvD7NQ7zx&ecSM5+`4(X-E*gmxZQKQG*qjwuGU~j40md0 zF8fN^JJx`qhrJD$f4Zx^Lm)hQljDM=V=vp@p@;*S^F5gBTjj97iOg%zj->sDJqdi_ zv4@{vF$Agp1m!n@o5pJauhj!ysRv-{Q~Sxw^?<(sU`j!R&ZMaId^L=UF%UDOc&Qd2 zCCPz~I)YKe^_Q}28H#cy$cIcPN+4>Il=+95GUyM7VOHV}{S76HYi1LJLrcmTXPk-V z7e7=?=-@+YgnX$YeoI-Wpf*RKEeQ<$0_*DA0wQBs36w@z?$I$c7&2M#dQv`#JucTw zdd<4KWo^8%p7VaKI&==^H!yaxZ6AU3_-8WsbvBTUe>1v=nt5BKfh#G5qUlfdce*Te zr-~OWNDb11^wAAMV|$AOSxZ=X$l5HCHGb%bj@5T)f3UVH)gp~k1Pw(&3V$Zev3*{Dx9G|8_uS4IMR1i7o{bm9(6j?sQ%MQuvqU-XnJE zezodQOjfu@iimOXDeq;M0vqA91DGD!$)E3|NgRx{ zS90Ls3f!ya`I>pYZk}(L=U>h9O+MMyU|wO(Vfi?UJ@^C(1Yr`vaYD*rCe_{2Y?2#y0MuKF>`WaQ(qbub3f z(xV-{+IcKa$Go5Lt>_;xgR`E-8s*e_)cI5KX5H>sGSq%RQ|IpsX)ENau9UDbK;LEh zJ$%ws9hu?$-MTjdvBe?0s$;1&h5qWjvug?)MI$q!qzBgZhXlME!EXFC@{%4*ncWFj zodiV$Jh6LgQG{>&J80UKCKWQ?8-z=x||W{l_Xz=*5s0G=7lsmkmprB(d?mjeiy=#!g zg#q!^T6fzNc=kBCgKgPhV^`YVdmyQJl}c_7Or*(zdJO4f3g*4b$fjiG zL?mKf-i`RGr_stJN$sAqu=1??eA4AS`CUi;gUYu+! zHycYCVOh+FoLQ-Xg?r*b`=ZFJ(m)o`unZUBrSO_fEmJ&6l}+Wg@5Et%%RSe4~?V*36Qu)K07y492zIn@tBxw~}pBo~%pFl@7H=~+LeI3=%c1GYhyNn065QkbEH+JyO`^#V4c34w%20}-pco$ylT8#+~G zfy@r4qpQaa$cO8)Ose~U1X(60xJ#7xJ!wudI?`3oK~i(jV`Qo(!MpLbT%sJ2zOgTB z;-ww+(@0qFF*2j&G?__5y4CGq4^N#DrKg9KyDU!7=`&`Yj{?RP0Xqz@g0L2P^Tk_e zVz^i-tc5shA*aWohf!BBIL^u)%IV58=$K#&Y^!%bq&+3K&B{@Pr!jxiSE+C*2KT9! zHicc{Y1n`7p1agd;Z9w#{z@8yubV(;*!7P;3)cZi*jQTS=ax8Zt2>aT+!xhLpjzsK zVCb$=?Td1f@kKok0>vbIQ-+LbRvVt05pz#Ue1VTzL-N`*N>YN25f{!6NQ|6kvOER7 zBfAIP(W|#n960&NE}O#%hmnz=1;fdNiva+_&PU~E;Bq1!0o+MIj6($1!mdI|Y=yGx zO2?je^jUc?G4>`I^ zA4SI((|!2nKq-zId^jMe!N;6LhJf)}{NS8Vx79lu>@6p(?}7iV!N1mu9k~w{mNLBN zRacrEYG{j%JIGS$B>k*j;oM&QP)ePM#wgd&%3Y)8BF=3wTH$`vwNO>l#f{BH+}}a0 z{$5nMd!fykiT^;##@r8%`x`TcAIx(7e{%P~mHnfS<5pSl-s$~bq-+J)WT&jpd9kx=&`TvM%8 z9!ISG%vu(8$UgAMbrgG?AFBKD9a1AjSN#H!VSGrt6xbM9^H48NhXpqZXMu~p^XbtQ zQ*~`%Tu!>)L1@GAKnmr1LnUzYH>=C)1G^=;KLiiLKqzTG?oXk;viF(k4DrbPXLTbWB9_-3$AQzJAuYj@7NU5s< z=!_S#@d-+h%sr^$OBr-~p9Nmp?HMS>@Cn2DPm3-r2jiK0cM0u*yJsNl1Ma3!Z z^eM$2*nBM#UJ%J(Eh~Z7PB(6RrEM@PM?HW7GVa62#@eRw}15!?GQ9^M)qz6OtpEMME+r3k~iStkOW zo?y7M@Gb+KXKHdI7c8Z&-$6Kyj3fX+X8@1@09^q<0swRe00{t)3jh)TARhoE06rGN7ZhU!0CuIb&BIgosTrg7)Ib*?-+Lbv91qnSE-DsdJ% z+|$uU5;7)fe3n&iR>rf!W^a!tNh1%dHC&P$D}5Zxi|q)Eo@4^EMm-h5ma_LQmjV{V z{Gzlw!7p%++MDQM^yf}~@z_JQ;DHW5!cr{D+QE_&zjjuuzXE#=vdoVIp!5et)V}6d zQX7|w_P&a*)GPR=043P_CSq7-L^J&sLbMllK~HOSS`gppC4VJ)Xj7)x7HZct=% z-i^S9nn3FLMIx8**(J7k7E#d;K7aq5>Sa~=d|WvEvX zDc>Xej;08Tm{IT*j}KqZ66n$mR2M#gKLpT}!-%#036?_}(nHZES%;dx#ree^nHu?; zt}~p^2wHYs>(6PtVI#K}jzEtSd5W!(wy}R$4&-SF%Y2r4h8f^$i%8%Fta(f?kbMfI zyLy}p`Tlh1uKM%=-|Lxx#$P)2NM7WU%Yic17>Sm}RPSrdg>(MTIiY5KAk1!bg6+!o zohcD`A~y@(k+O zA!lizSegCsTLU$1&d^|k8hg+*5^NcYaLMQDR}ik#PT^GYA%q-OhY++)TO>y?DPn8H zdOigncUTw^&PxUGMWQr=Gphl!mn?s$*_HM)1mEYh8y2o!oUHw{z zf6MSA2&>;AWREj_jp4$XPg*kXJcVBvCDlK=p$8IE_X7Jkn);3M(GxuL8s zI7gQm+%SO&6cxX~$`V-7#fE;JAoVyP`Nh$ai^6M>SaRAI63Wc_qwF8Tch5|Xl~9v- zuO32rj=p=W97|ve)i_}ZQyW`H8rt6>X`p}q8F_@F=2phB&;}EI&FvFRF9WX}Ql*&o zvt|?Ok7Rj~u1C0V!d$aj>JLK(HND(=o`*u=P*10g={A%>sX-J03(i$fN`?kBl;y~^ z!AJ4LbO$;;1r_6lJkkB!0xm1P5Dv5fN%1Lso+%C{)YAySrzQnDDFu*J4+B~C12Al4 z?f2qdAYs;CL^jkiyl*carsrHZX{!bRkU4pAg!l1bV(qF2K&gZSMJ9+FKvU3^)iX#l zxLZ^wtschLWB0luz>vF*5j7Jr?J2-WI2xvwx6Q2LfqK4WLlZy#K^;CYQ1B*(kbf*Q zB7Io)R-Q$I6N3Oz@c4=n>8<12VNQAu_{eh!Cjoud{Wz1u{)b>MLw#M54Kd#5J z*J;Hp`bMngNrf`!D6&|M!#H&xsLgsY7+pn&1Ak6JDcVugelzwc3w2{ts1p(ZU}gZ2 z05tGr=%K0$KiK*)Tte@>u( z-VX9k|2rh452^N_793LjFpAUL2qNe20a&I`p5c`G;8QL?)|K#&2gu2-_LqMFb0oS+ z%-H_c+fO+q;k}6j+e$r7satTT0jre8PrmYJ)Nfj_DmMcOmlu8lRH|DR>JC7MQ~qn) zHA0is#R}|#F2L#$mn%BsSaU*Go0G;OOAG1+q@rHLPpK=V?gqtt_?~isFHrzoc*PP_ z^?pO1ONG*5<7CrrZ;AgfDWmTTP+a<;_x?(-gW_Q|OYW&nr6DV(3Lc?x+f^V07_fJ@0bU4hV}XyW)p5Hr&0Xn zHgB!G4~S2voc`qy-be>>?5!yYAvMv@3F)Gr2N0pRQ^A{b+fu;E*tB8 zpQccjLL=@lp$#(9j~q2Z7d6E_qbc;hB-(aU(xX*nD&?~;tHu-FMEQPp;2N7%j61cdkU(ncTGSnG}iaju1TA-)sp-Hv3An*nKeaEUAe zXA<3`o%$^tFv>ErIqM&*r=@O2 zZfOwY@4ebw>0F+QnDe%Y;cSr4N`~IRnt*!l-}Y7%^SMg`%=xgzI-iC@h1_5%xM|z= zDFSlEHoupPx93i?eF}oyt1VRfu^teIlDRY6#fMP~fv#~Z!i_!JnN6XWHib6VK&~S$ z7d&c4)7zRtA8bnZ_f4Qq+371f>}0%`pn=I&2fCf4lgN1`jGc*I|Ihf0<7-{VGw*ds zhv|F#_ka`Weq>eJ`zIFjB7IO5C>;nU>HgNAWHpHbTJ6%{3}XVMF)b2>5yvzl+O86l zg+xbUAeYy651lwcvm5A0+gp1u3aHpo1KJ;;lNZ9DyXBNNmF{!^-D#;8NJj3zSjs1)nw9B{Ed-S$~lX8Yt^8N+v)?&js)^=VC8UMtDk0!DkI_Fe`a{R0&v; ztmI(FTn;2j zB?|HW*{-z*;=8aNT@Kd%Pq(8DXfiaQs%c#}f}i@f?3CgVqT-ak#ug(-|2EKK_C}es zXfcs?Qa`-P;My6R_g9n_))rz~YTrhW?!5-NLRUy2v!$v)Xu?}i*2lUi>(jDvJoH%1 zjc2^+$D2OBaq-Y^zKA#fqU`Ij8qEW#N3vkVl00E8L`y%1aN$%MD>p*{;*UOq_S ztbK`oT!t?T)&{jxKqHG+Z%7t-9Fg;8_`ax-#V3&2j{=VQbVL^8)=_{hq%1xik;QkL z$bsu`@~KAYKws1p`rn^{9^aJinN6XWG=*N*6#8^iXy@sTc?%Fdt4=sQPhS61s5!CuAfj=#rpQ5c4 zt~LomSTf3?d%W*Ip!0DqQhp9AzQ8F@;!T?q;~eE#^&Tr_EZPhg!CRxwZx>CObAvZ zE?24=aoOoQ)q*w@D0^CKNl0Jh_5>R4W|tN6gGXMb=CD%PDaXrBR}rhP&mr7iOoW+w zJj~QfI#cCm^t;ZOc~brU4(!W}Q=jbQ_iKA!9KX&S{ElDn;h6)wydz+IKvH5@l32 zsA5XYj<13m2ELQx7X_ZUv;G?>Td@{{tCfwN3raIwaTMooJzh2O!s6{3H6Qx?utMo zHiPDOY6ji1DRjT4&>up3sMo|?|9o)T2>oVL=mSlme{KqGKcgAla#QGjO`)nO^vtHv z%Lr{)Y5iVP=rc{r;ohcnpKk&UI%3&6kjWH0c?EN+`4dov{J-NfZI0-aJ_${+XKW@` zSW7dEDdCcdh@4^NRm&OhdV$wd#k(wu*Av0(10HnJfZlJTc)bChwmNJWH0EKcBh*nT zfhj+`0y4Z78|2c|3L=5k^_qfD*-QE5IxNZ_mZEB)DgRPX6k0fg%fi`a9Im#DS^L@ zB5yzfr>u++eIE(L;>3e>B8Z{zgUBGzib$whGzFhR2r#V{t6%`m!4{nWIK6h^$;i+tA$Dy0$c#941B zcm<#02=Ea#B_i?&XstkEaYLq@{h{J^>;PeOFgh>r%LL4sIHmB1T;$+Tjh0`A5%+)vzg_D+A z7ImrMZv&)yO{L&3CbVwVso zLN6!uceM*+1^>3DxK9)M`+D3dX8~Hba9!|c5n8u7T<{NT3O$$5hGP10Q`{$;LbIQ3 z#@RN6Ht?XDLN6io54Cx#U(8MW_W}zC6%T}(AfkuxL6PvmLD;(%^NUPDCX<*&vhw^F z@vRKKNuSl`TMNQCD@-S*UWVRouoeTFFkx0x&nniF0kDSr*Qz90H~Cep9D~4W$yJw! zlTstH^K1}U7yi%B4w+yr46Q_WCpj}ntOWlrRU{U_fAQzSk67?M(PUZX;zHgKU}^h5 zu71FB9-LN9q98N4q?y5SE)=tlWv7cjpBXdyM%J5AhOt7@H^Kx zqfl-N-LENhg3ty@U)vOVOH=6MO`&f!g%;jxmfGB=&^?+$k7)`$zbW)eLg90}w#;s6 z3jJ+U3hy+9ZfrGcgF82cE@=k!JXlT?JXiqY_h|V|VoqQ1-j?ux%I{y~cWe2*Pkw(R zzfZ~U=j1mhU(J-?S@OFLe)ar2Va>o8FJt*eW-RXu#&R=e`J2y>>saO77LH+8hx8EB z45KYEdqPYzn)P%y6LYZ@_#6%`%dDIM8ksVwxen zC7&}IFkA6C(16*B&%sm!>J^`=Df*Dn!E}gfM*EhW4rUrqTd_LW)_~fQ*Y*a~Ix(s8 zIyFQ!+DmI*r!}Cq*OmSU3OU(_gKFgexrG1>b~K>YRY6tZ>I_kh;?_D_ zT@9!$v(?>z+A>?Y2Gqnk&E>MhM2+&YLgDOOkMl9k?E#~u#IWn<-Q>Mlx(Y;0>A?1QW$ zuGP~%+nQ^gb5pQKfIC2t-@TDvxgWReCRXDNH%$oI>Hi0JRN&T$*lL}+xxN@q7{;C# zb9)@`7<&MN4A)uV^U2x=bj*41|3nF7%Z@)U7knDYrXuEF1)m18 zsg0sIG>%Qph(c%>n;M8hXcU`*(Nt(hR`6*Nn;ML4P#1if!=?r^Q7qcRrUu)hAR5A^ z2HT?`TEV6Ur$+Na6WG+?v?vzsU*Uznisg60$}2UPtwPMI*@WzNSC`BnJAob7C6L4O zP(!#!BwU}^7bb%X(CA8b7ks&hWf=DI;<(Mnvi4;gy$1D-tpr-ezi`IKZww}?jhly*aR16r@}2kI6kBaVS90lgf_m(rHuTr z%@*?5CCp$`Sx*ZH>Vdq7*&HLfWXg9%w+|-=#dX3A*dPsk9P2fs_WC~Wn>aZYcsxu5 zXDcqS7XC6Qu5+w|{$LFT=Lc!4f={!K*WblsFGJtI^~;xTxs5w?-7_c6-Ll^ux_Tcax6#w);dB!q-wPp2=Y3fqzYifFo%dOR zyc|LfEG~Ea#CZXcJ&VUV{w85`$Kpp|x*SFq6nA%g4k$XsxyAXmdI3d@Lp3k*;k_gg z^|D0%B9WN-lX=nv8%O@t>wLz_$sVyM!)?Y=)AY29?17MnF0_{|9esE&gTs5c^{F_>Za-P-audnWq|ofO zt_eH(N9o@$X3>ksTiDBU^w@}#reQnJEZT!_9tMj(Dn66#98$0if) z#Zf)Db;jubC=UyoI1RO=Cu75?`Y@6&p3sJ%<@=)z1v4CNhq0rzU|hF@QCYcKxhc=A z;B3nXpFGnhf#bqMM+Ly`$}8wxCWeW^o6X-ssyH&fnfX+nAF{`Zs;);1mwhMRJ`h5} z$PIWMMt;NyCtsZJe--6*1>(Y-9K>*PhOXvt zUVttcbY^)jn&$!b3&(HtZ_K_PaUFFH>MXJ3W@G4&E8D0ux> zyw+!vvAko!_Y>%d)KO@mCrOwxOaDCyFM)L1Z7r^D%1e?NjdKfd7CZx9OuiHWaQ3*U zO}&XU=y{0zMYzO~Pcqkzt;m;v+Zj*EtwVi_mu2I)u+kl$UV{SBa z)P%+7j4|YZc|Pk>{RsYVxUD%sKQN5IXFV8TZgqA-CK@=PzaS}TgJN zhXic+8lVgBhe|{FrC#z~l<$EoU+s%4bd&~f?5rHwvKBY>X*hS|WgR%whh~$Tg9{D> zL0q!UiaIXauuHaivyo!t+xbI?YofU9O#3EtwFmJ;ZhP7XC&WJ)T5sT%tlbrVWN0Yb z4_QjPAv0fLpr9)jw^)EJvln{pdGVr4Ou;PwGrC(q&=TN~siaDf$vYdquqDh>}Z zbbQ6(C2)GBb3DO@5}b{C$Qq03J0W>?fcFd@RBb2h`*lm-AC%IL7Ip8ix$4(= z@ETk($KkYT-mQ>_xRXrOc($S>!Vn$EZ7J_5JW7Ye#s^*aM8F;LkD<57&xJK?Zgy5f zd7e<9aKN)mcxWEJaRdk_CH&Nm#W6$k(rBa5kwyzqtB4#Gf+GGq=0p$-k&uG+stZ-w95{ zL4w3h4tkut-10YgW|(J)5W2wIBUz%a(2d< z8WTrf>0-wFXjmlhVHo#MtmZLe$5l!SBsbz63ADI&bs}d~U3f#Q^XHb==Za5710DH; z9yjUhrE5eFy7vZy?maT-=BtA)-*`u2yrrH|f-pfpN?2==mxCcY(!WDi&~M{*!v^12 zkuF$9S2*8GRR=T~&NiC+FMGoJDb@k>_*FB?zQ0eb+1Bo#)Z-6zmW`1IXdFBzy38CwAI7FlBnEi4qeuC;Fu@@=kGm^Ld~|L)QBEXF1j#2%XYBKNy~lYQ_&Wsr#r&_#!)_9f zQOE(3;h4V&`~6iwI#xYwBp8{Pw#KQRt(=Z>@gL$>Rddm{SaZ*5Gp0fb@jecjH|~Ap zelfHfdR`4idX8`C-PyXJHx=+Gccl`^xUN|b?rmIE0u*PIdA@;p`AFCoR`zD2#I=^- zDg*JDhG$!H9LMe8N=HBSVHo-j124<#c!{9olmb^i4Is2>DOYX$zt!fnJt;oqA_r_@ z#eNLZ<~X+PWaFuX*9k7vLEvl{uOO7^@?*8e_K;MqXPs+#*J(2c_Ve`BvWR&TuZ1lX za8ZPDacmZeggMu`L3Lm_1U+CGo~)^L<4#T2>tey!Nyp0}0DJO8(#s{HvKs8gX`dQXQ5uK8rWd&vP*^7fQ&ao8A>=e$a z9Ip?}(NW7Wy7eqUC*Ww~e#swKM|Og3G#4{q&Tnp>o|=SKNj*$mL3m^=PwI{pU&uPf z8oZVT6h|+6+`#c6W?hW5Pet0f^t`hWM9q^vw1lc})X}a)PNJUZdy6C`97G5wZaALH zE?gDy<1NHWA#UgR5!ABMCdsvY;&zU_2S+~0Sp_+BQ>zG7KVk<3N9qDgN>og?HG?~x z3Nh7w(s-}J$+~Y2li4IBkOBcoM1o_QbP*I0dlw6Wg^Yg zTpRXwy_S0|*BXA$^S(2a-3{FT_kRBQz|NWHeb0N|Q{L0(9Qx>y(?r$t<@0GrwaJyU z)-2P_9D1zIn^Bih(B&xVB9Yph7M-z7{skRyGHo2!k_E9;Tgx?D5A2kS6R-Z8++>HO zRl1a*KFc*FeFHgBxlec!>-gU2g}aW`+>UrTnoBRjsizRD_Gu^S;%p^mQgS1LaXOqn z?84*9GS@pAy+;6B5Qq>s20+UTkW^JyHlXEsI69niQY}!cT1oMa1yAx)h>9oIqEm}i zva;?`ZylYuE{6eO7E=-i@I&nOezc)y_h?7yuh>SZ-=SgwBqvNS`Hp>|>3=USEyAB= zwl+&2(>P;XF%0r#{!$z`?dyHaM4|W&1P+^6k9wodE~$Z~Jq%~_Ai|~IHYmnc>H>`9 znuk)rDyxYelpTH6C=S80qxBepMeRWxxJ4_DouDUKv47nPJ)}S1M0q7cq9r(r%#s(Y zi2{=sLiF^BIP|SQ=EnyEal9IYS-YJEgBMJVCRL+LN;_`-5u zh4}LRHQZ}f%al`(y#Cqp>Hzqc)xgzJ9<;UaV#>?)p7 zPXCi>WB5ir42w4>e-Q?UdIR49c{@vZ9Awd^_}3STC6p5c=f!WPrRGHdLa+rwQ=NTiP!-8;IsTI3o42QNc$`VJ zWgZJn4exD_PE0<4cFZkKXh)>77LDehUa8^Oq>0NM@QaH`1eAjySA|It_6k1xtk+?oCOzuj0k^uGqYnAjehDBcbO9WmybKA4+|5ZYh9f9gImycjOI|~e13`6n;x3;_@;a!a=ZMw{rEjSHXrMlM)wXl&yd{xue zRh#wIGtE~tNh2#AG=g5Pg_lj&(Y@3Q>KEZpH$zB#9Q#VMA4>A(UHS2;@uji%_tjJXJS)yW7pb-@*JxeKT7 zw3`ek{ke%VBSY?rNFSGFZVSXp=9s;Mkn%3p51i`8Hgw-CSw$99`yq}w4ZO#qe96AL zs^ozf+az5?LO$cRz`G(E^WrSw!$j2WHP{CPLWw_nXs1dt9d(=3_58m zQS%_;f^PtdQh5ll^&r&xsTnZN)`Q_{;j4ET(!+ZSISU(-XYx5_^L(UjG9RAYn&X^g z0UWr}=6rzhu~9SjDy|#C+s@>li$zA?~)$ zBg7kTLw@7J1n&>zMp!v;rpvd@A}Buda?}p4Bn_?t2H>Fg=p6yAF}r|Y2;X=E8;{Dc7%t@ON#M1D6N7Wy4ZT1r0SR-(QcvP2{Ggu1#B~bgU+=!sLr&A` z&V1ty)4G%4vX6KI!W9K2RJW!VrVbctW|(D(4ZT5-FgGAf(^1+PW@$C|bjg{Z2{T|& zr~L0Ae>&x}fTRz}y(1B!y4VM=fI-tEF9#>E$`vrDfs~(Hm+%@94UK@o!lWL$TAQy= zIkUYkR)!JmmbuB};iWWHf~wo6N>$DaS?X-CVADqLbSCdpG+sSo80$9QjMf&n!8_4n zabok^49G&Az^<5IHFz~FaSBy-kK$UiL=Nhy{pIAg$zF1FMN7oUzY`zF6KV@RTe?)(pW} z{7Ml_>B%xsU{%w>Rhy5K#Nx^0=(OU&S?{6$!Pge!Dh7Wt$vc|5M7?Qz;A%lW$~>k5 zmj=gELvBG52Y|x@KpX%j1b{dIObh^V0607V#Br~c>IqGoj{xfHU^Vf@JC#A(UIQOd zFX?M=WZ+vI5O-7nhy%c+01yY$vJ7c?BGM9F_tX@~!Dx#iILTfJ8P>o$oas&;ggBEd z4h&}|N}Rv?BrC3gw{mzJ;M?l%@OKjZiO6JckX)Fm@%q4(z~t#vNDE9go+oCr1xRA5 zFq`v2Q!SRehShHJj5k#628kV14bU@cwnKQhZlx&I*Pl0f6%#p*-TWFJslE_gg;}5q z&hu2@C0U6dr-{VmmT)rflBfGgIXOtEz~MD1MXPw%W^Lb0=pR<9AAC1Yfe*`DifLLD zfm$xw`}Z^*4qNk<5N{$+>MZz5Zp8qZ{s%&5{@Hbj#-R%^tAUSn-8uHGC9s9MQtx^u zvs^@~tJ|{Dr&KIPBb4Ns5T}w$?V0qI>`&SEDrUF*9r2TCuD9XnaQZX)Rp6*!r<27ymAM#hyHoxzOWpSG*4?x&3Lu>Ik5F(n3N^W$4ZLoL>LB^ z^O@Q>$a^Z_%6F^$K)X^3m{ z6>!^?^DvGsjrXbq=a^FOdkAu!mS503dGB!xSW<*mehG4Yp|~3_Wad;e6mJpO^X!=S z2c9`ePBYZi$4<_X*|Nd8!d`L4kVNC%^dhrVD&o6PL`<0*CKlQw#-mEaO&qBj$Zlrj zFuvgCirD}=eqp>LGPxwp*Q(f{Rvs?Av9&7>nA_8+Z=a!9&;)OF_NGhb2BkLnc zu~DXa2@a8zFoKyX%+t{eUW<#9bzyk8ulQ7n-BV+EbSH;{!>#G(B)5Yj zAwuHGc5ua$FXOjUjBndGg}T$WS+3NkcQEySKbmp+7jXWiMnGsQ6;tinPl0y(EKJu< z2`>O^{ALq`O~glioO}s#MW(hj6SL11U%O!(2r;7tj%&9^CSjp{~-cHjANE7KHd)uKxop~Lq^2CN7 zdESjEPufMzNtGh~=b#6vY0Q%xdiFOxSngURs#bC&grRx1LQmQ)WOFqG6)`tJH!~#M z%rhO2>heY=8{2tD%H7qRAK-Tu6Wi)=bQ7L(-6YQ1cS_~e+W^zVBHt5?4w?mdYF)zi zzL9l_-FyjT+jU!8$ydQP>tig5xUxe>ge9D^c&WU~?UeCqyR@y>ker^aGvEuKfOt1Z zQbDJf;ix!8ncgD+lmA8|RJ&a-;k3NR0a@NlB=D|m31WgDM5zR!0U)f><#E&}RI9d+ zK1d}{Vm1o->Ft1@ z+CDMwb-=iG!CMuog&jUSf>^ytTB*_`Z(o2O3%M5UC!Hi3*PKI@ywMO;CEBE=Y4T@i zhmMmxu`tbuFPx6!>ouM8;-xqvIoNS2)Y2Th2aJ;bIpR4VGX;{){1U*yiLtnY1Y?CZ zj1StTzP3EPeFPh!LJ_7NBf(kEj6*#6 zmtJ158DBE>eH5NvLo(mCz@1dEi?kRwpCWn7-)b*EOlgGn8j>HO(bTIa;aD^FitZrR z*vPDsasswH39;QOC3or8!Po~iFoBk zcpsGEM@ziz^qdfvb%Ewt^zFna^qkO!T}Uc%rjPZSU^UTQnj=z?KJ4R-MaO3*>?ySy z7VFV#8^bmG^b@yJ^+57cBk-G#ZP3)q+X*EjIS>c{2ALeBZi-jpU;w#JawHyB)0t%1 ziIWbKU`DlDWFy>nS<^jv6o!^HiN-I&G{H5kJ5X?PD1N!x?bX16hlj@m%YUEY-Gu~} zSK|I_Y8ood)RhRY%J-n#qWQKp#c{QK4C8T&&qLXrJk?!zWF4l5v*}MRi`drgjEWai zqPRZ|Gk5sk4gX#I=O1ydH#$h~8vIYkD}a{*8WW;Jc)tv?fnw+4bR@O(CBy+b?HZ~{-N~`VEY_V?@)f||efY6Uy`7N?u7k>a5GHT^ zB8B_exzN-+8}eAbgeehFo${c-ox$)}jy{KMS*NhPdnx;2RwdXO$CsLfZ*aUFR6@%sgDs#mc|GLo9!KfU_=ifJq%9(FWPxfgzPtkLt>BjbU zPMQimhp;ACOHMr3h!5KTJoq?`>EG0ZWUD(|rO6H}tBENovy`}@EL6X)!fIj`AR&n< zSL39`s9n|}eQI2FuZ26`%1u3lXESAM2;C!C$D;S-dJx?B!aD2#9m2U!-H(JXhfD|e z`ZUb}Qyo4)VC=H>!J2dsI%TC^U?B9M-t6Ry6pm#BY!x8fgb`Y_X#;-v{ibZkd5uYc z(%AyClumI-{d@qE5r0zArnb2A^&q;x4c=$~g#4~VGyPyPd$R%>O zhyUN6$gu3moJ8^TLE%Ru0 zswca6PPJRCeKOV&r?U(t{{}z4HeBw)z8I00d=Peo{@Al5dynC_?~KVfeBHLE)NbV$ z(syZxchEwyYg2V1Bwp>>T=)nsm#6Nay#W52 z5{!zO;h5;-0}*~6u!dXO*0cU2^Xc`CW@MUx0$7_onv zh|l5)OE{(!vw?BhpegYf1cJUjUiM6lz&9^Q0!fiBu=2Ol5YF$)!nhg~{9v$3^` zsqQ_@Af;{LoKaI}JhVh6Z-fZUdp!-dM9smDykpqNCU>)?1|_6Ef*Azvcko9W__m+Q zl;xD7Q!Tw0D@TRK>sD!z8-UE^+~hFmA?=VT=sG>?9j8})K@Ik1NT2Tulyg+$;{Gbl z{Tbbt`UGjG*n-tM9$SdO194j7NL+6!rB26CgDvk(#L#;~QiJ`fs6m@z&SZM9PhZhZ z2NbVd$3)wWLlZ0Y79NRsYFEg|GR1Cq<+nNbUvJ|Z+oF7Y9h6^`5BlKG zi(+*mfyc;)f!YXk2s&FDRIl7h8=(_O3$ji;kfT-vY>_U2T4xBL`dI@0iHz|>M0dZm zM?AOEqBq=WNU0bB^aDbFex!TgD`KA_A>IZ7<(iJAMb2`3%Nbu@>V1e*?17WB$(fVf z3%?~Z%4BcTfVzA?O89PUB6yI7l3;#Jd)CL0mKzT9JuA&k?F|v#3pz@6L=DirpeVO_ z9|4No=6&HPD(I1@DoP~xgBza92T(+D=dvNzGW?zFMS0ci5AtsS{;x%PeTe_;8?wJ( z`S_#2KF5C-@BAaq{@^RXzE8vXo#FeyaonwzDXRtFl<7?FJ8*P3TXQCNf9O@!N{WY7 zks9v={1h6i<-JT^ualRQ3|{Xo6yriu;ivU0OT#i-(bF%+R|il6^~c*_ug%5AwZFq5 zBUmYm6EW)3swB@s(d#r_8ByjWA7a-IGgDZ0b&!hD4OT8b%<=2GM@)}bjWZfqz%d-_ z7HnrIN>y|0S(>o0$+Md)fj z1wJ|7B3|cOMX@&c%7ZUD#UI9$AY(MSt?$vB9;BeuEw-tI9;{oi&Q#3)a(%JowAoG@ zzbTU4)Chu`Be?cZ58jX1-(aZFxu$QNKKjrH9C6%g?E9N2Tg4p&%jrR_QOX-%LE{m$ zS8E_k*UULIMa_+*Yi>mzSWW!JWr05geW$wKPGipH!AS!HoyI4+1uwf*YX`xfvgquJ zq->0uTjxU3W;x;^hu0TGZ^NXXu6JVED|( zbI>5wQ{F4_zNJ+;1<(3kkc>VJ@osny%C#yt;)!cxv44i~JRimm!CXfhhxEf?9jyp& zaKfp)7SGXqaVkGRjZr__sq7ZV^AxADfGV8eROVIUImM~W=M#r=czhn{RBprPo{p$6 zILE0x2JeGLIF&Q-pzm8n-FW-wHlgXcgb3c7zEDaXcN z!2ur}*izD88@q`QgNwB3V_(rA2-=V*?0oyradgP3i^b97H1LP!E(`aR}D zmJeBG^uLXI#00o-*=F>IJ{0w#s2TmD55;^aW=5~|ApdL@Ch5(D(n`# z9m0qeHtq?@Djw^|5FhtGr2oRkg_#7$_oqVTlNwcE@OirTsCV*ENQB)6d!w?6$S`tvMhrli)C?2P_EXC86s zg?pDm#h(wVe3oEC) zjXBJ3Ss1i5@F;-q@ao5JM>B4r&Pj1zj%OO+4DcfTByLrsKkX1=z>M(qUm2xaKrFITeE4nnN(#ax`2C?7uoDGpOwY zs56)W(Ev*eB7i!@L*}uNRd<8#t6CUt5Q!eB^BcJ_b<`%jgOG?i?qLspO!3yiG42UdJxudIuocX_orgj!Q&i#raDD)Y1Hc6VAdW`M z`-CMd=KYHg+xw9ZTzklJ#=grTNUL*@R=n4HA-pEy7}io1W4h!2R`_3oVe@a`cQINf zOHCEz{4PLG1&RUu0RXf9J0OO7YNF1cVc;TvDB~BxZ&h8+0PHLN7|hLlw;C71gXR4j zfcGbU8W;0jc;%+>=8M23Y1Ozqi}Pa~FJLtZeFNGuO-inJVs6%)i#Ull%_&ZT<0Ehj z{oh2qBGuhWo`_tl+dgYr?+0igUxQE|nbG@?IC?d%MBw_hu9m%cMPqmSe--j<7a`NT z<74>$O_P6i5z?4E2_iJn^e~NVGaS3Dp`54P%wYL8MUhH$0W`@gCMfZvqMX|aYZTlbO%+8V%>@tT!gYRbj$3D_A zc>W!IR{z`t?<1r=ckqwJ3=%u1`MDLf_3_+_9qS8g`Z$d*LZ+T@#*-wJSCgLu&H zrhjl9`@4f5(C()8H~Jzx>_x=5E%_IMa-FE(VM^Qg!c7_4#-NOL*Zw8vUpZbyMaemY zZWiY0Ie&oF?r{3x8~Ec~&+*{H_%I9uJ*sl;fF+{X%D@g7H(v1K__B#*%l)2ORem1# z^_B-cF`kGdMXxC4pAu9QjSc=d2g{ggx^nR{(Dk6hJ9XU$I$Qu9QYRx0sKtXz+5BsV znZ#SibC%`fq)R4q#g0RY9c%-p8%JI8n3rS{J~bVYVXr&YSP;Y3y3c{X3{XVD9d}mRA4+hLX%f9=?&i2L(rYZDRLHPe03W({vdttY4XBvejk6 zYs)q7WFw01S&=bT){c-wuvAjE`MoF^V*`H|N;jyxsa+`4e{bk7V-oG>${w0Qo7CUm zbAgWvH?e!Bb1#pi3x?;AD`Tb1amOZhv}|&FiobP*Y3!KYAZr2g4BaJPiD1i-4mE(6 zE=Q8eP>&@M)5T6sTQmojaTF~|N*x$*W^vj&`TMYTnV*{r`J77)zDXz*LDf=3wEdS_ zIo#<|!Pa;fK30*hc;pk2 zpxT!*#c^f}>M+C$^6Q;cBg*O=yy;jLL+x%(+>W)49INbhFF^$e9f} z($9CjFWG7R3O|W>d3{b?CYW%()UQYex28uYxz7-%(OL#DSQqr}N9WZ^J3`CyxZsGi zi^!Ul&PU2J3RgvZf3;3yF{EG(v|RQXats|cJ3uEX7j-38V?F38E?DbobsO8$CjNFe zSgl?JhpbkY4Z-Fj!pVoh+Zjv7u@>?$I4ZJgx2}BZ>OONh5mD^V6gX2WFGKhIa6Ny+ zpDg$k2SlW{Kz_8Ygv4-`6}z^>fAy)YNWVFqUY;t#3>3T$AnBG&Qa>eaL(;98Bz#v# zU$rEy$|UWnq-{yMEt7Pjk_MA>dnV}uB@H9#j!e>WC5<5I&P)=f!KlV4lJ3eRy`-ek zB;B1!`cz3flXOoe3G;sxxGPEbW|9&SA?-oZeVL>_O4^&G`!h*cRHDHBNO~ZXgt>o` z4kT%HCg}hr9Zb@LnWRNZ8c))iOwx@?nn=>xOwvP2I+CPynWQ(BG?}D_GD-hb($OTX z&m`rdb%OH8k@RpT35SA^bOK3_WRiAN(upKJnn}W`g!FYXNsncc@IeJhr;_w|CJA$4 zB+Vr0iA>ThN;;jSzh#mhSJE7kp3Ed|P*O8VPi2z+R8lKRPiK+}ZBb($NzY`G1}JGh zNzZ1IMkwh5lAg;X?W?2(Bt4%=I$BAWkn}<(X_k^MCF#XX()CKZoTT3Dw1B#Bz>x+Ye;$}lhmQ4>qvSvlT;R!gu0QW*D^`D^3HBqmXQ zl%)4ENfkt5Y)G(UdImQgQ} zG%M6AKsqG_i=p2suXW~+h_`n?;wE8ZJ9=^z^s6n?XF45UvDIKfLl#sIWy)cK>nElf zcWH@Ze|uI8hds%8%ADRpx=O$BWF!lw5s@ynNVlkdYV{{NZ#?r+!6d%pm&K2r<^1&I zV7w*=;it9)r~DuW{L`52K`&$m*)U}+wQ%zn>DMX%() z@Dz>xmEro-e^>;5PA>xg$NUV^b8kC&5Yo+R`VZ6d0i-9&_n(ydYr0e&>p(4Y3DP6l z4Ih~@%aV`dCl*cKjE7f-LD)?Pa^9QER~ygr@JTF}T<4qi|<)^ zN=oBcbOABJ62~>ZK33k?=K^ra45wF(Jy3Qd%RzhrWj8Jwj{$oWv+>;B^cH%XLQL)g zaT2(2Rqt&}NsXnk_qCJvGxtGS2XX17!FF;TNDGd^ek#)cokfS&^}g4A5rHhPtLb$r zy$-iyvRN#-mfY~QhR^zxi%-p3e@jnKbT#W!`Go&Shv8*|c(t1TBF+*j4iwpr01yWN ztVAk@H~<*z-ViV101ycPaR9IaKpa6CnC5>!YB#4a&ak|h_-&qrA9UTNez*krzKDJ7 zCNjwIyR80T96ny6KCGtG=;d_$;EUSXc+~8T?Z{@HI`-lBo^7Gd6&*u* zVtYEcC3YB3l&b1(O}sR<2Hvq{vS}@z&5Vi+G3HRV%)dMYS(l2e_sD5Ay^BWzhc|mo z;E8uQXX24+#*cR{s<_g)ht84PbcKZx%M8>$$+JMhVSHXIo^?A|rB!Y-C0V)6bAecA zzJr(U_+Sg&{+bO3TTMjstuy)PD7g#^8CHq!1w!Tl&D+om$B0&Rs2K5&apgInY$(oz zbG&nb25V;p=B$fNFRphD*HCS5KFL8*(0P|#5#J=*1FNY31*WOLo$=MVSBeF$#;bX_ z!g=tkOjc7juzKeM$UF>A=aLFc&GtG!Q=i&~#lDawF$nc=9O8{OQd_5k7Y6M~227jP z`iX{&imJd=t0%%m#N{V+9v*IGWdsvaEVg1og zuehejNuEtfhoNd0B|^<`Bo?mKi`t$vB7wd@%ZMiTVap!A?Zvk=o}R)}XB)Jm0*kgnRIoOmY@NYJ*jd`H7puvV~TA%*F~zku!Rxb8Q+D1qVkn*VYc4zjV0XSrv-*`P50Xw-r^1!<;hhh$*^9DHO8%Frri@wfF_a#;6 zzJzhcU8gXVj`3)Xst4PR>`x>gr}lVZr$=7`j{4L=^t~|MH(K?>;ky+5lls)5B;$MD z4B_lkg_@7HlYF(`3q4((?g`1zhGbX4w|5{#y&ya6S4|#9+`vV1`aWx8>rep~HJ%s90 zi|7-bnT#CY4LO6RJv|xgQ;W%o9%m;fZ0>*VdoB1L6|U9vEP77T6@>CjDfpgr!SyXU z_?F*pEA3#XVL9pdrPI-2dE>xHcCUorvn@D^y%Mb#c)rtOr28wAfXThFx&^(=dmTA_ z6H(W0{25l_EZ|F8&k5ZlP74d%*~j^r$pTyYiBAn<6vE(KV5~MjCOaVH%O8Bg(YWs5 z$SK8XA~EL+ZwQbCCyfAszfd4X05Vqjp3RKdaDaS-{PGQ1Eui{oe@xJ{8p$HLTh|AM z34=q>^0br`js)sctC)-rrYGY%+09s2;!VV4XXDP(P*6H|Gun*@Ovp@PC|atf+jvnH z3F*}nB)OZI-O2a5(s`nGNY9;^DH{I!g!D|cuE)z?>RY8DA%D=C)UXsY!= zS9)U@EXs1s%tn5)zn@-V1wH($o~$(gw;ulI&^fz@|8qYs333mE-@~7LIKGeATo0eb zP4w`W9?>P;yf6YCnw^QpUr}DPYOot8Tm>K6%C*ATJ2@ZCRh=EHampk&(h6cQy7(4> zXxQVBZegB{IHcr(N*|j}|G6uD*L3D`oyVSiOsL<+uJnV_>3baACHzB3Kf<^5>$=j%r~Ci3D}6#b{f{gVbMGE zn9QI-I?^ZIoJB&ZokFQWuK(PXesp@Mv12nu!~e1A{+qkfr=`<>?n*x)UH*2*b&)?K zoqkzY`bp{Z53=Zp`pKX(Rl1?lOP?nI=@gRcQx>|mt!vU-p8vhy;Lq8t3)(w~jZ^IU zbg_e5Zpq~!WdVABU~tLsNIJu4yJ;;rWOJPM1oO#*o@!^WW}!XnT8tKJi@Y1qEXuK6 z{%45xEPj4gES-`<`g)`)xJxAaMUAcAksgc^G=?GJ25ynI&fq{s(;&JGmGrKl|h{>AvrJ zOsSmIk#<_2_G?as-^c(fkGhtBEH|c_*W~ zKMCVZ{EfL}%;Bje;A(!83?0sv5R2XyXibj}@JZ*$AtNYL&@>Y?g*`6=bLHqS!ECK&f{s z@>hA~=q>5|NaMUA2a_cX<$b1M#N)=ktxd)5I-W-pZuUIL^u-)9zGHIDv{UebDE_d9 z%Dj6U{=#VVLuovN3&&VRC6V7Mg~S1NMZS(6;BwVf-cptamfgMUvA&jE4z){h>J1X6 z+^dFw&@aN{*kU~c#-HWYf@;}Kz2LilyOn62U0jn;XY%hDaW@kLt+JCw zXVS)qy_qi1`gPLiOm0aUU7+E>1~3$y{9G&++QvN_Fkfz}fb?;J#`nJz>r zRmZ4J!fXKE%O=<2`%0=^-O`)Chhw9b5T^JMlQ{A7V`b+kVXV(n(J@(=AXK6(lY@*V z0Y*sxaR6XE1P})RDldRI08nEA#4+5mXW`}?%NtF7nf^;O`Egzu=f^F6Mq_!~f{KZ7 z{PNQ%%Nru^{PoU7tYy;O8zvxs)4=TnIq7PLzKBsRP^>yDdFc)`F^&QJfDutaxO9GVfXbe2MrU5jEIMA0D<Kqi3w=^0-9ui(j-2hRR=W52c=1@KpPy;Bs-KQal^@6eA-Fu zV9@jJRv|BJ+5hI}MIrC`lQ>)ho(U6zXb3L)e-Pjj1;Iu45Eu0Y7rjGVR2N)y4slUi zaM3r!GqdAD28(H7)-$%r!@f-Z**KlmPD&o+VgH{fJ`g#ewMuP&Ekbn(eBX--#v2M! zdihWO4pb`~@-jx`jiBQ2h6^vFW+$bf^#rOF5P2C(@^W3&8zH=muAP+PH$r$N#^B|X zyj&>tMhY*Jz)nh`JWO~c6~N0UdAa|@+d+7lEOt_g>e)b1wMZ_?uXhpBMe8jV&;@uy z5=k0i6NubBJpvm=j8joQtkCIOKfW`@@aVq-NH#-&8qgZV?6@y3Jg=Zk% zyEu?M;z7c;w*r92)E&X^w>FWqDE?AJHh^&iR0U6$Bn6KY7xL6h-9$QqLCTFVjM+ru zfk6t8FyKUvE-3~EDM@6oy@mL#a!3Bb8$#!|+=t}taDGE1QdgrfOI?GXRyJ{^tx~z; z@Las0y~C7yR(rP>JY~0cV-QLHS>8UNqAi&K-_87i`*1w`Hjd6DK4x*6=>qLgJhaWB zi*3%n6h9Wnkm9|n&Kb~h7zuk@7_k;$4j5KiBZ9GMQ+U|#>xY#X^0PIeU}+k}!KPsf zn}$OvR@&x0RMpJ3fiu4TyzgQp6qi*kk8{8N3~<;$h{nF&TA8yR+#NDmf3Pk;5Wb{R zrOdEWr8a_6Xoxb>Qq|J2`Kng*-p|+D4*?aN8&q&IUyZ_xT1vtJEv#&10$VFT2@RDW zpMK>BnXE_l_Vq6f^p|=_#9jfhQvZo$!9`?PKV`-tvwk|#*IDZ)Ng38pBKQENuIdYW zr*zsocL#X~gOr~9$?Jf^AVqO4Gh*+2mj)@_-nrK>ioB@V$Ek4Zd(qH&7{B;cW2UpF z4wif+;^tA08rV-44PZYK({%f(yRCXj%l+`*;rt1IsT(kDle(71Lwk{3l&w-=%UdQ< zx!t)~l4U?s;4#gBSbnepPyQ_LXhz*`ngY+w{DJ!zy7>e5G`jf%_jJ1X1NUS+)Q;$) z9Ua3^CgFTlyldZ$BC1=C<}dqhLYU$QBJ$aHQ}&?m#y9re_@q%XWHHL)2!uw7d#&#Em}*w+I$nxPL#m8)A$;BTNu&rlB``g-)7oT0~Gz8iAoB&465X??X5ARmjUV&BJux0WZ=P%^(8 zy9!Z7FU>oV1oqMxL}21xk|?`&3M`zcL*(Egq9si{U&~XLz;GgA*7HR!0 zD&t)ZO?*Als{o1etwIxRK@49{5b_8y$`Cg1(W2Ds_N_hXJ|N4H|X9 zC9K;6T!Ir^!nwxBC5X;gXVw|CU;b&GAtAEPkN~GaTYRU4-&$f4*bKoWBw`ZK$-q#= zB_{H#{R6&tsV@#gSW;i?jebF2Ru@}46+P<*2L83qpw}7?b;fmwgGW8^&A#oSr{H?j zpax-U&wybE&28Q7)lauP0Iwa+M!=~RY-_Qw=(e(UC~c)NdaEI$l?GMXDn?P>lEMqB zj#QVbqZvZNs^j05cNX4Z{ji& zI&rL&0+xfcF&tONZCN8vv*Gyy@>gw`5%eRRX2Vzy!WW5Z!{>lkOjTCf{b81OK2cgW zMbWZfM9y&hMS)UW>G*F(O1(SVX$d90on~mB8lr>+T47*_4AW~zfPQc=M2UwEQmA`Y zJ1x@1wnS`bb0S%A5s6LJ+J0w7BGcw}4bz(A2$4)%62bGJn4J`<#6;+Mz>v$Lpq4CY zkNMukzIKCbu`l$wr9Cc`_E`L?ZPD3jO$<-0>1Al{F{IF%9;v>!Wi^;PaH2h|>3Uid z*5=(-8jRWz%W&z8Rw;<(Eob5_-H^(HNt-1Qn{G%~GD3D!3;3J)1NU6I`2+Vkbn^%9 zW<1o8=%OJlrLeKsEQ5D3q*f9#4T&@w5}#>?Brpt#VX7f9l9!<#t1U@b>9)i$wK3G-U`rB@&DxSk7n>2Wp)HAI z!9`@y-epDNzuA&Vrrn6(~zLq?}1wAd2g|F5R3!84&Y!Uo{_;(`OlVyXjJRZsrf% zm($H3xUay&w_Kb8H?}r>La3-92F75e`N4K;90AO*7?(}<<6Z#OPV!gBW-rS-f748hYWvYhYkLkr z+Fa?6#oFOP23M3M^XB+^vU6}njl{?(I5a(q6(gf#^G24L4-!(^c#8r0<0c6u-NYms zYGM)=OiZHEIp4fD;t-6fM6%eC$PC9wB35vb7ur{*`v1+oL^AD51iuK4wZPE6D4q7j zugttxK(agrV<#o4a7F>`OSINHZ?jW0s&@2gw)j55pjo<6SvgU`SelRVL zg#_Oht7{1`C{C+6`u4+61+moNqDY8v`PCsc-#d#0$0*w&Jn8ROv%g;)_|dXJ_8Kf3 zGtR#9I14D8p00ZlJ^Xc`bvOmg?^Vq2+nC?XVoZ2q?!@uX^Q>uQ#F;C1@yYgG902Yn zFv%_*m}tBZTdVY{BG3f~{T`pbZK82mI$dzk@9m`Dn@$%z*i>Dg`W5-#%4u{c;mttF z#_s=GmWle*A0*wMN!mwA9V9)FNjh3d5k$C^qnk8=XDKO4(u0|#E0q){i49PiFZQ{( z&w?ZxPa28M2}t=QF`d&$G>B^C-PnWo#_{{Qu#|`Q(}va$tRFIP$RJ(_Vq)eb{4N+4 zHCwgdOg229vNavv49UJ?s($2@a8!vfx=*(C^F_|U?>je2nPv{ z!F)IHp{$t#{70L>I@QGS|3CQuN6eW1;5`d|a`CuaS3L2)U|Es zIu3pndj#^-^Od69_u_e6%V5tzE}g**+d5iXUt;nav9?y$QwzK%KCkGW$; z!Y|XnF}vW~Zq@IAX@QTgA%&Q0Mx#{ik92X3i!7M`9I^Y346rft0<1RV8+uNF+4y>1 zef)B1;F^a_C+3)U;nFY``j~6(M)sM=Vw6cU}tk>ccShfh&fMZH_r|K@js}FdM9Ca4o3n`T@u1oYzLay%6)&qmB8| z{Jv9AULGw7((2Hnz}3&^bIbq~N&3LYN)uIHf$8~f;HnCJl){IG_I;1Qg`1hpymJ_C z{M?9H@jRuJZmX_%B+#J1y!K|0gFU(j8oY$`({OjYDUf$2u7l8WwPRQkKMYHD>Y|9* zQc~kUq=vdiBbIdiXzJq{-^0?voewD`pU`^$g>+We6_Dq<_Kx_j-CzNVjk{l6D1XrJ zmya2vErDq{U4{6n&i!7%SvZp7JAta{;)Hzp@H_Porc2Rv0rk!0ft1HURe7g}u0oXH zHMI<_J90~1i|Zr4lz*Uart((a8OZC^6r|*GKersS738TdCv*#_qx@3R-MkN~YTq-= zbJq{Iz>NJGC+z=@8#&D1;aY(*U2cY=#P%8=0rqr=ZRKNFD?L48&W0VL9zyzQxDR*{ zzdo2)5-}H{9xO2X-W8;7bC?T%g(-Omj_pvtyM|@_wa`_DlC9Kh&I-bad>FX?IxTQL z7?#t4-z!#NPCqVUE=N2ZbLl?=zAydMC@}Z@8@KH47cqU!%-dlveOOAC7Asa@{(*9( z)XPSobfH{2=Hah2kNTQ%{UgT48)EK<+t(a`eA`jvy&1Y58KQpsnoq#D^-T<|4LPH( z2jHTQ0`tz%5i<@{M|5GhjyZmTmh1x4g0yEk7nt23MP0|=pm8fOH=P^Aavs8ETJC(^iT@o={jAR$^M3g&FjqDQIiTuzaK7tF@9>yzc7gJ zz!gT~+s|x?a>bbUGv$Ld)%uw`P?s?M`kB+5z%>uLDE8b|fva?TO|@$CuoW@u4v&~> zv++cAIc8;8Cg;G#T&Om86e_jA%=2xb-kdrH?FUL@ff*LoLp^Q`>ZU9GcsS!6in9oEkrjbDvX+1-Kb%;EO0%BT955{ff=zZVjf0oUtoUm>)63&VqL`Ch~AE4 z-bUQC2QX`emh9oCpe177{oI)0=Bu;S<(O@*)iz+bxf%7nQb!C8T))mWKDGhjl8O=r zsi~V0hU#?Z2UAR@Uab2SFuw=*PW?=y5gEZ$~AukrSntNlT4w0W`JL=95WYGrfxrT z3-XupMw*XN*0x42j5PJ=52#heu;I==T~Xjs5a}7Z(8mb{AqmGTBH>*$K;?F#4=Q1Vxe`< zSrD|{2cH^Pckh|n7wu<0K)unvFa5ra(AY{An2OK>zJ-2j`%fS>v@{u%N%k2=o3)7V z_o!_yiXP_oeF{va-_l(c4SFMv`331Y@*|c>Oz8N1(R`Fsm3$|<>#FmLmY_GcGbC#X z%Y7@rZb8W*=9o{A8tj9>e#5l-0QRBQ_~p-xF%7OMWj;cl7Ihj7#TT)jKQ0YP| zUK-f>hlsiMmES_0_~<^Q{%~y2KX?#1s5*BbU04@8rV%dfJ&c+XU|v`c#l{2}KGF4k z4D)O1zNQ~^c^Vq@HQO8=F+JhmF<&6}RPssXf$QopFWJffRfLI41D5 z4gD19r>$z1}!ZJ!09 zS?F7-ekH!EyIF%)oH>XuXM3otzzn}O=tq14Yh)j(!1O|0r@gds=*zQL<(Qw*T4}g< zwg%xIi4lfk$A|WDH)<|wUtnHGo1*>L6X92}uXhMSyYH}|uM&sFYwv6Jb%Ec}vs_y#)D_WPN=cM96F|G>(${pf=}lJZ@81L_P|kYkGBVmc2u=RhlMyB~xPb)8-o zwDHeesq+WJ&9AQod=6R-ZO`o+f;#r+>w9689^wx4N23aJJYkp}A85+zaFMsFK! z^ZJ?DzNU_O1gWc|#reCc9aT#oiD`h@1+-h*lB{`7T?OV>w7MKQU>xAP9CI;T%2yHk zcr(OmLrYHhmRw+F92aPRAatSj1*QQS&^6i&s@B$Ow0Z0lbvdTSuR#h-BP>A2Y8cu| z$-x-AM%%3dGxf|Mg?f#RnAgO*|LxZ~1?HnSjNcE-gAK8+>t}Y{KFGo6kbX?7ex~Y} z0E?i-)z*H0grRNJKhQ?e<(L;xmuP9SQF0WsD}vVGLEmN^<9!>9iQTaN+Z~~?PV8&O zTof@MPN!=>xHzJMYicmI!l@O0J99#L;QBGF6HmH67zvL?{jB}_Z%+(tVFJn;ZGnF~ z_SGln*CO~SH1D7W;a@|D^hK{E|B#4j#%vzu^1w3=?JVm}BACzvvekW^NUk7L9_&P1 zGZ(@yMY(!@Sp<@!IEH2}d>w_fRwRb|6(T^+-77%i$bBNiLL?VA9uc_+_N~4WW}qNz zb_{$K;zUq}^(fNtO0)tE@H0(#o!Q96^O0+&1;|9x3%&|X>(%P30XNiC3v%vm z0dkZXCCIKL17xz(dAy}4F+?!cQO3(R$bJdIRUWU*Nz z$hLO`$O`kC$XNtA$HM{}%u4g6@Vvd$_{h!XYe70*43PV<3dC4!gwE>gQL~jGgLe;* zr_D$~b`O!4&4Gd}gq^6bznke6V=)-%d?KvA!Muwb?I?MlT>|7i+`UGm8?0D)el#}; z(u}%Xkw45Mg8YK|N0E5sJwdL(I8Bj~$ZvvdKPKSm6UnzJnKQM@(?7D6ARG%QvQ1=| zO%10)!h-_7a5UN0AYc$>M7d`1%R;P=gtX6H*w~LA?WHRHRW5 zhORt^M6MNtp(`>ma*rT8t_YAxk-v##2a4XG=<2X*13Z079x|Z+hR=BZxGWH5Vr<1&3Zz3a&8QeN z=B>LFX*btd4d`JYrp*zbXQhuYFX(G#jpu_!oJkkgBE*qg{C)p6ajLxAT2`zWQ}!;XgH%veH|EEW8Eb@zizKQGb3xQ zX9P(irj&DRWS#Y$-Qd2~b!|ms--vnWusXWhHR-7sJqtCNE@}iZ4 zSQnb5X-KXhW08&YHOYR_$`jYD#-&djaiM4}B9)QrvGvEHw+EI}2{ID*xzp{4M(0!hT z_Se>dB4;*6nHu`n)*%x5z6k4f^tc+#Kds4vLB=uls6k%)ah;)S&&^w{XD-Pra5(eNwu#WXAj2veiFRC$)! zx%S1Pa|7b8Jg&V|kPgIDkskK7BIg%B7XOTt+t-VnLB%TPdb_uMlkl7phSkTuCEkj# z{sH^C8oeU)TkKm!@+I{VL2ixox7P~trq9#gs~(@18pdLR{jeZ=rXi0DvJm}h)n|hJq{L#yTw|6W%kne9ep--=L*ytQ88R^7nc^ee zF)~(P#}UEbJs9gb=#w>=69qx3J1t@={vvXc{k%xNd}rMG38dX5?H2?&H$=`Nf_QaD zX;EJbeWVcML`7EEA4)oZcxc2tA@+5X{gog~`gbDVh@8`Z!a6=$;s$e*{jDJ1{HVwx zXQlmvAb0vaH##@lKZ%@IuEJ`*_`1dZRd_z!1G5qmuT}Q%f?R_fR^)d3K@1fN&202F zq7u_P?Wjv+Z}?a!eVhAi*UdrM*k?sVkhaKub~ix=pfx8?TV%D}N08&!sjs%kT6-He zQdwvwVLppIgCgtg5pM35h34&L0nd7SdzbabvzT*GInUU$G%SqY6nViuPk5?t2*PT& zFB6_OCImch*tZGtNUs3-yZwkD%Q41RIq%xf3o;k8Z;E_izb(kCm_<_LL;F)ftd|4i zWBYqSD!vbp&+I=0DGX!!g`G$+eddOte`S{mf$^Wpo5@gpf^l$Bfi4`byFRoV} zW4^a{NVFp5|JEyFei+Vt|K8p;L8~0UO@RE%-aBC;*z0kI5uSGQZyP7X!q?r~1w6m_ z$iu#z{`Q~t6ydokL^j&TisWU;_a2yIYcN*y1mVGjALbP)nO5{PL2iCEKw{A*@zt?7 z;`79#^MvOq^hMQIZu9~{PW)PtGpzjRVnGI@52-xeqBjVVhZda3D!X^|Z-P`{*#laY=;^^c?L!8JjOlxjfQnyWN0);kP|VkSDu}tTL8h%mQeC8QGA~b zU-$nI@a!4gE|01D{dJ18n|-3&3s29l0-i&B6ZN=+Swt;2AbYeKnXl(bL7(ze1j-=xjm86sxaW?B*!8 z>B83(%z3EfmMFIC0(lpuQjyl^#e)2Va;V6>DE7XB=R+S^Z(k5yDv0BUPGp%NPp9!* zCCH@P0y!5%mkY9w@9P%((&(*uw1VXqN6Y~94;##qDE6fxH9o|A3Xyhm4G{9Mv?$LF ztjGgCa!XynvnKkq_$sOjkaf{#1le$4;A?&KIYD-QDd2g`M=lx~ zAddqHQsb9xm>SOlVN6$|%q#M4^m##kx-8-&A4Ff0ShSB*q}_ZPeOuG;Z1vS{z9#}X z4*^>n=)pgZU-80lo@NJLdWVaw3LnJSF zK0yA8ek(jn_X!X;_M1o^8%lO#ze{TDi*eIEPckp^V;cn-6(ZeyNTKCq!z2P@iKa2EL9IokVt+lM2?CblF$4)WlrF0QtU91Lo0Yk;yyVxQR4N`$%>%s*MQeUUKT3U_Ngl|#VrGD}#%_SG zLi64%+}{Z~zgcI;Zjx9`K}}2Ky2#bBABE@b9QBoNuZ-mvF!Yz+Ri1kyYhyfc#B-?SRM; z=>_B|L8@C6sfxy&c0ry@LtYbPBw|Nj+koe7K^AYTz8Y{*(0hVBK3I`lJJ%^LWZXFy zL0?67A7?L&Ix(MoO^}9_&a6V(7e9=k zoF&NBAu`cNj=xSrZ#UC@WX{Y0IRywMPro)m7WzE%{4{Jg5BfX}7*|rCcJs2295XjS z-tm!g)ZxnWv5))%qXb1h_mT5MUtjykGkF@*cJqUe^g!#WzJBr%`>=rLS0A~{&#!j# zhmXXP0nbJs$qB=X$B{nxvyN4s29p57+=*ZvlwmcPqWGnf8t4T1p%=%Oz*nL9=d6Hd zX)X|ysAIlVo(6Mu?js`kZM5bp=a$@8Me^xky>WN$=OX#y(Bf9-ZWQFNG{i>Rfu4C- zBdyMj3$nyVo{T-1o8O)7&dRwO7RF7vID8qtmZATwp|1x*IY*-1QRJ!Is_x9?0b$vA zCU;vwZosIPJng1k5R`c^5-G9Y2SUk9!LUmhS8?z4it`*RTbmhNjJ=Oy2| z8_ZVj+ud0M*k=d6s@(qw&*3Z8*RQb}H-YgHW|6~K)VY0nFn1P)NWI$+Jm{H+E!sfW z6J({I@~=dPyJH1O9vXx-(jC`>dHUORxUCnuwwsaep*>h9G$2nE*&hg!*p#5IdmPr% zU=9Mp&|k&Kj>sX-q3$F>&cS$4dB(d_ddvmSzkMF8Nx3HqGIQsM+2( zSSFGS|Kp9;_9Q1U$Y>mDo#r{1diEO5?q zac?k?7WA z4tHo4a;Ljp7IK$6G7Gue-7yQf#~qV}-0SX=h1}=vo`u}+?v;f+ z;O?6h)79<)Sv*~l2i=3Re64X0&GOY1S?f;7;#ub&ktOFLcTyG)k<1)i?@rC)>54q; z9-HOs5%>5kUqmt`KkClN;^~S!<~C&cdfYuF%U4(A2{)DH>u>I9S-!d=Pr7Gh@jT_8 znT0&?OrCe#HCa4FGI`#0AIjqCioEAOlEw4B`*;@ef%{|@vcY{O z3;ED}J`4HCZO=kJc3;UtK5<{qLOylh%0fPK-^oHgci+!KzHmP*wo&t+8VlNjAKh<@ zZL~WReplq!$WQL~#W5h~9Tl_=Ke<0-$@$s+MdTci6Uh0G`&$;zukIgN$Zu|LiJj3B z{o&@7FszX?137=W-Abt8Uo!S*`(-Ek2vY60Xl)TU(O-~b?Z8(-VnCMU!h|P0aVOv@ zO>A3YAxeAPsmMK%vcw?aIWCMvSz?$Ve`?ebde6iNL6(ML^-7EqIh@_)U%M$!jFwn% z2AF>hW)={};u9-CPEYJC2<{t^zXmfqu}hZDXC!t55B6Lfq`|kFro^6EJm+;mE=cT? z#j`LmE(=+dI7CAKGE9w26Ni;BHLeI#18ZuRo8EMFIg0!X~(*-#^ z4QVLJ%=gO@r;0uohWac?%qnqF65iThISaWq(VB%^mzbA@ z+?Y781OsfdeW>BhiHov$Zcbd1g{(?kCOUVPy4w>=B)`tXn2~?&=8nXbS-$S+g4~z5 zO62SpmW|bko3ng9n7B0yS(AvAvP5CoLH@9Z0oTFL19CoQ6ZzL*9>Q(ind!W~3-U-J zH;d=7L|zv1M50?3@?@fW7V>nWq%?uhkHmX_L|@@43vKXKAHn>s{56=@6O~z#-%j+)Lf%PKl`>CHyi0wxoA(pjl%i{HZYWoz zE%K3%tlJ_R(Ks*`0nbI4tKnZKawPT)WFkBF%tkKg!c*KO^!2^7eeJJ6T3Ekj@X$_o z!`co1+6^_#M1J#;$8OYkw40nf<>|gcJi%8&5ah)?MH)<*&(naJ9R9VNt@HNGl3eX0 zH+~ZE4D^u~h6G^^?c!@p7i70C$o_(0<~F608_Xd-&u1Hhu#U)^41EgC8?J`cU?vHY zo*Faq&J-Sgv%S0Q@6N24F35XIcskQ(ks#PHo*TsU%Dnf* z*Y7JND5Tg`KEj<3{A)Ki`pC9^>)CE@7NpSZwEBrKEM7P>s8Y_=_lT9%$LBQ!48=({rG$n%2U06%6k7R>)km%v%Gc- z-#hg`$4|d2k$ycve+=o@^Z4uV6@hg4&1Hb%y?dQ+&KK`bU zf9&J?`}k{qes1mKZ~OUqgKsxuk)F)YW09WB=ZF1twjRgVDbVvP;9Ee?8GbqZ7jW9g zdnkwhkGl5&va0C%epjCvh66(yK!OAra+Hi@$&z6NhAcU!Axs`%$T{aBC=w+Is6zs4eBOHAuWr??OBMC6U$5@o-D`FC?j6n^o*x&rp6;lJ z(-V=O)3a;-1Db!c<{zs4nt^_C{!h`)@#^;HSdI{r&J|MA29;_<_N z?yLSB4uAGWxpheIjd(RsKdjWaXGFT2uLJ(2{_N9WK-1%e2t9t$(p98PbeeLwG|2XU%pW|p}zg)a-;dfFP z|EIwB^mu>h@!H$tg(s%9elj%M`XfBCuJQ)(S(KZr^)y307r_NBm!w)cze06>ePQPv zzSn~D$2H`eY|nT2?FIOj`sePe_WynT;r{db!|{1d$5md8D^8F0^UIT0<^R3^)KmIT zJ$-SyuJv%7xc+!O4mIHw9l;r$xvR-{}_L|zAQ$Z)AkIdK`5UU_4==y{_QTJ z?XIN98}(oGCy(Fpq+anuF&xK@za2P!DIA~2U*(>%e$@Ft%3(a}ah)Ikr}9nx%D<=M zqBf4x2FJ;Zc6Zg|^!Ll>Kkm6b?9a;h3u&^Sl6J+s%I}L$WgRcAFFd1 zkJ}o@9f$ggv^^Y{8!yh``g??3)Gz|P};1L_abI7cAPpCP>f;`|xXvupY| zr1N>EG}8Gz(^ALpw`kv1O^G>(1ry!RaEc|Je*pZC)D z3QtT@zvWTC|BmD5&~+j6|DxXish-gPx*pdr-+nA$6vign$-lfP(#w}V4ex}NK>A=j zQDq%Hnbl`6gJ;uak)DWmNy_@A_q{|^5$U0|S!I5_{i=Qcc^%oK^CbcEh1Zw<@Ds0F z|Gpkcz4iR+{nW<8P&LH68IJ$&^+~x_e&znty5_%+`5$3^OyhX!eBt@mOzWHdFZKPY=h2in?h=&C zt@Ta9`cMS<7o$9nw_BQSs$xF(3Z<7wUypSEeIM^L`1)%l+O^y6tMNo0ao~R5)OG81 z_-8A)o%TCB>f4F>-a@%UNbh9ZU6MxY`J@_-QyKGpi`MtK*4J3`rAIqYpq+0a-wBkj zqVf9<{y2m5eW>>g($}cp+k<~le_Z~5$sa$dKOW&YeRW)QMZf+;dRz22dGG)1r#6~@ zGsYXQ$IX!6UAKkw{y*2T|2AI#xBhqI=@$H-t#_y$Px=0b_Wzq-i~oPn?*B9n|E+x$ z{)_gF((&0-*SGo@H@v=$)Oqkd#$5@FpRX|Pc)dNMarEvdtgrae1>(r-?Moe}vB+N$ z=~IxO*W0yP&k6XsCj5K_=?&m#|MO8Z@OUksALZ@%Kt4A{H{x8})R_AXT zoe#gj?`iO-#r^kheP7k{pU+SJ>t9rFIexrfxy5?jUkdYd4E(bihb*TDUIWA*r)M+E+68^`?(W3&Zc6V9YVQC)O!eV|5?*N zLi$%oAA|I-kpA!2t%jaI!}^DOc~8jsINwBkh2r(F#1BgGJ|`@(%A5EqPnod99IE;9 zaK5m_)44@!DgUP2UwK$QvCps?Kp*10;4{7R(&3@_iU*E&vK{v01q|(ZieDChi&iK4 z33_FKjMx1Ah#rEMnYbbq>d)Rr9UNZu3 z0z!*IOF%#GNjAT<%h%pK?{WVF=vY&HlcP@%oyPo*PG6dW-$NZJ*Q-0eMVl>v*1`vM z`vg$7Jor`#;(OJWLt0nPZ)lKmQRNECt5p9~E!RQv_wB-QGqf9iWPOhGMmS!#jzsT5 zueTBZ&Q<*i?JJ5gJu9=JTG(4ngP)_*C!?;N4Yfr62)xzT0qt9a`^G(>+@C&BwiiYF zTZS7N0zS|PZ)PL^=vszGfj3UzaTGx7V4u<_EO89R509H)Lq#9y_!y*|u7sp7R$gD4 z*-+p4qV-pZE<`(K;y6XV!u<*O^+po6D~P_vx*44wUme5)H0FZGh?YY0;+^=FXpd{> zPHks6{KWOMe|Y~hwUfkm!n=mnBLASKJkJ6sU_8eqfT|;YtTBJ^dP#F zJ%@g8M!C2;l3u4FYaqUSAmdBo9Z08x`MyOU9fx0zKwoT>c!>Y;u0d-<{L8VlouynZ zw3FBGkr*$#&~K;RFdp`Sd48bZukOoEFNj~c^$AZLP?8nji%jHkfbaL<$shaY)M)AV zq%wFOkRASuHMnlXw+LfI`Dqg8YmNBwxJ^KNYa!p@%iNA2daV8)hjPqSQI7lnR|T#& zfZ8YL@&S}+^9PU|$LIgKBQW>jr!tAS*W4!*a~%CdKk^Uc=NZ2CN;`vypRJAW9!S~l z;Qlhob&1ElQ{<1tyifCbGWr4W;&q}b;`c}IP?|mv-+hL?5auy|0j7@XcR%9mJm9?O z_wUe&&AHuSi3Jj*-PL+B^Oq{b@9n@ZaJ=b%k{$o?ctbd_uc20$zr0?wo5B4Iq#Jtt zE8XyoXV~xdm3cP|^Nsyp5c4|?(vL*qw|`J~{NsK2JmAJLzMyr_`u9~F`THPQ`i3X+ zS3y|$TOe8b`r(Nrgd9&4W^r8s&qa2m8^QIhSD=J)GwWX$iiSfbt=GggGjwaiA zS&mk#9<+*m$WHOg$(9)ZeFLbr?RS8V2h4|Y;)fBf*l!^;x(@C^;4i{g?qaAE`WX=+ z{`|PUj9;CvulkpMG4?a)*P{0^&Y&w)({JK*UqAooYUpj)2jDr=+kWZwGGbgJJxhPl zOBk2TZ=heb{POX)E9xPgzgWS_->I;QdB@7%Ca8yYPi%v4(e;(Dm$hz)uZ@1d;~-BFlVEm3ZlYEXXRdN@yTdWQm{OVwUj?Wn!UA_=|P9mOEZtn2+18 zZ?nWd?6_%`Sk_(_H%okqa_6%)OFV=2@%hopCz0t|3%AjOz)Zm6>GRHou4Gr)WpiYNA=tzjIjPF5ADb#5?dC&wF?L zF1oI4-hua%`-T#qpFV`1#k^_VFciObm-e2r=MCIP({)_ZeRe+YtU~(>qn~MBclBUQ zM$7S{tOn6&th0Rloai6xF4V_bcChIA-kKlvaeDuDtnN6W#O;Vq?-=`??)Zupj=Qlv zt4j~H=fRylT{}W)3d%9BQr+B&>kUhsRp{^ab3eG>W3c|UZiw@j#>@GE?S%^d{W$A! zTy7V)Ge<1P!)JGX;&Pwi`2M`duYLaMd_MO--hzJ|@1OnLh~xkBxO}|v-T!_(-j~UK zFBv_Yf@fP=L zy_Nd&@k8jxa)!P{yIbgfapXewYdQLJA)oil(O|TZ+fyBJ`>bbJViW9pxL!BUirM`m zuIshE?Xf@af%(=>`>_qvu#6Fod_X27E z*ENYAqdz}y5)G^+`b2q3W8qIK9WdG$!qw^YLt*pBOqcMYY6?jIoQ>y{R{x7ja*!jEA80?mo> zS}S`9?Z3d|Box1P=5}D5Of>K-?nBNL|4ll;el}DL*N1sfUn|6)*RQ_EMa$duE|i+6 zR>k;ZKLy$G=sREHuX#|xem>q)gs7Mwv%QobUtWrPg6Lm&obOnN!I!MdmWcBH;jMn5 zbkNQt%s0%7QsBA+xL)k<(Ep7n6O8LC)-?k~Q({~)|D;^NasZ``!+lDWFNtx$>!usG z=drKn^|T?@`|7aY!u+VyFD$Vj{KWlSQJw1xr4O-BZwk9yZ-(0InSxxOZBHoehd+2d z8{I|nkAy(E21DI(|HAwn3NEDABi-R|j>8SiuQmnXe>>ko zbzKX!`*^ljML&68@Ub1g%@VH_75-XvCiX$rZs%FE#EF=H%(YZk<>huu+<1O&D~#uA zh(mHTne`#&Giyzh9|^zQOvmjCpcYf{ybW=Pn2o=90sR5{{Kx5dYSIp33JNH~TPd<|6+xj0@HVSSMJcY`UT3$$xTJreJKx-1%UXm6m2h9=wMEU$&;r+_fs!4sj z2jdG)@O#WSS-+1WPAmH1I&v1~4ASNLE`WZiBlfSY9qStmFh%fu|>OAX@SNrp| zi}8FEak-84hBf%AXm*_Em@^I&9-;Pos`)aAJ^3Qhtyo7n|3h2OHx4G_df+ppU;bD$ z0&)8c?LLS0aeLNb{b$W?*DKtY!2X8c)BB_WVq7Ye{>1qEsucFQO}JlSiIoyLeqo8L zhO?HWJ6O*b;eN?ftV?{qBtPa4-+%i_bu7jkb2`M0b(V5Y%Oxop`nw(LEWhir3)&6+ zVEx2$SYk88mG=WOUh=$Z-&m{z-0mZoKar(_s1f?f)2OVKk9em{)O6gk@-`so2)%-I-d7TK)s0ThZs-ipf%x#%dp3d z7JYPB{F5*g`vt%G%-=@+8Sx0OiE}Nqsp@IWN9IGSZ{3l6yH|63ORFaQUi>|@A;QZ?`PFaUd z7yT|=(z~=0U9I&sS6-l89QQA{+!M>Jt zrSfv+&n$;h!S-Aa_OQ^OF>Y(umwA#E>k7|@JGkCsE%>(R%#wH~rwqR0)*bsPlpETc z^BG#A>h7QZ5+UhR?0MTzyghFjI*s!p?4;PHifz=I{9>BaNQ&>gj3!FiauKk_}p zad;p965}(vAK87^Cab>j!|TvX^z#t*g{*Tij$itXFSb8J`lnc@S<9?s4WVenH=utA z-D)QLq-|dlrRraj#th{9T0!(J))!var;nBMRQnY8nkm||0^^YTof`YG%>8i>Q}>JM z2g$yE&zo42kX{`5`1BySN&L<8-tGJNJ>$1=e%szZJh3+RU95#wbEy9GhNL$S6)mXwJE*;va*k4Be~SGl z*K@q2=!{~l_{(v#`S|!7d%9nGVb>en?^f+HQ|xc6?w%!_Tm4*i0sAqKLZ9;WN+6BF z`Geyv<4&G4d|c4GBKLdH4x~Ti;HxNH==Rf=T z4DscDp1?Z%2l9P}{?Y)n6XS>1iLG`$!F_;m{N;`T*f-!jUMqVj9m77PR`viI+>!f_ zeTSVVSO*R6F%1Z!b!A z{mWZ8{+4C(JgybEvS0q=m?s1K%Xx&K^B&5L>%Rfvi3a19^|OMaA7k7zKguaOxrFF5 zO;251ct~E+aVbSVEFjtq^McD?$S3+p^T%Tzae7P46V{tr@As;wRgV-B`!MA-+RjcG zPh75}*4GL1j+r#y6?M&SAux)0-)b;DB8UGqeT%op9-TeSI5(dP}M zTu+=6xZM5P!r8Q37F-{5dh7Q^`8i6R0lwpR!M?l!?EHmf)(vAshrcNrUQ6r&8=0lt z8rq5{MQi|)-}*5#VMTlJ${l0IC^55aLb-&$q-#Kv+d_=(eB zho4zbBkru9BVMe-wf^l`znD|2dQ^W_`$~)twm;Q!oAL`+*Y+6AmrAvlwj-B4uFp^W zH}yV5zxnUWu<~DsVcnHU^iYT>|Ggbf?;U})0?L2ihV}O>!u-1s=Iskb`L9(n^Y27h z2V<_V9$qh;@1$svSV@mV``G^Sk|_VBOy+Q$M_Gfb2w$!&`kiW8P2Z*U^ZhN(&%a|~ zeNFqtfA5BQr}m5g&JZ*IZ6VekA4vX|s^82MUZC1r^^_|A&CCz=J~5A*JD49W5RVgx z18Wle&iWes&6=vDXfni$xhBQ|E1$PmLp0w?w2!%s*2Ck1d8_K%7zfNP)z0TZWr_>M2i+fT$zh5!Tti8UbU0j_a=#*zaz@_ z)>eJ>@jkc%(%aS*ecniPYeUhM%HLrebG{)rSbgQw9>n|HNdE%s0c*F~%sxBU-wWw? zOW>UgXfn$_`@=Zw>5;w<{$@nY?VdEMWyUM{y1&tHpUT(S;-2k$TT z@zu-y7>shZk%dq=d>G)W&bUbNU6(VAH2 zIp1{EWmtci%a@n*;aV2dQ+7klm)(JgAfp&DOP()(asak-R> zrF_y_;W29Out2!rCecETMa#Y`I$7&4nn%k2gz?JtrHvKMtnG+X9pDt_CC*n%+tXBa z5#}AI=d2?3AJku2rwWHx6s?MJ$N5^TPH!rFJ5qF=_N$rtwW#_tz4|-f0m)ZV;}Wd( zHo{(w>s^fNT-Ie;ZxXIMnJ*U>{d$Jj7tI$<#Cpp1aJ5&fB>V%;=bS!IkNYXcF>}Ku zqFu3vVjkH`w7AA0=M>==%7xC#aZV}+<9;2N%cAX1aartlHj0kWINqu(`F_Q|fb*xt zevh?`_G{2Y$zNXm^Sjn}={3nWLXXq4w(uoAetF!d;(D^`cxX~f>iMINXf;iLFj(@L z>5@KG$I(QM+dlQjc3f9*eI;g!CL1K>8fg26u9WnTRHv%$nIP%U5=3);B-%c`l<(V0 zw26*~#38~hu>axXP0@a}KP=^fwf~!b6V5PS@}<;qSyJ@^?o)92-0HWbI4?4n*KyFW zft3GL`*{)TGusbfJ!b8Q`%kRLaXrJ@P5oV2{Wx*1L!|z^ zx?Vidb#jIF_b*)!ujz5pOp^S6jTBw0>-Z2oZc!bVDRte6KPLG$lou_gfDs(m>2ZCp>d_P>gbzW^P#JBCSn z)~RmN@pD@H6{_Tf!ZdZ@qNRV}XmJ+nf}w~5sL zof6Kb@qMV{yd0xUsTxDPzx{zv^Q*ChK~!Q}+Swb)HPsd~g0L?FvyHe^ofU&e#2wgd3ES z`cG*4mTBBVt4eyaGNQE$Oa3#3gwyMIf1u;1rmjzibssq(kL2q$QuKr#r(|j2Q`)W$ zA4X*hk4w9??+pH7&6rHy>^}Ka(lGM{v&m-k@y`I%d^4He$_~+WbKQ(S;G;YVV zp3XXdXK25U=>F_NCaHhD@~CA}Z)#nKu4}vt>Urk-Yhvf;!yK=rI=<7^5)Re%{)Xne zqx-m@R*Su+&bOX%a@`SRka z)W1pBncsE1EzcwAEp%Lr(eqJX)dQ2I{)g(fO6r&5T?~}ZMA&v0dkz_ zv7)2Kix!?O<*I62w|y+USK~0}fN-GhQ_Ac4WuW#qRIj5Z>U{X6qSX6`Y7dDBeRBu8$bYujiY2S}xyF$v;caTSq2Jxev8mq>jgodcN#CLGo|eDEgs}!(B6ltEfMEE|z*8 z{VwUB>$p6n8ld*>IxpL4yW8qK8m;=NUZ16WB=zjqakN(bn)1G+x1B5ctL~d_d?Y+r z^G()v)=+J%?WD<)uY{(z(fYD$xrTbYy}IAHoGATTsr_hLQp%TA#iy6-{0h;2ub(gc ze5&Xb_3t05-G@qjCsb=_{pa-fnRFbLRGq8ZNOgy{fA=h@XQFBm)z@^tutK@1YJb(a z8qeao&d2IL^S-ttzg}0o_)XehO6T3SsdBtKdcKZaA@-3vPV(x!zu8FAE9iM~)iNo! zSFeLU(ev9d?N51~C);(uT|)iPLA8$Vck-wfR6ifo`0cJD_5Yy!y=n?A|C#cwHj*zc zOxkxr`*T*;?>!oy>C-tM?!^|A=lAlvkkD7Z7bw}CpPz?4LmT1nYn6hJjQb z{iuWIx7qLD`83qMKk`v#yi0;|&Tl=#@C+S1wK%^Ig5RaQEAKyC!Fu=y(kH{8fqlag z6EQ#eJ)>{2Z{hpklw|OOlu#NL!S6TVeb+Xk0sZ)SVkk{UocTWZM~E}u7k?doPZkkC z{g?7{!vHF{fYSr)`*u7&+;~}S+ZRf6a9-lSz_CT++YaYTj{jV%_`Pjj84pM7aSXM^ z@p;^MR^fN75qOUq`{uN0UzhLj{2RImv%IDa5fr1jg<;ey)zcfW1JD z(+}g2{l4{*=o*X@?$4|mQhpWoS8VrSKT`ztZiOG13-uu?hx!&_epQC*L4o~xjJ@7Z-Hgw|qz!0*F6 zz<6bih{qa$K2L7K<$TXe`1xidJV$Dc`|GSRI8U&SP(76(JW!dRudhMM zoClEJEvMM`ye{@1U@wUD<5@Vp9DN5ardmq%E!E1Z)m7`LHc)M<+CsIBY6sP>s=ZYE zs}5F;Q5~u}Qgxi_WYrm}b5$3rexSNSb&cu<)z4J7tL|3auX738h@V}Iuq%u zpg&<;vu45g;`~*zvIfxy*mrCig!f~yuIKO!k3#^CyyKDB>0kt22eO@wr z&rtcC@+H($z|K#3Z;Gz8I6tJou@Bm2FFjkxc^`v)l(L@)E>bZ(BMpTKQmDXbT9mreQ*$+!Et-wz2%yxaa=HKNoYWRteL%i z>uznVQ{@KZIc{#zG^*X+6i%<&RrRallD?*h=qA-kC57jz_Sf_{tQTBAzfZ$T`9=Bn zV9eiOoniGT7cVA!2J0xNXV&&TC@5TBnbclgIjtV|PpnH^uAJ8Mt>(L;_G5aymm z{+jl?t@g8%>bIKjoa&PjQvV;SE%i91aX#YX#+4S`t^L`p?cS%lOpn(|k2gv6i29|k z9`_@yC#ta2w_58zsK?{?jQDu@wR{EDeyR;s<5jn7{q2>!e6(y>-2BK@V%NU5)Xb~ zkKeOOJp}8*C!%+-&r3Z-+MOQdwxd0nm2-h}d&GbJ(4OH~_s7Qbeo6A@(|m=I58HIV z^Fk*2?N`2!Ao+^J{sM6-qxs(kFTrtYDK`N(M)~H-9l&3sU#=Zp!6VU*UTPl#=D744 z5=32+_;&z7WYEt%edKttu-D5#Gz|87^YES??0g=G_S+ZdtcAG14G*e{$VM)<1Q_iUH+UvPcM`Fc$dd)xKG^EZk< zcqn>D%axiV`Jz>;tB%4v=X$zoy#=+N{aXHvmcMmI@;!OZ>gy-}&Wyj?#rHv2O?^>r zKXbU+rzZ$kswjGJuH=ix_~d*EwMFN2m-Jp*E)M5kw)1fh`5l*!Hwx>`{VV*PeqVbk z;rf!lpI%*+uPd4PdXtr}Ct3M=l9k`vW##KfR=$2@M*!erIr!mfk;ob!AUkZWwdveNiw7x~rm8Rh|h$D7NsvOi<} z>U&s0zNek3k?4*ZqNAFMj*Aw(iu(Dx+rwLkPDR|9JB<=OUSIS;ErWDldjk>YTWII8 zF}QCAov8YeRbRf2L$PN>ediEo){iHNHoPucp_J|)1;Xi-A7g(=J>@%gcVERB@4wo(m89$Y-`w$*cN&<7Tne`vdCb-%0mJy?p-6V&h(te%K@5-%o@1^Y{1tztc<@tNfj2iuCob zBE~y^SGk(%{2RFM06v7eS&L#Gu)c+Pz#4Q**n6B++L;XX{&RdwKhb|}4}VwnKmR=d zsVD9KqMrZhyZ>2V)$`xQAb!giF6HO%N!9p!wK%_8^~HhL5&jPC%!Beh+UHp3nK$4(%KF||(IHs3nO9*QXZ;b^ z71R925q}?xzw651$2#GcUJmOLf7g}Y*FMur{QcIe{`~##Bk*^?`R^lC#(leuZREa{ zyPvu&Nv^NTPUm$-&ZE^MMeC?GP;IK(LbZ)*2i2~AetC%g@cI{v{;__6^NCfQmsktn zKHzD;b*NQkJWGL}=S>!^hxMhGUwySOcL?@FI1l=dcRpVgi)@+;vw+5WM=il>?ZsC% zlm{Qd-A-&#ItpiLfmNbEIL7iJs@wu!R>>Sd2bDh?j=NYX@ijZ;>?g4sOA$!DLka)J z+Vc386Ak(Y$Nhsx`f)PkpJ92fHzjtBcTwMb%QLdH<@Q7d(uq7=zmLQ6GSBsR1M_UaT&BP~0Bq@pF3#UD!}Q_%`#@kc7+s~h}fboECn+HKkS zBNZL;7HT|Y`_Q#gUG?Xzv*MEq_A8DzgviKt{@ve^hEB;7J z{53SRNBxnGx~g6Lfv>bFvp?2GhR`ZMPKr!V8@0UnBLf|`?EI0Dezq+B*cq9T9x97J zGEzVRdwlgrMoMYf`6DBx_v1q-|CVL($Fa!Q=xwok4OXLXQoKe@l~aJz(QDL2xjZ=7 zn~C}hQ*khUGfB~woj)_t7|TBz_UFmS%(PAI;?FGfSXum;gN-l@C<{44mB@^)~r_YJxtOl!e-_CycW z-UaKEH~0-ofvX8#@A`rxz`2x*CvrS;Q88iifDPrMs%lT%!12sQO_ZmA)4|?Zc{MoL z8%q7Od=ePvM&i3Bd^{Nsp)^ie#zQD2Da&}sO)Ip#jECIxv1KrFwrY1xg3LKKR-7d##~{&!OpqJoxv_P^B5>+@fcg(#@FFMk3!i)A-n3eg*u-FPWP zW&AirR3TbmS;k9RID4tsy?3x%_y)oLMEMyw9Tld7%9(IA73?iSCxj_E7<)oGr}jXc zWq-phn4gtXgZF{|RL%ts_7uF{vV^mSfu3Wz|AFn8tQGO4c z4fz`=kF)k-)Jm8Jf$@x+dRcbyFGewzCH`+jy-5$$F6%*Y!iEO_-1(+B4Ycgm*W#35 z*~PyE1>&xl?|f5|5|laKDe$Swhkl$CS&Cj*cJVJwiMZ?KJO7rU>y~AG%@*t#fZ_zMi znGbK#Sj{i%<6AV%vhzoITCH}O4;ARRGW(-=R0X=@$4QYD>9LlV^|2DA$8OQ*kIM9> zWj7xxQ~7_`C*o?rt)JDRD$@*Q@mFP9X4(0xGOe-f{8gDg@#Fd^f8VnBt7%jf`d#ea zCbM}yR3R^4^)Zm}Y|U4g@7xcK&Qj zt1XK^S4Op?vuYQAwx`V1xV?w;`l>y>VcE_1_EgZa^XGfiPVM5)4m4Gn{kbrz1MTtS zq{xnRSj)@$-ieY`C;W5%>`VnLi$B*zb*49!#h;z2nq}wD&h(CD=g-d6#E-Y2d{4{b z&z(_SD8jPyM;98Vc0S*I5!ICzsa^chjrJ+a`07SSHNT9nZgk4B^GA2Ot9J264@!@_ zly1ImiRwYc{WvMICzZGC##b*2x9t4Un+92S=eypN@DKZvT3o;Q>&vL#v_e_@)tk0j zcK+&3yDd9^^`=99d=lj^TNZzPAJvC$S$6*FL%*q={dFO#FJ-LF$9MbXepFFe{MC&Q_&FIhfL8f&Qe*^e)bcWZ2GViM&R>J*XUpP`Yf*#f zp|bd65CzoX_BwwIqLh}MKL$~HKfa6dMJ$UyevKMTr7b&u45sR8XMg-2HH12?Bh@y>Z7k@<4cgpOKyZChVBR@`xjKNpOY=88AMJ&Dk4zu$| z9F?;y{`fO0j;bh&KjNr~W#^AL3b*Y15l8R&aq{Rminc8NNF5zdeAkcT&;3u8Ii9Ad zojHAU0!;+=!|825PKr#V zx|ZF18bRGHJAaI%k(R|DS)xbM1ZDBZNLnc6_53%I_*Vuvv+4b|k+jB-bEEuz%i@oM z(WB@q%g!I8=$zWwAH||a(^IvJKgLkbdR)I-Z^ux6%Wl4mq2iXEKgLpBwTnN-QGaC~ zAGxE)(Ih`kiX2a~wYJs2M$p_F5k6ow|gmF8HkSJaA+1eaFlA{5F|h2-Cq2`TRARQa9lG#(LAu z;Qj7o%Bh?cyboMbdD=WKKZV{Frgd|<{1mFI_LbOw{}w!jS}Sh_?*sQ${=x3or&64j zKWz8wQ)!giPmJU8Q)#x#58ek}rTpeZKK?Y?tmU6g;NwrD-D>}9JeQwF-zbN`z7Kp& zxg0pyJDnbA`8>A#bb6-tH?dFtEqFSmY$*Py0Nw}Ap}Z6v?43bHglP^K?~zg&wQoMf zsk@f{8jQaSLj%;_W;LrT#|`up4We7|Wng(}lo zzTY&P$}4{d4))HW+QPIJY-kRJyYfx>_;YB0@?YQx@HpkkVSN0#G)K#i0OMV8TB-I% z%lY_oX^(Pya0K{!<>}yH?>ypPlVH5ka4?=P(i6*WJ(x%QD>|MZydJcOo=>ToFuU{T z0(!Tpu&j>@sEuW}9xR})mfd=gM5n_zzq|jqkg_)u=JlXT^g=4r+{a0gi>R7qw>~bW z*)7=a)`KOKJ)BwAgSOF2D37wN2TQ1|Wp}<$Hadz!NMx|GZE0G(Y<%KKcVXrgm8`m*P)(aQobPxs>=<4%~k^e=MaC%g#R^QhBw@ zdbx}SDzksOMK7cG{WvLdIjz?6vRb)R#Jvmd_1=wTS?h1`|QuqFXz7z(JS$4 zh%bLa3^hRo>EaP<}^|tK%y^#i5cK+T-qy2ar%3riB{@xS4iEfHr{k@6)R2F}4qKxlx zd&YXj-=9#Zu=@KGDy4S0fB6YjRF?afpU}I?a{uxZ>ZL6AFF&OyVZDF(DUGx2;`1rZ zw=D5F82uSNRlCfW&GcReZl9Yko2k2H7oW`(VcErJ3tdpV%$KcHxg(dC{nobVt+d#W zlOng#YRfJ@+bLZq&hO&0gX&q9_#BJgK~0qs$KRv;hn6Ki zm!dzXHDcHJd`|n6B|e|iIc15@PWn+;nu7`304*?EJZp`dN1V+)vXi zyY**3&HsnJVt1}j{Cy{SKUG&2fA6PemYu)%Qya_9-}|YnA3s6)ZI;E~e?}jmy<)ff zIdAX*I;+h4xd`xm$IE#AIY=*rbw78IQupBYjrEp9{(zW+lux-5I0d+}a(8gB_Yl<+ zrnX?bcSUW~&eyfS1s|e5%KO3lz{8X;fP=kX(qt|F4H$nTh2~gx@&1yQTb6jIi#bez zJ-K}@-bW}#S>kacJV%nR|UAdTi?E-2xX4%ljyJLv>zu$98+svj zZ^di49}mvhhmSwjTMJwkTts;>IM{oF$_vv>Fuu`B_0%rU15Z#VWqBTWf?|}5Cvy3d zG)7pT2cD$4YM1AECux2q*^SkG#SE;LI=kIHD*s}BYb-HI+{5>G%I{l_B^XEDxA7qcO{=QCWEIWT+ zr@Vd~hw=k0i@!(2+@M&oTYrxO&roK6PXVu17JuKQ&BE&Mn{-I+?C;qzH}T6AZjbZt zO}b!N{QG{)k9ZSP>~em;MZ=ZFzqe?dW#`{pG~KfE?`^uGcJc2|cq5wY6Mx3V{6r)C zI4SaHnrzwm_YPgP?EHI|GDdQF@$br*yOd2?{CgK~M6uniPj{(|W#`|!RN0R=p?s`m z@$a^nUucBb^?dUSEl`&8%`ddku|411qg}#!zPU%o)qb%C&xd<-S@||N9o@q_58S@7 z-oL=X-uv{YmVX4s-<XD7L$J+{ZI$W{Jn{m0bAB_7|${7#E4JAeF6Yt_!zYZqgl(lND*Kc3OA%Hoe_ z^j!0cKb}!QEVs}3<2hxw?9QKmPz`1F#|iwY*baW26#0UBYI(U{`;*36cK&!tA6j<% zrI)nsANFKJ#XtQ1#EqDjluB8~?@P*Q+4<`w<+JSk^^!{X@qLspI*jWRe?5u$i^^D* z`(H1>4V8KPdSd^gE{^T^B@-d6}%UW~;J{$F$~%Wj7wvniH1YcuZ@~`f)pyPccr8&(CMO#HKSLmgRox zH!0GY+{%1EH65ihWtHWAYKW;OtoKtxOg**dM*eS7gc$x6Kl{6+Egxd~DK`ZNd()d3 zEnf|cCjw@KWw(B$H`6UkJbJ}uFgMgL@yKY(jpzCg>GQ~prmAHZkBp|SWfzav%yPBM zdYZ|+Q092Fi_K&j;=Zao-z7z6HmxkXcw{jjS$6TrYR*}fctpfzHCL1+9$C$=QeO8D zSq{jOeS~|*RPAY%5i{p{qT+s4gf${fi%uTh=!>^RQ!P(89%1gl!;EY%& zIKEfr^Zd+VLWSuwF#f)pDP`HkGl!{WS>ib-HmCVO?Gn#7OvcGvpNr=kCc9-9&o@j# z%PyX|%p$c*JVQ;YDO_ImEAg?RCc=-CB6FJr%PyXI%w@|io_S5kR4y;^TojwvWKouQ z<~4;ayZM#Zl(g*Pnb*|v!QKKUqcAlB<2TPHhuUSn z7BFur%X}?hsw>NUEod5Qd6};TO$*B|z6DKJ%M#yDVhfoYYM1yHHf^SJdt7`Ao6eS9 zd<&btmR)>{n8#|D_!c!W@RN&g+SsDz7e7vlEM}fscJY1FB%q(Z^|QG7*0RKRdu(xY zPFdnx+}yG3;#=JOYT3oNxWOX~{1eWO@~tgPd^5$CFrCD1n~$#n#pPx|I{*jm1X}^%N*AHvR|)dPFi;U zscoLBUHntWluYvZqg-qq)4`9EBHuAREj$0zHES(9|I{;QEsKAW#nm&HmBl~x%tI-! z{;6l4T6X@aXMz{{{8KZwo+)ct{8J^izNsR1FP|?DfNNWJ{;6-8X@2%ky0`{ryxPS- z4b4tv@lQi@K=X@#8k(;yJO4B?kJT>zX>5uu^7*G`Y-7{bkCP&sn68$cf0~+AmYsjX z%xTN+dM3>J$qEpuF$X{;>%3o{)pyY(;3^swyw7iJRtI5)~4u`K>86!)$< zDRysgX8h$l@K4I=!DYepzV*Mi8aUY7%%m2k@?d>EzD)jFaB>~Zd-Q#4>#pM;P$xvc}p`{ndfirxR&OeA16h& zGB+$c|FcZ%KN~Rz}1xTDhq|D?O|Fe^FFvHcz|*~ zaIm+hNf4$iV0;_POi_CpTramt+taL6&I+yz-mP2$9PI67j%oS4VEq2kTvYp&AG!Ws z=85vp;B2s`SuOqh%i4RJ?85XIY^b*>ruL^_6U~h4ZOSSK9>-S=z*Q}~@!rQYv@G-g z{kXm+<40V-yPw?8Bwr&e^S_@-YuSzWekO}$H{Sc3ENeNxoBspM1!W%Zoni)<)9b{} zjQ0!870Yh^4>XV0v)zsNL8j5i%rc%=#tkyfm1R5+GTkk^@jS@%v+Tz6Ad~3Fn^1m@ zWf{-g;s%>f#BR^uyTLmwJO2zehc!R12S?(Dm=|i7^&rxe*ud>`>p`R`Z`t`L(p0zX z{1at*s$JHDXtPwA{jn)7+I-{3c;C>R)$+0)#F}gy`FPGhai*?i@z064IMYN~{1az7 zS$6)3Gd(Rk|HPSiKR%E0D=dqDuEoWh^wi(BTVK`{QWc1 z)Uqu8xgR&uG*A}*j5O^nJO7L{T`fERj5K}y_&LhIuq^&D@uN)Or+hqF50itlEAx7o z8eH13T@Oc_YQnl6jy7Rxzkx3cwv8EWS}WfNcLH}-F7X4=wzx5-w{m&#Ch%Zoz8`lj zZmfw{=KFEy!J{p^c#Si&Ez5k*7(d>m`b^>@@tR;}Da(AHU=~_-@tRHIi9$`7$D@hlcU%_NB3`>Z;@?=#KJRt~Dc&)cV& zwaTGjygz8R2~!3z{)VnOqIQ1Yr*!;ub5fb#_o)E>K{*j$fPJ27hWS-_D)<37#SU)& zSnpae-VZdHglQ2N?+2O!mR&q&n(~$bT=PPid1ka_7ti_Txn&p61tt&fd%1YM6TiR|R+e}z zFqJL4cr7qBExULvFb(|pU6dbhS>n|?KFLfMyT&WYtX7tIC7C_S60e2kn6Socp}DAb ziN`|oo3g}Xp-Huy+wbDB$Yd4Pcq}r7ExULuGUY8xJUYZLHZf|Kcq}m|lx2P`F=sWu z?5CHQ8-Zz!^@bTUJ`oPRq=6Jjt|AD#T$4QY(%>&CW9v_-&d%3)e$1>B)vdo|E z@ykqvvczMV8EM(YW0{#?*~Md-nc>F+QGTCgiAPNQa&uJd8jt1XnzF=Wxp}56@mOJk zz99S?tMOQ2GFx{3Tw(HA7Jm+lUul}FUHrMq%u*JAt}+WXzxZ>NS#H_+bG13Eb{XFv znN0im_%fac#(!kq@#Cb(HKwU$=g+lfie=}|b!LNQw_dF?+x}sH^C;IZ{vH#*&XiRa zf3Gv|Sa$wiXBt~}{$6Lg`tfv>-(*?*JuiN}*)Ddyzq8&PRhIiZ>&-=Fxxe$Vxh<^s zcRn@`)&8<3zO(eHa-Li|{CuY3bC4Qfp$I3h(rpJG3 zT43Mn;+YirndxZR#c#7YX4%DWi^+1F^Gke|$8RxjC`){{n39%Ve72bKmR)?dm}-8! z0p%xKmiTOm-)d%y-TTfkypI&K)htqe7knSQLRtL3&1_K?|8Fx#l*Rws&1qrv|8{fH zvh(+LbJw!?duRL(Q|%k>pWDxWZe}XWeEHlYS$6*Z+$^{3{JoQ3Il@1;{_HZXl-b`K z;&++7ew-A!+Z?m({JqDNILYOmzxSGO%i{0-@q0~sW%2i3Gr+R*_g)ia+4*~~8Ro~w zQGSDE@%NedFU(f4>wNga99EY3@P#?AEc0QX`B7Ns!#;Cg?fm}#H!1cR`j*>2*30kz zr=xu)gR;E;zu)8(*7yJSn*x?yJocONmL(qN;}4k0YM1eU&|FfMcpNl8YJOS24w?s+ zT|5q%hNrkaE*@W+<;on7cpiV;oL0NU;~P`-J8qv_kG?TwEW7#fjj3kY#p8sTuXb6FPMQbG9FJe(Pnv4q zbA4{V^sQ-V*~R0OS!CJ8j<5PMfclB_5~EWht-mIBkBk?Ba3SJn-XGD9?W# z%f%x@!Wq-t@>m;>CoyMCJ7tc?eQ-Br_V<&R?@T{s_V;~olx647@6Bk-;?JxJXU$o) zi$Bkq!sqz-&Y$N@Da+2E=S*eG&YwS+`Dzz`o;MGa*`KKr&YOrIq(96_krzyYW#`X} z=8e!WHv{aum2K_^k3uaIp8PxhYJe!3Oj8iDl>St0wS* z^q;S{YbRVY%`Ln2{kqwpEbGa2vsLrUdUD_SB ziu}>sw(R_U%QU>i<({+o zUQgaj_{n6nJl391Q^fvcvMclXG%Yxv@|eHy*A^0fHdT~ofqR3SE1v=fd+(S|!gK&^ z=#Ckrc79&*B<7BZQ|9OU_raqqyLj9+vn|W`ADHlqd8&39|MyI*Y)I)IbqqwIz){Q*%}M1@^U{COk9GlzCsf9h~l_^gk3F?0s%>2vbHd&S>UMweM?( zFAgR=H+7WHfDeJ&E585-d;c)Kwft=`{sxPQS9>As-!mlqVMZyx1x^K?Y}t+17iN)V z8LwX_{AoVJePiGL@TIwUOIX&Am*%ErH(px?6VZM}ViFWj9^}JoEkd zGRhaf&-KZ8{V^fX^Oj{dUIRUEE6aEd^wd?B@tVxjQCY@oGEcO!jMpH~Xki_%L7q8k z=ka`PLl#ULCwbS;lXWXT5Ub1deZz=b-W=a5f6^Tu}bd+LL>J5~jIeL&-hQ zExY(8_jn&jfBF328S3?{w(QOiDLi!^vfZsmDLjoWyZEN?w6g5to65%vWssT&nn9< zzG*xs{5T`ZZ}?4)&*z71L(_V;T6XbG>)E3$@lESFtSs?O=eeRR@lEIXU0LEA;t71h z^^eu~hIn2R_R4w_;>n>b>rIF!zp|`1={;{M%X*XE^Omx#HyJ!{EA#m(bZ7?8JIXRX zGI*LO%lyvZX{jvpJAyhA+^mL=W|hUWGZ#5nTBJCEn8vcx-&=O@c9-g!Ka zExUN<^&G&e;){1a&v+xu@vb^FpJ%Se$4Qa-Js((h@h;#wfpyOp?}DB;un%zS`MX04 zdh#nvybF3NSa$I)=&5Ge#k-)VxgWPj`4q|I_#E%9LkoFAEW3CY@?=$(co*{IRxVYX z?{5|Mlvb_^#`p9*b(Hby8P?w-o-kqR3&!{KJZ;pz8RxCuLyLF@DenhIfF~&TfPe6P zJkMM$-wKTH>3LSEz1s?Wjecm+|A(vl4y)qm8UQ|Q--`vYq1b!D-W7ZAU9m=uJyz_B zz~#cFBNq^{W5j48c8$hfkl3Qel4xR$y+n!nDket1Gjq=3&Bs4Hzvs;C&dkov&X&6? z9U%vT7lVHxp9OmwwWND!b_fh_u#nzR{5_lpgfFfo<{`?5MxG&xhm z>q@C;whRnUj7uAZt^Qe8+9!LP6Q&&JZId^~QAM@^(X!Z;qSTiirC zNXGuzM7khs_0J~KFTz&;Y$82(b0*|pnjhEC`{%C3O{LYsR{v}&Z6IU+Y$|OfWB+U> z9U)`?Y$jbIWB+U}-9%IWY%V>dIQGxx(nm7(&*oCm0=zs<1N&zSsREi||7;;Opg8u= z7E*UI_Rkj57&7)xe`z}9$NuRrg;E^*r@xd&#{TIqZ6jmgM>L3+?_aJ}nUmc|{g|UAfUEEQc zOve7zQCci)^{0ffdWIn!h zmWmeT<#QV2z`m@rST9B+(eWgki=hq)R7WI|<$o%@l-wXRn zjfAc3(NF3ijN9Yg;{H+^#c_KKke-rpdkm0XQF`1S1Edea*7g`E1^8ln92iV?>4 zhzMRNxyaZa3#Ij#pZ2GP(s#mEdn}Z8yEzf^7pa8h!c zUp9X~*CMGqxe3_Q2$BNOtUMUL;2=$+_?s?pJu^5+vXgb_f9t_%@|Og| z8H4ma#XEq%3tlXpCl3a12R|SOi~PaTE6P7vE|JUFsDOuQVYzN;2ucA1=-+VtfTFMX(7x$Z=g11oo2N92v_E7$_ z;HSYc(ou@vzRvGg$4Wi?MES(;A^!@Fm5S88s={1lA?s2EC!bE z1-?%10QL+?l9c*9zmshfPL@iLTX%q8n}(!FJ;_ND@2@G+c=G6l=n(Q5IG^S5H1c1Y z(Z2{gSg*C1{vNrMxSyLM^zB*)= z6wnjPcTISY!`B zVE-_VOS^;}#$Ir`eq1_6@p|oe{Z2?%gzfC%A)fz)l+q9D`x0y~oF&!m&uwR0VZFOT zvZWMZ>v-^^ltFO~p1U~~@}o3m0H){5`zhqKlm+t)o_}3e`08fJS?T#8ZtM8-lT>*y z8jm;UrMkj)c7KKkdm3_HS|*Ig_o^i>NbAs||NJlHXX%hz93J+OPEvg2EBLx*$R+8V zTilCXmVOsb75j%0dPTbLX3x;8(x2qRi(xzr{Y84~=8~b;q)%?H5c->B1n}~wGM>Ih z=nbimur(jKC6yAkj%T-|oFP2@=XlD{&+cYI9Bn*L zdSA*VuLgGndkx3+zlZ*I!F(XKCVRtt&x<{f1_)(95kB`=dB*> ziL?sF5#Aq)!v3A>{Y1(n^Z9AM;!mZtkvx7vdIHzQdW1fcvdH@m^5s33>VARw`S_9R z{X*JDz6brUf9Ol;g)r`~Lqq?Pv{6`o++SZy1%&O!a53J!mV7YI8bZCtguand$lYPw znF{t9E%LJ~8hnck+{ewKp>L%j?|`+uk*AHcY=c`4uiHu;3G!`Kh@VmA34 z#V6k7aZmXQ#pi>)n5TS`;`sageDVW|$6fd62<6d%gidP52`#j|O6yLjy#|z2L zDSi&@#R|#oDgM7-`R@z7A(mx3;C3{Q~+f$S$ zC$zL&T-YhblX?xy%H`0^1;?9a70SuA-QqjF%garKt@Txq$Gdr_cSU)*FzzpFN>q}+ z{*Nomn}wampDlR%Rgrh2*@;E`{Gf_#gX^l+`2BBa6}d9n=mPuG1+$u5OW1Do0ei7( za#P`Kmi+@`s=d0r3ghfO%%?rUM=(G83Faq7>^0=uXrtFszP_6BBVmUz1nkRd%DI$( ztcd%`d>#n>U$j>#yPrJM%~ea(kr%nygVmEGgq-{A-W3?Dgek*n-w0ctG$uDk<#<_=xc8* zpLI(=82s=*@uspeRkSzz9_AmT>`mpu!npjw_GWS$VQk-t_7?J3O7GW$v1#Be^7<@p zf4R~$T;6>sPi1>cIhdUPGJF-*-bzj;^YT`n_7jAjSU3#}{t?m1@3!Htq<|N7=i}F~U}Py35JJ;Vd1_3l5j; zA+L9fuPM<}-Y1Ov=Pr9M`Mt0;f9WlI%;w9-9X6vq0UvGeZ=Z|y{&E1cBb1l%?Q`5dK;B8_+h;?_K>0^-^tES{CsS#d|x=r!!s0qe_m>?d;^XX z{Cwwu!I!r{t`o#<)pvnBQ8?U)EDp!Z5({PiJ9)l;PKE1>H*E{$`NDQ%Ay{P#<#0^T z+QIP%-taD$f%6RBKWf2qoe6~($qj@Z%%cRa{~~z+#b2%D>t7@s_D+TlAKQzAx=ilQEl4l6tHQRtogBN4mBUmgiNRA-m^_?I& zfqbJioDV^I7v}dk1a1gU5zb<`y@KS`l%8L2f$OXCT4ASgLOh=kByS{N1^YsLJGuNv zxc(BhSl&mj3vL8H_MdpLeEL7}VEGc6zrWW%EJXf|+yUGfe2>h}-!GV<@-s62ek4?W zgBJY@t{})C+}yCFUG@zT+uOJW+p9%Mhg?w@_vewm4!I@yKI{km!@}hmK_&% zhm-ky;J0E-K@-ktku@%bWX(Y(spxKQfaK9uhK|V_E{SRYbg)NbD$>YI+VTtm! zFkC;szTTpwOMZZ+_HoIEL&Sx{!(4JrH^+u0$^C`x%mv5yq_AW;O4!<8mdQIYy;0)? zzh0jv?czj90eZP*IgfPM|_ zC-UD6UX{0h@aqR~21d?S@%oqL6Z#o3UagjkV}9e^ya!xO7_T=R z3|k`yVS2V|od-J^wpMnL@4&cmK5U)5nat;hSHr%RkCHq1dcgIW3^_;G#j>Ek-wN9x zPl@2=cd(xDoZrvE8|8R%xwd>f*(metsGqOLZIllQTi5G0%0Hvo`~e>9Vb~`58u`IZ z#{L3-B$tHkn;Z76tipMK)m|QKv+U#Mo57pqhQe74+b>i0f#W7GpD)ZOJy@nZ0FIM< ze5}@uk5`%Un>h5#s_@^DDR+qHcCto;;pte%7I}99#xKM5heD36a^@0rY%h3!renK2 z1;!!1yf1Bh`8(t+@-eafcF6FPYZ0$}2jgAHWxnR?-ywexj$mzIep}nILoSib)1Q!V z`|gq}31`#w&s{Q0;c+M9=j)@{F4^DBjU9XBK1(sq&)-`+_Q?ZN(fs^+ClAES^ zu%3=Xati$C%j*UI2RRPQIphdv#}STWa?o;&`%Q-H!;UO@v#_0whW<0nku9GjKOVt- zTE0!L2g{k}I46Ig{EeWUgB=&-sFk?9>+9k8;rLm8Mb3f#m+H7I=Uatwem=0laaC?d zUfKbEn(w$S&m+%)dG&F}Z*nGi6U5ItewQDSCqw*-;x`>Pi5jFSbz@5u$$qc4F~_CWR{*L)7g$MA=8IGV<*M{=BSDys*_qtfAzVTUJ&^-8pqoIuwuJaP@`sm8~8lI-||U}i}EfF z|3|)pW;WPAR)v3%OKsxq?_{q}FgC~hB+no#a6aQ*;gh_Iyzn=^ex@kjVtQ{e{xM}f zxi)x1I8#n-#_bvHVC-^Z59NQt*$mrTR#+yF!+0dxTUB}r+u>W;aQ`@5Q|6H2w;ICB z$#a7E_Y^c`6*(IGeYmdV+k)%k-|agZZYm$h?_mCYG~82Zw-w{X(&7C%;rW$7a?T9+ zX>oV~B}mxGwr}S3E2JcnkCC?vJ6J#1|E`A@Qu1x%%X6~k;ECadmAd5pp>X~bUR22? z9~r^zqrBOH>CeKv<8HXGlCcZRGruK_7vW`;8^YNP`)65Y_--E0X4v1#Df#xGu|Jkq z0)*|X?OSM%@bXH|_dM=k@!^bp46mSk*vsu?BVqgIi>Rhl+sAEZAq`V9BBF(IaX-fU!0~TZL>uLUu!E&TJR+i_a`Yg^ z@5B5pC8C@1octWdzjYD4l{SYk-WkR_U)EQdBJ5xZqJ8@*S>)c(zb=^llv;;*dIuXd z9=_%k-cM;N>||4*eZP(9ulOIs<-LIRKNazX5=!>$58E?hw30(U5AhkEUn*sf^Yqya z_n)!K0AV|;7v#ZiM~qcQlZRIIU=Je3Dbt0m>jUGJd2aS)v@$K*eSCn=s;?&Y1Vv=O$mLZW<= zl`D|3G(a&(nu08_3ZV zKTR%9@juDs$=>%c|0hb{l)RC=_W{P&lCP5u%Ks0!AX$0H(>uj{ftM#y*v=Nj!u-t{ zs{AbMV2)OBe018C2V^hVgDnKVCx3+YTDHip6nMm!=U@wl!1a^`cEy)mlhQXPzlY`5 zg#6uvovdOczaC;&`jHPq``#*HSB47P*?Ea?54$p!{I55RKafA2+*O79g+X>Dm)u!{ z;{%k(|1q}5T=>VmML3oDLVt*b{6CNlunU~+<}_!Ra@oymoet%Wo4;{}D}TCqi!(y` z+s%8NPDOvh*PqI^!}d7nj8saItHSzDI-`^tu(P?u=2UxcQDV zR$1fbN6t9qgqvSFf33(Bir;fwf9ng3-7!}y z9mpGI!u$Or*C?BWt?_rQvR&93-_|NO&}_#=#@a@%RnGm%m*--U;4YEr%F!2S{$7v) zk?WK$FVU;O!y>;{lpJ(nxc@RHa=kL2d>!IbA~Te0uQ2`&JS%d8QsXsuD!Y7#UvKzE z@h2au!JoI;sB9)@t>)gO93szx`VTDft&&523d>s<`JJ-w4PTyBzs<@~H~X^9%0*%8 z_>!q~`yWqlXHBc}<3*-2oP50s_ZDTEFfPxRZB;^rt^C^*ueX>Vk5Ai_0pxaYeA-iN zo3fAGpIqu4rr!+9e-p7yi6S2(za}?_&Rb}o@nFCS{_V}`b`-qY&Yy+6FidQKZyA6%6N)j6Y<}b85n0<;r!Pt>V|Tm zq*%VNPt+~tI=KvN@9p7tl*huUZ24Dwyu71y^X2K2S@n)^{#E&|GSkf!qV6dvjh>XG7K>T`W=20vB0qm5PK`G{vqKXPOWpPxTdhWsb}Gi9Q1 zHl=^AO#e^%=gNFE%a_Hs=W}IIY4`R0sl*6d`Clk5j2pPV7fKqMy=cz2*9+x>aH_GQ z7`%Tv>V@)$u#3%D2-l0|yih&~Req@ikokKJxTldjv`2@Nn|DR8AgA_2Zzo6gM`x4oPWKSYyFos3ALFmc zRewPnWwHFRu-*9j%aFU%@*0xY!}jO#Zsfmc{iDch;e3(D=aL5wK*x~}Q2MXQcL!m7 zA32lOcb?q!6~^zA_vfJhCRc^?KfXS%a#;R<$W_SAV1MIrfAVSQZ`}RJy-%VilJ8$b z2a_Me`2|m(Lf%fx|Bn2{d`y3o{GQ7H3wdY)=6_Cp9gUXCV|feDL;H{)zy{#!t4&_s z0^=RXSLULJlKlr``WfU|a6g0Rcaq0Y|5-&|ya@B}Bv+yGo+2l~^*o;c7J29@O#g7T{ean&G!2FWuZ%qD|%GZNj7M{Q1@iF8ZF#d7RC%32mnm`Wtfax>H`OcvC zlONOaFOsvUybsC6oVffC*F1 zL~cm?|6}qc>Q5iZJ~Vz6se`@Ijk6!}gX=C4n7QoIW}iu&(J@*0ZI zCZ|(8hP)vOmzPd%MD6oEIhMw^bL1XQO#cV@HTBnAvQGP7fofQO{@feykCn*p==j&1 z+@J}@`;fn-_8d>nCI^x0kdw&Is6THae}wraU*BP}4_sg1zCw8!Q@`A~gD4s$-Fc9P4k^A*PA0=;w`7STdFXU6X7=KP4lZJ8056fF70PRD*JOy2w z{Np*y-+^4HEyjnEIL@o3i@}e4O zTP-Yqdph2hBmYFpZ%i&x9GBmN{1xp#W5_LN{GLyap#Gge4y=p$GsqiheBV!gv>wZI zk$fuv{gB-GPxJ?JJ{mu~Yh(HIFT;2>VQW7BQmIREoX@{hhLdqV|5EvqjPv=I%2(vZ z;&_mw*vU9w&rz0H zSkBuoM>$LGBlhT`a#Oj#oKKMREbEPc!l!(O+_u-sJ0TG5alJm4m%rDA*QYc&y&aaP0r^icKIJG~$u?Tw7vw-VKj!)8kX^L=SaOjs zaQW*ji}5>0*-PH9WBey_)gtJ77SHF%+?-s|)9L1v{ zmiGb0i<5T-VtHzj>(c(%o?I60U-I$~A+M+QolYJq<|8>u1lh9+E^j3n$HN?DhcI40 z+ExknPd9gp`b)VXY-h1>KKU~IwNkDzFRzpJdBRwqs5i=tCfs(`VJ-Z=tkVCKOkub` zI^Kf~j>=W;2&b~|VE>rn{a!iMjHgd!7h(UH;{CT$qy_p=B=V4t6rWdS#QIw)SCx6<{pD$6=H<(|1 z&t;COs2?c4WgWjBt*AyjzW%#rlVpCqNm2WtJ?g{xpdFTHwC8ab>$4K>-$WVeSmC=K zJz#q+jq+6Ykuwg#^S@CA)EmO7jK8;LV^l%4VyDmb^JQLY3$)SaXI}n7YJ2i%urDj5 z_7Jw}=dBJ9wj1N2zP`*`9U*Mhx3D^zjP)(7P9tOe3abmrSiiz*xbQ=d-lBem)hlHF zJkHXn;%b}Dyu1%Rj*0q|RL2S@Q+<3@kFM_ZDW&?jd23W@wT`e={xWJ4VXM4l)aGO? zZy9wI<`>&%S5z5wBAGu=y%ju@(qnzfs)=N*Pgyk$P1~!i`k0K{r=mKn8!zu&58OUg z)Um=2V=bId!}mZ;P?v-d{TP%F9lOmIE5uA7fX z)mL}B*^4z$vxISeaXPA@TDK=(9(r<=zdFFpzecrEZwNb$qbqoM+og&f2*vW>PP+!?$_S5wO1RG z?}1g;UTsM}{{vrs2el*lI#^{L)L!JmFkaoXbyNqD%YaqZQT>8kUBo-76Ufa(ypy_| zJV?YltLw<)MZB|mS=j1dUDV%&t^URR4+Bt&99<*tLKF6?CK-NK1B6Z6Z>I) z?2rA_9{thS9|x*4gq>{EN?yJ}>SJLSQ((R-M-Ngj4&dpn-wzK}4-e!{HM%Z<`ybIm z)oa35e;uZ-8jQ=I2;)ztF8NHvQb83MmYHoj0#k*9sl z*pJ{+Lok1z;_$qzFarHxWDL&pBMKvjnE z@>%_7p&CD2lvh0OLFok|68mcC1d>-t3P3WF}@EfxLCbP zaV-C0^)4C9zgT^Yrt&XVJB+~Xhvm1ccgR@&a5YERDu0AJ^9yY6$6FaI8SPYq$+_fM z^78VGRfKpNn(FIRzj3o)bfo&do9jnMtJ%WVcpax2qxkyJ&7u?38^SoB35-foSB@6t zr~Z?ot{1l2FGbx&DZMe3EWQh zxE`NBtyfQ?MSFTzSg$@t8)bTX!2PrgHHTcVBfo!}q2`iHfqhwq>M@Zo&uX6yswr&E ze>SMz!d8F#MlC_c_WMSyB8=_VKl&TBHs$B@i6P)7lpfo2quQQ~?YU76KvR2eR7*|b z<*~CL;e32l^k#L6u+_d>)l(Ed0P(M)cc}R$^YqsIaF-fI#`gYR%@nrghkMm}Q$+hw z|J$dwb@QC)AJo3WR(tGMhX`Bs->(iQWBvE5lQ6&NKV5t5S7%Zj>$_iFOvd`|SHsa% z-~H+}GVX7O)v8mmK3M)^YExlre><-JFio_NDF4Ff6Y3RV?EjOavef%-wnt~H{|H<4 zIiM`FU7Gwr_`!stj{UcA5HZ+r6!WGKIhZ|Gu-QQ zK`ke2)#sx6=S&{Q^82!%)sJp&Rq&EpAdttc@?Tbq30vFavRZ}5ytZOD|lJ0 zO>r#$WwkjO%YRwzfTr?aR#V7W{$JHU$hbXzQ{M<%<^NrsGuyrVH`Hi1cPV&NT`p{u z|CYK=*ed@mHG_=hzoqWL{GvY%EqF`)f#O*HTk1(Nmj9M|4o&61rB<7R?TzLCLyaV3 z`5&lh!dCeoswL)qF8}1HM`}YiM@K(Vy9-<8f2Q^qw#xrZ9Y)6TKU2TN{G$BuJc0TZ z#j*U))Olnq|1&iMP33>4ejsD{U#dOkV|}pvuhbdBR{3A6@e4nf-JP%!`1V#kE^O83otjO?`n*#w3uAxUSnZwqJLTu&n=AUAdY{r`{c_bDGS)9w z%|%oFa@8(D?%U^s8noEGexKBIVXJ;js}#cH*73qaTP2M1T`%ULO$>FfzogA~b2m>} zixRf#uV{(FR(%z185!%VXc?GaY`@G_ik3-nte>LoBV+v(?I@b+r)XYw_xc&y2r_Oz zPi>;GRlj`NpJDFh&#(RK=CtSnT7CzQTjejP6&1G1Ur;MW#_|``ste=x>e!>8R*&LX z{(@RdGM2xf)&WiBFQ`S4vHum;ekEi1i)oLAt@0Pwrbh7c*=aoX(PD+I@wkMx(#@-* zeYKs!R((oq`-QFgl-7=su|B1>^O#?355u#x_6xkP7kg@#LG$k6#i`RpyX#>c(J^Zw<$yok6+HPU1{B_}}VE&h#AFo%{%X2Mp zz3Q{^_vD{_MqHoz>;dBXRGwA5e)HLQ{icz%d=;!mfO_~{HD@2$0>_%C3U_0~F5dze3qp(iH7B~iwomw>2Y;W_hv-4tAHul*4hAjCP-V60X-*i}_NUvJ%r5-o#klm~q-da&dUxxp~Y4Ey^w4A!d?htitpf+;8d? z^OaVSJiakJ4;?c_3n1Tu^*4{1rlpYg!u|CxVrFRPgt2`tHxATt(c=9%U5d}v%B|+h zcN+YCT+<5A(Q2T@`_!fto~JbwwzJnAczl7j660cfb~6`gJ1GAgxF2%CT&(>-jsknJ z#oBSSc)!oom|*Rqn`gy@YRVeEemnagwAaEIhZZF46zT0TPR(nrC?A^&*MlNsqO_*z z+{wmc7r%cHqqP=x8M)ve!JRSA&O-bASUFZ3PEP9N!4hKPv@7KG;1x0PTD7nF@?5n4 zCTMkqvArON)&^~OLi&CM6SOYEcB3M=6}T_PSt;1xJlGO#6uBsj58OXmaTp)CucM6^ zxZl39+7j)Va4O5U)Prq_S)%2V-}u1u!(g@^+h-u$ANMqtX!(S#=b4viWrdx_VYt8X zQ=KJRHS+Ubm_89LwpRteCE7a7&oT;mu)Q%ZZ9BPu7k83&RM^f=Lp--ZvX(D{uRojd z=Vb>~PSHZizHq(jrfr#)Mdr`jKCQG&Gd5uQzklJs|68GT5l&^EaKGhn%nHr;2HQIj z?zf(fS*x`n&sxu&u1z6tc?$1;iCL#r+KA}`vS58N-)Nb_xP2bPY|?x-@i_Wz%r-6D z&3f$jT8^82Vh?G(zZL0?U(@;hk>lE6VY_i3tQg0&Q55$X%-ipTHj$h-7~aoW@ZdihxaMP{-UL$MgN8;+O>UXF@B{%+}O(VJD6)0e_!CQS|u`nKgHVEYg&}BwZC7} zHn`b~UDI}>jbs-e->z#1$*aI#?7DW2d=ADhPvbZ33i)@iFZ)fqNp97H$A8xzko$vu z+3(s5a*b8I|J=~tlAD5k*$wRzd7GWbZ)*BBZ0}=WUv^XTBCmtvv8QoM^AU#j2m7*H zT6v0x!u@+s1RbZ9f)drB; zdGh!l+Hi7ju*&|>#*wop^7Y@-rjoCNec3&2KAN3?{po7xeeE0ah8(`X+}AD%r?LqR z`1^bBYhK&2f2;<>`zE#BYvZW{4$iKmYc8y-cJ?#*=!BGZ#DLHUOXSfkH-F;=R{$qL*W_E{|>I7pN-Y> zJP_`OoQ*Z|Tn~=FXJc)7eiaVC=Z(#mXTP6de2p!b=kH+ozs7p!c^~*}Z1Fs=0N;r% zk>>(X-iNWic@Cck-^YtBo#znn>)3L6F7+7hf5cYIb6a@6&F1Hq=WKXhz!vw}S5n}8 zt8sPm;=AU;@8{zh=to6+;{NIz*F-P1hi{K8_Vg6rUd{9#!cL>;Quwt(y=M9VVe9?F z&GfODp5Eu&OwY#jV*7Zp=K4Lfcwfm3&ldUzVe5S#{(AcNxcysHo0`%dD= z_m+C^ecaiG3!YE(G+OHY$ob*C!TO>awbjp&@%Y?cf4Cpx>UH@3SHVvDE3`2ko;QK-$>{$h z{|VS+gg z`QUvr8SwqRxNf@FA#N92JP>{_8P{DuMeZ8Jz&-RfhcW#p*nZ{Xdg^iHU9r%c;(F=n zM=!UvwcClhGK6H-jt5-UT%fAfi2gmi-iyXuB>mTvs`#^mud6gJ{2I-r~ zI6e&4Pmza;@i{=xIga`Ne8Bs2fZp%~I_@POe**N!-aWQujA%%aYOYUXhVbgcpAg?nQrl^al`c}H_wh6p)1+AzV&c?i;SD7 zH~o$HQ|2Uqqul|H#rXaZ%$l-{@yM9TX5|QygW{0P&2;2 zCFzaHq(t$!e2cf$9x zd#urwOJe!PGjLk;8a+QbJd(%P>P5*Z;I!zqdKvO?5l`2vkY|W^x?YEzA>!-wCgdX` zzD{pLz6H-0)Q$gI??cW3HwI56SMJHT$9jDsxjEREt=ALLG(X7D)7)G!K0|*a>|%Gu z!_g&vgI?}3ub+!O26u?xq&IYPkN8Y|wy@Q{+x5RFj_tW!|0Ha^?`DUtU*XGh8aRL3 zp%*0M{B4KsBaGL}2E^~wYrEOI!fw4On(_0&%vO8!nPdmdkJ^Rr(HD^C!t)Ltd+gC; z-8?LQkG_uFvJiiN^7r~~a+v6E-|Ky@Vt<);p6_4Z>+{Lgdc*s&dVH^cOFpmw?qA05 z)eoVK>dkro+NYl+*9Uu7*r#7ai}tP<|AYQs*lCP~Yh2*U;2n$Mrkp@1ee{63pauH&qCZFr)Klp@1@pM>L*54V zV#oFJKPo3r9i=s~~Z`rg)u?-RtI)E|@adg@6%hm6-xPwKg3 z{ysrCpV!$9%&#usRxWX0?TjY=8EyB^%=qsJ@&wS=0^M(n(ro;^G|^B zF#gPb8(n& zPfGZpXS$Woi~XyAaP!QBkNWDHqQ0Vj3ln4`6U}NtetUvqT)D;L)_hwx-U#FVqcYuS zdi!&J?+S(yBy6QOjVz3_h48%I9Md!^-}#(gWv0>A&E6Gk#ymI2CwLlLgstV}H-2@C zt1Q3qNZ4*<%;xjm0tS2{0m^HYuYgfb*qWadG%o%j;zmC)9u+jM3FGm9kfWf{=bnhO z5>EbmY;R*Xc|s(2VdFVkv{!0E5o7FqOn(iYzkAuZxM4g%`$B(x+1SSjAmk>*D#zUUo$?BKj*-4 z!CtJCk%JcH{WhVrarBWWpYYCva>m%lpS?e!g7HQe-WLM%os{|&jesXSZmqA9u}3(S z{rw!Cze}iO9C7pcgv!QgH{VLAYCLrFn}q6y{FE;b^A}p;XXJNtg(bBO_#^~x4^h7D z_3If8F>bVk{ju?qhK9eeRh~vhif}Ru3WxXaEoo%j7k07Ep^Wud(#-IG#+T<}qriQa zG&f>|lUaca@O;e@e`A$!Dw_evpK(iC8m}-tou9Nal;@bg(;5CgiB?9Ua58(5!ryn& z%9#Bp#_zu3ZfzVT7l!LSflJyLwO?R73C;)7%C<8)k$XXZnBv{u7)kB~>8E&iFyhEp zC3xHKl8#2Xmzba5FLNyEY|J3PgYr6-bTjSTCQg zoXlD+XY9a|zQ&*AsXgHO!;*nUslTv1&Eb6J=8_S{U~(|TUoRPN1d*4)_#-7wF@7XR zOz~i45*HZH$h~0sbrVAj{S_{64cyOZo#-&il0zYX*Te{;Ex8t?@0u8C3?VOp^>s~* zHfEA5!1m~y7;7vgdxOU&x(sMM7Rr*#VSSe78SAq=&sd*zdB*a8muD>h-aKP@59Jxl zb0p7L-eY;@^_i7;BF|Xf>^$@G1|^=$Gq&gDJY#!Z&okENW}dM=ck_((d6H+W&#OFR zeLm$G>!ZR^4BHFqqvsjxW9Av_*JeetWSCKh}d3EBNOI>35k`> zAIZ(&czM%S*}OpJ=Nml!tL2U8+vKj4{;@C~KbArIk*~%6NBdJ1bDXfXzg01#gstmU zRm|NOH`>7clC_Cd%;)66#rb@us>$B)O?O{9=FR=`)3`^3^b}VO(4fgYT=G&&c@xxaaerqBO)d9C&Pnf}7o`u)sq!cL1PfmGzhG$EuH?86f<*d`ZHe%a<;k$`&k!>#vD^ z=0=Kt0sSRiuVro}uK@p;SlirAesGfapE~AV@+X*opG&M`9wujZgy+i>>zdiZR)45x zo)@;tU(ftaIF+@&!Pwx|^~_ho4&zHWpZq1UzWFy=Y_A*O67P8ZFn%wwfmxnB1=2qO z*FcN(PZArNU4@g`+I#%?)X4lo*eXw>y!~a)Lb#sQ`m?vd_0*ii#(D8hVT`?V^E)_y zVXh{5@h@R~H(X80spXDA|0v{Yp66ItUKv-*y!02~`ezkat2}=XzsIQUYLl0~I-CzR zceTrN1z3MaSI0a*f&S3j)j7|Vq5t%Db;E?78|0lS5<;AmLf1Tj!o9D7H9}9F1Ag7kQ3iGu^u0eU83-t+i1?1V|FCHJ7=dVS4 zc%EN~{3G+cM8rp#6Wz8~f@_R<0&OhR;r*VjFU_;$XmA4f3i(7UzQ2t%Z;*cld$F=*o#dxtCRWf^KaTFnf1sQ#r5V%W^?jL82>zt$!0t9M6fTLY<4FPg5%ju z+gE0P@-(o@zA}fC`>o*Rn_`Y7j|Ri{FwCjsgK)p5UHDXU4*43mCpehA`ZizxG}B4m z2ZrBQm`li$MgHmLGIFrUKiy0xZ^-Y#R=Q@Go2>lcb>JOjetx;hHPifo%%9KM3O-Ke z-(R{K8fcy&ZyAEVgck2FyJ-tF-?({?E6~h%FSZZ+s}*AhU9-%cZaxV<>gJzav&~9> z^YnIhb`F0Z_FS{dzueaNG|y}*oXS#Q``&TQGo#35&%*oQD$h6XV|q3S?k`Q7v%q{# z{s_l2?odUBiLB<~28ebOoC) zgstyghnj`q6K2-=fCmdT`@7i-JjTsRlHCk+bG{^p87^!cFP!FXj2i>m^7}JR^PsT9 zm;i1CJ}I1SY;p1a6=_~19|C)^NVA8|%ad)?fcqmiZBgbZa!atvqRfZnQt5F2uVJ+L zg6s!w0e&a!G@8Kp<7vd01q@L?+TUYLA2ROmF=i@x>?jXbJSo;(Lza8N`y|2NkehqJ z^9$gu{n-|HW!77V4uM0bjq44|Sx=9J< zU17U17Tf~-l;UH%@Z~QtUr~G}*q1Fa|DpJM(VmH>Z1Vcr4R1JK_F{=k#XhC+J|08b%L0S^T)6m}R# z9`W%o)eIw_0mJuf%~;`Vw(BmxpR>$7EbL@cp**9LmYL^-?QG6AjCZi{^*Pv^(H?99 z#19JF*&pzH!GxqVGr*I_vsv6a-v5@Hqw-<;Ew%alaJd;u=JUA;Nz2VU!ddKiMc7}H zR+vwO?QB>jo_?iSDnI5w0O!}--G!a362#{vtuzO?c`bJF}#47USQ;@nzqc0m3*QZmYD}+$e0_Z_YG#lkxs? zrg@Bv_n$M(^JKi=oN4|}#{12g=3_G6Z_YH|qUn8)Tg)OQdHJ##-ap=AmLucyU|Y>m zXu6-g)tpMk`^j6)g=D;+yw!{%=i*%z+A9ZuS9Rx6G1MuqtEYrD;{$&n!vC`|SrzKVf(tejtnjNr%j_KtGd~X9Ww)jt>e>iGfLQDoNWVNyG=T7CJNh)-@(_w%PGDZ z>U%rsgt?C5+rbaO-%*@@&-{5(mbuf4gQv!2nFlDI4&%YRq?6`(@@DV^a1NRkhw{Hl z$~Kkqy!;O1Q!n0rKblp@uQs7;lRtue*^g!u@?+87r_9#mH(+0O%Ire!0rO=~e*BPubGX6;d@77 z{JduN6n2X76235D4k!0$4d3HVzHUx)b3<^Do7*M-X2!X>Px9~P8}dIee;%ED(^P8n z^1%1X!4s2jnWM-BVflf{cgz`Xo)5lAZV7RF@?Ghb*WzTly}{a={dg{|Z13-g1plMR6R_<`gXW_W#`-Z~$6Db7!28n0T}EN6S9!uadK z{-SuchYP$V>9Zrjm;GMBeuTgO{w%Mo_5H!vT3napf=8u0q2vVeu~dxK=nwzi?D zKTCx9i=1NEvV>Dv4Y)p?FU8ZA*$CrD;QBz}lmfOEjk&Gyyr8XvFkYW3ky6n1J=&NO z0^1|S+jf}zD~tyvlf7-(!gk{xcyE%o?E=M*!TFb8N@3ft6u$tj557b3k8nMtSxOPx zV~Tq>KY ze2dz8xp}8|G1~~T3;N4VTXEYcG|eB1+ftf}_F%7H@cCbHTZVA9@WY}$wyPA6gX3-M zloGc46z6_lr=+c1Gt94pJEZv9>bkjWN-5iH;cRxHH_XRVO53J2=jrWiQ#xY-DHUuf z!cKMr=9^!pRJN@b&K7q0R*_9Ri{TH=t zTiqO(QrmWj%-?shAf=A&9OdVp-lVRrxj&Zw7_tJ6s?4u=rlK0p!I{ zztbtbZDZYhKBbRs6L~7s?{Z3C+dem6OX+9(Abi)O5Ii3>!R&8S+vEB}?!#F@(E&Ce zGJb!0pe?);#`*J~p2k3%e`hRD)%CD{rwp`ha`XL^LAJfZ(BI+uUPEKB?VK?D-s1p# zUnga-t!WpY-_E`}&ByN{wpGH}BA(QAh;4EYjN|cks4Ya;8b62G5`-OezB0_VO4ypO z4!4~X&Sv*vJl~T%+}5S9D6dgEnE!rkxUCPlCiqP7aNBUS7{8~+jj&}2Tgw}1dqe5J zF3-oCkv5NhxV$y*`1cP-+6s_yeml}ujJ#dUZ%5k7k{_Re^{0Gct4jVK_&vBTc`O_+ z+0s$ArsPFn4cwOey_nyQwsj?+67$>9wtnREFkkgF#@L1mha1Z2gm8rMDUFZk<81NdlFRvgYn&~WTmqgKE4lRl zn0pWKs*0`gd(KG$C+F-6h+sewsbT>Hq>ECdgMtFm1p#RyolrwU0I2~ILV5=gsZokl z2@wGWDGCZGAWf=@8Y%LvS+iDhvhU^f-uJop|Gn|?S^Q?LSyT7y*|TTQ8Q@K#_|5HE5zPE1l5N{RaT$h^P4)u;ER`08ZdM6QU%VB(t8tQHKx{Mztj==t;7ovxG z1G^~hHy*whi5~9lPuvLVYkt%_-nLz(KGzir{ijp(2=7T^0rT6w(eHY15zFiI?dVb7 z*4?Cijw>Db-RLpiZpgVVJqGqiJv81si1-m;pC{Bin)u{Mxn2_LU4a}ac6WvSX3-P9 zr%5k=-*9^LB=0rSSAp?rZuAuIJ>t5+%c8@)zBgq0k)jx^rv-`W-qOVCc_7?d2|3p_ zZKZsE2=~?^-VXj#W<_{kA`Sx%5;MFViPi7>MtXY^*Mah1TpZ~gkIef~W_h3LF4O1n zVYU|l{&My0P2}}j!0LJ};L6aRDbWQifA24=fP-ZFxkSD`NVRtXtM({h+5RD74yPZa z%0D-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

mmj%NetTl-ysIA|0Beo zO?^;8*=0mINC2AjF91L@@H2n~jvs)Acz5*h?82;hKsv|yH1lp~-|ohEmN=dsxJoF5 z=WD>9j6)z0YfMQobt<0PfL{n|!#yupT~}Es+pL1sWineZ@MxkzAiiwz>AD2J)@AT( zUB?lh&W~T~L6^6n%jM(Kb-VaA9I$UjvHTVaL=f(=4=LKcdGb`LH{NcsEVtOZ>?7-d!NTzaCjHm3U2;R;P4>8nP3 z!@y}&I4&lQ3I~iE$k>`W2P|JR6UMFOhZwidV=f(x8#|{_-h`v! zfa~Uf{Z)Jx7`H767vI)}5#mtZj(@BZ3yUngswn@fpivaxRwMD6w>A23F{R$XOu6Mb0)FdC^rj6t7m9H)C>23B2h`Qm zF=!&_U>NU;DK3V%pR%|Z3dfXl@Wgeu>RHvMIUtdql8`KPOs?L-^QVh-t2hU_VAY6Z zS8l`rAWkSMfTEU(Bde|9<=g~eQP>9)hoD)H*#2~|t!mvwdPg8*tdT0+FxBK%hG1%_ z&7BjB1N2^o!Dk_wiH# z8Z4a63*4C^WSMDUIrp6`Ej6Zi!afI25jRdLmOcikp*2Rk*knp1V?K|u7b1U1*QOc8l zi{WvgZ=#7UyuF-em8v-oVlXu<$*+w~Gr`>6$gvO*PZhWV7@TNTaoNaAyu2**%@1Ks zie4!Rl}6Gy{PP{nu3qW>KABq=!s@1mMJWyvs1oxBrxs1|TuS2V;mhS!l;SzQ&OiMXT|=NB z4GkZaM1CaWR6@x(T5i2~Wb7vL`?Ts>X*xkpXS7Z8fTWlR;oT$*OhUE}|1%G&02N3A zOaYrQ5I1sE5tt;QpQ8X$t2ncbLmF5xwPue7cxDY|JK-^Le0Z@BO0#Jxsvq0QZ?&4?HJ%}5vmJxxtRm*w1 zTFNN|Ay#zOjua#YoL>tCv4@t-hC1pvNWW9+_~zRGA5g~#sly08h&<2+FgzWqj(x4B z3F$1Nk9{|k(8oe9A3S`#^szSV%Y0szO5R>VB?wUoEXD@3TjYfymLK6R8gcx@Qek@I z5euK z%FX>+BjG-4umMEg@ONUCs=03|!M4>1FK#vAKJWT`5lJYvjU?gh{3>S_8E)S2OLZ5@ zO)NwP#zwJiviUQ)UpoccCL+U$@kT0eP;J}=P-M_D$Ec)6WVE<01F~;w_KA#>^Ycsx z94b&$o4apPR9oc5@0+aAKRql|z;MLQ-sxlsr9vuDw}FhH+FS~7#7470Mlo6k4s5SxEd3j$2)y9M7>``sK4yx^Yls|6$I2ZFQ4$4FjHc*N|wH2v5O$>N22L@n^ zaV-ua{g~s==>}t~28DH$55|UHI(^W#wwXX}T`s8Y);~vMOF?a4;B9DSeW13#UE|jX zcNtLIU$USBYU?Tnwb9Lnblf1IHjXE>hPYP@YI7nGcLJKy;ey&^PB08uFL8p};$?!d zwPRrG2x_YnP#eW6#?I3p%Avm$&sGwTt;@l)HRNCDMVCB0TaSZhyNve%oq?JFe(}Jw z{R?gk7e`@BP0W;DweGm^Y+aZ01&-3SY!o)Cg zY$u>UMR>Lb#j`O)RS|d02~`;c zLGf%+SIN@pQ?fM639K0>ux8&0tlB++E$f!GP_2@+44$nSjiQL{)N?}>Wu)%QlNxX- zQXbDni%r};gyFQVdX_X}F5#yXrYju`xt4K4u4TNCYq8>xYoa|YlTdXt2B-+nW{q5l znh>n9azCs$#(K{T2v1*#1qm+UQm5Z+V@aB=XUvN-w$ackd=hb zGdfr!Q9VAwPb=Y<1F{Nb8xX6YdXg9)vVuksR$TO{gsx_6C{vkeGDA%&tgoVSVXBON z^wWNY{b=Grs9NTMqG9Yb;D!&7lr_<6{xjG4pbbeE&PFnBOz@4+I895&K{#6%RV-*6 zA4QA04WzA+DwY<~u?uZb>JVMqEBO#ssVW>XP}b1XiufXRRQsu;%cTwh^aQEnzMN1; z)Y&#CgMiPZM;!|IG}IBryItytl)%|asY60by41n5VRDx>iQtAz$M z&u|dm^SS^D5YuT$0J(;*v!^A3_;C_}1jcU!5qJcE96$J0Z4CwSJxTf`Dog>F5XdHl5CqkBs647o*f?}3&cb%2K$*Q>>r8t+AF3_l zZugFdFKD)DSpNH`WBCTn=4bf^&2~I2|2_Hr*Sx%|U1QFcuzYLu&lSxk7*1@8 zH14dA?F*U>=OSI{RF?QyzM$FYyjsNW%b?lPlqP(d+o7UukY8y6g-Nb7!kVKx382{? z=cy!sW;>x6&33t>+3H+0Tf2j1>mZu#U$A{uG+XCoUc9s7_-cWCtD@b&k-ikqR_Ef` z;vSmEi?3FPVQM@+JX;qY@$hWF`2f0Gif8*NZMHkgE&Z?)PNk1c>_t0|7h)>VRM8>cA5 zp}iQ-mK?sjlB-gKu`%B&v0A@7JX`xl2hSGAyKcg}W}RBr$JV8Iw$YU`R4&?SC>g-B)f!ln;Mwju)8N_8zA_YP84g9>x;_+X z+Mxe#zBUy3?AB0Z+jXJH=Rc+Y%Hi3r2lxJ)@OVXJ{@rNkR;nUaR7iSIyD5S@x1i&8 zQzfnr$W;_qkKhU)cjH5YtPx3#8~a&eXb1jZX|JsW9&MEZ(#Sq0ioj>jp_KL6alqw< zCBY~wQ}Edna+N`SqJfeeqvfGzNw#)j1fq^tc%Ts<$Rfhbko?1Cvv=8IF7v1JOtMw_ zvt|w>jyB}Z>&&0F%0r($hKCh>#w*MmgX10G&EfeC27M+OPd3MiE`mThh#w^;V>Q0> z{DFzOANTC@!uAz0`>${3HIjv*k(0ROSHYq|rGr}=@C|BFEQqM6MvoTeRY40$;90`h zPuI-304EY)XQ&x%$luw4KH$s%#WFNPpd*7ntMlQ{Dqbxb(axU~;m@cM)isINij%K` z3Hi-l5=JWqQFYvYCUJy|7V%DFm(RWR%J+Qvj%t)}b)(54Qve!&RVCvQAi=nMTuVq&Jpzwx}8SlYPz9{ zA_M#$pUcEEZ^Lh*RY+TlaSK1v1j>cZ-G2(-d*sZjS`SXXV*};#u;(-j2u`k%SpD8y z>(Rs{*kuRZYvn1`BsDE7pAu ze8Gu_s}4N~piBP$49b>&>Z5opWEH3ClI{-B3Lfbd9rhBloS!MI#AECYK z0ojMg;?P#i!(IptsGscnFzRkc<7)IZOcPN<=-uP;B5q=P)X({BT&hl3=>R?K$%g3) z5Jz0ewr9fg?^!D7AcQPIJXc36{Ie)}f=W;>1!CTS260#1jn`o?s2_eMIvOkd-3tbU z$CZah@Z6ouZ54veAEsarD1=+_aI^@5caaQJn;IeW!=J>V!qEpy?wMt87W^5z(YJ0kiwj>PmM&0y zv6ClK^Ach1NNMf4%9G*uoS*oF9Ef@x9axVOZBAV}dpsQ&Tsl=d%)?5HGapD6>CQ*7 zTG$$Wob9BP!;&=qoF}h)E56l&ra1giap~#M8hcR7wkfUFPQ4iqHlo;87K^yW{>cjvioKaw_RL*)(7w;+e*hsaI2rip(TSfD0a+|ZRB-fcf= zEi&Cy`aq4{Au4w2!1q{ZE?S3q$p8FGOoBcxWu++2=?m*QnriJhT6GJ|pI_^W{b#Q(YiODF3yuziAq zq^+?muCTm>?PBJx4cDC&J{gOOGq!G-eNGsSl_A+K`t+$q9Bq!ef5Z!mSqsK62R2sd z!Q|vX5HfAJSy+V|;I{kB=&~S)m2r&*Ihmiu&xN_Hp;(!@B#czJDAtP?IudCRkJmve zIpE2k4Lq-jwjkBm3;yA9M6V!N$84S(X*?o;q1#Tk;cJFp?M<@BNLQW%=>!-CMbjWg zejA<@=>*>Ah$ea55ZUC>TW&&;d_UCIXxV@;1oGz5heRw`O}kJF=MztLoH3z_eYV1t zPD?e3($PSUToh>5c8RpoNw6uYFa~X4|3*WuKj0NCrlJZMZ%h<9G=wT8kY8Tuid2ym z5LZ27v`iCM5CwkS2m#5Ip8VCj&<{@~Hz?{6@V0J`C!EgRm zXn|ZuhwPmQBO@(o2mM6XHKAMa!#~EX$346bkI&r{QeaU=Lfxig2I)kQXLV?At~s2y z`c*nzBxvcH1SJ!sDH@Xunf=2g>TiH-LQQ_bv_{s=TsT~G!jWPdDo4e`J6U%-{?+8$ zr0U9?WRHpUpM~-*s4A6krBTe`ex=f=*O5jSo-8w+0@-Z9JB(pNu%nM~>8t5d<5-A7 zmo`6TF1p>YhF*s|cyR~HW{UYcS2g%MC)eZe{D$6dzz1e3ZCL!{nIMag1zCJd7(|UQ zh!?@)=PIyG_J<`bo~;xXPi|q2eL*{9)LtHoCtV7Q*J2w?G4$bhS^NW)7!Q-?5$qwq zpM6&zY){UA2c6^g;Bo0SrAR4811E(6P*vp?AJGhQ14CaxnB( zYwUI!%!w((m>6!3HMK55R?ZV)(tW>(1Wa8N2?vRQ*!f^^FxmA^!u|^}9a)yJXiFJdIV4 z9Su3bvDoz&XUDELzIb+BO-sIyU0=k$&yrnBJP%qv!LRqjLjKbE^~E1^M*a`OuNk&R z`L$%dpEbY!YB9gg9gAPzbV3ooRs|5nHUDTV^>)ju019lkxz(OY0W_dc^Ot{jUA6Fk zE7Lw<%kPt4-?HX+#;<=PRlihz{ghfD{|E5v(aRmK0Yso|<<0|xb;AO^#O?K056+%n zQ*n=1A8UIp;X+XCMQpEo^$o5Dg$jX$>K{gnf5ojo#CGa)4l-1 z^RjNT`#wm9-G4EMog($vo9nL^GwUrgFzY@14T}lJ6x3cv?+4o5@FMYicnrhedOo6f z9Kc1+*kc9}{c>|Wg~4UIwAY>Ecs}e$nK^y0Mg?)09qQ7U{&-={8CWu#)vRI;>d@G) znG+1{i?s0Bg;hA_+>a^(UJzA_&_D+(5Egts-(zyzKZi>sli-cbV&t%$9QT!I9yC7{ z{1}Oc@j=t*9DcrSB+g|v|7qy{HsH}*zL{O9o49Kt32%s zIMRiOTk{`3OBy!L2VCsCG0+xH!h>t(XtMj2lqlOxKDn^{TBsM6#BhU35Bmiy+f?pc zc&s&|Ax z6MFUnWw^bt$KEGD+TmN$mJ~=l$hu(%us8CQ4P7)j#S783C-3~vSDrBE#{}*3R_?s# z^Ya#9Ot2253g5eP(NVt9Ueaxc=b3u#Arp%@mEikBW8?|YnKcaWnvXXkoD)xrn5IeG z&t4f`nmwPs1jx~wtc88Jk%gfOsl*XW?ThU{>zI4Wv&vn;R$ zX|6wP4UPXX&1{?>ysbGzgW90aly4R{a;!ZuCzsqv^=@$xVx+b^x`qmqhTH|6`6cf| z6U1*LanRYtB!|a4*I-fo{n_}9E;tAAu12gNlz%PCyY3rN6OMRh_l@T1-8ZO5$W?9x zEw^E{AhB3${_F2Kru)VLJcacY!x-Rn4z=+H-Wd5ZZ=8sZMThen7A%Qb*S&&w{4t7q zJf9BEkN9-(f`8~~-TZsBmv!hlCbbG84)n^Ei3Nw6yYa%hqOck5n6;?m((zE?->XoS z=hE>m`$)0W*qOyvSM!b-hkA-hi%cXUD}_3A5!nYO#Fy=ZJZvy4z*2TB6PlE^ugGNlEy) zi4W1J!2#JR7R*h!rP%_EITH?*d-4~-Z5+dD0vMwXv0_dD_k`jg^htZy8M^UCt*ipe zm+$Z!GaJ=F(y2J`T2U_hjF~Y!Ne&?@Vlie$#hA%^XkRbLN16*`rU5jf8Dh_DE7A{- z;|bTKnZzq#Tch|MfIZVZnu!m*4UwiqgP61y>s=H{LROH0(z1GkzL>dh7^bToxAx-J zWiB4Qn|4j&(ZN+*qoz7&2>oxB^6TCYoZ^18nIr<6CKy>bMZ+S^nhmNkcH(<*eS+f% zF`XwSP1pc|+5PdQx~u --!%mRxOf0#U<&Bhsmo^Hqj))loj^R+w<{w=B{87i^S=HZ;aZRHjLe@h* zRH;53L2aoL$30G+T0U#pb9e$HlX^DuU>Fl-W~sW=n#PEJXzzBkK{kbF;{|E4ebT78 z1-G+v!Kt_5!Wz4ag|Up4v>Rdjgq0n|Ze+1}Zn2w9F?6s~Y@c*7mk11uMAWhLG4CAIFEP!yo=7-Y8#<^^>xh8+RfR8#I1utX^#n*4Txp zkgH$xUs3L;*1v+KF)o>9RW<{wF)IoUnjhs0yWp!a~+^nWREHu|H9c zixX8<|E1Wmwuo}P6+gr6m-ECq2|o&#J;;b`W^Z^AenOrLP6@4^m?W7%bfR`Tljn8p zJUXfN+ztF@Y;@Ro=(MdnSC!<9|I;u%@`2*wd$Tg82vH zY~ZI_J(X_JnOe%!Vr&j3OMyA)V=co2R2kwCVMNgef;MuE#sCVnk$0fkC=N>;K$O@a zj6MXJH;y-oZ1SWVr*toFqt(64g|nM2z&ngYOCop_zNO_U#qQX*amhS<0Jpi+JD`fP zPqzChy4WC$2x&Y4v58C4l&p*lig)5A9V*y2kx}7yR;AWmn0CQKSbmwk6K&mwtHkca zy^tl2wQ~>JR!i|kYYlqWgE}F?FxV10C4nstek9wW#gicWZn~AI7>jPi_Zr9A*#(+m z!F4G&ZY*9ijyo!~x{RHZhbwY4m?LxNg(0pIaGAhxPIbCAP9ktJ2_kTmbJtJeMF6MZ zc2_`BZ9rZ2E8xR5N}n#AvPbZt72^w62HsSYzg*r>34nD@h3A=~N7rdTg6#E-Y3wb@iQCJCse`o&SD$xqmc}$*OEomoGx#98T4{2fW#v{A(T8u2!&;={U$vZDq>n($8K;G!Z$x?6*#Vb^z&BxXZ)qfd&ery^V+|g)I{K zi9|F`6bAny zQW`Cur+}Hrk@)zSdb)(Er_uiObW>uOdeRkD>)BciKUY$asrObUep+px>+&xZS28|Vd^yjrtWa_#Dj*v zqs|Tt5SI@MX27Y18w*1h-i{xI4G3l@$ko9l11ueayVhDvwjLu}-@zsa*}4W1)|s9< z@v<#^!ej1b&nT3~sO%PeU@t99ekqSBSbF39iHi;z2PZy0UoKIZtdXDLXS^T^PH%WV z82(uo3d1jaj6Y%{fFp`Io{;Tp?+xe2K}9wLVEh8VWD{PD1o)`D(nx^lu_XXFN8qrc z65W#kQAYwiQ6YUOkpSNyJs4q(F3Q%whK$US05#b1Z$od&NPyUJNPu6RFA@N7XoyhZ zH)SM1?aUGYdk)Q2F_Q%N{%?iAXO;lMrDu`=e?>Nq0>UL2h`%3s6T`4 z5qA*KOZl}>QD~tI+?V@z0V_ffkh9r>v6p(!aTHP7Syva8&^;jdqDTa1AHQ8h2DduS z?p@iu0U2;hs|&=hj|y(&)6Pb|*Q}*=@A5YC7%kn!1NbMgWlMJPA6f3-#itX*(Ys0~ zLg_QIizge02%VXSZ^Br(yLf()UHsSN4TgvJ9-D`k?&7%+Js$327;8epluCH`L(0R) z@f3(A?Wu200~d4i7dYE_E*fj-1Z8jo;Qibh7w_mh5OgT*Z0DiW@a^T}EyBr*_VP8s zy?mOS94alWW3!hhzdXLZ{2pzh$H`A85rH2yNF)Y?l-gyubn!-B6SJVet)_s>#(8X& zjr^}LW;1T&{|=7^H8iA|ggGn;I9)U}vUBliXp-D`a-Xl`?dWGdfa<`|xkzM7zYQ0L zr#lO$+?IX=iUqdxOWrS|&n-Q+OD>3UE6O<_Mt4hZjeQWe0}P#9+hgdv>_=5wvn!mY zD8n!rg^o{SL(zl?esq&4RjUo-1=wnB!G|>_@k)X$eW{YBAO{ z!dgsAZbYtS&bXuh0GD@gN6)g(j-IjsRn(wz=mq_TSyWob1pqy7Vj{64{urKWMeTV$ zy;VL|A=hetD1jQ(Lkt5-kLi!i!(+%7g3)P4_nyN8);0aOiTr*hVMsT=Ny3m`KJZ@t zw&XdqdBD+^(jBw40xXo&j0KSzJ(@Yeo|A@BLb)LdBbSCXRA3wNq9tg<%_tjs77vk1 zb75nX%)!4Jy*!$LNexf6A&DQpz_tWtInLU3#4rLW>(1Sd!IGSsf3O%jm#|%8sOpAq zC(YAn8D3D%X!$ApYNvbDWVvrV^R<1D6A z$N7e`q01WnD3|Bv_~ZNyVI?vA1ICrRm#c-Y+>%P1$!^uczEo_fFIZ#W{W-9_ALoOO zdyb$EHUm>l^E}2t8ZZ*4>E2x^Sk<)Q!@OEC2X@uQjg?3cGVa*&6G!Gh?b!2?#vp>R zSaKMCwyde}#|O|(ZGh=2+2Sihaz_4P?hIIS+nypYu$djHt(|Zx)RqD zXyQTCXuWN-AP4wKBmqbV(FDf+@!zm?pG+Js+>8sn>2?$?$~3YyzJbpJfk5OzZrR*i zSY{Oz539EQOb!7@%{xvx5zmgqt5FW^f(>*@6`=@M<9Rb+UXX(R$I+3Ex#-68@XVr! z^kV}a^tIh_(XN=@MOzmiytH*uiKDhQ_=+5sV~Ws%PoY+K5Dg6v@2W^VKnr?Goid}Y zyY^Ng7L?~+MKX}Y>9L(+CF$qveWa_h7ZVitg zz#6Lq6T|vz6Q^zKnoIBlCYhDHj@#DQYTn%}JTSK^VnycVmK?+b!#g9nhPl=$bBB*a zu1ewC@UDol53|e#)%eMZEIMeNvM@5dv%3C)wfU)2Ow*B%L} zvvafX-%c6-ZFWcUkr-j2U>HyoV^=}5XI!|6_DETy0_wrY%zucE#Jj3w;9QsCp+k4! z26Pu3afrEuRwgdoCj!}K|HtaPF5B|GuOR=(t)a+e-v~vloAuw=j!-1_Kqzv_U7^VQ zd-R{s+c$+*h+Z{LmEWGj3F2%#O-H>&e? z%s6i^uY!#5WeqW2+sXVZ-h`H8zatt`7xe($yw7WUsiGa8stQK}P8JH<-OLx`PeHpB zUHl_xR~ZIsciiNf!RS*n;dTR#+cm{{#3IM-4R{T`<66+&cAJjdZSd;%ytdgen1?=c zs(5X8$m!DOwGBpsGbL4w@8g>)F^BBE`ft+}v;{S^;+>7yA@G;!JmyrAIZDGnITf$gs`xzm*64HL zZZ$64sRHp}l1Jrps2WY7(WN$LT)2~`fusz`AtfIV`YD`@OjR9S}$ERJza}MK|c7N^=JvqK$s!t>DXCTxn<{>#U(aR_0%8 zmVdE>9|sLqF4D8-;Ky&6KvGN!<^(odW#Lb%a~Tki;_A;mK?LK!NU zA<9{Dre$U~?q6$DoACs?uNYT>GW4K&lDYW!ZNh~$c0kLvEB*F}8+R3ovFYODr^R-g zV(3YgSiBhiO5C`Agt?Vr!rOY#vnv1LjpO)hutQG79o483J4n)e0;ZiJ1ai!C<0iM* zfKr%8X@(k4buO3$Yit`iEEl-r$<0pThAwl*lUvrY!3V%F>UwgsPUG@d)qvSBih3TH zkw3|Ja+4i7p4`n~7Hl;%-K?{p#F+B?{^@;n|I-ELcmPI&F5OXa>5fi!TAl=u0LRH~ zc!@Rk&qNjIi#d@xjaYr`tK-!z!=qXQ@#?0pe~*6x3Vo~vi#P`cS6Gd?%7M0I7ICxC z%)^Izb+alK1QU&!@uxa_3?&K-vmFp+MD4-0U*y=WTVGVdh$FQoG0q9~o;8ev$UmGo zxvco-_wA+*y~p$It|{{EPA&`S8_;}5fOR?oOx|kf&++a4!pS16UEl7GfN!@59LOHW zx4Q<_b~|EBe7mFbOMJW2e2=~9MzkD*BqG!Jb`OegH@UN!BP<#gQ{V0`o4(!r6*LZj zM?kQtbaH*Wp~T`^*J#uf0?iNr43;^L$F0RibyQ~)I>XSSt(bJ$o~WRKRGRYq1;rlb ziZtWiy`7EnyLY!i1sN;v-ra%K(4z`dL~|B}=|A#ukTdj}pg7~+U6)b;rtaOf3G@*E zRDk*1yOG!kx7&Q;EAvsVZJX}ht5ID$Y8{4e_xAV(yaqRF@_kaZ@jt2Se-Fxg!U{VW zhb7M7+kLg78#qpl2Hns~bi}2b#(zJ#w4p)_ zYk>E6gQ-hn7{Y_ZZjIfhOdW9PFxS4z``L8i{aVZ%d#L^Mct4QH)~KKNcbDV+hbz$_ zWoQ_c({(S4Oc2J+B}CEMoucgNJfn|OgLAHTl^)o^tPzi)wBwB5HtT(xK?C~gCq zjuE&8AFh9Q+A#YBUyfj9q8jx$J&95|y~|ya6#3%fUF&D_xaqifSG_m}{|j~TPFZ9B zsxIDCcRH*cD{Eb&>Ouwa{azv?wxma=>KtR*=NtZ=WfRGC<&=lX3tHF9g7C`+&gN8TNgga zANS(tzFtpQ_vnk~-dE_OuI_~=mBi-wHhj#aexaum^p4z``*z`Uh<)ii z{Of=E2j}4*ME9Y;O^F})Ecy4Bi}`nU2L3(4-^9#BxIs;^ANYQ}U;My%kuyV z3uer%Dsu?=|*hz7f4TVNL`G(%pp%aMxbeV^`jh z|1)+Li^INyIz?Q?5=TNWbon9zxI$&DmtU>R+2yWX~R=A$qZSdUYC}HsrSYu}bB!a%m#B0L6PTHS4 z>B0Rotl(v0{o!=tZVyIhXgub_i@|IcH-`7nGcKS)Jhu&!LLIo1#SYvxPS(9PI%JQ| zMJtLNxNGUaJ+C!in1kQgv4iMh2PPloSD?J>z@0P>+^rKc<=^W$E(h+%k>%BkK~OgT z-T{oRbyvh3;uDvXbL{|>T2{fv>Q4h=rFjh zz&)Urp*4&)p_(F>?KVtE%yZd3_4Rl_UAE!d3%Da(w$q51VB$>^1(VD#M~W_7sO8d) zH@zdi!MqI%M~s-pW%~ze#H@IIsS%UP-+;?@%0*gFbHK zTbHyUYJ|F*u#=MH7FZc$qfmEBySEa*bwO{gRsf7hhxlw${f{OqHr9lyHku}SxqbNv zCcGlm!?!C+=1Lth4#PHdUdv;Pa zzDTSt8sA;06LP;gw-Qd-aGlOCdb8>YE|qO3(@@iN*p5cE!rIj<_}Dg4^>+GHy_#as z?~iSbepIXOaDB3?@uHgiMtK2!vZJ})Q2mqrOK_=XO6_UF^c&6^#s0mGPP}FqgB?5N zQ>S7wP#K1c;{?gUQKN1Q5SEY`J@{i+LXvO<3*%sa;*!k;LaNC*F4<#9>LQlM#FNmY zj^Jk)DmT6`XHFOqx)1Lkoy@dztS}DU@b9WR9h)7;PWe7m)RJ2=4;(c*0aGg^(41p= zV5fv~(uD+juvx%RXmuT@F*}!X>}<+0-O-(kB~}OV%|=;6f5IP3P+(Q~N}{!DrXf_{ z7eqj&5V4=cN=jL9%9C$&H`<9I;lecT*B4ZK?$=Rlnhcro#6b`2s9Gxn9@y{^WoE*% z9@sKNrBKnIYJ+dbd)4a;t>1<(V!3Q~xB{K9Z@^t^Ogy%QO;UT^EKb<8T;7OZ#R*%B z?O?SihB8$$bQRdZuwIPb=slR{b1^N=SRFybC5HB!c+!XPP3X=9bq&H)nQn1{P7^!8 z?Q$C>E3H>Lc3X5h5JABjsibG{2izN0_L>O5RhnF9iUZa22Ogg6N^b!ZYQJm2}+W%JMnxMe%xKm%Ut) zA9$mu-sU*+4}_ZJr{j%H_JH2dpQ8kD2 z$$qaY=(xv~A{ZL-30y;9(Homf8?AP|vAJ5{SI_m|px)SZ@>Gd8b_z}I^m${CpdyTj z?jdcuim-{YJ~F6`2pp4sUcIp?=zLClEUd2BWT&p*-Z;Lf&z`tqZ^Ku^YEfr1?3Ew} ztbu3(yBEBYYu6J}K_`x=OCh8B`_6IP7INUP=?e54TgGSf9W(;k96V( zkyFtGEt2Yx-DNCuBB}s2!R=t^5aQO=A^S>JtR{A?8(%0rNUZt&@)G09(E&SZbAJm~ zcq3K^jg;*PBd73#gbu;|Qg05fOLPY8gPhTgAo4y-CcE7Xp)p*x({RZkzPQb`h_^%q zvm&WBiF0-E%iK+*V87&|DdU{ybI(q}c)5*r(LKAGl7QbJ!rF{`_W5rR=Ht3_H22dv z53%qy>p-&zfGFWAbqSwKM;#`+vBW(aP`hc}v+qOuQM06BLlAp)&n8nRIf_?Dn>A(% z0qMhqUnTC@4dgK5o{a*OnW%*@hXw(waQO$^vr}jpr9s04l(-;rJYaGT@KJ>1hwN@) zr%5)RZ#DuNNYVkby%XPTTHqTTdvQv=^LkK=Su^6y!PeuH(CJ$`F4yk{U6UNaJV}m@ zGY1fdb@?k_FXP@U=bv7e>682%XO32MG6sg|!PGMk&MRev}NqF2L}~ zQ4vV0yg$dM@oE>L!V@aT8H4FKY8!@67rhQ)_}r>Auttu!oXGh|osM{6d8O2l$|;c- zF2};oxenV6D48mp?=k#d-hdz_L*TH}s5#1?QDb2)>+$)tqoN6}u7={wwBytQS)p`C{D zqhJQ?2R!~3bW;y&h9#8c`j4Pgfa`-~>Xh@R=ySqaN;yA0`3Rrn>`fs)DxUG!e_4NR zaz;ErK8HmoV!-j&riA3u$9#Z)&mUh{A3Yn_DJYaiC#{j6;%B@d7Vy`;_EZ%K-TV|bJ&YAq~S5;!NREUB?Q(} z6pPA(+MqnBqdd@fOvc5JrvXVA1Z%AmX)1rZ8( zk>JX*^5E}(1MXtZI}hY9XTOgv5+sDA#Ji@4e#RQ>LM?uIuphJYV&uW)uaR*FdI&SW z36&hTNC2xx-=`M|U05L$3CD2;xaO&&M?syWd28$w_`;#acup%4YEgh9fy==Y3AIKf zoTX;fXwHZPo&j>$6LBe=ArvXmfG^c_5e~45l3gba`Tjn%i*whSyA?iB~ z_#C`b=q>je)Los4%@rGzIEb0g;3$BYPzfAl?7xiQvJ*GERAVK5Rmbjguw@}z6ouWO z9t1YC4ksqlIKHSjsG~R_7b_J9WDa@|;L@4ipS#w76kyR{U?vVu@F>8h1&#urwp3rW zTFwD9lkyzUnE;X!n_Tthp4B0MV$(eYu*Y%;cvz}Gu0sI!SVf%vChbP?A>b^votESD z_j8rIItc|Z${~QJ4eL$9?79EvGO>m%<$=8W{W(wTYw4-HG7_6%UuKEX3U9l68f7&kc^p=DKQXoDYJ zM@hLIb^G)_U@jzt0hl~`c6VreTRne47lO=Vs1f{Mc3q6u#QF^X zcUDok^S}la3!Dco|09`);CTSVI-A3QhU%D}^E-zDgIG7=_$bPzg{zD9N8!EJ*i{^j zAm=~NbMEe#T881K%7vU?#H}6%l?Z3Ik$*C2_GWi+Y!(=&@Nu3liPJaHU`b*F_ z`C*oy-Z;5k4O-{|wk?Bjr+L)6=4WUpw2$mW{d=sU5$;x?}YE(qH%1KWhzL%>|(zDQQ|Yd+P7C#?JY7+zgCtVi$dW zVPUF2^N1jVEXD$7a>=$F4Y$J0tpIx8r?} zS@>hO8h>oQ(D-9>*ucSf2Ll?%Sm5Yp{IO#o)mCftuepwqv_?{D(>M4X zKaoLmy?}?_c(*J>;#eL8J}kg%*S%u?(}mk2s9_K;`Rc4amyn03rr1vAKL8X9Xj>rvh5`ch{6s8=Brl~Z(>S;>5Mp!1GCN&~dYeO&nA2J)5NYry8h}pM9rcV?IcV== zhHXBHdr8~zbNlwAFEG(|jbI(rWqTik(_?2SF56vbYp<$yYEaHtj56x0-8g?-6PV%` zJuix1bvM4Ipp)hTY{uKt_#QFd(liOiBpy6{%eHV>05NzKW?Zh58x#A0F+hWRD7?k9 ztoraz0WpZ!;S&Ke0Ny~tz{mC6)?;u62IX3fDFog$6xxS)?D>6j_3TE21AWTkVzQ}) zYHn9RE4PuYz^cGztr?!s;di=utkAvvc%*+J z3es}JxL@7qK_nYK#A@M1+;%9uMAYJym~M$81_Ozsk$Wp#%#cwPKk#Aj)9y5CLUar& z=F-Lyx}h)$z9x>)WDRIWH44?{RGjA%++FR(B%+E2afGHe1_#rH@Abh8*5i?Cw6%8a zt2t0Oz;@(souh+P#jfH`3qCvXFPeXk3|}RxeKxdq5j*!ik~-cXj?(NPiiwtxeKelZ zm7Ey2cj6}9kS;X*5gs%_3b>D_r?eb6KY=PW-grv#f((5GH}K;i-q-86SGFQzSf{wh z!NR1Pg?MNWju|jC)LKK|(pC{XQ5l**zmqh8>_7S(W+;q}Bb3EZTt@m=quxfCrEmj5 zo9Yju`PjI@0<#3?Ok`&f*a4v;QOEG4hfb8K_Br2Hmf{bD)naU~4ZjoVlh<|Pi7M3I znPsPv?g1z69648Uuu(_`J2b)JMzb5(?44*f&&n{;o9-cyKjBF2p+~W(>IwqAgK7}< zw`Lcx{(fr3;;0~Fr*I|ON&0Jvb*mBg8>e0^3l%dr70Ka$DXR;v3jNLKNy;^`G#0Yu zJiRasV96Ue+MY>-?yt)lU`=HCuevW{3oN(c1s7$e2 z%F$Ydqh(NGr^nG6bWYlpqg74M(b7JSmO{;q!qN7W@-xBh8-6C?!KsC^4Ovz4nY zM8m5k9db1|+noCFJ252mmBlhm8jkiIj1`MPXC&)dQXz+*mo+^_%v2KHjDVx<0zcaw z;AiGIO$O1++E4ELII0-TollRjI4)}(J{HbjAT=6{eq;Y4VMEHt2+krOg9>JPKDIT! z0S$FnSqF^^Xciit!n?YS;aO54@8`Y@8YKMY^Oz0e38nuumU6}#`gMi$yA?%U_v$Xt zf15}Dgs&x){&%_5Pdto|`hWb}AoVv2^&?fApZXiw7E*teL;a+Nc^2**@xz;DE2x-w~vKZX3FU`cePwuaF@lOsQQs zfcPT+J?~;J3SZ&ClOf?>VJq)?YHgT(fXJLRVc&@6{ecMkm2mm^y%RQVjP5?=<)Q0a zxmb$ny7n2R>z2gybe*}1k71o1lcukd+FmZ2-b6#lG&KEKS(>iH6U|s{hN4er1w^mD zG>Wb`^82IcAJUa_28vFHrAxD+=tGBJ1V#U+s_u&@dOz>F6zwNso_8HV3xalJtvPWR znN9huhmH;k(CH5y5Y0s=4sK}5oj7{s#8HP6M+fG6(408pa^gVrOW%p3*_F`g`{cxt z@=hF%bVhb0Y+=ev=Ou(uAE$KQlK^&v@>zD*kr{|N@gzj_afxTfoFqL4#Pdgfqhw5v ziio`{0b-UTN8L*j(ch9)y(@SX0+rfF5d4K-=kpMkY>+6%y{TY0BX_c6fxDu&zdPgxyC@HMI;v`}`wxOQA;?HLY{{PDTaQ zJe5}$o_YhO(?p|DOm}fcQ2S9$2znEq3^;KSN9W&@fBz3rPK|SDyO#=74suQ^P*2|^ zC!=&OO-*CplSX3=&LZw$%&39^C3v&N4&(!+MzV+6;kUAg`lgi42il5!pj2T{wZ?Jg zpYKuv+%mqd>JWzqQgi#NkQ7wYeLDF-L%Ry2cn-QC#PxKOftqI$4>FBjI*Efi*Lq1Z zP()FDKL4A$WmGny7I~$w32sbX=tt%S@_|A>4~3G6r@Mr*06D#Ii#hOOn5P?2Tlr+5 zt(pw9#~OQ{j7RMNc+ztvlMK3792F=67X|4EfnJ9?;nG0dq=Q$b8qcia(2<=7LJ5>p zZ!(z1)Rin2bR|=dAU7Ro{wzo(btPLvb1RimA_Ef#^Iy3aKW!Cl7L*B46|9+)KMBQM zPqNsoQh~Nl?@7kDX)4e-77Enxt@$s&kKbFtWj)D6aeB=|uaVW)4pm6EHL^I0Z_EQ4 zbMkn5{Y%~%A(MLi& zXjtjBM2*CNPa_fYX(U>Ap|5}w%6L)cQOhI9$a|F&aI+) z6|P)YJfXXtb1^Pe33N>MIs--O)yyE~v%|KaQ>A7VSv)8E7-6!@_1kJ!ZA5-T>Z3}v zkt)@F@Z6%gKO;(2DkF$9g)(A~4X2lEn<4q;@Rn7RYgHN!;e~Vm2<pk2n_iy2;!vP>T0_K-;OAZ}!ND_-iH{ij9=LC9V4vx}m9zlb=Qq+X zw*G75DBg^AS339+(Mx83iK9PUkFbnG2dCc4KBAoTQOdESsI8Ivr02D)U_8ayh}FJ| z)r$B@$!>2YzPqr`MsWkEDhvB8(#K%2W75?PphOkh$Bk6Vco0?NI)aT6J16-5SU(d2 zn4Ml^iprieD7Qzv17iK};E(7-8b$z&A6_J&pKo!y#%)|Jeyg2|=0*gKGi8|zd4d)W z)K;{0t1W!CoFbJTMK_>PJ~e6;>ZcmD%gygtfk6}zghkSe!qlJ+^3&0v8iz!3tXfZ% zsw~mdrY41Vb)xz%KksTaybHeB7=bn)?_#D$$2zq2&LHoKiG@hdYdxY(9l$!=AdRBT zuR&W3`)XG9RX08R@|%dLy-pj2sxEAv)?SHLH#oT#8*EXgRvBfgaaLS+rt90I`cnX% z#q)F<8pTDdm^)5=b{9pqp&Lanff)SnUA9jNx1GnW7>shTcI)KIw!m1MKmAJ zvkr3-QHKu!cI6zI!0LH=xT7i8D=Wuh4glCKH(ONZf5g-0Yi6+~O>9 z^M49)Q)_OByA>}_N#~i+m7T{7$+@i>;|NBOG6$j8O0^{JE+OtXh&wIu?_3|Bv`5?} zK0YpSyD1oFAnp}-i$=UVd)*)7ng*y|q3jN!Yy;y~%5KJwgPP4nD4RwPn)lEz(3!aO ze8-{eI(DusWjFIRn4{(*%C0N?b2&|F8Or8aI!M`nL z89%UIxZ!bjB>~FD_|Oa%k;Q~sjn%gqeuB77A_rOHe}fUuZbwC8`Q@&p99g3-I85xr zxsN*zsAFi~bO~JcCoqHC$i1*rJ-!LDX*IxH&^lLo{=JXCY-Ij5Rema&W6b4bDlQj7 z?Z4*1M~xy8&nP-zNS$JwZefjl|$yI;a zL*~|4J5{qh-xv=*3UNQFC;21Bt%%fbP}5aTIIAXRFb%c8ZR*C!k|ZxpMn4a5fa?*==+@AhW4s?U+tx59DT2 zvy!;Gd`Aw-Yuuax*(kc)0U&42(W9{iSBQpBGR@iy8q~a(l%Y~ zYelcB0z6$Tz}I1rjR5Z^U6%;(4@*r(fH#*F;LWoX;P;S7*&Zxbyfz@j5psvYyg0|A zOQmbc$Xcc9I-^fz4(5*Il;3HQ-)$TmXLBy{`-z_lvHCXW)64J9f0MHQ&3Rfj=WVY1 zZWj3sW2xUq*BDBDKDs15SAHv00;}sq$?sID{2p-ScgmID10uh>@D|ybyYgFXn`PxU z&CQhG14Z(iZLfi1mGQN>iNhW(r@4fH_EueLVu!%g@Nk<)NPlX@kw9^8ChJQZLQi6lK< zJ}(~eL25nB=Ov47Fy795Uet;rpBI;TnPgt=c*ITS)eiEM#i)F4i<`*{yb`tWXd$0P zI>ytc$>DV!9)X%sbcDy!HO5MHjl^V=Suls!&@C8Dbt6)hqruHhuWtm+#YN{B^K_0( z;Kdz5=paVD+n>GbTHKv_dr|f-j+|!i0!9Jx=DUmZyE?Yz^L6oAv|lF5$=7uw?wNdD zag(o0*gK|%lLqfH8^ex_FTVW!jeqc_1^&MbMau|b*FK&y?(bf z_J%2h^}JjjLcT5<3QQnXRjxyTJc1vcWLBzQhrgcc+lL3o6sA4q!nF6IbYfC-c2ViR z@fn3_A1Yj($LsNGY*uufeuJX$&nlCt>mYtG0QYj4x+eMa+ct|*pPziE$<$Samq@0r zQ}{MDJOC6v7pnSs_QHznBI1g>X&GSS0)TKpu$?qr@&c2li*3Qvfizuieo8|vZcMha zc<@%d$p_b;MZPYqHNk^-8$5Wo;K9>AJh+bF^Jp8qNL)O4x)cvidcZhr!-wF(tC^{SQb=>&;#l9Teb#tzc4-!P@U+2$^MwWv&gNk-cn6eHjj_PS z(1!<48$7s<-~5O2Z~i|rVlMD_=+=jYEE#qIPgf?iG692Mw#muQb^2-H$YjV#8RSpjxqxv7`lOP_Ps(5Vn4IX^=!+MM$9-Q_BJw((L z87!=kjhq}TMo7VF@Zd2RFHki!gZMwn_*pO4j#P5MTE9;@&ykrddtZNrDHs}qlxI8lkmKS_s%FNUe1R(nMD4?aGr4rPg9j&f{m^Xa04Q@pUPoJj-Z0!q&KEE+X<4cSX42f_fu zljw{OKiZD!dG_ewrq7+#G9=?8}2gT8~7 zurq>61W$QpSe%p2U>LIvXaw5Yt(I6eB&ABGR^@Kfc)O6hF}Nm=X|%+q@jVW;$h`?- z!*SYg#BOCq9BGY*4_7Wne0Y`M!>c@ecvlb~{!O+P#R34d$M-1l&WI!ZBp*XZ4UV)2 zYtCT9W4Nq#cv?9B?gxaYYv(;$t!mxQM5SyQ#-+E9JF{$EE#RCC4+kg4=w)cFO^4&x1F(j zW|1wHjN=s9v}DjhwQkmc@!8AkZ#yyE$OI*_Sgh5Flz0#?vvIoWZa|V(SP8^ zosjW5fsE67*~%7yOo_8ChK!pyHr2Fl>=0c$3KKG3C6IAyTLdzG3odf%jgMN|a+@W% z2O;D4A{ZdF9Ds~dIj4|ufX^^&g%zcc@uK7*(?Z4{fiD`46JeLTZ;7kZdA~2hDDd?=S*th zrud)}34$+M*F4K+`EcC-g73te_6E{?ylD>L+{N*9a%-PQvJZ5ZXFox3zXquWK72g} zkW72A z;YaL2ac9uMfxu|N58aH1)6Fa&a5z7TbBmg@&G8ecAcV>p`eGEL}2;yPt26vBXwMu>=QpXOHB3F|0v6o}V)4VVYx95c zWsIhy-0XCen}dSzBph3moF=))hg8XVQ;CujaBOHN(L#g8?&77arwP#tpvCc7W3j0% zb|FxB(!*kR3ZAhYeRr_fFu6g6P!@|#B>+OTy10nDx1yt>zb#e*I9Tj%jDx{qQv+bY zj18&*sF_~B83SGUH2?r&i3T8u#cp)4*p0KmV!wxA>Ajq9>NW#d?C)TBc$jsu*i+xr zjRdp76Ny+Ji*1bza$FIZpcIeY;o`A73?BPE*wkVzpm=L39@|j>v>pSG?MAr>Ia*E1 zt)er6;IZQcx}OOidplbR|E8RS$8Px|<_&HE9v-{92#;-zT+N4yG1(8_spCRzW(P3Y z)MU~REt?^6m zU@YHmYv>}?X$COaT>xxm96&Z=Do=~X7KHV0cL<2X2iW8WMSAB)W4CbE^l^*<7QG*^ z=|^Lyv5{&Oz(Em0KTY`M6&WGvhg7T6GLTphy&1DdTT{}JB^4nzyn`?0S7RQr%OM^cEqw-+CEia^+His9<3CG!K*z zb4f&PmzecbbZlad6%n(-GCPHsVFe1K3B~B^P9bKVSQL_(##?G=jBttB^Q$N(=4OmT zIrMdHL84puH5x=@mLcW{Y6ueZf!mKk%ntf`_LMBp>)BEAqRm3d1CALYK*<=HRxCvq zcWvSY8QeAZBcNpbUxK?Xwy-*sT!g!>boA+biAUQ8e~mqf4}Z<6@ZqmvI@Cb<#rW%0 zVWG_Y<+mwi2l3Y)jjQWwdHi*oi@&BZBAUNb>Uvoye2eN5mBMjiAh1G1-V33Z;ID)GhCIeXl`P~ZZAjaI)Fr74__{p^zOKHb z8ncV`)|3NZSC<1{*V+JILrz2Lx!Ed;kk<{+R|=TYAg{YcU)dGVSEk()#)km&Lxn`* z29VcX&{wK0v{XtP*!2wPi4NcCg0$_xt{b2O6`slPaWx)An}kS|)(+x&Mmb%Axc=g| zm70mTt`WqwQgTDFv@SwimrCnHQj?+OAmZAQ*3Gk&)_1EyvIZ-sL}C{st~z+}IxM$pwsqYIpzS`F|fb%AN#Ho8Eic2^UG`_#Lq!A;+rFbcn|^4w*`@u&m3 zKP+NJ5@$0TE6{Zr@-oQjShis!-ws`2+i)RvF4i4W7f@g?15dBxkYjh-WetCg;=~}S zG09*D3Zup~SuZivr?CjmyePH-6)eKTDJXEqJ^~oEX^tCP`{e^RPxf~w5T1Lg%Wecn zJ0q{B*3u}nG2xHkn~9}uf}kLsssqyAs37f)L6G*r`S&=HQIIPX3O#Gdo~e2B?{Umu zMjajgA*x0iJ|xFRD2dUBGVew|`MQ!ADev1TBqckcyDNNYvY`_OB&aMHTPM0K9=jni zD?B!rx<`LSE97OuW9u>oBwJ@)P}$n@D{@#`4FqNnk)m}$x^5FLFuOs4*>%1^-E23? zZ^MTGv#SWqej6)EGf=mZvLBee110nKU4t=(v7{K79fv}V3t55L7h++sVh@`uCLK1Z2|)#9C(!$R=x;1t7bj6p+o~!aCo^5A+{nfX$)-WYdh& zV2#2?L-M7LTVizQue(|Y%K`rm{n;Z@q8ujsp$|Bi>@&{^NA6w`j+}CCICAKG{rB2S z!jZpR6OP>Tp>X7Lm+3!ZvRB$`BdhFZ?nvXE3zk({iT-)4UOu`BrUu`3vEdWtD7yjDbl-N>xQu-MBFE@*nn z8ajw2Q@?lJGWYyCeeZ%}Q(P%)tY1;F_IntE>_GU^Y@NO9l8f#CSbdi}SG-_6_a}NT zT)E1AHoM{xdqrjLqIh=sf$WOAv+MWTiz>5CkJ*dDiA5FJru&fzDYyLkY|~_R_5S>4 z=)2QYQGdi5K7=uF+M8Sc_(ap=xH0Ga!~{xT$gCm1Kv~4PYPuObVL{*H)|kXGUcT2} z@mT2I?DAXe*gxjN^;AcV;lad@L;tph;j8Y;UvkrLkJ`)cCvC4kkXSvLU9m&7lZXX= zb@j3{_GVX)+f8?8S8UI&zx~?S>#PXMjf2mpk#b?(kLam$k9FH!FWd!pnWiH^Qtq{z z4%q3cY{OoA{f_M5-taAR?e({#84n$>mv4Vz^38W`3S0L2M{Kld_5LOGXzS3W1fe$F z96G|qyZ#Y$c<6Pwb*T;}#&6>jlW4UD!~a3HiR-=+R;lHaU(X`PPl*q2Qd4XQ6-+$Uq4*w+krA|J#dWU^sg?({2@#E}g+ga>O z9lU*MWp?#mEx+z0dub#)+Kt;&74}`(FY(IOr>_oY*N>0>BvWCZ1H!vu>J<}B+?2rK z;s*P^!#|R!g-thvn)YUwZ?f;RS3jorat&|HF5i$_dL+Akdv>&q^)>Au9*<{72XS5B zck{Z}*tgURb++$zY%hm@4nk)q9ife;?0fN4szr3kCY0rdt*?ZL`L>DC`{j{e95;9L&tazc_E> zUA6d#*IJcv~i zTq0Z@2Os{0y?npDuqqcmVz1wvUHp{YbW0j7sBhY~_6CfM-FN#GxX=FK_1or5jP~G_ z?1VM;-`Ik0+*!l6EZ=NQpn^WXg3Em}J37FoEd=X(#GY$EkXSyR{Z0nAvg_~9 zHr<$AaZ|Q$E7pJgZ`VcafM(dDvRC;s(2Kd+0&l zSbx8@sBc4P^R^0f<(p0n(%d3`4=slV@vU)k%ogkG3hZuhZmp+hij z?91QwRXOBmo35{Kx_NE4y#h_Df4HA;WW;J%vBhp02NBq~Sp8W2!T!j#bI(2N#J*SN z!mmANY5iSSfH_=mued1}w(4a@`%kxjWabug@g!y=dnczABbo)1>f1UM#U+-@ikmoD zeOpn&UOkD;7p5GW^Pwf+@&sV~jN|iY;_lOO!UdOB z+3Rl+F8GMyf}bVTkqh2PE@-d5KZK5~er!|tWGwt#_?`9pt+8v^+FvK041I@%ZD9;b z-a~JBj=kTW_^mzR@`Y0_Fnpm2D_cp9?OMOTxM^tk!#{W02OeG0I$yg?i)^7ld--O- ztHJz8jvznKsx|ZpG^KD68@T+)?cc>GJluYGaenxGZB0P>8Tr?Gq5Y$YraZbg$6j6` zG5A*6eU+>1bE5XM4<7(eM`jaya^ufHTVOf+5C4daz3-{h?wM!;NC2DI=!u7av@;(? z0D~3xXP57_Mn*t^yB1ss#p%xM;)uPtlHV%j8+h%}#ZmkHRoI*@Xo~bF z?A4Fk>m$*`rEoIZ58lOF$pvi zkzxQBuu_Yb)r-ltL0JeGnfLpgduI}m?(X}`=aZQ`_nv#sbDr~@=RD7Ip65Bd6FroC zdHJ%XJELcTO~MNfeU z=4e?ZjMRXP<;ci42pQ~YwCd@}@T~Zr=6pSdXsqjh#5<)gwRI&fnKkb=0S)s_l1UqQi!76_C&BSl2rNAP;W}KV{`BqJV zc`pB+>CBYc#&j}lZQMmwix;Kqhg5x`xvPK&YRH+l7Oh3E_ehV3+aln}I&^0+c4ycy zOSm2w=bf*nY6{Rj%?a|{r}o+5)zL$AGT5mqJCVmAZ&lN0#Rmi3vHqq>)Nfb$RdSb= zECf>n(b&G#lQF_}Gm;dFbvK20IFQTF(o=Pmrkpd2VHKk@{PX`XrJyl*d_z%mVbEUh zW6)xKt1p+m=3F0~;0A$|NpXx>w6I9E3$9GZpP0l)@(P4g1cmJ+iy0U%`BM22`@UW( z(#bx-$l?Z#i?9-mfsjB8?EQ$kDQMjkQsb-~6(2OaKD2HMs`+7j0po|G2UWa)&}1U> z7ZOWsO!AxOB1ZdnX_hHxFGTv76Tz#=E(;lxeCC_7rE%r}NZZIK`YHV^TR~ zi(|b_&cG6ERyR^3XR%H4^R|^dY7R%%PO&+@s3~GZ^6b^c)M!MivaiLDHoc>g1$Na@ zEO!k@1AVbW%@a1}*kAO|>8waY+3zFy`WJ^`AgyObo>@Ifb*JV^W=>x;&^^o?owfq6 zIR*2mDOB}`WjiT!VQKK2Ee&x5S_XM1&zu_!c?7cF5mll7q-rWc1iC2*0~{Tt-j9sZ zO+{*b7j?=gT`HqAMb(^ChiaWkZ!%2Gaek1r^Sh6V#Bow2j(9;drRi5wE~7MN%IoZ8WT>3g1C=pThBFQJ>u#W~S9&SYGoV@bL3s=6f@~`js@wPe!{Sij{tg}BJ@CAA& zpH=n4X4g1MnumOIal2VM(zIv!GPO_ZQYcL4>r}K?XSRfVFqu?*L@=2grx%oEqIxZE zR9}c4N?fm&1p#ScIQjuOI2J}=7D{~A)`qQRA#*s?JkeSUpQHlb_aRJlXD%;M%R;Iu zqSk_kP+(_ZcdXlDw#Tk~>GW%{eu=AW>q|_C9thNjI6?5{Lsmls{crh~bnC)|1U^yB z?O=_l-VKfR>|f5{!d1>2;VhFEr~4b#&?;Ypb0a1Q&^ZuZ<#*#5yr9y?T0jAMFo>obRj@NP^Yo&QNS^QPZ!! z1Q104p z20|C7FNFQQFc`-ih5N@6pd=G<4wM)IiU7vMl$eF@@HN@Hpa<2d@0)B(Ftk8oa!@{$p=hA~Y zSRn16X;jN8sk_`*%nEsznh;tNV#mL+SXCb4^yWi!YWVRW_bmC{+wBBmhryGz;859> zr>bTx9l=$t?L?xWakS(0Bcq+DE@5D#2ZQd&4!I+{COfj*SLl)TUZ;oECAv6Vb}_FM zrYYKA`Vs@mo>%2->VQ|b^Y`wHvNCd?*?Ay?V~t-H*Vh_KPt9sBTwB;^-#tBjom2Mj zAEc}7dxH>Cthw->|6I;sc|ppo5_gPFpwgFS)r4hKLrhQnAg!uGF=zuz zRk5{f8r}%0Dt!VSX=SIZti_*)Mna3zhum55JzZ;14Y#F}m#e+0DuKi2$Zla)2GX^U zrI}ko&iMWhw6wK$dUlDId6D^}f31UJ=*`+UFygT+Hi`yRD^fOR{v`{a{WL|a2gOui zYrWHI6HCDRKQ>#Q_9gxr)4;RZ(wFRN+bhb(``ScJ*2YR~BSz&3ivr-yzU$1h zdDMs~G3N}n9kXSZFL@~fPRN<&4ctE|> zqgn>j&j{o$@tsT`LSk2al(BRj1BFf#CB2(L?`DA4lquUM5c{?28L>sho{>(uFgMTT z{^hk7G&#|2GX0F8gZ4By9wkojz|oCbZq+Xt8xHCwj17DFcHvy*t8_|vrw-rXzN z2Qzm?%$ECoiD2oefxPI?Mew$ME|q%263H_rnYB;}6GWfZYTnKdM%li*NK>}`jM!4% z|FJdq4tFxuj9~bhG1pUYYeqDAxQgZ#-d%SF3I91Z)H)~zqS5m*MZ`kG4C%@n+4Gxe zzff{N0GYkFy#HhN1!t-?B@Ns!_voq$2iwGzY|zi1Cu?k?op9WeGMBuLZ{kJxh^#fz z0Xb=F^)#rA$QgZ{)DjL0eV|+4D8{NrC7i?jKv%3UA!aHz90zW8`N{so#D?^KSwTYj z_C%-RFEweg!7)Rx{CWC*G0os?CY(ef*mhC1&%(mJ*ZIZEnwzMbr<>m_WXe81yf}n# zn(OdICFKLtoQ-GDqTM^jB>Y{tedqR{{L8=mi!qI>({FXZ8(`n4TveB;n`atVb5A~M zDJF6EWw^-9roU`tB#R%H#mZh2YDo7tsLx6N+2!bBq|yhEf0*krn{2Y_I68YvmINl_lVtZIf308db0(Kqcp%L%qN~n^}9(g!x^N`%$ zAR@gHaed)=?@4}|gGFi&;yLKqP}0Q>5K|F>4>(_bSMVYZEk&Z#UJs>j6XDKw{b@`0 zr?(CBvo^g=DzDR~%)QQ2Ul3hHyy4_6qrE~CQMS))ITd;RwyJ~l`5Qr~_GVdCKc+gQ zKHi+JI;0_~W57_=;?6l892Rj;HcVfF5Nd(q0e-G@;L)|tvxnUkK}LAEbM;s((_-;? zEv9+HytmeuEM6sj(Y45)POZ~?UM*{$`(LB#`r{c?6$q+ksK(jUERzGI5uw3om?W%ePUj?#c8(qMZY35-nr#JVQk{{w5y=C zw~RJC(N5PI$u}mg^LSUaoHV^ocvtQMK7cC>Tpnu}3yXPIxi4`gleZXJnXDVPJN3F) z^nhSLC{?G|Nq@|)Lh1=g|G3Ac7HRPr=gpbs7yQXmbBBe5h?x2*b6t zDa>c8-N&c=rP_nul_r^H+AUOjp>;nayQY%9RyqsFT1r2`zb3vZdUm@)>4mgsG8Us3KEH|Cb7n~Occ6U3IX{-naP~=zDl``-Q&P=9=oU?*~ zzlBetWVtVpuJqBHT7JzV8)#3h^XRpxp{%j;Qn7ia)9APf_R~sfDQH)R{DdNcH7!=t z1Anzt#UUb-t$e$>*c&3sWiZP_0Za(7OtJyr)242oSK6f$1Eb!JuU=woFab$*|A}-$ z?1CYg-No8%bru)Q=(au@DSlQS!N2J7%;;|O-X*?-A*o^t>lQUQli@7`lcY;>tGJGt z)cD*!^aX=H(1WdE)jlh_6-i zievMNnlA^t3C>iIAi+w$%hKh=>4O8Gqatd6bC;K>dDHb`DZ{*k)nWog?_5-;wSa*z z*t*l1s5N8pMVz6kOK7`L%u)9+E~8Brs(D4Rd4(;PSc%T*>GGn1Tg@HhS!1Tu&f0ne z;#xB)w)LodUjp){_I;2ZDCOb`E&!wbE{cwV;i|J+*KyN@Bjjwn)fM|_+#{az25h#F z8vK3?nPoV^eI>GYhPblF`P%j8o5i)h6cU4jp46x`P!S4EgCf+kt5I*jNml%LsN%po zUpXD39sx}&J1oM7SNRq@p_>FS*K9Ce0~u0>+g=}IHjq8(nTU;3?B-&-$^m?_A^=_? zU#-1TtN90i@)(-j&Wt8EDo+g-U>db6azw>$Xf)6GjrDKy279bK%7K-b%{eEuHidzd zC2l`Qg~$4gHXY^N5?T2e3<`1fipKPQeXW7EmJU0$Uv%L%Fn27zMXpilh6QwELz{He zo?o!?elF^q2lwegiieO-Rs1C5WOh<5-|<1~`TMy{nJf9Eut=?!nCemaHBf@ggkrHv z?WL&Cx+~<|{Vlg9HYda8KS`-`R=}z3>C`?Uk;#^Ay`&uCeXnM5J4k)TJKLR#~z{C zcXe@Nth%UK)=k)bY6jm_nkq|I7rQ7Mn30vjv2_r6pz9J>@tJi{!8mQdaCNp{)w`1y zm{^#LRtm{ufvye)x@(;jNpyv~32{{iMOrCGR1V1=8lXv~fLa~20KTgWO$)@IS4QyqPL%3rD@L#E&p3ni90)qWfA$J%e_v-z&Y z>JuW|GAsqIqvSB7<~RY9{W6i8)Q-ol^?&Wcsen%6vqIM`KbyFwn?6(kC%O&{Qv z_qgdz_lYM<=;q3;F|9T|g2mF^GtvAA`;&OfhB(!(=Tb6XO?3YCE*wPmI(cIF zstO9*lxe6Qk{Jk|n2hzqunCa=1@(P_+}!C;Txs7GVob%{)0)z}X275PJ+lgu#cM|7 z=g^{zwXtN0J5UQlPPw>LE(|+Q$lO^Nac1yanp_7^_V;C$DEEM!8>H&RZu{{OnG@dR zP^QqmY8e6`bZV_P^V}tg=d>yu%qrs_De#C}AiY(Nwsm?ckv!U^KIAp(yC&0n-LBV< z3F)nZicDu3-5Sm>86Of3Uf`AN2bk;}b3X09FlsSmJX#0)X*6pO5^Fl+^P2UbSbQ2? zOVB@-b8RP!tTt^)_=T7yP;8Tr#hPz1Hc0k6HJ*L>s~A2^c5Tm~tf}W^eC&le)s}XB zh`nO8Zxw9Km2uVVRejeR*S0e1bInbz6^ahb1)U}KohXCu$YxiO-_xveZB^PprR$LP{LI10@kpp1D($wGRrXsZe{o~SpL~btPW`jM~UBGIcS9fbAj}3WH zH}M9M6r1z6%h$j-S@DZ;0IBXapBL`H=D?3!!&kBpr>xh+yXR%+J8T(^E^=(b*moDW zgKyp`m@|b+ZEcWZ%ZM(Cr~QVH%m!8uUxFYe+Fw(90lyoWM)N0%0a8<93Ky?}SM zi>(lXN+Qe;wV&xI*u0rR|n8>d)E#0zZK1@4U0H&Xh>$^Ye;u^ap1D?`l zWpv&0D*gnoTy0l>U=9b@6s1erX8tf3*^aT*H!xWn2nWL3sTTv}cGf$e(uSeu(jxWnlR-c|WYW&EZcpREn zO8ayWpBn8a;@v!ZS#yEic-g?m?S>rlY(aDWbFwxLj5E*D$aB(2DVAd6Cx^_lc!Z`( zhu!+kmM4A2h7Wn%{fBYS@r4|iO6ln&KXy#vBW0EgPWUt8{VB83`(gHs!*}#0<0t*P z%D&QW^KAKZvejnH?X$F{4u4b2oJVzq$sgVU;Zl5?$quIJjK#fyw5&-oYc`-9`700NY5c>F8saPntL z^C{PpMQL;@jY`X`1rWDx%Ur^B>`XIeR6)2p)5=z9j<5Mrrb`aVuDhM_E)yCUH;Nb4 zER0Bt4HO6kG{OR@2CVw-vS;4C(x;{A#3eXhs6z+d!e?T?`nfcLx~CTs+0|o*-*{@T zdG{@TF`had!^h*jz=>JffN7Wy2}pWbVIt4SOeEnO!Xrm{-Gubdg`s6uf|{E1 z7+$u#e#=!h-14#>u<16_EpK@(!P&J{_WZdu<bugf*1?DQbY+qe zOYIWSC-@Kw#rHtHz)#IU+$sM4kJFlCSY{UwFx&I__y~5yMQU**rOnFRf%Y<@jAb$) z{1)j&{!*q$Fz(eI*(=S^^wYbt_wLDFt;=3*@UEP*Z==uedV*JAqiy2_sWro{srTB? zxcw#1&eZP*Bl2J5{a?m+Mjjn3WdF&kA3`MkxvX)V>i4{WHkB<5yam}V&Oz3-*mBaa z2YT@_?f4Fwp85RK0>04}=f_uCMnqPzn+s$=UUl)nsu{FehOGtpmE5wHPj1PkiB zf=!;xc3JY0{BoY9g1S?3RhiFvKntl`0(S@5rqKZT@V`;QHYMsp>Pq4ZdD6NsPmGef zZq3=hD;%7=!*X|m-Vb~rZ^SKPEyyeL%pp=SfZ~&Tuswg$kr35yJJed zyfi~@>jC4*0<VdqV zNEZ~ZA4+Y=(;66{X`=IgSF{b6pdOdKP0JJ-93>%YO%%IA9QjCU28}sA_>Gu?OB|Jz zV0Pd$UaOiGUGjA)&!u4Nd7-sreroPaN~35RZ5@2i`mXe6^}PYO{K9EY+gq$@4Kr20 zRaMruKY6*HN4No`H43uwm$`OkU~D^8mDa*}&6jJpwvU$9E5iyaXFFC-U+HhN5CuTJiC9n22Vs*WiDYTe{OjS*bRTU(D zW3HXCs8N;3VK__lUd!6Us zgF)u#13(z5I3N_jF&D9W1Vyh5*3fG5mif&K``2bv4i!sW)MAw9ru%U zau{-as8&k&0@y6)-2mH)kBD}O|6FZI0`=-gTVbp+`sd~j&4!a# zn>+Mcv!+;Wl1VPCJDg)}k|iZMNpGci1MY1HjwNK*eC5VlOxOMvR?Coi?@ENL{h-+H z2vbWf_9kyWE)BCk7B>d#|22=k=Xl*aI7a0ioMqyjO}ci3Nf_p$8*%E z>}FK|j3U=iF?X%~EzH&y^JZ9Xel>yFPmY=aZ=*@`5!C2z@ zdB*yeg;e7sYVN9P;G`?xx zvY;CbJikXqIXDpoFh})Lb2a+vTswSu>`a2hC5f3NGAoOnXy&{@4|89MyH=J3k#d!Y z%x0QFVr`!n0VENrR0|^Wj(?gTiyDFC$2uAZZ@7^4d>0M53!5gx(ber@BO>E*3_qgj znWz;EU(?JNg}i-<2u9oR_FXjMy=uOwX9ARoX-)eo7;UqWP4xV8Z^WuXM*B3mw^;yD zkWg|08(RS}(R9eI%&Vf6rWsvmTYMs9tCIgfmBjJQh&CWBu;tbva${7Rt784US;SAD z>NDo-mT0wm??A@EP)B-hV}s70uS*7c%;92V{ZcAd-;*gT`>E(4O^q%DX3x>mQ-L1U zM-$WRhGOU7A%K%##ZxznHlpOP>jJQ;z9$;V)Sj5Wo%~{~CmAn&N#LMv-S+X50+8o!;;g}&`T0490dRBsw}0J7KI}#^B?CxOZ%q*$v|< zL?D}HzQnk;*EOLTm4{gk0(o_{E|vp&ENY$CKF_oOW2G@wVG&z=>^KkBT_ZMBbx%22E+g5EA- z)v}#9|Eg|W-^@4jIS&y}V0@JGEd1TI#WFLWW($jN3F8G?SyIA#LiL(v&d+Y_4_-wjkbR=k6O$3Q@RP!`r>q`}}?$zP#ua3@4 zbsGrY-&t95P3cR$l_ggT#-~|%cJqhwmYn@OlL05a!P)|KSoH)7Hd~dO%PV3p-}9dP zDnv7_?bO;Tdz%1O`g-6!t#2D!aV++4e0gpT4ci4BYEF6QeKW;TAU&tt{2+MG8-i-H z2lb<58o4xQ-m^pMiydg0>efU(x(Ykop(@HdAIO(?=cFsjV+Zc}4|Tb#=d=3_ehLLo zbZ{nKE7OhkyI~^tZv^`1Wv;2R&DV4v_}#g#eIL-70_!%wnV&Y#2K1b^LL!4jqnln@qv3N0iLKLgPof5mof&ZZY`@=;jQ& zYz|L~as|u)j**hD(%72+NT7SAAHifY*wh!y`uNB7te;`8#>aNpzSnOxjF?!h`;Sla zT8w&7gMHnq@uQv)X%!iC@jeiqQ*M`4(66Fah?fRm0faJjMmI>IOp}$FCifR&PGRsP zR>MhYuxi+A^H;}Z5fDsm9wD;*I;Vw{(Z12<8NzK4B1~Sw(4HBDh^w9gg_m&>W*0zj#W1(qj;1ZSpj5* zU352ntt{uJv?cH*zbg|Gx}i(~4`=!lB}Em0S!6u*hLD~AHjZTy(p%py%PBkD-m-^& z|Kd}@NSgnve;SO;-Qs@BwfsNB?+gdg@(qh=4{DGoE%8AKBd}-ZVQ;irM(lY(a*$sxBTWSQg-)Y6j*xN8nO-_8~|?LpF@h!h*~ zfEjY_a~d8(1!(dDXf_7xI`gDsEk~-H%4}utXBrzy_PCA3PSdOAX{TQ|e>a7w1NDkq z*~??QrYj>rcckezs^(~{<`||6VlmRiiQMgjqij*+?bg9Zp;JWlajFNd>;{;s6V2hV z1@XBJ^y0%y)Rly~en`-kE$Z=z^RD=-ZR@gc&T+$Eo!2rqf^H0;)2DB+CmzO!-xiZ} zREG&hb-1kQyHr}q|R657V60!v59}Ti3I6wMNG^RPKh=5-VxfbUFV>C@z|lCatZkm+5E3 zwW1fGL=SrK~ZNfBlk+cp?v&6t+hEoZ^ zdetyrpv!s`t)(PnTSx!VDt8ezIy#_BM~JoNCjp%h=3;*!z6*>%nTv_&g@S6rGU|h! z1TX5RTR@yV?etd=Z;G^!o~vpebt`lW5AnR#*m~Pyzb>?apf*iHfu)aTD;ya+Lu!tK z5Gfn)BJ^GDmdc2P40DpPR&6O;;nyL!s7_Q~p=#F2qycI|+Iw>@QaHX2=!hQ9zA&ik z*U-Lv0kD;|{(#IQEB>h4?+ujA0G);SsEYvREr`h|LUzx6+`hhdkE3rXJ{MNZzKV_m%g@%sC;;*_P<5zaI0Y%toyHzB0oPui{6(<_j z=-|Mwbgbo=(ZMMiM5GVJUNbtnxU}zrPjy)>C!N)+HSa(yIqk)uBw!vMV+gAjViX8J z7KCMa)YuW|%;Px*371WU4-8N(-Ms}i1@FPnn;tLs*wpxJQ^a5Dco!x@k_hb~G<#uG zU5=B?K$AS;fwKs3B)r|_n;t|NI%MXK9C+7lld&M`eHS%t3^sP=RXP8Vt?d2L=3W#m zB#$&-udCgasg`vD;#S@O!;0xdqd#!itqM4Kr|CD=Qi6epRPq>OX7+waz@qbc8Uf|7 zUr>0?gZUm^d4|2>H6ikWN^T(#y5&j1C3^-gzaMmILkM3chD?dQf=oi%!w3FAGd#cB zPde%N7K+?WOP%@EFb`)(B7>=xG06M}z!U!P*yz(^9!xi10Mq?0JoN&P3ys?v6M1MO zz|c%`i_`d#ie$`OEQ~-|&DZH_w`B0h)IT4I4H}6JR3}JmIVMOXL&K12aiDTD^`Q{q ziRMgae(OQInrbt3X7~@J0{$L84}Tsl3jXRk13Y(WF@wH`LEl}VPZ8>(=jhtbxqfqJ zj&pCe#ie7=_o(pBJ4PQl9yImR$rdLAP-Z*@o_c{t@aIvYvY{wR;mg5T{i9=~#Tb+}^@%y}!q80!AK- z#eXEXALX_V-q!mSaYEMbPqNQjoXoW=-sE1_)ShQWewmtT>&-;TWa7X?#?;}?j z*Bn#zMaY>o#h4q&GSCx^7b3f`5pN}jjff9FbR$w8F(y^ufL~5*Xa$GX%&;nE;0;xC zgjge^{Y$LRgd{Ev8Cz%1reo`=VacW#Y-O)Bz6+v_zO4I)z4E}@(Vf=PL1Is1 z@x#XYV%}FZuWGeD@Ul4KEr5a}s;m>A5IcA$D>zHs=o6gSbj9*jT3GLo2L!Vdv5-dgE96#UqCR-1mRN{DFY=HZ;Ai$Jp7I zxQh}w8U26-*UeVGvuMQm>q6NU5;$OC)k(5gQatM6-iK%s7cpc-P}i(tA({4>}v zi-FknoGzO7f-cD+u>!%rbLqL>c-l{DpFI*>FD%BM{oVI}GVqIx=HPzo@hw+=c04#X z;n$KxB+k;`)rdM^?|1^$)+U`u&8}6%;_b29@8rfRF&iIozEdnl^03|hBe^$|yUxAt zEwg1POgb=mcheDVb!b0=!;M%SK!HtgU9FAD-mMLL&8@ESA>O6M#+!K$(K;4K68M5# z1JQ7<7O7{qW6^9!y(u60qRFn@X$-ZcUG}YhD}Kycin8O6y|(((_CpC?;{a~Ge)Zam zf`O(Hjn|i(;Bd#Jqm<8=gf9+BkXB#6Vg-|XgNTd1jgRID$fT}N1s&KBh_ol+eB9~W z&~SuW%R3)!_zmB@DJI{2vL?g_A>f*k`6)zJ+D+SQ{IR{OKkf00_z^pN6_MV-Eh4s! z1Q=N|N^PmasQWu!l`T)^&`|V^xkBnkFeblB?hA8-swnx@17(5!uYRycV)I)Z(F;YY zUt#?1%i^xo#kGWc>oi8FdREP0yX-&voYh(b&1BE}fC# zWUOYS`7@G#guNAVXFo?%gtgTij-FNpe!HCQBjId^t=bV$ng^sD{l;hw9A9_J=9)ca zlHmg5_|jL6^@XAp#0LqDW>0iac`c3sv}Bmi3Djm$5tj}+Z)qEttGfJL7!84j1y|wEXaB{A zqiVEhrp8u8HrD^IYW|J_>#3B9d$UUylEOvwq8^ z=*vT*FH4z6+%k{kcxrRyBY5Z@4h%VKX_Da;wb|_cFsq_NKgmt(oU5h7lrwjpbLz9O zy&*BO-H9)r{w*sF`g{EmwOg_)(d1F}idH$uYKR$9w^@-B=r^`jNOKm+vWA@S1r;U9 z?{%2Y#ok{tlhAnlMc$kuxK4 z^mpd1`)0tOWQ_or;en5#V>eHdAI}y;?tx)`8`Wq2TP1u9i_`k}12RuW^>M9|p1D9D zXY(tCQZ8%I6V3|!=tKu!h|l*1=a$Sb^z(JjP5gq&&E7mpM9H~y59AuHS*PL~qJ7A` zZUP;xx|+xH0`YZdP)cjuW>)})C5m>zOuHoFET%$}3ghY1eFb{9_&tg&=SZ zxn1)B&t+>3#rloE8Lj+RQY8L_s^5aRCb^)5^{|XwAP-i)0rEHUlX@yA@ORe*vqm@kz$` zqR?tk858IIcU+x%J36)Vw)bNXVeeBS& zdgN`a?jI#d+WqrPbz(!HHde@Fx3pP*EY=d1JV0aXmQKGlMeUYFe3*WR%@t(t(Ue}1 z$19p`=A+B=_PN#js0Um(qdtzlHlmrO#@WU>!Or}3-^%wVF9BULQ3ennk0F;gV@#iu z7wFqA%#Ppe8i7ZfxxN0&qO(8kj?R7Ojm}-Hw|aEo?<7`>>zQ`Z@#)Wu&mKUn=^ryb zdoCCscS3@vakP7pM!oU5574~vdGijp;Quf_$h96PKvm@J3&tng?sqcPePn$4FFHPZ z{=4z%A040m?D*U#<1_l&e>Xn;GCuu(Y<&93ZU%?NF5n#bYYz!xR37nW&s}=)b>-2T z7gSvH3%&Yg=MUUX=Fbb6@!5_to?(J;3~Ik9Yhi_6<+VuuKur`wZljD(3-XnQ%bh#k#Ij>=F ze4YS2Z~i>)6|DI0$A`>--m0g^=Yb2xC)@6#Om$-5J8yg*{^$``YQ>9ylsy45Uf;;>L=gh;aFSj6zz9%M0`)#hrDfIDWXS4X5vFSQTp2px7yn zVW)7jj)^NMI#B$u-0nZ$s?imT?~>auaC?jmYV@#>vHndijIE1;h}b>mn{1rqnQs**40Cqd>Cvtb74Esor zCienCP!@`iNrn^&-GSafpAPE%M=4Q1(t5o#l^FNzDP+InopKXFts)Q`YWimMgk3bL zRII<}0!?2vwobO{L)~8w<>8VTNX!){Uof>Zpp8G6eFvtPZ{^!_k&S%z{G9H$LOcuf zo4*ejTmAeB^v4da`4h|&fnP`8LkT@O@PDEto!H-fbdqG@GAx~)`M8|l^6Ykikt2rE zmSOHrdr!o+12#%uH_zo7>m^Mw94!b2RJiTVZ-pXecdqW4#go?S1(}I_-K~LdxgGjj zyKEAEa?yR}*+A1@8e1od*F&DkIa$Hdmk4AWCgCQ@PX?|qw#r^ez9ij8*r>|U7u3Dx zv*x=2vp0Z4-KQ|%8>h0tVfS=e=I^rM)K)3W~G6 zXy%tDfkY^kFGDb}%IwKCdp{7A-)d|fcOHmSvLIeY*T;Z3#{=>A0pcQJd)G|S(Cv$! zm^-jFiX-IZfJpnP>M-q*ek+wP80IIRe1!x^m5*^`&8K3h@u}6ZObPwSE9jB8n-Ehc z&I_e{0(7d}Emp4UyI>aF#HO)%HqYpIgr?Ia56;*pP7R5f>CZcV|A`!5di4zFJNkR} zz{j{>%>DKHcaifg{XNZT;=9558lU(ZiCYTgZc=$TvRzu6-m+^67+u%Jr}nN?RV6$K z*QQtBp{j28Zq4}Ut=k(Yp&v_)+i|r?FWZUzZ(f>U1Z$a=gdKM{l-u3EVYBNs`rwEwAd`BA?fn~-2crs%5M zq-znn#(Qzx5D_u(Jv~@;o3-o?h^cI)Lw89mr_&KJ-KOetlxTecK&?lFDxIUh_4}-e zUb?t}a@CunYN+-9okUN$y~TMk6KBT+^m;7~Fd8IVnk}`bsb@_zqm){}H|kgO;AfuTdGZc;>$cBkZlh$p}n{&JC&3Kyyf4 z9%#e>dy+`rDBPR_Q^W`xA8x319Og0 zx6^Y+qhI-%o!FT^V86nD9G});X&1>*TklWe3e}aoOttRf>bV)Kb9{l;r@0LDEZr$K z@my6Nl6@Wf{=uVgG+k`8#GdW)#u$%7ZU1-k@k#95V&jME{ZvOM70O?#YUcr+B+qbN5d z$O~LCeM6}ZCwp&Y_UZ}mD!ZzJPsyy?aB63M@)~Rtt>*;cO;hlh{x<8l^>ab3t>or1 z!YKJc#)+jnmyzF6XYG~ot`F&K5)BB1l1`$LU@da+%^^ebN_mf55`>d`x!58f(;Qur zWhIJ*$&nQcHrJk@W^2bid^#Ve-Q}ux+0vcMSxd*{2F|XR66l{h(h!Q^LwZB7G32%* zym#1n>ay&*n9Ory_NAHOk2Lc$%u3SC`A0rz`Xc{kQuA&C8GR%r0V>>hHLujgsZayF zSbbk0ZX`6EFKPdzwKU{x{|m6xF1TXxV-q>mE|29e)t;r#_6!9w2``gS_t8{^`wCnf zZ4#18>5AlKmWA=^At65J6mpXKz7PREzc;7=bxe>tE@#V1hs$$Ko>K3}z$9m_TjgRW z>0YGTGZfT7(Mg$-OlLP0s#D{ZTmB`6U@V5f&r0bT+Y!9vd}5qltw#q*@F)DsouZ_b zC@^2teKs~cP9M|{jxZVFQ4zIGAkb_}_!s`Fh0f+UY^y=omiod?YWLJW>_cUn$z%pI zfd#J3a;mD2aH^e&OF%;I)ZG;WdvKtXxQ(*(Ho?1d^{uqqA?-38sgBH8SRD`Z)Y>M{ zr8;CZkhwDKF~iO@KW+&Jn`W|Ot3s`3rimg@LTvKUp&M$isVPhpww@8CD-mfuqm=~8 zhz^v@*YkZTr^AdQhgtw2Q>^mc4JX zV(DyH)y0IXT#^m$L2e`5Zp=CX>q;y@vDE#Zo9T7(Gv=8P8xkSv$}GHdg0e;F9ix+~ z)+c9s&$f$L?_C>P6O+l7jRTI`+qa7oVSJml$U%oCaH5!6ed@wKpOQY~wjAgV>?8@h zvHoA_iB-*k6q2ASvavjEZ0*BMwMd=l{#r>dxUM{;B1&@ufoNAXtZ=G z=b{=vK^-JKyt}l|JX_Ao)6@xm34nOiM)1})j3@U7O7gpp2kOK%xB=(o&Oum~6a~OQ z-y{}XhJgThiTL2Qyv#Oa;!63LARCf}s%$a=aRUX$Ho3?l_IqpD6+y zutbC^3oNqs;wG)rb49G1MK5jZS`%r4-gUHh9j1wIg>eq3Bh(;V>paOu0|3BV!rFu&MJNESNVAD3MBt|AuE7$iW-O!hIyHtLvbr)I zH3fz#9l_N)jPWM7>0Tx#gMbTYxevYB<1ER`Fwr#q4RWhJFBI!*T8buq>p(?Aqch9` z36C_-rq|rslxq&3YhD!Ci8p+h_=0fL=hjG&+O_JiR7oeub5Tot(OjVdmZOkZ9wtRk z1kTWO^ZfuK*^rG)=Q6W76PlTUKjaO_J=wOKKDI{MZZh0Xfq{!5f%nPVcS3kidaFn& zc6%3`xDm3iV>cYsY9|V@AA#d>nkz0}b}Ja(A+m};88LV0r3$rpuk(F8iB-F>atdEM zt6exaFCEpBP``APXFd||?O4epU-DWq+NRpSCN=TX-W1}>>6p-F`Kj4*#Fq$xlBVwv_!1?S z6eB$+p0V?a`<6M3oTB?A&e`X8n(Ynashz2~#M9%mGAR8zA1mVfMQ#!40!}nMPsIlz z$u#fqN#fKvNzuSXCbZP!7o6KwSu!LHV=w|g&_qn6!AB>oE_y#Z2iwFLBd31-EgDeiehKsKu?rrQ`DScga0MKdl^&cGyT(U% zN!4q9p_Bn|S@X3G29yrh^3h#fj*K9@DmQUdNljH&>^i4QCXcj z0F$sZUvV8{u$cG)x0RGcS?u(FiJ6AfcX8L)Iv-LGxTJnUb?-YaDO0e4|6YKl4cI#- zb}%tum}decmEUR^Q8mOs;GEF$r@V=ljI?F6`ME~3k1twW=j=I$HG$a2f#{g>c$S?ORK1iO zhefGvAJ+qy8(RYngfu>XMwYX%d5$o+Lp+d`#e7aUo-c8^y-^sR@c0JjuWm%R1}a$u z0Hf^`!M5x&fSp3HQ;0253j~Zgxu}^SoH7BmsExaXhQP?wZXx2!IQtr+euR9RCCTR4 zzU1Gz4Z3`Hs+kTp%{8BMnXlnC?}X-jke(GtMiE)eKLlC3qXZUNg%GhdGn-U>$5y6q z_SbftRx(o94mqS~^oekQj9e*fAR|{!@m>EP!N@B9KhA$ELn4z#=zGu&HY|dSIUM6X zT1?cMd)R0}TRY)CQD(D;vXMBi)H`f0Pabau^64poX zEYzN1_LsWMe!REQLS_k{O%BKdvhL0&Jℑ32D+B3b#om*Z{Y8$`~1Km+{*?LybOp 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 xacB+kM6Lh_lw5Ow)~zt2-W)3cKe`2Ifs{cKM? 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 z

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⁢piGYQ-44>I?-P{BwRjG3#)?@ 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

h7|L=YO+iV+4Fk&m^5_~ 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ℜq%CV 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 paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@original_price", Value = original_price, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@markup_times", Value = markup_times, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@extra_price", Value = extra_price, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - if (has != "0") - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - } - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetPriceList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - - string start_original_price = RegexUtils.GetStringQuery(ref inputData, "start_original_price"); - string end_original_price = RegexUtils.GetStringQuery(ref inputData, "end_original_price"); - string start_markup_times = RegexUtils.GetStringQuery(ref inputData, "start_markup_times"); - string end_markup_times = RegexUtils.GetStringQuery(ref inputData, "end_markup_times"); - string start_extra_price = RegexUtils.GetStringQuery(ref inputData, "start_extra_price"); - string end_extra_price = RegexUtils.GetStringQuery(ref inputData, "end_extra_price"); - var search_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_ext_code")); - var search_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_notes")); - var in_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "in_ext_code")); - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_ext_code", Value = "%" + search_ext_code + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_notes", Value = "%" + search_notes + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_original_price", Value = start_original_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_original_price", Value = end_original_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_markup_times", Value = start_markup_times.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_markup_times", Value = end_markup_times.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_extra_price", Value = start_extra_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_extra_price", Value = end_extra_price.ParseToInt(), }); - //paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_ext_code", Value = "'" + in_ext_code?.Replace(",", "','") + "'", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_ext_code", Value = in_ext_code.ParseToString() }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from bxx.price_markup p where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like @search_ext_code"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and p.notes like @search_notes"; - if (!string.IsNullOrWhiteSpace(start_original_price)) - where += " and p.original_price >= @start_original_price"; - if (!string.IsNullOrWhiteSpace(end_original_price)) - where += " and p.original_price <= @end_original_price"; - if (!string.IsNullOrWhiteSpace(start_markup_times)) - where += " and p.markup_times >= @start_markup_times"; - if (!string.IsNullOrWhiteSpace(end_markup_times)) - where += " and p.markup_times <= @end_markup_times"; - if (!string.IsNullOrWhiteSpace(start_extra_price)) - where += " and p.extra_price >= @start_extra_price"; - if (!string.IsNullOrWhiteSpace(end_extra_price)) - where += " and p.extra_price <= @end_extra_price"; - if (!string.IsNullOrEmpty(in_ext_code)) - where += " and p.ext_code in ('" + in_ext_code?.Replace(",", "','") + "')"; - sql += where; - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from bxx.price_markup p where 1=1"; - - //where子句 - sql += where; - - sql += " order by p.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List priceList = new List(); - foreach (DataRow row in dt.Rows) - { - DBPriceResultParam price = new DBPriceResultParam - { - id = row["id"].ParseToInt(), - extra_price = row["extra_price"].ParseToInt(), - markup_times = row["markup_times"].ParseToInt(), - original_price = row["original_price"].ParseToInt(), - notes = row["notes"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }; - priceList.Add(price); - } - var data = JsonUtils.SerializeObjectToString(priceList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbPrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.price_markup where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyDBPrice(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")); - string original_price = RegexUtils.GetStringQuery(ref inputData, "original_price"); - string markup_times = RegexUtils.GetStringQuery(ref inputData, "markup_times"); - string extra_price = RegexUtils.GetStringQuery(ref inputData, "extra_price"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@original_price", Value = original_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@markup_times", Value = markup_times.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@extra_price", Value = extra_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@db_id", Value = db_id, }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sqlExist = "select count(ext_code) from bxx.price_markup where ext_code=@ext_code and id!=@db_id"; - var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - if (has != "0") - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - } - - string sql = "update bxx.price_markup set"; - if (notes != null) - sql += " notes=@notes,"; - if (ext_code != null) - sql += " ext_code=@ext_code,"; - if (original_price != null) - sql += " original_price=@original_price,"; - if (markup_times != null) - sql += " markup_times=@markup_times,"; - if (extra_price != null) - sql += " extra_price=@extra_price,"; - sql = sql.TrimEnd(','); - sql += " where id=@db_id;"; - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddPurchasePrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_name = RegexUtils.GetStringQuery(ref inputData, "shop_name"); - string spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_id")).ParseToString(); - string skc_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "skc_id")).ParseToString(); - string cat_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_id")).ParseToString(); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name")).ParseToString(); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")).ParseToString(); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name")).ParseToString(); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img")).ParseToString(); - string discount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "discount")).ParseToString(); - string price_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "price_text")).ParseToString(); - string sku_purchase_price_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_purchase_price_json")).ParseToString(); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")).ParseToString(); - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sqlExist = "select count(spu_id) from bxx.product_purchase_price where spu_id=@spu_id"; - string sql = "insert into bxx.product_purchase_price " + - "(shop_id,shop_name,spu_id,skc_id,cat_id,cat_name,ext_code,product_name,main_img,discount,price_text,sku_purchase_price_json,notes) " + - "values (@shop_id,@shop_name,@spu_id,@skc_id,@cat_id,@cat_name,@ext_code,@product_name,@main_img,@discount,@price_text,@sku_purchase_price_json,@notes);"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_name", Value = shop_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@spu_id", Value = spu_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@skc_id", Value = skc_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@discount", Value = discount.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@price_text", Value = price_text, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@sku_purchase_price_json", Value = sku_purchase_price_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - if (has != "0") - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - } - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyPurchasePrice(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_name = RegexUtils.GetStringQuery(ref inputData, "shop_name"); - string cat_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_id")).ParseToString(); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name")).ParseToString(); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")).ParseToString(); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name")).ParseToString(); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img")).ParseToString(); - string discount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "discount")).ParseToString(); - string price_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "price_text")).ParseToString(); - string sku_purchase_price_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_purchase_price_json")).ParseToString(); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")).ParseToString(); - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@db_id", Value = db_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_name", Value = shop_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@discount", Value = discount.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@price_text", Value = price_text, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@sku_purchase_price_json", Value = sku_purchase_price_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "update bxx.product_purchase_price set"; - if (shop_id != null) - sql += " shop_id=@shop_id,"; - if (shop_name != null) - sql += " shop_name=@shop_name,"; - if (cat_id != null) - sql += " cat_id=@cat_id,"; - if (cat_name != null) - sql += " cat_name=@cat_name,"; - if (ext_code != null) - sql += " ext_code=@ext_code,"; - if (product_name != null) - sql += " product_name=@product_name,"; - if (main_img != null) - sql += " main_img=@main_img,"; - if (discount != null) - sql += " discount=@discount,"; - if (price_text != null) - sql += " price_text=@price_text,"; - if (sku_purchase_price_json != null) - sql += " sku_purchase_price_json=@sku_purchase_price_json,"; - if (notes != null) - sql += " notes=@notes,"; - sql = sql.TrimEnd(','); - sql += " where id=@db_id;"; - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetPurchasePriceList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - - var search_spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_spu_id")); - var search_skc_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_skc_id")); - var search_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_ext_code")); - var search_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_notes")); - var in_spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "in_spu_id")); - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_spu_id", Value = "%" + search_spu_id + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_skc_id", Value = "%" + search_skc_id + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_ext_code", Value = "%" + search_ext_code + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_notes", Value = "%" + search_notes + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_spu_id", Value = in_spu_id.ParseToString() }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from bxx.product_purchase_price p where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_spu_id)) - where += " and p.spu_id like @search_spu_id"; - if (!string.IsNullOrWhiteSpace(search_skc_id)) - where += " and p.skc_id like @search_skc_id"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like @search_ext_code"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and p.notes like @search_notes"; - if (!string.IsNullOrEmpty(in_spu_id)) - where += " and p.spu_id in ('" + in_spu_id?.Replace(",", "','") + "')"; - sql += where; - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from bxx.product_purchase_price p where 1=1"; - - //where子句 - sql += where; - - sql += " order by p.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List purchasePriceList = new List(); - foreach (DataRow row in dt.Rows) - { - ProductPurchasePriceResultParam price = new ProductPurchasePriceResultParam - { - id = row["id"].ParseToInt(), - shop_id = row["shop_id"].ParseToString(), - shop_name = row["shop_name"].ParseToString(), - cat_id = row["cat_id"].ParseToString(), - cat_name = row["cat_name"].ParseToString(), - main_img = row["main_img"].ParseToString(), - discount = row["discount"].ParseToInt(), - price_text = row["price_text"].ParseToString(), - product_name = row["product_name"].ParseToString(), - skc_id = row["skc_id"].ParseToString(), - sku_purchase_price_json = row["sku_purchase_price_json"].ParseToString(), - spu_id = row["spu_id"].ParseToString(), - notes = row["notes"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }; - purchasePriceList.Add(price); - } - var data = JsonUtils.SerializeObjectToString(purchasePriceList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelPurchasePrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.product_purchase_price where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - - - - - - - - - public string AddExtCodePrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")).ParseToString(); - var ext_code_price = RegexUtils.GetStringQuery(ref inputData, "ext_code_price")?.ParseToInt(); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(ext_code)) - { - return "{\"code\":500,\"msg\":\"没有货号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@ext_code_price", Value = ext_code_price, }); - - string sql= "select count(ext_code) from bxx.ext_code_price where ext_code=@ext_code"; - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - if (count.ParseToInt() > 0) - { - sql = "update bxx.ext_code_price set ext_code_price=@ext_code_price where ext_code=@ext_code"; - } - else - { - sql = "insert into bxx.ext_code_price (ext_code,ext_code_price) values (@ext_code,@ext_code_price);"; - } - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetExtCodePriceList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - - string start_ext_price = RegexUtils.GetStringQuery(ref inputData, "start_ext_price"); - string end_ext_price = RegexUtils.GetStringQuery(ref inputData, "end_ext_price"); - var search_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_ext_code")); - var in_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "in_ext_code")); - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_ext_code", Value = "%" + search_ext_code + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_ext_price", Value = start_ext_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_ext_price", Value = end_ext_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_ext_code", Value = in_ext_code.ParseToString() }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from bxx.ext_code_price p where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like @search_ext_code"; - if (!string.IsNullOrWhiteSpace(start_ext_price)) - where += " and p.ext_code_price >= @start_ext_price"; - if (!string.IsNullOrWhiteSpace(end_ext_price)) - where += " and p.ext_code_price <= @end_ext_price"; - if (!string.IsNullOrEmpty(in_ext_code)) - where += " and p.ext_code in ('" + in_ext_code?.Replace(",", "','") + "')"; - sql += where; - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from bxx.ext_code_price p where 1=1"; - - //where子句 - sql += where; - - sql += " order by p.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List priceList = new List(); - foreach (DataRow row in dt.Rows) - { - DBExtCodePriceResult price = new DBExtCodePriceResult - { - id = row["id"].ParseToInt(), - ext_code_price = row["ext_code_price"].ParseToInt(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }; - priceList.Add(price); - } - var data = JsonUtils.SerializeObjectToString(priceList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbExtCodePrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.ext_code_price where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyDBExtCodePrice(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")); - string ext_code_price = RegexUtils.GetStringQuery(ref inputData, "original_price"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@ext_code_price", Value = ext_code_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@db_id", Value = db_id, }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - //string sqlExist = "select count(ext_code) from bxx.ext_code_price where ext_code=@ext_code and id!=@db_id"; - //var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - //if (has != "0") - //{ - // mySql.Close(); - // return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - //} - - string sql = "update bxx.ext_code_price set"; - if (ext_code != null) - sql += " ext_code=@ext_code,"; - if (ext_code_price != null) - sql += " ext_code_price=@ext_code_price,"; - sql = sql.TrimEnd(','); - sql += " where id=@db_id;"; - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/BXX/BXXProductManage.cs b/KJDService/KJD_WebService/BLL/BXX/BXXProductManage.cs deleted file mode 100644 index 8c9f8d0..0000000 --- a/KJDService/KJD_WebService/BLL/BXX/BXXProductManage.cs +++ /dev/null @@ -1,3851 +0,0 @@ -using KJD_Web.BLL.WXXD; -using KJD_Web.Model; -using KJD_Web.Model.ShopModel; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Threading; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL.BXX -{ - public class BXXProductManage - { - string GetProductTableName(string inputData) - { - var tableName = "bxx.product"; - //var add_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - //if (add_user_name != null && add_user_name != "admin") - //{ - // var tableId = RegexUtils.GetStringQuery(ref inputData, "table_id").ParseToNullableLong(); - // if (tableId == null && add_user_name.ParseToNullableLong() is long userIdLong) - // tableId = userIdLong % 1024; - // if (tableId == null) - // tableId = Math.Abs(add_user_name.GetHashCode()) % 1024; - // tableName = "pdb.product_" + tableId; - //} - return tableName; - } - public string AddProduct(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string from_shop_id = RegexUtils.GetStringQuery(ref inputData, "from_shop_id")?.Replace("'", "\\'"); - string from_shop_name = RegexUtils.GetStringQuery(ref inputData, "from_shop_name")?.Replace("'", "\\'"); - string offline_supplier_id = RegexUtils.GetStringQuery(ref inputData, "offline_supplier_id")?.Replace("'", "\\'"); - string offline_supplier_name = RegexUtils.GetStringQuery(ref inputData, "offline_supplier_name")?.Replace("'", "\\'"); - string spu_id = RegexUtils.GetStringQuery(ref inputData, "spu_id")?.Replace("'", "\\'"); - //厂商直采聚水潭商品使用skcid存储coid数据 - string skc_id = RegexUtils.GetStringQuery(ref inputData, "skc_id")?.Replace("'", "\\'"); // skcId,聚水潭商品为coid - string real_coid = RegexUtils.GetStringQuery(ref inputData, "real_coid")?.Replace("'", "\\'"); // 聚水潭爆款专区真实商家coid,供应商直采商品该字段留空 - string real_spu_id = RegexUtils.GetStringQuery(ref inputData, "real_spu_id")?.Replace("'", "\\'"); // 聚水潭爆款专区真实商家spuid,供应商直采商品该字段留空 - string price_text = RegexUtils.GetStringQuery(ref inputData, "price_text")?.Replace("'", "\\'"); - string main_cat_id = RegexUtils.GetStringQuery(ref inputData, "main_cat_id")?.Replace("'", "\\'"); - string main_cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_cat_name"))?.Replace("'", "\\'"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name"))?.Replace("'", "\\'"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code"))?.Replace("'", "\\'"); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name"))?.Replace("'", "\\'"); - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json")); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json")); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img"))?.Replace("'", "\\'"); - string group = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group"))?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - string product_get_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_get_type"))?.Replace("'", "\\'"); - int? sale_count = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sale_count"))?.ParseToNullableInt(); - string sale_count_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sale_count_text"))?.Replace("'", "\\'"); - string distribution_set = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "distribution_set"))?.Replace("'", "\\'"); - string add_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - string special_prod_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "special_prod_type"))?.Replace("'", "\\'"); - if (special_prod_type != "爆款数据") - special_prod_type = "普通商品"; - string view_uv = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "view_uv"))?.Replace("'", "\\'"); // 爆款数据产品曝光数量 - string add_hot_version = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_hot_version"))?.Replace("'", "\\'"); - if (special_prod_type == "爆款数据" && product_get_type == "微信店采" && add_hot_version != "v3") - { - return "{\"code\":666,\"msg\":\"当前版本已失效,请更新软件\"}"; - } - - if (string.IsNullOrEmpty(product_get_type)) - { - product_get_type = "母店采集"; - } - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (add_user_name != null && add_user_name != "admin") - { - Thread.Sleep(1000); - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - if (add_user_name != null && add_user_name != "admin") - { - sql = "select count(*) from " + tableName + " where is_del=0 and add_user_name='" + add_user_name + "'"; - var count = mySql.ExecuteRowCount(sql); - if (!string.IsNullOrEmpty(mySql.Message) || count > 100000) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"产品数据库已达上限10万,请删除旧数据后重新添加新商品\"}"; - } - } - - int ban_wx = 0; - int ban_pdd = 0; - if (product_get_type == "厂商直采") - { - if (real_coid != null) - sql = "select ban_wx,ban_pdd from bxx.jst_supplier_ban_platform where coid=" + real_coid; - else if (skc_id != null) - sql = "select ban_wx,ban_pdd from bxx.jst_supplier_ban_platform where coid=" + skc_id; - var dtr = mySql.ExecuteDataTableRow(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (dtr != null) - { - ban_wx = dtr["ban_wx"].ParseToInt(); - ban_pdd = dtr["ban_pdd"].ParseToInt(); - } - } - - sql = "INSERT INTO " + tableName + " ("; - sql += "from_shop_id,from_shop_name,offline_supplier_id,offline_supplier_name,spu_id,skc_id,real_coid,real_spu_id,main_cat_id,main_cat_name,cat_id,"; - sql += "cat_name,price_text,product_name,ext_code,main_img,product_json,size_json,notes,product_get_type,"; - if (sale_count != null) - { - sql += "sale_count,"; - } - sql += "sale_count_text,special_prod_type,"; - sql += "distribution_set,ban_wx,ban_pdd,add_time,mdy_time,"; - if (add_user_name != null) - sql += "add_user_name,"; - if (group != null) - sql += "`group`,"; - if (!string.IsNullOrWhiteSpace(view_uv)) - sql += "view_uv,"; - sql = sql.TrimEnd(','); - sql += ") "; - sql += "values ('" + from_shop_id + "','" + from_shop_name + "','" + offline_supplier_id + "','" + offline_supplier_name + "','" + spu_id + "','" + - skc_id + "','" + real_coid + "','" + real_spu_id + "','" + main_cat_id + "','" + main_cat_name + "','" + cat_id + "','" + cat_name + "','" + - price_text + "','" + product_name + "','" + ext_code + "','" + main_img + "',@product_json,@size_json,'" + notes + "','" + product_get_type + "',"; - if (sale_count != null) - { - sql += "'" + sale_count + "',"; - } - sql += "'" + sale_count_text + "','" + special_prod_type + "'," + distribution_set.ParseToInt() + "," + ban_wx + "," + ban_pdd + ","; - sql += "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql += "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - if (add_user_name != null) - sql += "'" + add_user_name + "',"; - if (group != null) - sql += "'" + group + "',"; - if (!string.IsNullOrWhiteSpace(view_uv)) - sql += "" + view_uv + ","; - sql = sql.TrimEnd(','); - sql += ");"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = product_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "size_json", Value = size_json, }); - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProduct(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string from_shop_id = RegexUtils.GetStringQuery(ref inputData, "from_shop_id")?.Replace("'", "\\'"); - string from_shop_name = RegexUtils.GetStringQuery(ref inputData, "from_shop_name")?.Replace("'", "\\'"); - string offline_supplier_id = RegexUtils.GetStringQuery(ref inputData, "offline_supplier_id")?.Replace("'", "\\'"); - string offline_supplier_name = RegexUtils.GetStringQuery(ref inputData, "offline_supplier_name")?.Replace("'", "\\'"); - string spu_id = RegexUtils.GetStringQuery(ref inputData, "spu_id")?.Replace("'", "\\'"); - string skc_id = RegexUtils.GetStringQuery(ref inputData, "skc_id")?.Replace("'", "\\'"); // skcId,聚水潭商品为coid - string real_coid = RegexUtils.GetStringQuery(ref inputData, "real_coid")?.Replace("'", "\\'"); // 聚水潭爆款专区真实商家coid,供应商直采商品该字段留空 - string real_spu_id = RegexUtils.GetStringQuery(ref inputData, "real_spu_id")?.Replace("'", "\\'"); // 聚水潭爆款专区真实商家spuid,供应商直采商品该字段留空 - string secret_spu_id = RegexUtils.GetStringQuery(ref inputData, "secret_spu_id")?.Replace("'", "\\'"); - string price_text = RegexUtils.GetStringQuery(ref inputData, "price_text")?.Replace("'", "\\'"); - string main_cat_id = RegexUtils.GetStringQuery(ref inputData, "main_cat_id")?.Replace("'", "\\'"); - string main_cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_cat_name"))?.Replace("'", "\\'"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id")?.Replace("'", "\\'"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name"))?.Replace("'", "\\'"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code"))?.Replace("'", "\\'"); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name"))?.Replace("'", "\\'"); - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json")); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json")); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img"))?.Replace("'", "\\'"); - string group = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group"))?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - int? sale_count = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sale_count"))?.ParseToNullableInt(); - string sale_count_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sale_count_text"))?.Replace("'", "\\'"); - string wx_safe_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_safe_status"))?.Replace("'", "\\'"); - string special_prod_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "special_prod_type"))?.Replace("'", "\\'"); - if (!string.IsNullOrEmpty(special_prod_type) && special_prod_type != "爆款数据") - special_prod_type = "普通商品"; - string wx_cat_1 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_1"))?.Replace("'", "\\'"); - string wx_cat_2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_2"))?.Replace("'", "\\'"); - string wx_cat_3 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_3"))?.Replace("'", "\\'"); - string wx_cat_leaf = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_leaf"))?.Replace("'", "\\'"); - string delivery_fee_set = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_fee_set"))?.Replace("'", "\\'"); - string after_sale_set = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "after_sale_set"))?.Replace("'", "\\'"); - string distribution_set = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "distribution_set"))?.Replace("'", "\\'"); - string send_to_out_server = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "send_to_out_server"))?.Replace("'", "\\'"); - string sku_edit_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_edit_json"))?.Replace("'", "\\'"); - string sku_secret_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_secret_json"))?.Replace("'", "\\'"); - string wx_img_map_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_img_map_json"))?.Replace("'", "\\'"); - string problem_prod_data = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "problem_prod_data"))?.Replace("'", "\\'"); - string is_relation = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "is_relation"))?.Replace("'", "\\'"); - string view_uv = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "view_uv"))?.Replace("'", "\\'"); // 产品曝光数量 - string product_get_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_get_type"))?.Replace("'", "\\'"); - string add_hot_version = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_hot_version"))?.Replace("'", "\\'"); - if (special_prod_type == "爆款数据" && product_get_type == "微信店采" && add_hot_version != "v3") - { - return "{\"code\":666,\"msg\":\"当前版本已失效,请更新软件\"}"; - } - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - sql = "update " + tableName + " p set"; - if (from_shop_id != null) - sql += " p.from_shop_id='" + from_shop_id + "',"; - if (from_shop_name != null) - sql += " p.from_shop_name='" + from_shop_name + "',"; - if (offline_supplier_id != null) - sql += " p.offline_supplier_id='" + offline_supplier_id + "',"; - if (offline_supplier_name != null) - sql += " p.offline_supplier_name='" + offline_supplier_name + "',"; - if (main_cat_id != null) - sql += " p.main_cat_id='" + main_cat_id + "',"; - if (main_cat_name != null) - sql += " p.main_cat_name='" + main_cat_name + "',"; - if (cat_id != null) - sql += " p.cat_id='" + cat_id + "',"; - if (cat_name != null) - sql += " p.cat_name='" + cat_name + "',"; - if (price_text != null) - sql += " p.price_text='" + price_text + "',"; - if (product_name != null) - sql += " p.product_name='" + product_name + "',"; - if (ext_code != null) - sql += " p.ext_code='" + ext_code + "',"; - if (secret_spu_id != null) - sql += " p.secret_spu_id='" + secret_spu_id + "',"; - if (main_img != null) - sql += " p.main_img='" + main_img + "',"; - if (product_json != null) - sql += " p.product_json=@product_json,"; - if (size_json != null) - sql += " p.size_json=@size_json,"; - if (group != null) - sql += " p.group='" + group + "',"; - if (notes != null) - sql += " p.notes='" + notes + "',"; - if (sale_count != null) - sql += " p.sale_count='" + sale_count + "',"; - if (sale_count_text != null) - sql += " p.sale_count_text='" + sale_count_text + "',"; - if (wx_safe_status != null) - sql += " p.wx_safe_status='" + wx_safe_status + "',"; - if (special_prod_type != null && special_prod_type != "") - sql += " p.special_prod_type='" + special_prod_type + "',"; - if (wx_cat_1 != null) - sql += " p.wx_cat_1=" + wx_cat_1 + ","; - if (wx_cat_2 != null) - sql += " p.wx_cat_2=" + wx_cat_2 + ","; - if (wx_cat_3 != null) - sql += " p.wx_cat_3=" + wx_cat_3 + ","; - if (wx_cat_leaf != null) - sql += " p.wx_cat_leaf=" + wx_cat_leaf + ","; - if (delivery_fee_set != null) - sql += " p.delivery_fee_set=" + delivery_fee_set + ","; - if (after_sale_set != null) - sql += " p.after_sale_set=" + after_sale_set + ","; - if (distribution_set != null) - sql += " p.distribution_set=" + distribution_set + ","; - if (send_to_out_server != null) - sql += " p.send_to_out_server=" + send_to_out_server + ","; - if (sku_edit_json != null) - sql += " p.sku_edit_json='" + sku_edit_json + "',"; - if (sku_secret_json != null) - sql += " p.sku_secret_json=@sku_secret_json,"; - if (wx_img_map_json != null) - sql += " p.wx_img_map_json=@wx_img_map_json,"; - if (!problem_prod_data.IsNullOrEmpty()) - sql += " p.problem_prod_data=" + problem_prod_data + ","; - if (!is_relation.IsNullOrEmpty()) - sql += " p.is_relation=" + is_relation + ","; - if (!string.IsNullOrWhiteSpace(view_uv)) - sql += " p.view_uv=" + view_uv + ","; - sql += " p.mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - sql += " where spu_id='" + spu_id + "';"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = product_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "size_json", Value = size_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "sku_secret_json", Value = sku_secret_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "wx_img_map_json", Value = wx_img_map_json, }); - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - ///

- /// 违规商品 - /// - /// - /// - public string MdyViolationProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name"))?.Replace("'", "\\'"); - string secret_spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "secret_spu_id"))?.Replace("'", "\\'"); - string spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_id"))?.Replace("'", "\\'"); - - string group = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group"))?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - string wx_safe_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_safe_status"))?.Replace("'", "\\'"); - if (string.IsNullOrWhiteSpace(product_name) && string.IsNullOrWhiteSpace(secret_spu_id) && string.IsNullOrWhiteSpace(spu_id)) - return "{\"code\":500,\"msg\":\"没有商品查询信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - if (!string.IsNullOrEmpty(product_name)) - sql = "select id,spu_id from " + tableName + " p where p.product_name='" + product_name + "' and p.wx_safe_status in ('安全商品','未校验');"; - else if (!string.IsNullOrEmpty(secret_spu_id)) - sql = "select id,spu_id from " + tableName + " p where p.secret_spu_id='" + secret_spu_id + "' and p.wx_safe_status in ('安全商品','未校验');"; - else - sql = "select id,spu_id from " + tableName + " p where p.spu_id='" + spu_id + "' and p.wx_safe_status in ('安全商品','未校验');"; - - - var dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - var ids = ""; - foreach(DataRow row in dt.Rows) - { - ids += row["spu_id"].ParseToString() + "','"; - } - ids.Trim(',', '\''); - if (string.IsNullOrEmpty(ids)) - { - return "{\"code\":200,\"msg\":\"success\",\"err_msg\":\"商品不存在\"}"; - } - else - { - sql = "update " + tableName + " p set"; - if (group != null) - sql += " p.group='" + group + "',"; - if (notes != null) - sql += " p.notes='" + notes + "',"; - if (wx_safe_status != null) - sql += " p.wx_safe_status='" + wx_safe_status + "',"; - sql += " p.mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - sql += " where p.spu_id in('" + ids + "')"; - - - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - /// - /// 更新爆款数据商品 - /// - /// - /// - public string MdyBestSaleProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_id"))?.Replace("'", "\\'"); - int? view_uv = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "view_uv"))?.ParseToNullableInt(); - if (view_uv == null || string.IsNullOrWhiteSpace(spu_id)) - return "{\"code\":500,\"msg\":\"缺少商品曝光率或编号信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - sql = "update " + tableName + " p set"; - if (view_uv != null) - sql += " p.view_uv=" + view_uv + ","; - sql += " p.mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - sql += " where p.spu_id='" + spu_id + "' and p.special_prod_type='爆款数据'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 获取商品SpuId(快速查询) - /// - /// - /// - public string GetProductSpuIdLst(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["LimitVersion"]?.ConnectionString).ParseToInt()) - return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_secret_spu_ids = RegexUtils.GetStringQuery(ref inputData, "search_secret_spu_ids")?.Replace("'", "\\'"); - var search_spu_ids = RegexUtils.GetStringQuery(ref inputData, "search_spu_ids")?.Replace("'", "\\'"); - var wx_safe_status = RegexUtils.GetStringQuery(ref inputData, "wx_safe_status")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - sql = "select id,spu_id,secret_spu_id from " + tableName + " p where p.is_del=0"; - if (search_secret_spu_ids != null) - { - sql += " and p.secret_spu_id in ('" + string.Join("','", search_secret_spu_ids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - if (search_spu_ids != null) - { - sql += " and p.spu_id in ('" + string.Join("','", search_spu_ids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - if (wx_safe_status != null) - { - sql += " and p.wx_safe_status in ('" + string.Join("','", wx_safe_status.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - var dt = mySql.ExecuteDataTable(sql); - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParamLite prod = new DBProductResultParamLite - { - id = Convert.ToInt32(row["id"]), - spu_id = row["spu_id"].ToString(), - secret_spu_id = row["secret_spu_id"].IsNullOrEmpty() ? null : row["secret_spu_id"].ParseToString(), - }; - productLst.Add(prod); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(productLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + productLst.Count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 查询商品列表 - /// - /// - /// - /// - public string GetProductList(string inputData, bool isDetail = false) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["LimitVersion"]?.ConnectionString).ParseToInt()) - return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'","\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat1 = RegexUtils.GetStringQuery(ref inputData, "search_cat1")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var wx_cat_1 = RegexUtils.GetStringQuery(ref inputData, "wx_cat_1")?.Replace("'", "\\'"); - var wx_cat_2 = RegexUtils.GetStringQuery(ref inputData, "wx_cat_2")?.Replace("'", "\\'"); - var wx_cat_3 = RegexUtils.GetStringQuery(ref inputData, "wx_cat_3")?.Replace("'", "\\'"); - var wx_cat_leaf = RegexUtils.GetStringQuery(ref inputData, "wx_cat_leaf")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_prod_name"))?.Replace("'", "\\'"); - var search_prod_name_in = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_prod_name_in"))?.Replace("'", "\\'"); - var search_group = RegexUtils.GetStringQuery(ref inputData, "search_group")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - var search_secret_spu_ids = RegexUtils.GetStringQuery(ref inputData, "search_secret_spu_ids")?.Replace("'", "\\'"); - var ext_code_in = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code_in"))?.Replace("'", "\\'"); - var get_select_count = RegexUtils.GetStringQuery(ref inputData, "get_select_count")?.Replace("'", "\\'"); - var select_shop_id = RegexUtils.GetStringQuery(ref inputData, "select_shop_id")?.Replace("'", "\\'"); - var from_shop_id = RegexUtils.GetStringQuery(ref inputData, "from_shop_id")?.Replace("'", "\\'"); - var from_shop_name = RegexUtils.GetStringQuery(ref inputData, "from_shop_name")?.Replace("'", "\\'"); - var product_get_type = RegexUtils.GetStringQuery(ref inputData, "product_get_type")?.Replace("'", "\\'"); - var sort_field = RegexUtils.GetStringQuery(ref inputData, "sort_field")?.Replace("'", "\\'"); - var wx_safe_status = RegexUtils.GetStringQuery(ref inputData, "wx_safe_status")?.Replace("'", "\\'"); - var special_prod_type = RegexUtils.GetStringQuery(ref inputData, "special_prod_type")?.Replace("'", "\\'"); - if (special_prod_type.IsNullOrEmpty()) - special_prod_type = "普通商品"; - var is_supplier_prod_ok = RegexUtils.GetStringQuery(ref inputData, "is_supplier_prod_ok")?.Replace("'", "\\'"); - var has_wx_cat = RegexUtils.GetStringQuery(ref inputData, "has_wx_cat")?.Replace("'", "\\'"); - var send_to_out_server = RegexUtils.GetStringQuery(ref inputData, "send_to_out_server")?.Replace("'", "\\'"); - var real_coid = RegexUtils.GetStringQuery(ref inputData, "real_coid")?.Replace("'", "\\'"); - var has_wx_format = RegexUtils.GetStringQuery(ref inputData, "has_wx_format")?.Replace("'", "\\'"); - var problem_prod_data = RegexUtils.GetStringQuery(ref inputData, "problem_prod_data")?.Replace("'", "\\'"); - var is_relation = RegexUtils.GetStringQuery(ref inputData, "is_relation")?.Replace("'", "\\'"); - var add_time_begin = RegexUtils.GetStringQuery(ref inputData, "add_time_begin")?.Replace("'", "\\'"); - var add_time_end = RegexUtils.GetStringQuery(ref inputData, "add_time_end")?.Replace("'", "\\'"); - var start_time = RegexUtils.GetStringQuery(ref inputData, "start_time")?.Replace("'", "\\'"); - var end_time = RegexUtils.GetStringQuery(ref inputData, "end_time")?.Replace("'", "\\'"); - var ban_wx = RegexUtils.GetStringQuery(ref inputData, "ban_wx")?.Replace("'", "\\'"); - var ban_pdd = RegexUtils.GetStringQuery(ref inputData, "ban_pdd")?.Replace("'", "\\'"); - var add_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var min_view_uv = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "min_view_uv"))?.ParseToNullableInt(); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") == "true"; // 不计数 - var no_fission_words = RegexUtils.GetStringQuery(ref inputData, "no_fission_words").ParseToBool(); // 未裂变标题 - var fission_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_words"))?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size= RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - List forceIndex = new List() { }; - if (!isDetail) - { - if (!search_prod_name.IsNullOrEmpty() || !search_prod_name_in.IsNullOrEmpty()) - forceIndex.Add("index_product_name"); - if (!search_spu.IsNullOrEmpty()) - forceIndex.Add("index_spu_id"); - if (!search_skc.IsNullOrEmpty()) - forceIndex.Add("index_skc_id"); - if (!search_secret_spu_ids.IsNullOrEmpty()) - forceIndex.Add("index_secret_spu_id"); - if (min_view_uv > 0) - forceIndex.Add("index_view_uv"); - if (!search_group.IsNullOrEmpty()) - forceIndex.Add("index_group"); - if (!from_shop_id.IsNullOrEmpty()) - forceIndex.Add("index_from_shop_id"); - if (!from_shop_name.IsNullOrEmpty()) - forceIndex.Add("index_from_shop_name"); - if (!ext_code_in.IsNullOrEmpty() || !search_ext_code.IsNullOrEmpty()) - forceIndex.Add("index_ext_code"); - //if (!add_user_name.IsNullOrEmpty()) - // forceIndex.Add("index_add_user_name"); - if (!search_notes.IsNullOrEmpty()) - forceIndex.Add("index_notes"); - if (!start_time.IsNullOrEmpty()) - forceIndex.Add("index_mdy_time"); - - if (!forceIndex.Contains("index_view_uv")) - forceIndex.Add("index_sort_add_time"); - } - - List paramLst = new List(); - - sql = " select count(*) from " + tableName + " p "; - //sql += " LEFT JOIN bxx.jst_supplier_ban_platform b ON (p.skc_id=b.coid or p.real_coid=b.coid)" + - if (forceIndex.Count > 0) - sql += " FORCE INDEX(" + string.Join(",", forceIndex) + ")"; - sql += " WHERE p.is_del=0"; - - string where = ""; - if (!string.IsNullOrEmpty(from_shop_id)) - where += " and p.from_shop_id='" + from_shop_id + "'"; - if (!string.IsNullOrEmpty(from_shop_name)) - where += " and p.from_shop_name='" + from_shop_name + "'"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and p.id in (" + search_db_ids + ")"; - if (!string.IsNullOrEmpty(search_secret_spu_ids)) - where += " and p.secret_spu_id in ('" + string.Join("','", search_secret_spu_ids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - if (!string.IsNullOrWhiteSpace(ext_code_in)) - where += " and p.ext_code in ('" + string.Join("','", ext_code_in.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - if (!string.IsNullOrEmpty(product_get_type)) - where += " and p.product_get_type in ('" + product_get_type.Replace(",", "','") + "')"; - else - where += " and p.product_get_type in ('厂商直采','1688厂家','1688外部数据','微信小店','微信店采','母店采集','机会商品','以图搜品','多多外部数据','微信外部数据')"; - if (!string.IsNullOrEmpty(wx_safe_status)) - where += " and p.wx_safe_status in ('" + wx_safe_status.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(special_prod_type)/* && special_prod_type != "普通商品,爆款数据"*/) - where += " and p.special_prod_type in ('" + special_prod_type.Replace(",", "','") + "')"; - - if (!string.IsNullOrWhiteSpace(search_spu)) - { - if (search_spu.Contains(",") || search_spu.Contains(",") || search_spu.Contains(";") || search_spu.Contains(";")) - where += " and p.spu_id in ('" + string.Join("','", search_spu.Split(new string[] { ",", ",", ";", ";" }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - else - where += " and p.spu_id like '" + search_spu + "%'"; - } - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and p.skc_id like '" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and p.cat_name like '" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat1)) - where += " and p.main_cat_name like '" + search_cat1 + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like '" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - { - var searchProdNameWords = search_prod_name.Split(new string[] { ",", ",", ";", ";", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); - var multi_search_prod_name = ""; - var index = 0; - foreach (var word in searchProdNameWords) - { - index++; - string parameName = "@prodNameWords" + index; - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = parameName, Value = word/*.Replace("&", "&").Replace("'", "\\'")*/, }); - //multi_search_prod_name += " or p.product_name like '%" + parameName + "%'"; - //multi_search_prod_name += " or p.product_name like CONCAT('%'," + parameName + ",'%')"; - multi_search_prod_name += " or p.product_name like CONCAT(" + parameName + ",'%')"; - - } - where += " and (" + multi_search_prod_name.Substring(4) + ")"; - - //where += " and p.product_name like '" + search_prod_name + "'"; - } - if (!string.IsNullOrWhiteSpace(search_prod_name_in)) - { - where += " and p.product_name in ('" + search_prod_name_in.Replace(",", "','") + "')"; - } - if (!string.IsNullOrWhiteSpace(search_group)) - { - if (search_group == "无分组") - where += " and (p.group is null or p.group = '')"; - else - where += " and p.group like '" + search_group + "%'"; - } - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and p.notes like '" + search_notes + "%'"; - - if (!string.IsNullOrWhiteSpace(wx_cat_1)) - where += " and p.wx_cat_1 in (" + wx_cat_1 + ")"; - if (!string.IsNullOrWhiteSpace(wx_cat_2)) - where += " and p.wx_cat_2 in (" + wx_cat_2 + ")"; - if (!string.IsNullOrWhiteSpace(wx_cat_3)) - where += " and p.wx_cat_3 in (" + wx_cat_3 + ")"; - if (!string.IsNullOrWhiteSpace(wx_cat_leaf)) - where += " and p.wx_cat_leaf in (" + wx_cat_leaf + ")"; - - if (!string.IsNullOrEmpty(has_wx_cat)) - { - if (has_wx_cat.ToLower() == "true") - where += " and p.wx_cat_3 >= 0"; - else - where += " and p.wx_cat_3 IS NULL"; - } - if (!string.IsNullOrEmpty(send_to_out_server)) - where += " and p.send_to_out_server in (" + send_to_out_server + ")"; - // 供应商货源是否已完成初始设置 - if (!string.IsNullOrEmpty(is_supplier_prod_ok)) - { - //if (is_supplier_prod_ok == "1" || is_supplier_prod_ok == "已设置") - // where += " and wx_cat_leaf IS NOT NULL and send_to_out_server=1 and delivery_fee_set=1 and after_sale_set=1 and distribution_set=1"; - //else - // where += " and (wx_cat_leaf IS NULL or send_to_out_server=0 or delivery_fee_set=0 or after_sale_set=0 or distribution_set=0)"; - if (is_supplier_prod_ok == "1" || is_supplier_prod_ok == "是" || is_supplier_prod_ok == "已设置") - where += " and p.wx_cat_3 IS NOT NULL and p.send_to_out_server IN (1,127) and p.distribution_set IN (1,127)"; - else - where += " and (p.wx_cat_3 IS NULL or p.send_to_out_server NOT IN (1,127) or p.distribution_set NOT IN (1,127))"; - } - if (!where.Contains("send_to_out_server")) - { - where += " and p.send_to_out_server IN (0,1,2,127)"; - } - if (!where.Contains("distribution_set")) - { - where += " and p.distribution_set IN (0,1,2,127)"; - } - - if (!string.IsNullOrEmpty(real_coid)) - { - where += " and p.real_coid='" + real_coid + "'"; - } - if (!string.IsNullOrEmpty(has_wx_format)) - { - where += " and p.has_wx_format='" + has_wx_format + "'"; - } - if (!string.IsNullOrEmpty(problem_prod_data)) - { - if (problem_prod_data.ToLower().Contains("is null")) - where += " and p.problem_prod_data " + problem_prod_data; - else - where += " and p.problem_prod_data='" + problem_prod_data + "'"; - } - if (!string.IsNullOrEmpty(is_relation)) - { - where += " and p.is_relation=" + is_relation; - } - if (add_time_begin != null && add_time_end != null) - { - where += " and p.add_time between '" + add_time_begin + "' and '" + add_time_end + "'"; - } - if (start_time != null && end_time != null) - { - where += " and p.mdy_time between '" + start_time + "' and '" + end_time + "'"; - } - if (ban_wx != null) - { - where += " and p.ban_wx=" + ban_wx; - } - else - { - where += " and p.ban_wx in (0,1)"; - } - if (ban_pdd != null) - { - where += " and p.ban_pdd=" + ban_pdd; - } - else - { - where += " and p.ban_pdd in (0,1)"; - } - if (min_view_uv != null) - { - where += " and p.view_uv>=" + min_view_uv; - } - if (!string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "'" + string.Join("','", add_user_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.add_user_name in (" + add_user_name + ")"; - } - else - { - // 目前客户端即使是自有库查详情的时候也有没传 todo 每次查询都传参,或者就不管,详情会命中其他索引 - //where += " and p.add_user_name='admin'"; - } - if (no_fission_words) - { - where += " and (fission_words='' or fission_words IS NULL)"; - } - if (!string.IsNullOrEmpty(fission_words)) - { - where += " and fission_words LIKE '" + fission_words + "%'"; - } - sql += where; - - var count = 0; - if (isDetail || is_not_count) - count = 1; - else - { - count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - } - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = " SELECT p.id " + - " FROM " + tableName + " p"; - if (forceIndex.Count > 0) - sql += " FORCE INDEX(" + string.Join(",", forceIndex) + ")"; - sql += " WHERE p.is_del=0"; - - //where子句 - sql += where; - - if (sort_field == "view_uv") - sql += " order by p.view_uv desc, p.add_time desc"; - else - sql += " order by p.add_time desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - - if (!string.IsNullOrEmpty(mySql.Message) || dt == null) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - var db_ids = string.Join(",", dt.Rows.Cast().Select(r => r["id"].ParseToInt())); - if (string.IsNullOrEmpty(db_ids)) - { - mySql.Close(); - return "{\"code\":200,\"data\":[],\"count\":" + 0 + "}"; - } - - - if (isDetail) - sql = " SELECT p.*" + - " from " + tableName + " p" + - " where p.is_del=0"; - else - sql = "SELECT p.id,p.from_shop_id,p.spu_id,p.skc_id,p.main_cat_id,p.main_cat_name,p.cat_id,p.cat_name,p.price_text,p.ext_code,p.product_name," + - " p.main_img,p.notes,p.add_time,p.mdy_time,p.fission_words,p.head_words,p.end_words,p.group," + - " p.product_get_type,p.wx_safe_status,p.sale_count,p.sale_count_text,p.special_prod_type,p.from_shop_name,p.wx_cat_1,p.wx_cat_2,p.wx_cat_3," + - " p.wx_cat_leaf,p.send_to_out_server,p.secret_spu_id,p.real_coid,p.real_spu_id,p.is_relation,p.view_uv,p.add_user_name" + - " FROM " + tableName + " p" + - " WHERE p.is_del=0"; - - sql += " and id in (" + db_ids + ")"; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - from_shop_id = row["from_shop_id"].ToString(), - from_shop_name = row["from_shop_name"].ToString(), - //offline_supplier_id = row["offline_supplier_id"].ToString(), - //offline_supplier_name = row["offline_supplier_name"].ToString(), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - wx_cat_1 = row["wx_cat_1"].ToString(), - wx_cat_2 = row["wx_cat_2"].ToString(), - wx_cat_3 = row["wx_cat_3"].ToString(), - wx_cat_leaf = row["wx_cat_leaf"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //ext_code_price = row["ext_code_price"].IsNullOrEmpty() ? new int?() : row["ext_code_price"].ParseToInt(), - price_text = row["price_text"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ToString(), - group = row["group"].ToString(), - //select_total_count = row["select_total_count"].ParseToInt(), - end_words = row["end_words"].ParseToString(), - fission_words = row["fission_words"].ParseToString(), - head_words = row["head_words"].ParseToString(), - product_get_type_text = row["product_get_type"].ToString(), - view_uv = row["view_uv"].ParseToNullableInt(), - sale_count = row["sale_count"].ParseToInt(), - sale_count_text = row["sale_count_text"].ToString(), - wx_safe_status = row["wx_safe_status"].ToString(), - special_prod_type = row["special_prod_type"].ToString(), - main_cat_id = row["main_cat_id"].ToString(), - main_cat_name = row["main_cat_name"].ToString(), - send_to_out_server = row["send_to_out_server"].ParseToInt(), - secret_spu_id = row["secret_spu_id"].IsNullOrEmpty() ? null : row["secret_spu_id"].ParseToString(), - real_coid = row["real_coid"].IsNullOrEmpty() ? null : row["real_coid"].ParseToString(), - real_spu_id = row["real_spu_id"].IsNullOrEmpty() ? null : row["real_spu_id"].ParseToString(), - is_relation = row["is_relation"].ParseToInt(), - add_user_name = row["add_user_name"].ParseToString(), - }; - if (isDetail) - { - prod.product_json = row["product_json"].ToString(); - prod.size_json = row["size_json"].ToString(); - prod.sku_edit_json = row["sku_edit_json"].ToString(); - prod.sku_secret_json = row["sku_secret_json"].ToString(); - prod.fission_imgs = row["fission_imgs"].ToString(); - prod.has_wx_format = row["has_wx_format"].ParseToNullableString(); // 微信回采 - prod.wx_img_map_json = row["wx_img_map_json"].ToString(); - problem_prod_data = row["problem_prod_data"].IsNullOrEmpty() ? null : row["problem_prod_data"].ParseToString(); - - if (!prod.sku_secret_json.IsNullOrEmpty() && prod.secret_spu_id.IsNullOrEmpty()) - { - var secret_json = prod.sku_secret_json; - var goodsId = RegexUtils.GetStringJson(ref secret_json, "goodsId"); - prod.secret_spu_id = goodsId; - if (!string.IsNullOrWhiteSpace(goodsId)) - { - mySql = new MysqlUtils(conn); - try - { - sql = "update " + tableName + " set secret_spu_id='" + goodsId + "' where spu_id='" + prod.spu_id + "'"; - mySql.ExecuteNonQuery(sql); - } - catch { } - mySql.Close(); - } - } - if (prod.product_json.Contains("\"source_json\"") && !prod.product_json.Contains("\"source_json\":null")) - { - mySql = new MysqlUtils(conn); - try - { - JObject jObj = JsonUtils.JObjectParse(prod.product_json); - jObj["source_json"] = null; - var newProdJson = JsonUtils.SerializeObject(jObj); - sql = "update " + tableName + " set product_json=@product_json where spu_id='" + prod.spu_id + "'"; - paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = newProdJson, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - prod.product_json = newProdJson; - } - catch - { - } - mySql.Close(); - } - if (prod.product_json.Contains(":null")) - { - mySql = new MysqlUtils(conn); - try - { - JObject jObj = JsonUtils.JObjectParse(prod.product_json); - - RemoveNullProperties(jObj); - - JsonSerializerSettings jsonIgnoreNullSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var newProdJson = JsonUtils.SerializeObjectToString(jObj, jsonIgnoreNullSetting); - - sql = "update " + tableName + " set product_json=@product_json where spu_id='" + prod.spu_id + "'"; - paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = newProdJson, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - prod.product_json = newProdJson; - - //sql = "DELETE FROM " + tableName + " where is_del = 1 AND add_time < '" + DateTime.Now.AddDays(-10) + "' ORDER BY add_time DESC limit 1;"; - } - catch - { - } - mySql.Close(); - } - } - if (!string.IsNullOrEmpty(get_select_count)) - { - prod.select_count = row["select_count"].ParseToInt(); - } - productLst.Add(prod); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(productLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - if (is_not_count) - count = productLst.Count; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 递归剔除JObject中值为null的字段 (修改为null才删除,empty不删除) - /// - public static void RemoveNullProperties(JToken token) - { - if (token.Type == JTokenType.Object) - { - var jObj = (JObject)token; - var propertiesToRemove = jObj.Properties() - //.Where(p => - // p.Value == null || - // p.Value.Type == JTokenType.Null || - // (p.Value.Type == JTokenType.String && string.IsNullOrEmpty((string)p.Value)) || - // (p.Value.Type == JTokenType.String && string.IsNullOrWhiteSpace((string)p.Value)) || - // (p.Value.Type == JTokenType.Array && !p.Value.HasValues)) - .Where(p => - p.Value == null || - p.Value.Type == JTokenType.Null) - .ToList(); - - foreach (var prop in propertiesToRemove) - prop.Remove(); - - foreach (var child in jObj.Children()) - { - if (child.Children().Count() > 0) - { - RemoveNullProperties(child); - } - } - } - else if (token.Type == JTokenType.Property) - { - if (token.Children().Count() > 0) - { - var childs = token.Children() - //.Where(p => - // p == null || - // p.Type == JTokenType.Null || - // (p.Type == JTokenType.String && string.IsNullOrEmpty((string)p)) || - // (p.Type == JTokenType.String && string.IsNullOrWhiteSpace((string)p)) || - // (p.Type == JTokenType.Array && !p.HasValues)) - .Where(p => - p == null || - p.Type == JTokenType.Null) - .ToList(); - - foreach (var prop in childs) - prop.Remove(); - foreach (var child in token.Children()) - { - if (child.Children().Count() > 0) - { - RemoveNullProperties(child); - } - } - } - } - else if (token.Type == JTokenType.Array) - { - var jArray = (JArray)token; - - // 清理数组内部的 null / "" - for (int i = jArray.Count - 1; i >= 0; i--) - { - var item = jArray[i]; - //if (item.Type == JTokenType.Null || - // (item.Type == JTokenType.String && string.IsNullOrWhiteSpace((string)item))) - if (item.Type == JTokenType.Null) - { - jArray.RemoveAt(i); - } - } - - // 递归数组内对象/子数组 - foreach (var child in jArray) - RemoveNullProperties(child); - - //// 如果数组最后变空,也删除 - //if (!jArray.HasValues) - //{ - // if (jArray.Parent is JProperty prop) - // prop.Remove(); - //} - } - } - - /// - /// 回采微信小店属性等商品数据入库 - /// - /// - /// - public string AddProdWXComplate(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"用户信息不能为空\"}"; - } - - var spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_id")).ParseToString().Replace("'", "\\'"); - var coid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "coid")).ParseToString().Replace("'", "\\'"); - var secret_spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "secret_spu_id")).ParseToString().Replace("'", "\\'"); - var wx_edit_prod_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_edit_prod_json")).ParseToString().Replace("'", "\\'"); - if (secret_spu_id.IsNullOrEmpty() || wx_edit_prod_json.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"商品回采数据不能为空\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - tableName = "bxx.product"; // 回采只支持主库,后续可能删除回采功能 - string sql = ""; - - sql = "INSERT INTO bxx.product_wx_complate (spu_id,coid,secret_spu_id,wx_edit_prod_json) VALUES " + - " ('" + spu_id + "','" + coid + "','" + secret_spu_id + "','" + wx_edit_prod_json + "')" + - " ON DUPLICATE KEY UPDATE spu_id=VALUES(spu_id),coid=VALUES(coid),wx_edit_prod_json=VALUES(wx_edit_prod_json);"; - - var rst = mySql.ExecuteNonQuery(sql); - if (!rst || !string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - sql = "UPDATE " + tableName + " set has_wx_format='1' where secret_spu_id='" + secret_spu_id + "'"; - rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst || !string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else - { - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"seconds\":" + seconds + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 查询回采微信小店属性等商品数据 - /// - /// - /// - public string GetProdWXComplateList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"用户信息不能为空\"}"; - } - - var spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_id")).ParseToString().Replace("'", "\\'"); - var coid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "coid")).ParseToString().Replace("'", "\\'"); - var search_secret_spu_ids = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_secret_spu_ids")).ParseToString().Replace("'", "\\'"); - if (search_secret_spu_ids.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"商品回采数据编号不能为空\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(1000); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select id,spu_id,coid,secret_spu_id,wx_edit_prod_json,add_time" + - " from bxx.product_wx_complate p where 1=1"; - if (search_secret_spu_ids != null) - { - sql += " and p.secret_spu_id in ('" + string.Join("','", search_secret_spu_ids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - var dt = mySql.ExecuteDataTable(sql); - - mySql.Close(); - if (dt != null) - { - try - { - JArray wxProdComplateArr = new JArray(); - foreach (DataRow row in dt.Rows) - { - JObject wxProdComplateObj = new JObject(); - wxProdComplateObj["id"] = Convert.ToInt32(row["id"]); - wxProdComplateObj["spu_id"] = row["spu_id"].ToString(); - wxProdComplateObj["coid"] = row["coid"].ToString(); - wxProdComplateObj["secret_spu_id"] = row["secret_spu_id"].ToString(); - wxProdComplateObj["wx_edit_prod_json"] = row["wx_edit_prod_json"].ToString(); - wxProdComplateObj["add_time"] = Convert.ToDateTime(row["add_time"]); - wxProdComplateArr.Add(wxProdComplateObj); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(wxProdComplateArr, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + wxProdComplateArr.Count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 新增下架sku - /// - /// - /// - public string AddProdDownSku(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - - var itemMainImage = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemMainImage")).ParseToString().Replace("'", "\\'"); - var itemName = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemName")).ParseToString().Replace("'", "\\'"); - var styleCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "styleCode")).ParseToString().Replace("'", "\\'"); - var itemCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemCode")).ParseToString().Replace("'", "\\'"); - var colourSpec = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "colourSpec")).ParseToString().Replace("'", "\\'"); - var supplyPrice = RegexUtils.GetStringQuery(ref inputData, "supplyPrice").ParseToString().Replace("'", "\\'"); - var supplierName = RegexUtils.GetStringQuery(ref inputData, "supplierName").ParseToString().Replace("'", "\\'"); - var shelvesTime = RegexUtils.GetStringQuery(ref inputData, "shelvesTime").ParseToString().Replace("'", "\\'"); - var supplierCoId = RegexUtils.GetStringQuery(ref inputData, "supplierCoId").ParseToString().Replace("'", "\\'"); - var coId = RegexUtils.GetStringQuery(ref inputData, "coId").ParseToString().Replace("'", "\\'"); - var spuId = RegexUtils.GetStringQuery(ref inputData, "spuId").ParseToString().Replace("'", "\\'"); - var partnerSkuId = RegexUtils.GetStringQuery(ref inputData, "partnerSkuId").ParseToString().Replace("'", "\\'"); - var partnerSpuId = RegexUtils.GetStringQuery(ref inputData, "partnerSpuId").ParseToString().Replace("'", "\\'"); - var supplierId = RegexUtils.GetStringQuery(ref inputData, "supplierId").ParseToString().Replace("'", "\\'"); - var drpItemStatus = RegexUtils.GetStringQuery(ref inputData, "drpItemStatus").ParseToString().Replace("'", "\\'"); - var lastOperator = RegexUtils.GetStringQuery(ref inputData, "lastOperator").ParseToString().Replace("'", "\\'"); - var itemSpuIdMd5 = RegexUtils.GetStringQuery(ref inputData, "itemSpuIdMd5").ParseToString().Replace("'", "\\'"); - var secret_spu_id = RegexUtils.GetStringQuery(ref inputData, "secret_spu_id").ParseToString().Replace("'", "\\'"); - var secret_sku_id = RegexUtils.GetStringQuery(ref inputData, "secret_sku_id").ParseToString().Replace("'", "\\'"); - var is_in_product_db = RegexUtils.GetStringQuery(ref inputData, "is_in_product_db").ParseToInt(); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - sql = "select styleCode,itemCode,colourSpec from bxx.product_jst_update where styleCode='" + styleCode + - "' and itemCode='" + itemCode + "' and colourSpec='" + colourSpec + "'"; - var dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dt.Rows.Count > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"数据已存在\"}"; - } - - sql = "insert into bxx.product_jst_update " + - " (itemMainImage,itemName,styleCode,itemCode,colourSpec,supplyPrice,supplierName,shelvesTime,supplierCoId,coId,spuId," + - " partnerSkuId,partnerSpuId,supplierId,drpItemStatus,lastOperator,itemSpuIdMd5,secret_spu_id,secret_sku_id,is_in_product_db)" + - " values('" + itemMainImage + "','" + itemName + "','" + styleCode + "','" + itemCode + "','" + colourSpec + "','" + supplyPrice + "','" + - supplierName + "','" + shelvesTime + "','" + supplierCoId + "','" + coId + "','" + spuId + "','" + partnerSkuId + "','" + - partnerSpuId + "','" + supplierId + "','" + drpItemStatus + "','" + lastOperator + "','" + itemSpuIdMd5 + "','" + secret_spu_id + "','" - + secret_sku_id + "'," + is_in_product_db + ")"; - - //var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 查询下架sku - /// - /// - /// - public string GetProdDownSkuLstBySkuCodes(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - //var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - //if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["LimitVersion"]?.ConnectionString).ParseToInt()) - // return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_spu_ids = RegexUtils.GetStringQuery(ref inputData, "search_spu_ids")?.Replace("'", "\\'"); - var search_sku_codes = RegexUtils.GetStringQuery(ref inputData, "search_sku_codes")?.Replace("'", "\\'"); - var search_secret_spu_ids = RegexUtils.GetStringQuery(ref inputData, "search_secret_spu_ids")?.Replace("'", "\\'"); - if (search_spu_ids.IsNullOrEmpty() && search_sku_codes.IsNullOrEmpty() && search_secret_spu_ids.IsNullOrEmpty()) - return "{\"code\":500,\"msg\":\"查询条件不能全部为空\",\"data\":[],\"count\":" + 0 + "}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(1000); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select id,spuId,itemName,styleCode,itemCode,colourSpec,supplierCoId,supplierName,is_in_product_db,secret_spu_id,secret_sku_id,add_time" + - " from bxx.product_jst_update p where 1=1"; - if (search_secret_spu_ids != null) - { - sql += " and p.secret_spu_id in ('" + string.Join("','", search_secret_spu_ids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - if (search_spu_ids != null) - { - sql += " and p.spuId in ('" + string.Join("','", search_spu_ids.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - if (search_sku_codes != null) - { - sql += " and p.itemCode in ('" + string.Join("','", search_sku_codes.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - } - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - var dt = mySql.ExecuteDataTable(sql); - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - JSTDownProdSkuInfo prod = new JSTDownProdSkuInfo - { - id = Convert.ToInt32(row["id"]), - spuId = row["spuId"].ToString(), - itemName = row["itemName"].ToString(), - styleCode = row["styleCode"].ToString(), - itemCode = row["itemCode"].ToString(), - colourSpec = row["colourSpec"].ToString(), - supplierCoId = row["supplierCoId"].ToString(), - supplierName = row["supplierName"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - is_in_product_db = row["is_in_product_db"].ParseToInt(), - secret_spu_id = row["secret_spu_id"].ParseToString(), - secret_sku_id = row["secret_sku_id"].ParseToString(), - }; - productLst.Add(prod); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(productLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + productLst.Count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetProductGroups(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - var add_user_name = RegexUtils.GetStringQuery(ref inputData, "add_user_name")?.Replace("'", "\\'"); - var is_get_detail = RegexUtils.GetStringQuery(ref inputData, "is_get_detail") == "true"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT p.* FROM `bxx`.`product_group` p where 1=1 "; - string where = ""; - if (!string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "'" + string.Join("','", add_user_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.add_user_name in (" + add_user_name + ")"; - } - else - { - where += " and p.add_user_name='admin'"; - } - sql += where; - sql += " ORDER BY id DESC"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - try - { - JArray groupArr = new JArray(); - string group_data = ""; - foreach (DataRow row in dt.Rows) - { - group_data += row["group_name"].ToString() + ","; - - if (is_get_detail) - { - JObject groupObj = new JObject(); - groupObj["id"] = row["id"].ParseToLong(); - groupObj["group_name"] = row["group_name"].ParseToString(); - groupObj["add_user_name"] = row["add_user_name"].ParseToString(); - groupArr.Add(groupObj); - } - } - var data = group_data.Trim(','); - return "{\"code\":200,\"msg\":\"success\",\"data\":\"" + data + "\",\"groups\":" + JsonUtils.SerializeObject(groupArr) + "}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddProductGroup(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var add_user_name = RegexUtils.GetStringQuery(ref inputData, "add_user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "admin"; - } - var group_name = RegexUtils.GetStringQuery(ref inputData, "group_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(group_name)) - { - return "{\"code\":500,\"msg\":\"未指定要新增的组\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "INSERT IGNORE INTO `bxx`.`product_group` (group_name,add_user_name) VALUES ('" + group_name + "','" + add_user_name + "')"; - - var add_rows = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\", \"add_rows\":" + add_rows + "}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelProductGroup(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var add_user_name = RegexUtils.GetStringQuery(ref inputData, "add_user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "admin"; - } - var id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var group_name = RegexUtils.GetStringQuery(ref inputData, "group_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(group_name)) - { - return "{\"code\":500,\"msg\":\"未指定要删除的组\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "DELETE FROM `bxx`.`product_group` p where 1=1"; - - string where = ""; - if (!string.IsNullOrEmpty(id)) - { - id = "" + string.Join(",", id.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + ""; - where += " and p.id in (" + id + ")"; - } - if (!string.IsNullOrEmpty(group_name)) - { - group_name = "'" + string.Join("','", group_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.group_name in (" + group_name + ")"; - } - if (!string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "'" + string.Join("','", add_user_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.add_user_name in (" + add_user_name + ")"; - } - sql += where; - - var del_rows = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\", \"del_rows\":" + del_rows + "}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetProductNotes(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - var add_user_name = RegexUtils.GetStringQuery(ref inputData, "add_user_name")?.Replace("'", "\\'"); - var is_get_detail = RegexUtils.GetStringQuery(ref inputData, "is_get_detail") == "true"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT p.* FROM `bxx`.`product_notes` p where 1=1 "; - string where = ""; - if (!string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "'" + string.Join("','", add_user_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.add_user_name in (" + add_user_name + ")"; - } - else - { - where += " and p.add_user_name='admin'"; - } - sql += where; - sql += " ORDER BY id DESC"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - try - { - JArray notesArr = new JArray(); - string notes_data = ""; - foreach (DataRow row in dt.Rows) - { - notes_data += row["notes"].ToString() + ","; - - if (is_get_detail) - { - JObject notesObj = new JObject(); - notesObj["id"] = row["id"].ParseToLong(); - notesObj["notes"] = row["notes"].ParseToString(); - notesObj["add_user_name"] = row["add_user_name"].ParseToString(); - notesArr.Add(notesObj); - } - } - var data = notes_data.Trim(','); - return "{\"code\":200,\"msg\":\"success\",\"data\":\"" + data + "\",\"notes\":" + JsonUtils.SerializeObject(notesArr) + "}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddProductNotes(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var add_user_name = RegexUtils.GetStringQuery(ref inputData, "add_user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "admin"; - } - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(notes)) - { - return "{\"code\":500,\"msg\":\"未指定要新增的组\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "INSERT IGNORE INTO `bxx`.`product_notes` (notes,add_user_name) VALUES ('" + notes + "','" + add_user_name + "')"; - - var add_rows = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\", \"add_rows\":" + add_rows + "}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelProductNotes(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var add_user_name = RegexUtils.GetStringQuery(ref inputData, "add_user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "admin"; - } - var id = RegexUtils.GetStringQuery(ref inputData, "notes_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(notes)) - { - return "{\"code\":500,\"msg\":\"未指定要删除的组\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "DELETE FROM `bxx`.`product_notes` p where 1=1"; - - string where = ""; - if (!string.IsNullOrEmpty(id)) - { - id = "" + string.Join(",", id.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + ""; - where += " and p.id in (" + id + ")"; - } - if (!string.IsNullOrEmpty(notes)) - { - notes = "'" + string.Join("','", notes.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.notes in (" + notes + ")"; - } - if (!string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "'" + string.Join("','", add_user_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.add_user_name in (" + add_user_name + ")"; - } - sql += where; - - var del_rows = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\", \"del_rows\":" + del_rows + "}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetProductCates(string inputData) - { - return "{\"code\":19999,\"msg\":\"接口废弃\"}"; - } - - public string GetProductMainCates(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - // 直接返回全部拼多多一级类目名称及ID - var pddCats1Str = "男装,办公设备/耗材/相关服务,文具电教/文化用品/商务用品,3C数码配件,古董文玩/邮币/字画/收藏,影音电器,手机,二手数码,笔记本电脑,数码相机/单反相机/摄像机,智能设备,厨房电器,大家电,生活电器,个人护理保健,网络设备,零食/坚果/特产,咖啡/麦片/冲饮,茶,粮油米面/南北干货/调味品,酒类,保健食品/膳食营养补充食品,传统滋补品,电子元器件市场,摩托车/装备/配件,汽车/用品/配件/改装,水产肉类/新鲜蔬果/熟食,女装/女士精品,新车/二手车,流行男鞋,女鞋,箱包皮具/女包/男包,内衣裤袜,腕表眼镜,服饰配件,本地化生活服务,电影/演出/体育赛事,个性定制/设计服务,购物卡/礼品卡/代金券,婚庆/摄影/摄像服务,教育培训,景点门票/周边游,旅游路线/商品/服务,生活缴费,数字生活娱乐,特价酒店/客栈/公寓旅馆,网络服务/软件,网上营业厅,休闲娱乐,游戏服务/直播,床上用品,电子/电工,基础建材,家居饰品,灯饰光源照明,家装主材,居家布艺,全屋定制,商业/办公家具,特色手工艺,五金工具,住宅家具,电动车/配件/交通工具,户外/登山/旅行野营用品,运动/瑜伽/健身/球类,运动包/户外包/配件,运动服/休闲服,运动鞋,自行车/骑行装备/零配件,OTC药品,精制中药材,隐形眼镜/护理液,奶粉/辅食/营养品/零食,婴童用品,童鞋/婴儿鞋/亲子鞋,童装/婴儿装/亲子装,玩具/童车/益智/积木/模型,孕产妇用品/孕妇装/营养,书籍/杂志/报纸,农机/农具/农膜,畜牧/养殖物资,农用物资,成人用品,宠物/宠物食品及用品,餐饮具,厨房/烹饪用具,收纳整理,家庭/个人清洁工具,居家日用,节庆用品/礼品,烟品/打火机/瑞士军刀,洗护清洁剂/卫生巾/纸/香薰,饰品/流行首饰/摆件/保养鉴定,珠宝/钻石/翡翠/黄金,鲜花园艺/绿植仿真/园林设备,乐器/吉他/钢琴/配件,装修设计/施工/监理,医疗健康服务,处方药,彩妆/香水/美妆工具,美容美体仪器,美发护发/假发,美容护肤/美体/精油,医疗器械,婴童尿裤,汽车服务,交通出行,房地产,模玩/动漫/周边/cos/桌游,音乐/影视/明星/音像,搬运/仓储/物流设备,标准件/零部件/工业耗材,机械设备,清洗/食品/商业设备,橡塑材料及制品,平板电脑/MID,品牌台机/品牌一体机/服务器,DIY电脑,闪存卡/U盘/存储/移动硬盘,电脑硬件/显示器/电脑周边,电玩/配件/游戏/攻略,包装用品,保健用品,特色农产品(非食用),239,2603,2629,2933,5217,5752,5834,5839,5851,5906,5921,5955,6076,6128,6209,6290,6398,6536,6586,6630,6758,6785,6883,7323,7629,7639,8172,8439,8502,8508,8509,8538,8583,8634,8669,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8736,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,11683,11684,11685,11686,11687,11688,11689,13176,13177,13178,14697,14740,14933,14966,15083,15356,15543,16155,16192,16209,16237,16288,16548,16676,16794,16901,16989,17134,17249,17285,17412,17455,17671,17803,18088,18270,18349,18482,18574,18601,18637,18814,19298,20078,20118,20340,20645,21417,22856,22881,22931,22964,22986,24383,24386,24402,24407,24426,24520,24636,24699,27063"; - var data = pddCats1Str; - return "{\"code\":200,\"msg\":\"success\",\"data\":\"" + data + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 查询商品替换sku - /// - /// - /// - /// - public string GetSkuImgReplaceList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var sku_img_replace_ids = RegexUtils.GetStringQuery(ref inputData, "sku_img_replace_ids")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(*) from bxx.sku_img_replace s where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(sku_img_replace_ids)) - where += " and s.id in (" + sku_img_replace_ids + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from bxx.sku_img_replace s where 1=1"; - - //where子句 - sql += where; - - sql += " order by s.img_type asc, s.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List skuImgReplaceLst = new List(); - foreach (DataRow row in dt.Rows) - { - sku_img_replace skuImgReplace = new sku_img_replace - { - id = Convert.ToInt32(row["id"]), - //img_base64 = row["img_base64"].ToString(), - img_md5 = row["img_md5"].ToString(), - img_url = row["img_url"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - img_type = row["img_type"].ToString(), - img_group = row["img_group"].ToString(), - }; - if (isDetail) - { - skuImgReplace.img_base64 = row["img_base64"].ToString(); - } - skuImgReplaceLst.Add(skuImgReplace); - } - var data = JsonUtils.SerializeObjectToString(skuImgReplaceLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 随机获取商品(无详情) 随机添加到上传列表所以不需要获取详情 - /// - /// - /// - public string GetProductListRandom(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var in_ext_codes = RegexUtils.GetStringQuery(ref inputData, "in_ext_codes")?.Replace("'", "\\'"); - var in_spu_ids = RegexUtils.GetStringQuery(ref inputData, "in_spu_ids")?.Replace("'", "\\'"); - var in_skc_ids = RegexUtils.GetStringQuery(ref inputData, "in_skc_ids")?.Replace("'", "\\'"); - var in_groups = RegexUtils.GetStringQuery(ref inputData, "in_groups")?.Replace("'", "\\'"); - var in_notes = RegexUtils.GetStringQuery(ref inputData, "in_notes")?.Replace("'", "\\'"); - var product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name"))?.Replace("'", "\\'"); - var in_cates = RegexUtils.GetStringQuery(ref inputData, "in_cates")?.Replace("'", "\\'"); - var wx_cat_1 = RegexUtils.GetStringQuery(ref inputData, "wx_cat_1")?.Replace("'", "\\'"); - var wx_cat_2 = RegexUtils.GetStringQuery(ref inputData, "wx_cat_2")?.Replace("'", "\\'"); - var wx_cat_3 = RegexUtils.GetStringQuery(ref inputData, "wx_cat_3")?.Replace("'", "\\'"); - var wx_safe_status = RegexUtils.GetStringQuery(ref inputData, "wx_safe_status")?.Replace("'", "\\'"); - var special_prod_type = RegexUtils.GetStringQuery(ref inputData, "special_prod_type")?.Replace("'", "\\'"); - if (special_prod_type.IsNullOrEmpty()) - special_prod_type = "普通商品"; - var product_get_type = RegexUtils.GetStringQuery(ref inputData, "product_get_type")?.Replace("'", "\\'"); - var is学员数据 = false; - if (product_get_type == "学员数据") - { - is学员数据 = true; - product_get_type = "多多外部数据,微信小店,微信店采"; - special_prod_type = "普通商品,爆款数据"; - } - var is_supplier_prod_ok = RegexUtils.GetStringQuery(ref inputData, "is_supplier_prod_ok")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") == "true"; // 不计数 - var prod_count = RegexUtils.GetStringQuery(ref inputData, "prod_count").ParseToInt(); - var add_days_less = RegexUtils.GetStringQuery(ref inputData, "add_days_less").ParseToNullableInt(); - var has_wx_format = RegexUtils.GetStringQuery(ref inputData, "has_wx_format")?.Replace("'", "\\'"); - var is_relation = RegexUtils.GetStringQuery(ref inputData, "is_relation").ParseToNullableInt(); - var ban_wx = RegexUtils.GetStringQuery(ref inputData, "ban_wx")?.Replace("'", "\\'"); - var ban_pdd = RegexUtils.GetStringQuery(ref inputData, "ban_pdd")?.Replace("'", "\\'"); - var add_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - if (is学员数据) - add_user_name = "admin"; - var no_fission_words = RegexUtils.GetStringQuery(ref inputData, "no_fission_words").ParseToBool(); // 未裂变标题 - var fission_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_words"))?.Replace("'", "\\'"); - var min_view_uv = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "min_view_uv"))?.ParseToNullableInt(); - if (min_view_uv > 0 && min_view_uv < 100) - min_view_uv = 100; - if (is学员数据) - min_view_uv = null; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - sql = " SELECT count(*)" + " FROM " + tableName + " p"; - //if (!string.IsNullOrEmpty(wx_safe_status)) - // sql += " FORCE INDEX (index_wx_safe_status)"; - //sql += " LEFT JOIN bxx.jst_supplier_ban_platform b ON (p.skc_id=b.coid or p.real_coid=b.coid)" - sql += " WHERE p.is_del=0"; - - string where = ""; - //where += " AND (b.ban_wx IS NULL OR b.ban_wx=0)"; - if (!string.IsNullOrEmpty(in_ext_codes)) - { - in_ext_codes = "'" + string.Join("','", in_ext_codes.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.ext_code in (" + in_ext_codes + ")"; - } - if (!string.IsNullOrEmpty(in_skc_ids)) - { - in_skc_ids = "'" + string.Join("','", in_skc_ids.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.skc_id in (" + in_skc_ids + ")"; - } - if (!string.IsNullOrEmpty(in_spu_ids)) - { - in_spu_ids = "'" + string.Join("','", in_spu_ids.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.spu_id in (" + in_spu_ids + ")"; - } - if (!string.IsNullOrEmpty(in_groups)) - { - in_groups = "'" + string.Join("','", in_groups.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.group in (" + in_groups + ")"; - } - if (!string.IsNullOrEmpty(in_notes)) - { - in_notes = "'" + string.Join("','", in_notes.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.notes in (" + in_notes + ")"; - } - if (!string.IsNullOrEmpty(in_cates)) - { - in_cates = "'" + string.Join("','", in_cates.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and (p.cat_name in (" + in_cates + ") or p.main_cat_name in (" + in_cates + "))"; - } - if (!string.IsNullOrEmpty(product_name)) - { - where += " and p.product_name='" + product_name + "'"; - } - if (!string.IsNullOrEmpty(wx_cat_1)) - { - where += " and p.wx_cat_1 in (" + wx_cat_1 + ")"; - } - if (!string.IsNullOrEmpty(wx_cat_2)) - { - where += " and p.wx_cat_2 in (" + wx_cat_2 + ")"; - } - if (!string.IsNullOrEmpty(wx_cat_3)) - { - where += " and p.wx_cat_3 in (" + wx_cat_3 + ")"; - } - string where1 = ""; - string where2 = ""; - if (!string.IsNullOrEmpty(product_get_type)) - { - where1 = " and p.product_get_type in ('" + product_get_type.Replace(",", "','") + "')"; - //where1 = " and ((product_get_type = '多多外部数据') OR (product_get_type = '微信小店') OR (product_get_type = '微信店采' AND wx_safe_status = '安全商品')) "; - if (is学员数据) - { - // 多多外部数据20% 微信小店数据30% 微信店采50% - //where2 = " and (RAND() < 0.066 AND product_get_type = '多多外部数据' OR RAND() < 0.3 AND product_get_type = '微信小店' OR RAND() <= 1 AND product_get_type = '微信店采') "; - where2 = " and ((RAND() < 0.055 AND product_get_type = '多多外部数据') OR (RAND() < 0.39 AND product_get_type = '微信小店') OR (RAND() <= 1 AND product_get_type = '微信店采' AND wx_safe_status = '安全商品')) "; - } - where += where1; - } - if (!string.IsNullOrEmpty(wx_safe_status)) - where += " and p.wx_safe_status in ('" + wx_safe_status.Replace(",", "','") + "')"; - //if (!string.IsNullOrEmpty(special_prod_type)) // 普通商品 爆款数据 - // where += " and p.special_prod_type ='" + special_prod_type + "'"; - if (!string.IsNullOrEmpty(special_prod_type)/* && special_prod_type != "普通商品,爆款数据"*/) - where += " and p.special_prod_type in ('" + special_prod_type.Replace(",", "','") + "')"; - // 供应商货源是否已完成初始设置 - if (!string.IsNullOrEmpty(is_supplier_prod_ok)) - { - if (is_supplier_prod_ok == "1" || is_supplier_prod_ok == "是" || is_supplier_prod_ok == "已设置") - where += " AND wx_cat_leaf > 0 AND send_to_out_server IN (1,127) and distribution_set IN (1,127)"; - else - where += " AND (wx_cat_leaf IS NULL OR send_to_out_server NOT IN (1,127) OR distribution_set NOT IN (1,127))"; - } - else - { - where += " AND send_to_out_server IN (0,1,127) and distribution_set IN (0,1,2,127)"; - } - if (!add_days_less.IsNullOrZero()) - { - where += " and add_time > '" + DateTime.Now.AddDays(-add_days_less.ParseToInt()).ToString("yyyy-MM-dd") + "'"; - } - if (!has_wx_format.IsNullOrEmpty()) - { - where += " and has_wx_format = '" + has_wx_format + "'"; - } - if (is_relation != null) - { - where += " and is_relation = " + is_relation; - } - if (ban_wx != null) - { - where += " and p.ban_wx=" + ban_wx; - } - else - { - where += " and p.ban_wx in (0,1) "; - } - if (ban_pdd != null) - { - where += " and p.ban_pdd=" + ban_pdd; - } - else - { - where += " and p.ban_pdd in (0,1) "; - } - if (!string.IsNullOrEmpty(add_user_name)) - { - add_user_name = "'" + string.Join("','", add_user_name.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.add_user_name in (" + add_user_name + ")"; - } - if (no_fission_words) - { - where += " and (fission_words='' or fission_words IS NULL)"; - } - if (!string.IsNullOrEmpty(fission_words)) - { - where += " and fission_words LIKE '" + fission_words + "%'"; - } - if (min_view_uv > 0) - { - where += " and view_uv >= " + min_view_uv + ""; - } - sql += where; - - int count = prod_count; - if (product_get_type == "厂商直采" && count > 1000) - count = (count / 2.0).ParseToInt(); - if (is学员数据 && count >= 450) - count = (count / 3.0).ParseToInt(); - if (!is_not_count) - { - count = mySql.ExecuteRowCount(sql); - Thread.Sleep(1500); - } - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - if (is学员数据) - { - where = where.Replace(where1, where2); - } - - sql = " SELECT p.id" + - " FROM " + tableName + " p" + - //" LEFT JOIN bxx.jst_supplier_ban_platform b ON (p.skc_id=b.coid OR p.real_coid=b.coid)" + - " WHERE p.is_del=0"; - //where子句 - sql += where; - - sql += " ORDER BY RAND()"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - - //var limit = RandomUtils.GetId(Math.Max(0, count - page_size)); - //sql += " limit " + limit + "," + 5000; - - dt = mySql.ExecuteDataTable(sql); - Thread.Sleep(100); - if (!string.IsNullOrEmpty(mySql.Message) || dt == null) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - - var db_ids = string.Join(",", dt.Rows.Cast().Select(r => r["id"].ParseToInt()).OrderBy(x => RandomUtils.GetId(10000000)).Take(page_size)); - sql = "SELECT p.id,p.from_shop_id,p.spu_id,p.skc_id,p.main_cat_id,p.main_cat_name,p.cat_id,p.cat_name,p.price_text,p.ext_code," + - " p.product_name,p.main_img,p.group,p.notes,p.add_time,p.mdy_time,p.product_get_type,fission_words," + - " p.wx_safe_status,p.special_prod_type,p.wx_cat_1,p.wx_cat_2,p.wx_cat_3,p.send_to_out_server," + - " p.wx_cat_leaf,p.is_relation" + - " from " + tableName + " p where p.is_del=0"; - //where子句 - //sql += where; - sql += " and id in (" + db_ids + ")"; - - //sql += " ORDER BY RAND()"; - //sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - Thread.Sleep(500); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - from_shop_id = row["from_shop_id"].ToString(), - spu_id = row["spu_id"].ToString(), - skc_id = row["skc_id"].ToString(), - main_cat_id = row["main_cat_id"].ToString(), - main_cat_name = row["main_cat_name"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - wx_cat_1 = row["wx_cat_1"].ToString(), - wx_cat_2 = row["wx_cat_2"].ToString(), - wx_cat_3 = row["wx_cat_3"].ToString(), - wx_cat_leaf = row["wx_cat_leaf"].ToString(), - price_text = row["price_text"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - group = row["group"].ToString(), - notes = row["notes"].ToString(), - product_get_type_text = row["product_get_type"].ParseToString(), - //sale_count = row["sale_count"].ParseToInt(), - //sale_count_text = row["sale_count_text"].ToString(), - wx_safe_status = row["wx_safe_status"].ToString(), - special_prod_type = row["special_prod_type"].ParseToString(), - send_to_out_server = row["send_to_out_server"].ParseToInt(), - is_relation = row["is_relation"].ParseToInt(), - fission_words = row["fission_words"].ParseToString(), - }; - productLst.Add(prod); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(productLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - if (product_get_type == "厂商直采" && count > 500) - count = (count * 2.0).ParseToInt(); - if (is学员数据 && count >= 150) - count = (count * 3.0).ParseToInt(); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 获取拼多多商品随机sku替换图 - /// - /// - /// - public string GetSkuReplaceImgListRandom(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var in_img_type = RegexUtils.GetStringQuery(ref inputData, "in_img_type")?.Replace("'", "\\'"); - var in_img_group = RegexUtils.GetStringQuery(ref inputData, "in_img_group")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(*) from bxx.sku_img_replace s where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(in_img_type) && !string.IsNullOrWhiteSpace(in_img_group)) - { - in_img_type = "'" + string.Join("','", in_img_type.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - in_img_group = "'" + string.Join("','", in_img_group.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and (s.img_type in (" + in_img_type + ") or s.img_group in (" + in_img_group + ")"; - } - else if (!string.IsNullOrWhiteSpace(in_img_type)) - { - in_img_type = "'" + string.Join("','", in_img_type.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and s.img_type in (" + in_img_type + ")"; - } - else if (!string.IsNullOrWhiteSpace(in_img_group)) - { - in_img_group = "'" + string.Join("','", in_img_group.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and s.img_group in (" + in_img_group + ")"; - } - - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select s.img_url from bxx.sku_img_replace s where 1=1"; - - //where子句 - sql += where; - - sql += " ORDER BY RAND()"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List imgs = new List(); - foreach (DataRow row in dt.Rows) - { - imgs.Add(row["img_url"].ToString()); - } - var data = JsonUtils.SerializeObjectToString(imgs); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(id)) - { - return "{\"code\":500,\"msg\":\"删除失败:请指定要删除的数据!\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - if (tableName != "bxx.product") - sql = "delete from " + tableName + " where id='" + id + "'"; - else - sql = "update " + tableName + " set is_del=1 where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 编辑商品备注信息、货号、头尾词和分词 - /// - /// - /// - /// - public string MdyDBProduct(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string in_db_ids = RegexUtils.GetStringQuery(ref inputData, "in_db_ids")?.Replace("'", "\\'"); - string product_name = RegexUtils.GetStringQuery(ref inputData, "product_name")?.Replace("'", "\\'"); - string group = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group"))?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code"))?.Replace("'", "\\'"); - string fission_imgs = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_imgs"))?.Replace("'", "\\'"); - string fission_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_words"))?.Replace("'", "\\'"); - string head_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "head_words"))?.Replace("'", "\\'"); - string end_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "end_words"))?.Replace("'", "\\'"); - string sku_edit_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_edit_json"))?.Replace("'", "\\'"); - string wx_safe_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_safe_status"))?.Replace("'", "\\'"); - string special_prod_type = RegexUtils.GetStringQuery(ref inputData, "special_prod_type")?.Replace("'", "\\'"); - string wx_cat_1 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_1"))?.Replace("'", "\\'"); - string wx_cat_2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_2"))?.Replace("'", "\\'"); - string wx_cat_3 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_3"))?.Replace("'", "\\'"); - string wx_cat_leaf = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_cat_leaf"))?.Replace("'", "\\'"); - string main_cat_id = RegexUtils.GetStringQuery(ref inputData, "main_cat_id")?.Replace("'", "\\'"); - string main_cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_cat_name"))?.Replace("'", "\\'"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id")?.Replace("'", "\\'"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name"))?.Replace("'", "\\'"); - if (!string.IsNullOrEmpty(special_prod_type) && special_prod_type != "爆款数据") - special_prod_type = "普通商品"; - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - - sql = "update " + tableName + " p set"; - if (product_name != null) - sql += " p.product_name='" + product_name + "',"; - if (group != null) - sql += " p.group='" + group + "',"; - if (notes != null) - sql += " p.notes='" + notes + "',"; - if (ext_code != null) - sql += " p.ext_code='" + ext_code + "',"; - if (fission_imgs != null) - sql += " p.fission_imgs='" + fission_imgs + "',"; - if (fission_words != null) - sql += " p.fission_words='" + fission_words + "',"; - if (head_words != null) - sql += " p.head_words='" + head_words + "',"; - if (end_words != null) - sql += " p.end_words='" + end_words + "',"; - if (sku_edit_json != null) - sql += " p.sku_edit_json='" + sku_edit_json + "',"; - if (wx_safe_status != null) - sql += " p.wx_safe_status='" + wx_safe_status + "',"; - if (special_prod_type != null && special_prod_type != "") - sql += " p.special_prod_type='" + special_prod_type + "',"; - if (!wx_cat_1.IsNullOrEmpty()) - sql += " p.wx_cat_1=" + wx_cat_1 + ","; - if (!wx_cat_2.IsNullOrEmpty()) - sql += " p.wx_cat_2=" + wx_cat_2 + ","; - if (!wx_cat_3.IsNullOrEmpty()) - sql += " p.wx_cat_3=" + wx_cat_3 + ","; - if (!wx_cat_leaf.IsNullOrEmpty()) - sql += " p.wx_cat_leaf=" + wx_cat_leaf + ","; - if (main_cat_id != null) - sql += " p.main_cat_id='" + main_cat_id + "',"; - if (cat_id != null) - sql += " p.cat_id='" + cat_id + "',"; - if (main_cat_name != null) - sql += " p.main_cat_name='" + main_cat_name + "',"; - if (cat_name != null) - sql += " p.cat_name='" + cat_name + "',"; - sql = sql.TrimEnd(','); - if (in_db_ids != null) - { - sql += " where id in (" + in_db_ids + ");"; - } - else - { - sql += " where id=" + id + ";"; - } - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddSkuImgReplace(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string img_md5 = RegexUtils.GetStringQuery(ref inputData, "img_md5"); - string img_base64 = RegexUtils.GetStringQuery(ref inputData, "img_base64"); - string img_url = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "img_url")); - string img_type = RegexUtils.GetStringQuery(ref inputData, "img_type")?.Replace("'", "\\'"); - string img_group = RegexUtils.GetStringQuery(ref inputData, "img_group")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select id from bxx.sku_img_replace where img_md5='" + img_md5 + "';"; - var bRst = false; - var rst = mySql.ExecuteFirstInt(sql).ParseToLong(); - if (rst <= 0) - { - sql = "insert into bxx.sku_img_replace (img_md5,img_base64,img_url,img_type,img_group) " + - "values ('" + img_md5 + "','" + img_base64 + "','" + img_url + "','" + img_type + "','" + img_group + "');"; - rst = mySql.ExecuteInsertId(sql); - } - if (rst > 0) - { - bRst = true; - } - mySql.Close(); - if (rst > 0 && bRst) - { - return "{\"code\":200,\"msg\":\"success\",\"sku_img_replace_id\":" + rst + "}"; - } - - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdySkuImgReplace(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string img_md5 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "img_md5")); - string img_base64 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "img_base64")); - string img_url = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "img_url")); - string img_type = RegexUtils.GetStringQuery(ref inputData, "img_type")?.Replace("'", "\\'"); - string img_group = RegexUtils.GetStringQuery(ref inputData, "img_group")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.sku_img_replace set"; - if (img_md5 != null) - sql += " img_md5='" + img_md5 + "',"; - if (img_base64 != null) - sql += " img_base64='" + img_base64 + "',"; - if (img_url != null) - sql += " img_url='" + img_url + "',"; - if (img_type != null) - sql += " img_type='" + img_type + "',"; - if (img_group != null) - sql += " img_group='" + img_group + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddSkuImg(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name").Replace("'", "\\'"); - string img_md5 = RegexUtils.GetStringQuery(ref inputData, "img_md5").Replace("'", "\\'"); - string img_base64 = RegexUtils.GetStringQuery(ref inputData, "img_base64").Replace("'", "\\'"); - string img_url = RegexUtils.GetStringQuery(ref inputData, "img_url").Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - int sku_img_replace_id = 0; - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select id from bxx.sku_img where img_md5='" + img_md5 + "';"; - var bRst = false; - var rst = mySql.ExecuteFirstInt(sql).ParseToLong(); - if (rst <= 0) - { - sql = "insert into bxx.sku_img (img_md5,img_base64,img_url) " + - "values ('" + img_md5 + "','" + img_base64 + "','" + img_url + "');"; - rst = mySql.ExecuteInsertId(sql); - if (rst > 0) - { - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"insert_id\":" + rst + "}"; - } - } - else - { - sku_img_replace_id = (int)rst; - sql = "update bxx.sku_img set img_url='" + img_url + "' where img_md5='" + img_md5 + "';"; - - bRst = mySql.ExecuteNonQuery(sql); - if (bRst) - { - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"update_id\":" + rst + "}"; - } - } - mySql.Close(); - - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WxApiGetWxAllCate(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - //var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - //string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - //if (time1 != EncrypUtil.Encryption(time)) - // return "{\"code\":50000,\"msg\":\"校验失败\"}"; - string token = RegexUtils.GetStringQuery(ref inputData, "token", true); - return HttpUtils.WxApiGetResponse("https://api.weixin.qq.com/shop/ec/category/all?access_token=" + token, ""); - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WxApiDropshipSearch(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - string token = RegexUtils.GetStringQuery(ref inputData, "token", true)?.Replace("'", "\\'"); - string order_id = RegexUtils.GetStringQuery(ref inputData, "order_id", true)?.Replace("'", "\\'"); - string status = RegexUtils.GetStringQuery(ref inputData, "status", true)?.Replace("'", "\\'"); - //string data = "{\"search_condition\":{\"order_id\":\"37000204335323251\" },\"page_info\":{\"offset\": 0,\"limit\":10}}"; - string data = "{\"search_condition\":{\"order_id\":\"" + order_id + "\",\"status\":" + status + "}}"; - return HttpUtils.WxApiPostResponse("https://api.weixin.qq.com/channels/ec/order/dropship/search?access_token=" + token, data, ""); - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 微信小店分配订单代发 - /// - /// - /// - public string WxApiDropshipAssign(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var token = RegexUtils.GetStringQuery(ref inputData, "token")?.Replace("'", "\\'"); - var order_id = RegexUtils.GetStringQuery(ref inputData, "order_id")?.Replace("'", "\\'"); - //var supplier_appid = RegexUtils.GetStringQuery(ref inputData, "supplier_appid")?.Replace("'", "\\'"); - var dropship_product_list = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "dropship_product_list"))?.Replace("'", "\\'"); - //{ - // "order_id": "37012940902395351", - // "supplier_appid": "wxabc", - // "dropship_product_list": [ - // { - // "spu_id": "1253129080", - // "sku_id": "2983950535", - // "product_cnt": 3 - // } - // ] - //} - - //{ "code":0,"data":{ "list":[{ "name":"29供货商","appid":"wxfc630d60a1af6c6f","status":1,"bindAuditStatus":1,"unbindAuditStatus":0,"bindTime":1782903213,"unbindTime":0,"updateTime":1782903213,"actionSource":0,"remark":"","headImg":""}],"totalCount":1} } - - try - { - - JObject obj = new JObject(); - obj["order_id"] = order_id; - obj["supplier_appid"] = "wxfc630d60a1af6c6f"; - JArray array = JArray.Parse(dropship_product_list); - obj["dropship_product_list"] = array; - - return HttpUtils.WxApiPostResponse("https://api.weixin.qq.com/channels/ec/order/dropship/assign?access_token=" + token, JsonUtils.SerializeObject(obj), ""); - } - catch - { - - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WxApiDropshipCancel(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var token = RegexUtils.GetStringQuery(ref inputData, "token")?.Replace("'", "\\'"); - var order_id = RegexUtils.GetStringQuery(ref inputData, "order_id")?.Replace("'", "\\'"); - var ds_order_id = RegexUtils.GetStringQuery(ref inputData, "ds_order_id")?.Replace("'", "\\'"); - var dropship_product_list = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "dropship_product_list"))?.Replace("'", "\\'"); - - try - { - JObject obj = new JObject(); - obj["order_id"] = order_id; - obj["ds_order_id"] = ds_order_id; - JArray array = JArray.Parse(dropship_product_list); - obj["dropship_product_list"] = array; - - return HttpUtils.WxApiPostResponse("https://api.weixin.qq.com/channels/ec/order/dropship/cancel?access_token=" + token, JsonUtils.SerializeObject(obj), ""); - } - catch - { - - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WxApiCategoryClassify(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string post_data = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "post_data")); - string token = RegexUtils.GetStringQuery(ref inputData, "token"); - - return HttpUtils.WxApiPostResponse("https://api.weixin.qq.com/channels/ec/product/category/classify?access_token=" + token, post_data, ""); - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WxApiUploadImage(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string img_base64 = RegexUtils.GetStringQuery(ref inputData, "img_base64")?.Replace("'", "\\'"); - if (!string.IsNullOrEmpty(img_base64)) - { - return WxApiUploadImageBase64(inputData, img_base64); - } - bool is_file = RegexUtils.GetStringQuery(ref inputData, "is_file")?.Replace("'", "\\'").ToLower() == "true"; - if (is_file) - { - return WxApiUploadImageFile(inputData); - } - - - string post_data = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "post_data")); - string token = RegexUtils.GetStringQuery(ref inputData, "token"); - - //https://api.weixin.qq.com/shop/ec/basics/img/upload?access_token=ACCESS_TOKEN&upload_type=1&resp_type=1 - return HttpUtils.WxApiPostResponse("https://api.weixin.qq.com/shop/ec/basics/img/upload?access_token=" + token + - "&upload_type=1&resp_type=1", post_data, ""); - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WxApiUploadImageFile(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string token = RegexUtils.GetStringQuery(ref inputData, "token")?.Replace("'", "\\'"); - string img_url = RegexUtils.GetStringQuery(ref inputData, "img_url")?.Replace("'", "\\'"); - string random_code = RegexUtils.GetStringQuery(ref inputData, "random_code")?.Replace("'", "\\'"); - int img_width = RegexUtils.GetStringQuery(ref inputData, "width").ParseToInt(); - int img_height = RegexUtils.GetStringQuery(ref inputData, "height").ParseToInt(); - bool is_keep_file = RegexUtils.GetStringQuery(ref inputData, "is_keep_file").ParseToBool(); - - string getImgError; - var image = HttpUtils.GetUrlImg(img_url.Replace("https://", "http://"), out getImgError); - if (!string.IsNullOrEmpty(getImgError) || image == null) - { - return "{\"code\":50001,\"msg\":\"获取图片失败:" + getImgError + "\"}"; - } - try - { - if (img_width.IsNullOrZero() || img_height.IsNullOrZero()) - { - img_width = image.Width; - img_height = image.Height; - } - var imageBg = new Bitmap(img_width, img_height); - using (Graphics g = Graphics.FromImage(imageBg)) - { - g.DrawImage(image, new Rectangle(0, 0, imageBg.Width, imageBg.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); - if (!string.IsNullOrEmpty(random_code) && random_code.ToLower() == "true") - { - g.FillRectangle(new SolidBrush(Color.FromArgb(RandomUtils.GetId(256), RandomUtils.GetId(256), RandomUtils.GetId(256))), - new Rectangle(RandomUtils.GetId(imageBg.Width - 30), RandomUtils.GetId(imageBg.Height - 30), 30, 30)); - } - } - - //string tempImgPath = Path.GetTempPath() + "\\" + RandomUtils.GetWordNumber(8).ToLower(); - string tempImgPath = "C:\\tempImg\\" + RandomUtils.GetWordNumber(8).ToLower(); - if (!Directory.Exists(tempImgPath)) - Directory.CreateDirectory(tempImgPath); - string imgFullPath = tempImgPath + "\\" + EncrypUtil.GetMd5(img_url) + ".jpg"; - imageBg.Save(imgFullPath, System.Drawing.Imaging.ImageFormat.Jpeg); - - var apiUpImgFileRst = HttpUtils.WxApiUploadImgFile(imgFullPath, imageBg.Width, imageBg.Height, token); - if (string.IsNullOrEmpty(apiUpImgFileRst)) - apiUpImgFileRst = "{\"code\":50002,\"msg\":\"图片传输超时\"}"; - - if (!is_keep_file) - { - try - { - // 删除文件夹及其所有内容 - Directory.Delete(tempImgPath, true); // 第二个参数为true表示递归删除所有子文件夹和文件 - } - catch (Exception ex) - { - } - } - return apiUpImgFileRst; - } - catch (Exception ex) - { - return "{\"code\":50001,\"msg\":\"上传图片失败:" + ex.Message + "\"}"; - } - - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WxApiUploadImageBase64(string inputData, string imgBase64) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string token = RegexUtils.GetStringQuery(ref inputData, "token")?.Replace("'", "\\'"); - string img_url = RegexUtils.GetStringQuery(ref inputData, "img_url")?.Replace("'", "\\'"); - bool is_keep_file = RegexUtils.GetStringQuery(ref inputData, "is_keep_file").ParseToBool(); - - is_keep_file = System.Configuration.ConfigurationManager.ConnectionStrings["IsKeepBase64UploadImgFile"]?.ConnectionString == "1"; - - try - { - byte[] imageBytes = Convert.FromBase64String(imgBase64); - using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length)) - { - // 创建Image对象 - Image imageBg = Image.FromStream(ms, true); - - string tempImgPath = "C:\\tempImg\\" + RandomUtils.GetWordNumber(16).ToLower(); - if (!Directory.Exists(tempImgPath)) - Directory.CreateDirectory(tempImgPath); - string imgFullPath = tempImgPath + "\\" + EncrypUtil.GetMd5(img_url) + ".jpg"; - imageBg.Save(imgFullPath, System.Drawing.Imaging.ImageFormat.Jpeg); - - var apiUpImgFileRst = HttpUtils.WxApiUploadImgFile(imgFullPath, imageBg.Width, imageBg.Height, token); - if (string.IsNullOrEmpty(apiUpImgFileRst)) - apiUpImgFileRst = "{\"code\":50002,\"msg\":\"图片传输超时\"}"; - - if (!is_keep_file) - { - try - { - // 删除文件夹及其所有内容 - Directory.Delete(tempImgPath, true); // 第二个参数为true表示递归删除所有子文件夹和文件 - } - catch (Exception ex) - { - } - } - return apiUpImgFileRst; - } - } - catch (Exception ex) - { - return "{\"code\":50001,\"msg\":\"上传图片失败:" + ex.Message + "\"}"; - } - - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - - public string AddJSTSku(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - string supplierId = RegexUtils.GetStringQuery(ref inputData, "supplierId")?.Replace("'", "\\'"); - string supplierName = RegexUtils.GetStringQuery(ref inputData, "supplierName"); - string skuId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "skuId"))?.Replace("'", "\\'"); - string itemSpuId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemSpuId"))?.Replace("'", "\\'"); - string pic = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pic"))?.Replace("'", "\\'"); - string itemName = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemName")); - string styleCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "styleCode")); - string itemCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemCode"))?.Replace("'", "\\'"); - string color = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "color"))?.Replace("'", "\\'"); - string spec = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spec"))?.Replace("'", "\\'"); - string salePrice = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "salePrice"))?.Replace("'", "\\'"); - string supplyPrice = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "supplyPrice"))?.Replace("'", "\\'"); - string stock = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "stock"))?.Replace("'", "\\'"); - string stockTime = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "stockTime"))?.Replace("'", "\\'"); - string weight = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "weight"))?.Replace("'", "\\'"); - string status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "status"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "insert into "; - sql += "bxx.product_sku_restore "; - sql += "(coid,supplierId,supplierName,skuId,itemSpuId,pic,itemName,styleCode,itemCode,color,spec,stockTime," + - "salePrice,supplyPrice,stock,weight) " + - "values ('" + coid + "','" + supplierId + "','" + supplierName + "','" + skuId + "','" + itemSpuId + "','" + - pic + "','" + itemName + "','" + styleCode + "','" + itemCode + "','" + color + "','" + spec + "','" + stockTime + "'," + - (salePrice.IsNullOrEmpty() ? "null" : salePrice) + "," + supplyPrice + "," + stock + "," + weight + ");"; - - List paramLst = new List(); - //paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = product_json, }); - //paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "size_json", Value = size_json, }); - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyJSTSku(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - string supplierId = RegexUtils.GetStringQuery(ref inputData, "supplierId")?.Replace("'", "\\'"); - string supplierName = RegexUtils.GetStringQuery(ref inputData, "supplierName"); - string skuId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "skuId"))?.Replace("'", "\\'"); - string itemSpuId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemSpuId"))?.Replace("'", "\\'"); - string pic = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pic"))?.Replace("'", "\\'"); - string itemName = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemName")); - string styleCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "styleCode")); - string itemCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "itemCode"))?.Replace("'", "\\'"); - string color = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "color"))?.Replace("'", "\\'"); - string spec = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spec"))?.Replace("'", "\\'"); - string salePrice = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "salePrice"))?.Replace("'", "\\'"); - string supplyPrice = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "supplyPrice"))?.Replace("'", "\\'"); - string stock = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "stock"))?.Replace("'", "\\'"); - string stockTime = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "stockTime"))?.Replace("'", "\\'"); - string weight = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "weight"))?.Replace("'", "\\'"); - string status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "status"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "update "; - sql += "bxx.product_sku_restore p set "; - if (coid != null) - sql += " p.coid='" + coid + "',"; - if (supplierId != null) - sql += " p.supplierId='" + supplierId + "',"; - if (supplierName != null) - sql += " p.supplierName='" + supplierName + "',"; - if (pic != null) - sql += " p.pic='" + pic + "',"; - if (itemName != null) - sql += " p.itemName='" + itemName + "',"; - if (styleCode != null) - sql += " p.styleCode='" + styleCode + "',"; - if (itemCode != null) - sql += " p.itemCode='" + itemCode + "',"; - if (color != null) - sql += " p.color='" + color + "',"; - if (spec != null) - sql += " p.spec='" + spec + "',"; - if (salePrice != null) - sql += " p.salePrice=" + salePrice + ","; - if (supplyPrice != null) - sql += " p.supplyPrice=" + supplyPrice + ","; - if (stock != null) - sql += " p.stock=" + stock + ","; - if (stockTime != null) - sql += " p.stockTime='" + stockTime + "',"; - if (salePrice != null) - sql += " p.salePrice=" + salePrice + ","; - if (weight != null) - sql += " p.weight='" + weight + "',"; - sql = sql.TrimEnd(','); - sql += " where skuId='" + skuId + "' and itemSpuId='" + itemSpuId + "';"; - - List paramLst = new List(); - //paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = product_json, }); - //paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "size_json", Value = size_json, }); - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetJSTSkuList(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["LimitVersion"]?.ConnectionString).ParseToInt()) - return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - var search_coid = RegexUtils.GetStringQuery(ref inputData, "search_coid")?.Replace("'", "\\'"); - var search_supplierId = RegexUtils.GetStringQuery(ref inputData, "search_supplierId")?.Replace("'", "\\'"); - var search_supplierName = RegexUtils.GetStringQuery(ref inputData, "search_supplierName")?.Replace("'", "\\'"); - var search_skuId = RegexUtils.GetStringQuery(ref inputData, "search_skuId")?.Replace("'", "\\'"); - var search_itemSpuId = RegexUtils.GetStringQuery(ref inputData, "search_itemSpuId")?.Replace("'", "\\'"); - var search_itemName = RegexUtils.GetStringQuery(ref inputData, "search_itemName")?.Replace("'", "\\'"); - var search_styleCode = RegexUtils.GetStringQuery(ref inputData, "search_styleCode")?.Replace("'", "\\'"); - var search_itemCode = RegexUtils.GetStringQuery(ref inputData, "search_itemCode")?.Replace("'", "\\'"); - var search_color = RegexUtils.GetStringQuery(ref inputData, "search_color")?.Replace("'", "\\'"); - var search_spec = RegexUtils.GetStringQuery(ref inputData, "search_spec")?.Replace("'", "\\'"); - var search_status = RegexUtils.GetStringQuery(ref inputData, "search_status")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(*) from bxx.product_sku_restore p where 1=1"; - - string where = ""; - if (!string.IsNullOrEmpty(search_coid)) - where += " and p.coid ='" + search_coid + "'"; - if (!string.IsNullOrEmpty(search_supplierId)) - where += " and p.supplierId ='" + search_supplierId + "'"; - if (!string.IsNullOrEmpty(search_supplierName)) - where += " and p.supplierName ='" + search_supplierName + "'"; - if (!string.IsNullOrEmpty(search_skuId)) - where += " and p.skuId ='" + search_skuId + "'"; - if (!string.IsNullOrEmpty(search_itemSpuId)) - where += " and p.itemSpuId ='" + search_itemSpuId + "'"; - if (!string.IsNullOrEmpty(search_itemName)) - where += " and p.itemName like '%" + search_itemName + "%'"; - if (!string.IsNullOrEmpty(search_styleCode)) - where += " and p.styleCode ='" + search_styleCode + "'"; - if (!string.IsNullOrEmpty(search_itemCode)) - where += " and p.itemCode ='" + search_itemCode + "'"; - if (!string.IsNullOrEmpty(search_color)) - where += " and p.color ='" + search_color + "'"; - if (!string.IsNullOrEmpty(search_spec)) - where += " and p.spec ='" + search_spec + "'"; - if (!string.IsNullOrEmpty(search_status)) - where += " and p.status ='" + search_status + "'"; - - sql += where; - - var count = 0; - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select p.* from bxx.product_sku_restore p" + - " where 1=1"; - - //where子句 - sql += where; - sql += " order by p.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - JSTListProductSkuInfo prod = new JSTListProductSkuInfo - { - id = Convert.ToInt32(row["id"]), - coid = row["coid"].ToString(), - color = row["color"].ToString(), - itemCode = row["itemCode"].ToString(), - itemName = row["itemName"].ToString(), - itemSpuId = row["itemSpuId"].ToString(), - pic = row["pic"].ToString(), - salePrice = row["salePrice"].ParseToDecimal(), - skuId = row["skuId"].ToString(), - spec = row["spec"].ToString(), - status = row["status"].ToString(), - stock = row["stock"].ParseToInt(), - styleCode = row["styleCode"].ParseToString(), - supplierId = row["supplierId"].ToString(), - supplierName = row["supplierName"].ToString(), - supplyPrice = row["supplyPrice"].ParseToDecimal(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - stockTime = row["stockTime"].ParseToString().ParseToDateTime(), - weight = row["weight"].ParseToDecimal(), - }; - productLst.Add(prod); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(productLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string SetRandomCompanyProductConfig(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string product_group = RegexUtils.GetStringQuery(ref inputData, "product_group")?.Replace("'", "\\'"); - string product_interval = RegexUtils.GetStringQuery(ref inputData, "product_interval")?.Replace("'", "\\'"); - string is_on = RegexUtils.GetStringQuery(ref inputData, "is_on")?.Replace("'", "\\'"); - - string sql = "update bxx.product_com_random set "; - if (product_group != null) - sql += "product_group='" + product_group + "',"; - if (product_interval != null) - sql += "product_interval=" + product_interval + ","; - if (is_on != null) - sql += "is_on=" + is_on + ","; - sql = sql.TrimEnd(','); - sql += " where 1=1;"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 随机工厂商品 - /// - /// - /// - public string GetRandomCompanyProductConfig(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select p.* from bxx.product_com_random p" + - " where 1=1;"; - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - try - { - string product_group = dt.Rows[0]["product_group"].ParseToString(); - string product_interval = dt.Rows[0]["product_interval"].ParseToString(); - string is_on = dt.Rows[0]["is_on"].ParseToString(); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\"" + - ",\"product_group\":\"" + product_group + "\"" + - ",\"product_interval\":" + product_interval + - ",\"is_on\":" + is_on + - ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\"}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddRelation(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少上家编号\"}"; - } - var index = RegexUtils.GetStringQuery(ref inputData, "index").ParseToNullableLong(); - if (index == null) - index = Math.Abs(up_spu_id.GetHashCode()) % 128; - var up_goods_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "up_goods_name")); - if (string.IsNullOrEmpty(up_goods_name)) - { - return "{\"code\":500,\"msg\":\"缺少上家商品名称\"}"; - } - var from_site = RegexUtils.GetStringQuery(ref inputData, "from_site")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(from_site)) - { - return "{\"code\":500,\"msg\":\"缺少关联商品平台\"}"; - } - var goods_id = RegexUtils.GetStringQuery(ref inputData, "goods_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(goods_id)) - { - return "{\"code\":500,\"msg\":\"缺少关联商品编号\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"缺少关联店铺编号\"}"; - } - var price_max = RegexUtils.GetStringQuery(ref inputData, "price_max")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(price_max)) - { - return "{\"code\":500,\"msg\":\"缺少关联最高价格\"}"; - } - var price_min = RegexUtils.GetStringQuery(ref inputData, "price_min")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(price_min)) - { - return "{\"code\":500,\"msg\":\"缺少关联最低价格\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "insert into bxx_relation.out_prod_relation_" + index.ParseToString().PadLeft(4, '0') + - " (up_spu_id,up_goods_name,from_site,goods_id,shop_id,price_min,price_max) " + - " values ('" + up_spu_id + "',@up_goods_name,'" + from_site + "','" + - goods_id + "'," + shop_id + "," + price_min + "," + price_max + ");"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@up_goods_name", Value = up_goods_name, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (mySql.Message.IsNullOrEmpty()) - { - return "{\"code\":200,\"msg\":\"成功\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetRelation(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少来源商品编号\"}"; - } - var index = RegexUtils.GetStringQuery(ref inputData, "index").ParseToNullableLong(); - if (index == null) - index = Math.Abs(up_spu_id.GetHashCode()) % 128; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select * from bxx_relation.out_prod_relation_" + index.ParseToString().PadLeft(4, '0') + - " where up_spu_id='" + up_spu_id + "' limit 20;"; - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (mySql.Message.IsNullOrEmpty()) - { - JArray jArr = new JArray(); - foreach (DataRow row in dt.Rows) - { - JObject jObj = new JObject(); - jObj["id"] = row["id"].ParseToInt(); - jObj["up_spu_id"] = row["up_spu_id"].ToString(); - jObj["up_goods_name"] = row["up_goods_name"].ToString(); - jObj["from_site"] = row["from_site"].ToString(); - jObj["goods_id"] = row["goods_id"].ToString(); - jObj["shop_id"] = row["shop_id"].ToString(); - jObj["price_min"] = row["price_min"].ParseToInt(); - jObj["price_max"] = row["price_max"].ParseToInt(); - jObj["add_time"] = row["add_time"].ParseToString().ParseToDateTime(); - jArr.Add(jObj); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(jArr, jsonSetting); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + jArr.Count + "}"; - } - else - { - return "{\"code\":500,\"msg\":\"失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddMdyJstProductBan(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - // 软件用户名 - string coid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "coid"))?.Replace("'", "\\'"); - int? ban_wx = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ban_wx"))?.ParseToNullableInt(); - int? ban_pdd = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ban_pdd"))?.ParseToNullableInt(); - // 收件人 - string user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "receiver"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(coid)) - return "{\"code\":500,\"msg\":\"缺少供应商编号\"}"; - if (ban_wx == null) - return "{\"code\":500,\"msg\":\"缺少设置值\"}"; - if (ban_pdd == null) - return "{\"code\":500,\"msg\":\"缺少设置值\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - - string sql = "SELECT 1 FROM `bxx`.`jst_supplier_ban_platform` where coid='" + coid + "'"; - string where = ""; - sql += where; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (exist == 0) - { - sql = " INSERT INTO `bxx`.`jst_supplier_ban_platform` (coid,ban_wx,ban_pdd)" + - " VALUES (@coid,@ban_wx,@ban_pdd);"; - } - else - { - sql = "UPDATE `bxx`.`jst_supplier_ban_platform` SET "; - if (ban_wx != null) - sql += " ban_wx=@ban_wx,"; - if (ban_pdd != null) - sql += " ban_pdd=@ban_pdd,"; - sql = sql.TrimEnd(','); - sql += " WHERE coid=@coid;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "coid", Value = coid, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int16, ParameterName = "ban_wx", Value = ban_wx, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int16, ParameterName = "ban_pdd", Value = ban_pdd, }); - var rowCnt = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - - sql = "UPDATE `bxx`.`product` SET "; - if (ban_wx != null) - sql += " ban_wx=@ban_wx,"; - if (ban_pdd != null) - sql += " ban_pdd=@ban_pdd,"; - sql = sql.TrimEnd(','); - sql += " WHERE (real_coid=@coid or skc_id=@coid) AND product_get_type='厂商直采';"; - rowCnt = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetJstProductCoidList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string coids = RegexUtils.GetStringQuery(ref inputData, "coids")?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string tableName = GetProductTableName(inputData); - string sql = ""; - var count = -1; - - //sql = " SELECT COUNT(*) FROM" + - // " (SELECT skc_id as coid FROM " + tableName + " WHERE product_get_type='厂商直采' UNION SELECT real_coid as coid FROM " + tableName + " WHERE product_get_type='厂商直采') as coids" + - // " WHERE 1=1 AND coids.coid != ''"; - sql = "select count(*) FROM (SELECT DISTINCT coids.*,a.after_sale_json,p.from_shop_name,b.ban_wx,b.ban_pdd" + - " FROM (SELECT skc_id as coid FROM " + tableName + " WHERE product_get_type='厂商直采' UNION SELECT real_coid as coid FROM " + tableName + " WHERE product_get_type='厂商直采') as coids" + - " LEFT JOIN wxxd.after_sale as a ON coids.coid=a.coid AND a.is_del = 0" + - " LEFT JOIN " + tableName + " p ON coids.coid=p.skc_id AND p.product_get_type='厂商直采'" + - " LEFT JOIN bxx.jst_supplier_ban_platform b ON coids.coid=b.coid" + - " WHERE 1=1 AND coids.coid != ''"; - string where = ""; - if (coids != null) - where += " AND coids.coid IN ('" + coids.Replace(",", "','") + "')"; - sql += where; - sql += ") as cnt"; - sql += ";"; - - if (not_count != "true") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = " SELECT DISTINCT coids.*,a.after_sale_json,p.from_shop_name,b.ban_wx,b.ban_pdd" + - " FROM (SELECT skc_id as coid FROM " + tableName + " WHERE product_get_type='厂商直采' UNION SELECT real_coid as coid FROM " + tableName + " WHERE product_get_type='厂商直采') as coids" + - " LEFT JOIN wxxd.after_sale as a ON coids.coid=a.coid AND a.is_del = 0" + - " LEFT JOIN " + tableName + " p ON coids.coid=p.skc_id AND p.product_get_type='厂商直采'" + - " LEFT JOIN bxx.jst_supplier_ban_platform b ON coids.coid=b.coid" + - " WHERE 1=1 AND coids.coid != ''"; - sql += where; - //sql += " ORDER BY coid DESC"; - //sql += " ORDER BY coid ASC"; - sql += " LIMIT " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - mySql.Close(); - - if (dt != null) - { - try - { - List coidLst = new List(); - foreach (DataRow row in dt.Rows) - { - var jObj = new JObject(); - var afterSaleJson = row["after_sale_json"].ParseToString(); - var supplier_name = row["from_shop_name"].ParseToString(); - if (string.IsNullOrEmpty(supplier_name)) - supplier_name = RegexUtils.GetStringJson(ref afterSaleJson, "name"); - coidLst.Add(jObj); - jObj["coid"] = row["coid"].ParseToString(); - jObj["supplier_name"] = supplier_name; - jObj["ban_wx"] = row["ban_wx"].ParseToInt(); - jObj["ban_pdd"] = row["ban_pdd"].ParseToInt(); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(coidLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetJstProductBanPlatformList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string coids = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "SELECT count(*) FROM `bxx`.`jst_supplier_ban_platform` where 1=1"; - string where = ""; - if (coids != null) - where += " AND coid IN ('" + coids.Replace(",", "','") + "')"; - sql += where; - sql += ";"; - - if (not_count != "true") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `bxx`.`jst_supplier_ban_platform` WHERE 1=1"; - sql += where; - sql += " ORDER BY id DESC LIMIT " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List supplierBanPlatformLst = new List(); - foreach (DataRow row in dt.Rows) - { - var jObj = new JObject(); - supplierBanPlatformLst.Add(jObj); - jObj["id"] = row["id"].ParseToInt(); - jObj["coid"] = row["coid"].ParseToString(); - jObj["ban_wx"] = row["ban_wx"].ParseToInt(); - jObj["ban_pdd"] = row["ban_pdd"].ParseToInt(); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(supplierBanPlatformLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - //public string XJGetAiImage(string inputData) - //{ - // if (string.IsNullOrEmpty(inputData)) - // return "{\"code\":19999,\"msg\":\"输入为空\"}"; - - // if (!WXUserManage.GetSign(inputData)) - // return "{\"code\":999,\"msg\":\"校验失败\"}"; - - // string image_url = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "image_url"))?.ParseToString(); - // string word = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "word"))?.ParseToString(); - // if (image_url == null) - // return "{\"code\":500,\"msg\":\"缺少图片地址\"}"; - // if (word == null) - // return "{\"code\":500,\"msg\":\"缺少图片文字\"}"; - - // string secret = "sadhjufhe15c4fbvFBvcvds+5sdfds@#%$xsc"; - // string time = TimeUtils.DateTimeToTimestampSeconds(DateTime.Now).ToString(); - // string code = EncrypUtil.GetMd5(secret + time); - - // try - // { - // string url = "http://ai-bs.jiaotian.vip:" + RandomUtils.GetId(20010, 20021) + "/index.php?obj=public/image"; - // string data = "time=" + time + "&code=" + code + "&image_url=" + image_url + "&word=" + word; - // string html = HttpUtils.e57GetResponse(url, ""); - // return html; - // } - // catch (Exception ex) - // { - // return "{\"code\":50001,\"msg\":\"" + ex.Message + "\"}"; - // } - //} - - public string IsGetWXRecommendHotProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var isGetReturn = System.Configuration.ConfigurationManager.ConnectionStrings["GetWXRecommendHotProd"]?.ConnectionString; - var isGetOnce = System.Configuration.ConfigurationManager.ConnectionStrings["GetWXRecommendHotProd"]?.ConnectionString; - var minViewUv = (System.Configuration.ConfigurationManager.ConnectionStrings["GetWXRecommendHotProdMinViewUv"]?.ConnectionString).ParseToInt(500); - var getInterval = (System.Configuration.ConfigurationManager.ConnectionStrings["GetWXRecommendHotProdInterval"]?.ConnectionString).ParseToInt(3); - return "{\"code\":200,\"is_get\":\"" + isGetReturn + "\",\"isGetOnce\":\"" + isGetOnce + "\"," + - "\"minViewUv\":" + minViewUv + ",\"getViewUvInterval\":" + getInterval + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} - - -/* - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "spu_id", Value = spu_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "skc_id", Value = skc_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = product_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "size_json", Value = size_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "notes", Value = notes.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_md5", Value = product_md5, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "add_time", Value = add_time, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "mdy_time", Value = mdy_time, }); - rst = mySql.ExecuteInsertId(sql, paramLst.ToArray());*/ \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/BXX/BXXProductThirdManage.cs b/KJDService/KJD_WebService/BLL/BXX/BXXProductThirdManage.cs deleted file mode 100644 index 978db50..0000000 --- a/KJDService/KJD_WebService/BLL/BXX/BXXProductThirdManage.cs +++ /dev/null @@ -1,745 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using MySqlX.XDevAPI.Common; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Text.RegularExpressions; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL.BXX -{ - public class BXXProductThirdManage - { - public string AddProduct(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string from_shop_id = RegexUtils.GetStringQuery(ref inputData, "from_shop_id"); - string spu_id = RegexUtils.GetStringQuery(ref inputData, "spu_id"); - string skc_id = RegexUtils.GetStringQuery(ref inputData, "skc_id"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name")); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name")); - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json")); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json")); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - var json_ids = RegexUtils.GetMatchRegex(ref product_json, "(\"id\":\\d{8,14})"); // 取商品json数据里不同签名的部分 - var product_json_replace = product_json; - foreach (Match json_id in json_ids) - { - product_json_replace = product_json_replace.Replace(json_id.Value, "\"id\":0"); - } - var product_md5 = EncrypUtil.GetMd5(product_json_replace + size_json); - sql = "select id from bxx.third_product where product_md5='" + product_md5 + "';"; - var rst = mySql.ExecuteFirstInt(sql).ParseToLong(); - if (rst <= 0) - { - //sql = "insert into bxx.third_product (from_shop_id,spu_id,skc_id,cat_id,cat_name,product_name,ext_code,main_img,product_json,size_json,notes,product_md5,add_time,mdy_time) " + - // "values ('" + from_shop_id + "','" + spu_id + "','" + skc_id + "','" + cat_id + "','" + cat_name + "','" + product_name + "','" + - // ext_code + "','" + main_img + "','" + product_json + "','" + size_json + "','" + notes + "','" + product_md5 + "','" + - // DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - // DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - //rst = mySql.ExecuteInsertId(sql); - - sql = "insert into bxx.third_product (from_shop_id,spu_id,skc_id,cat_id,cat_name,product_name," + - "ext_code,main_img,product_json,size_json,notes,product_md5,add_time,mdy_time) " + - "values (@from_shop_id,@spu_id,@skc_id,@cat_id,@cat_name,@product_name," + - "@ext_code,@main_img,@product_json,@size_json,@notes,@product_md5," + - "@add_time,@mdy_time);"; - string add_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - string mdy_time = add_time; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@from_shop_id", Value = from_shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@spu_id", Value = spu_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@skc_id", Value = skc_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_json", Value = product_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@size_json", Value = size_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_md5", Value = product_md5, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@add_time", Value = add_time, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@mdy_time", Value = mdy_time, }); - rst = mySql.ExecuteInsertId(sql, paramLst.ToArray()); - mySql.Close(); - } - if (rst > 0) - { - return "{\"code\":200,\"msg\":\"success\",\"id\":" + rst + "}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetProductList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'","\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var from_shop_id = RegexUtils.GetStringQuery(ref inputData, "from_shop_id")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size= RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from bxx.third_product where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " and spu_id like '%" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and skc_id like '%" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and cat_name like '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and ext_code like '%" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " and product_name like '%" + search_prod_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and notes like '%" + search_notes + "%'"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and id in (" + search_db_ids + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - if (isDetail) - sql = "select * from bxx.third_product where 1=1"; - else - sql = "select id,from_shop_id,spu_id,skc_id,cat_id,cat_name,change_cat_id,change_cat_name,ext_code,product_name,main_img,notes," + - "add_time,mdy_time from bxx.third_product where 1=1"; - - sql += where; - - sql += " order by id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - from_shop_id = row["from_shop_id"].ToString(), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - change_cat_id = row["change_cat_id"].ToString(), - change_cat_name = row["change_cat_name"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ToString(), - }; - if (isDetail) - { - prod.product_json = row["product_json"].ToString(); - prod.size_json = row["size_json"].ToString(); - } - productLst.Add(prod); - } - var data = JsonUtils.SerializeObjectToString(productLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.third_product where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductCategory(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string change_cat_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "change_cat_id"))?.Replace("'", "\\'"); - string change_cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "change_cat_name"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.third_product set"; - if (change_cat_id != null) - sql += " change_cat_id='" + change_cat_id + "',"; - if (change_cat_name != null) - sql += " change_cat_name='" + change_cat_name + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string AddUserSelectProduct(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var out_product_Id = RegexUtils.GetStringQuery(ref inputData, "out_product_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account")?.Replace("'", "\\'"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "main_user_name")?.Replace("'", "\\'"); - var sub_user_name = RegexUtils.GetStringQuery(ref inputData, "sub_user_name")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var add_product_remaining = RegexUtils.GetStringQuery(ref inputData, "add_product_remaining").ParseToInt(); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"没有店铺信息\"}"; - } - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "insert into bxx.third_product_select (out_product_Id,shop_id,shop_account,user_name,sub_user_name,notes,status,add_time,mdy_time) " + - "values ('" + out_product_Id + "','" + shop_id + "','" + shop_account + "','" + user_name + "','" + sub_user_name + "','" + - notes + "','" + status + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - if (add_product_remaining > 0) - { - add_product_remaining = add_product_remaining - 1; - sql += "\r\n"; - sql += "update bxx.shop set add_product_remaining=" + add_product_remaining + " where shop_id='" + shop_id + "';"; - //sql += "update bxx.shop_add_prod_count set add_product_remaining=" + add_product_remaining + " where shop_id=" + shop_id + ";"; - sql += "INSERT INTO bxx.shop_add_prod_count(shop_id, add_product_remaining) VALUES('" + shop_id + "'," + add_product_remaining + ")" + - "ON DUPLICATE KEY UPDATE add_product_remaining=VALUES(add_product_remaining)"; - } - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyUserSelectProductStatus(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var draft_id = RegexUtils.GetStringQuery(ref inputData, "draft_id")?.Replace("'", "\\'"); - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var add_times = RegexUtils.GetStringQuery(ref inputData, "add_times")?.Replace("'", "\\'"); - - long l_draft_id = draft_id.ParseToLong(); - long l_spu_map_table_id = l_draft_id % 128; - long l_select_map_table_id = id.ParseToLong() % 64; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - // 使用事务一次提交多个sql操作 - //sql += "set @@autocommit=0;\r\n"; - sql += "START TRANSACTION;\r\n"; - if (!string.IsNullOrEmpty(up_spu_id) && !string.IsNullOrEmpty(draft_id)) - { - sql += "insert into kjd_map.spu_map_" + l_spu_map_table_id + - " (draft_id,from_spu_id,shop_id) values(" + draft_id + "," + up_spu_id + ",'" + shop_id + "');\r\n"; - sql += "insert into kjd_map.product_third_select_map_" + l_select_map_table_id + - " (product_id,product_select_db_id,shop_id) values(" + draft_id + "," + id + ",'" + shop_id + "');\r\n"; - } - sql += "update bxx.third_product_select set"; - if (draft_id != null) - sql += " draft_id='" + draft_id + "',"; - if (status != null) - sql += " status='" + status + "',"; - if (status == "已上传") - sql += " add_times=add_times+1,"; - sql += " mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";\r\n"; - var rst = mySql.ExecuteNonQuery(sql); - string errMsg = mySql.Message; - if (string.IsNullOrEmpty(errMsg)) - sql = "COMMIT;"; - else - sql = "ROLLBACK;"; - mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + errMsg + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetUserSelectProductList(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "\\'"); - var search_shop_id = RegexUtils.GetStringQuery(ref inputData, "search_shop_id")?.Replace("'", "\\'"); - var search_shop_account = RegexUtils.GetStringQuery(ref inputData, "search_shop_account"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_user_notes = RegexUtils.GetStringQuery(ref inputData, "search_user_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - var search_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "search_sub_sa_name")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - var no_sub_sa = RegexUtils.GetStringQuery(ref inputData, "no_sub_sa")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(s.id) from bxx.third_product_select s " + - "left join bxx.third_product p on s.out_product_id=p.id " + - "left join bxx.user u on s.operate_sub_sa_name=u.user_name " + - "where 1=1"; - - string where = ""; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like'%" + user_name + "%')"; - if (!string.IsNullOrEmpty(operate_sub_sa_name)) - { - where += " and s.operate_sub_sa_name = '" + operate_sub_sa_name + "'"; - } - if (no_sub_sa == "true") - where += " and s.operate_sub_sa_name is null"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and s.id in (" + search_db_ids + ")"; - if (!string.IsNullOrEmpty(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(status)) - where += " and s.status = '" + status + "'"; - if (!string.IsNullOrWhiteSpace(search_shop_id)) - where += " and s.shop_id like '%" + search_shop_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_shop_account)) - where += " and s.shop_account like @search_shop_account"; - if (!string.IsNullOrWhiteSpace(search_notes)) - { - //核价成功 重复 核价成功(重复) - if (search_notes == "无备注") - where += " and s.notes = ''"; - else if (search_notes == "重复") - where += " and s.notes like '%重复%' and s.notes not like '%核价成功%' and s.notes not like '%核价通过%'"; - else if (search_notes == "核价成功") - where += " and (s.notes like '%核价成功%' or s.notes like '%核价通过%') and s.notes not like '%重复%'"; - else if (search_notes == "核价成功(重复)") - where += " and (s.notes like '%核价成功%' or s.notes like '%核价通过%') and s.notes like '%重复%'"; - else - where += " and s.notes like '%" + search_notes + "%'"; - } - if (!string.IsNullOrWhiteSpace(search_user_notes)) - where += " and s.user_notes like '%" + search_user_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " and p.spu_id like '%" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and p.skc_id like '%" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and p.cat_name like '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like '%" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " and p.product_name like @search_prod_name"; - if (!string.IsNullOrEmpty(search_sub_sa_name)) - { - where += " and (s.operate_sub_sa_name like '%" + search_sub_sa_name + "%'"; - where += " or u.nick_name like '%" + operate_sub_sa_name + "%')"; - } - - sql += where; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_shop_account", Value = "%" + search_shop_account + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_prod_name", Value = "%" + search_prod_name + "%", }); - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - //if (isDetail) - //sql = "select * from bxx.third_product_select where 1=1"; - //else - sql = "select s.id,s.out_product_id,s.shop_id,s.shop_account,s.user_name," + - "s.sub_user_name,s.notes,s.user_notes,s.status,s.draft_id,s.add_times,s.add_time,s.mdy_time," + - "s.fission_product_name,s.operate_sub_sa_name,s.add_sub_sa_time," + - "p.from_shop_id,p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.change_cat_id,p.change_cat_name,p.ext_code,p.product_name,p.main_img," + - "u.nick_name as operate_sub_sa_nick " + - "from bxx.third_product_select s left join bxx.third_product p on s.out_product_id=p.id " + - "left join bxx.user u on u.user_name=s.operate_sub_sa_name " + - "where 1=1"; - - sql += where; // where子句 - - sql += " order by id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - ProductSelectResultParam prodSelect = new ProductSelectResultParam() - { - id = row["id"].ParseToInt(), - out_product_Id = row["out_product_Id"].ParseToString(), - shop_account = row["shop_account"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - status = row["status"].ParseToString(), - sub_user_name = row["sub_user_name"].ParseToString(), - user_name = row["user_name"].ParseToString(), - cat_id = row["cat_id"].ParseToString(), - cat_name = row["cat_name"].ParseToString(), - change_cat_id = row["change_cat_id"].ParseToString(), - change_cat_name = row["change_cat_name"].ParseToString(), - product_name = row["product_name"].ParseToString(), - main_img = row["main_img"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ParseToString(), - draft_id = row["draft_id"].ParseToString(), - add_times = row["add_times"].ParseToInt(), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - operate_sub_sa_name = row["operate_sub_sa_name"].ToString(), - operate_sub_sa_nick = row["operate_sub_sa_nick"].ToString(), - fission_product_name = row["fission_product_name"].ToString(), - user_notes = row["user_notes"].ToString(), - from_shop_id = row["from_shop_id"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - }; - prodSelect.add_sub_sa_time = row["add_sub_sa_time"] as DateTime?; - productLst.Add(prodSelect); - } - var data = JsonUtils.SerializeObjectToString(productLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelSelectProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.third_product_select where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 设置上传商品的二级超管 - /// - /// - public string SetSelectProductSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":50002,\"msg\":\"未选择任何待上传\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.third_product_select set"; - if (operate_sub_sa_name != null) - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - if (!string.IsNullOrEmpty(id)) - sql += " where id in (" + id + ")"; - else if (!string.IsNullOrEmpty(shop_id)) - sql += " where shop_id in ('" + shop_id.Replace(",","','") + "')"; - else - sql += " where 1=2"; - if(!string.IsNullOrEmpty(status)) - sql += " and status='" + status + "';"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductSelectNotes(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string user_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_notes")); - string fission_product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_product_name")); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.third_product_select set"; - if (notes != null) - sql += " notes=@notes,"; - if (user_notes != null) - sql += " user_notes=@user_notes,"; - if (fission_product_name != null) - sql += " fission_product_name=@fission_product_name,"; - sql = sql.TrimEnd(','); - sql += " where id=@id;"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@id", Value = id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@fission_product_name", Value = fission_product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@user_notes", Value = user_notes, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/BXX/BXXShopManage.cs b/KJDService/KJD_WebService/BLL/BXX/BXXShopManage.cs deleted file mode 100644 index 0ef9517..0000000 --- a/KJDService/KJD_WebService/BLL/BXX/BXXShopManage.cs +++ /dev/null @@ -1,1446 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.ShopModel; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using MySqlX.XDevAPI; -using NaiBa.Util.Extension; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Web; -using System.Web.Security; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.BXX -{ - public class BXXShopManage - { - public string GetPddClientInfo(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from bxx.user where user_name='" - + mobile + "' and password='" + password + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt == null) - { - return "{\"code\":500,\"msg\":\"用户不存在\"}"; - } - - JArray jArr = new JArray(); - - JObject obj1 = new JObject(); - obj1["describe"] = "貔貅管家"; - obj1["client_id"] = "ad502ec19e0c49ab9df14f83494e153c"; - obj1["client_secret"] = "bd52aba51737d03fc073711d386b3b0779d010ad"; - obj1["market_id"] = 84862; - //https://fuwu.pinduoduo.com/service-market/auth?response_type=code&client_id=ad502ec19e0c49ab9df14f83494e153c&redirect_uri=http%3A%2F%2Fpo.e57.cn%2Flogin%3Fsource%3Dpdd_code_pixiu - //obj1["redirect_uri"] = "http%3A%2F%2Fpo.e57.cn%2Flogin%3Fsource%3Dpdd_code"; - obj1["redirect_uri"] = "http%3A%2F%2Fpo.e57.cn%2Flogin%3Fsource%3Dpdd_code_pixiu"; - obj1["is_current"] = false; - //jArr.Add(obj1); - - JObject obj2 = new JObject(); - obj2["describe"] = "小红椒商品管理"; - obj2["client_id"] = "48e76c60853d47d8a4e2e631b6db26b5"; - obj2["client_secret"] = "b2a5f9eeb36d192ed035f023eaf9ce5280aac397"; - obj2["market_id"] = 84690; - obj2["redirect_uri"] = "http%3A%2F%2Fxtjpd.jiaotian.vip%2Fpdd_token.html"; - obj2["is_current"] = true; - jArr.Add(obj2); - - return "{\"code\":200,\"msg\":\"success\",\"data\":" + JsonUtils.SerializeObject(jArr) + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetShopClientInfo(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 500; - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM bxx.shop_api_auth s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.ShopId in (" + shop_ids + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM bxx.shop_api_auth s WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":50001,\"msg\":\"查询失败:" + mySql.Message + "\"}"; - } - - if (dt != null) - { - List shopAuthList = new List(); - foreach (DataRow row in dt.Rows) - { - AuthInfo auth = new AuthInfo - { - id = Convert.ToInt32(row["id"]), - AccessToken = row["AccessToken"].ToString(), - ApiAuthStatus = row["ApiAuthStatus"].ToString(), - AppKey = row["AppKey"].ToString(), - AppSecret = row["AppSecret"].ToString(), - ExpiresTime = row["ExpiresTime"].ParseToString().ParseToDateTime(), - RefreshToken = row["RefreshToken"].ToString(), - ShopId = row["ShopId"].ToString(), - UpdateTime = row["UpdateTime"].ParseToString().ParseToDateTime(), - }; - shopAuthList.Add(auth); - } - var data = JsonUtils.SerializeObjectToString(shopAuthList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string AddMdyShopClientInfo(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - string ShopId = RegexUtils.GetStringQuery(ref inputData, "ShopId")?.Replace("'", "\\'"); - string AppKey = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "AppKey"))?.Replace("'", "\\'"); - string AccessToken = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "AccessToken"))?.Replace("'", "\\'"); - string RefreshToken = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "RefreshToken"))?.Replace("'", "\\'"); - string AppSecret = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "AppSecret"))?.Replace("'", "\\'"); - string ExpiresTime = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ExpiresTime"))?.Replace("'", "\\'"); - string ApiAuthStatus = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ApiAuthStatus"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty("ShopId")) - return "{\"code\":50001,\"msg\":\"没有店铺编号\"}"; - if (string.IsNullOrEmpty("AppKey")) - return "{\"code\":50001,\"msg\":\"没有Api编号\"}"; - if (string.IsNullOrEmpty("AccessToken")) - return "{\"code\":50001,\"msg\":\"没有令牌信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT ShopId,AppKey FROM `bxx`.`shop_api_auth` where ShopId='" + ShopId + "' and AppKey='" + AppKey + "'"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - if (dt.Rows.Count == 0) - { - sql = "INSERT INTO `bxx`.`shop_api_auth` (ShopId,AppKey,AccessToken,RefreshToken,AppSecret,ExpiresTime,ApiAuthStatus)" + - " VALUES (@ShopId,@AppKey,@AccessToken,@RefreshToken,@AppSecret,@ExpiresTime,@ApiAuthStatus);"; - } - else - { - sql = "UPDATE `bxx`.`shop_api_auth` SET AccessToken=@AccessToken"; - if (RefreshToken != null) - sql += ", RefreshToken=@RefreshToken "; - if (AppSecret != null) - sql += ", AppSecret=@AppSecret "; - if (ExpiresTime != null) - sql += ", ExpiresTime=@ExpiresTime "; - if (ApiAuthStatus != null) - sql += ", ApiAuthStatus=@ApiAuthStatus "; - sql += " WHERE ShopId=@ShopId and AppKey=@AppKey;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "ShopId", Value = ShopId, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "AppKey", Value = AppKey, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "AccessToken", Value = AccessToken.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "RefreshToken", Value = RefreshToken.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "AppSecret", Value = AppSecret.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.DateTime, ParameterName = "ExpiresTime", Value = ExpiresTime.ParseToDateTime(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "ApiAuthStatus", Value = ApiAuthStatus, }); - - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - // 特殊处理一下修复客户端店铺导入没有立即登录导致的cookie串的bug - //var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids"); - if (shop_ids == "''") - shop_ids = "999999999999999"; - shop_ids = shop_ids?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM bxx.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (isAdmin) - where += " and (s.cookie='' or s.shop_id!='')"; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.anti_contents,s.pddid,s.mall_id,s.shop_id,s.shop_account,s.sub_user_name," + - "s.user_name,s.company_name,s.notes,s.login_status,s.login_status2,c.add_product_remaining,c.add_product_month," + - "s.add_time,s.mdy_time,s.add_sub_sa_time,s.operate_sub_sa_name"; - //sql += " FROM bxx.shop s WHERE 1=1"; - sql += " FROM bxx.shop s LEFT JOIN bxx.shop_add_prod_count c ON s.shop_id=c.shop_id WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList=new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = row["add_product_remaining"].ParseToInt(), - add_product_month = row["add_product_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - pddid = row["pddid"].ParseToString(), - mall_id = row["mall_id"].ParseToString(), - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO bxx.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update bxx.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO bxx.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql+= "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string SubSaGetSelectProdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM bxx.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and (s.shop_id in (SELECT DISTINCT shop_id From bxx.product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "') or " + - "s.shop_id in (SELECT DISTINCT shop_id From bxx.third_product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "'))"; - where += " and (s.cookie='' or s.shop_id!='')"; - //if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - // where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.anti_contents,s.shop_id,s.shop_account,s.sub_user_name,s.user_name," + - "s.company_name,s.notes,s.login_status,s.login_status2,c.add_product_remaining,c.add_product_month,s.add_time,s.mdy_time," + - "s.add_sub_sa_time,s.operate_sub_sa_name"; - sql += " FROM bxx.shop s LEFT JOIN bxx.shop_add_prod_count c ON s.shop_id=c.shop_id WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = row["add_product_remaining"].ParseToInt(), - add_product_month = row["add_product_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO bxx.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update bxx.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO bxx.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - - public string UpdateAddProdRemaining(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var remainCount = RegexUtils.GetStringQuery(ref inputData, "remain_count"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql += "update bxx.shop_add_prod_count set add_product_remaining=" + remainCount + - " where 1=1 and shop_id in (" + shop_ids + ");"; - - var rst = mySql.ExecuteNonQuery(sql); - var msg = mySql.Message; - mySql.Close(); - - if (rst) - return "{\"code\":200,\"msg\":\"success\"}"; - else - return "{\"code\":50000,\"msg\":\"" + msg + "\"}"; - } - else - { - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } - - //获取一个手机登录号码下的所有店铺(以便有则更新,无则新增) - public string GetOneLoginNameShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,anti_contents,shop_id,shop_account,sub_user_name,user_name from bxx.shop where user_name='" - + user_name + "' and login_name='" + login_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - //获取一个手机登录号码下特定ID的店铺 - public string GetOneIdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,anti_contents,shop_id,shop_account,sub_user_name,user_name from bxx.shop where user_name='" - + user_name + "' and login_name='" + login_name + "' and shop_id='" + shop_id + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string AddShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group_name")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - if (string.IsNullOrEmpty(shop_id)) - sql = "select exists (select 1 from bxx.shop where login_name='" + login_name + "' and user_name='" + user_name + "')"; - else - sql = "select exists (select 1 from bxx.shop where login_name='" + login_name + "' and user_name='" + user_name + - "' and shop_id='" + shop_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist>0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"店铺" + login_name +" " + shop_account + "已存在\"}"; - } - - sql = "insert into bxx.shop (login_name,login_pass,cookie,cookie2,anti_contents,shop_account,shop_id," + - "mall_id,sub_user_name,user_name,group_name,notes,add_time,mdy_time) " + - "values ('" + login_name + "','" + login_pass + "','" + cookie + "','" + cookie2 + "','" + anti_contents + "','" + shop_account + "','" + shop_id + - "','" + mall_id + "','" + sub_user_name + "','" + user_name + "','" + group_name + "','" + notes + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - //string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - //string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string new_shop_id = RegexUtils.GetStringQuery(ref inputData, "new_shop_id"); - string old_shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group_name")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.shop set"; - if (login_pass != null) - sql += " login_pass='" + login_pass + "',"; - //if (cookie != null) - // sql += " cookie='" + cookie + "',"; - //if (cookie2 != null) - // sql += " cookie2='" + cookie2 + "',"; - if (anti_contents != null) - sql += " anti_contents='" + anti_contents + "',"; - if (new_shop_id != null) - sql += " shop_id='" + new_shop_id + "',"; - if (mall_id != null) - sql += " mall_id='" + mall_id + "',"; - if (shop_account != null) - sql += " shop_account='" + shop_account + "',"; - if (sub_user_name != null) - sql += " sub_user_name='" + sub_user_name + "',"; - if (group_name != null) - sql += " group_name='" + group_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and (user_name='" + user_name + "' or sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(old_shop_id)) - sql += " and shop_id='" + old_shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyAntiContent(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.shop set"; - if (anti_contents != null) - sql += " anti_contents='" + anti_contents + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and shop_id='" + shop_id + "';"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyCookieAndLoginStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - string login_status2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status2")); - string pddid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pddid")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrWhiteSpace(login_name)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.shop set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - if (login_status2 != null) - sql += " login_status2='" + login_status2 + "',"; - if (pddid != null) - sql += " pddid='" + pddid + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - public string DelShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.shop where user_name='" + user_name + "' and login_name='" + login_name + "'"; - if (!string.IsNullOrEmpty(shop_id)) - sql += " and shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - /// - /// 设置店铺的二级超管 - /// - /// - public string SetShopSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "shop_login_name")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(login_name)) - { - return "{\"code\":50002,\"msg\":\"未选择任何待上传\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.shop set"; - if (operate_sub_sa_name != null) - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - if (!string.IsNullOrEmpty(id)) - sql += " where id in (" + id + ")"; - else if (!string.IsNullOrEmpty(login_name)) - sql += " where login_name in ('" + login_name.Replace(",", "','") + "')"; - else - sql += " where 1=2"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string E57GetPddShopToken(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id")?.Replace("'", "\\'"); - var url = "https://po.e57.cn/prod-api/api/sys-api/system/open/api/shop/info/forPdd?mallId=" + mall_id; - - var tokenRst = HttpUtils.e57GetResponse(url, ""); - if (!tokenRst.Contains("\"code\":0")) - tokenRst = HttpUtils.e57GetResponse(url, ""); - return tokenRst; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetWeiDianShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM weidian.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (isAdmin) - where += " and (s.cookie='' or s.shop_id!='')"; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.wd_token,s.mall_id,s.shop_id,s.shop_account,s.sub_user_name," + - "s.user_name,s.company_name,s.notes,s.login_status,s.login_status2," + - "s.add_time,s.mdy_time,s.add_sub_sa_time,s.operate_sub_sa_name"; - sql += " FROM weidian.shop s WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - wd_token = row["wd_token"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - mall_id = row["mall_id"].ParseToString(), - }; - shopList.Add(shop); - } - - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string AddWeiDianShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string wd_token = RegexUtils.GetStringQuery(ref inputData, "wd_token"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - if (string.IsNullOrEmpty(shop_id)) - sql = "select exists (select 1 from weidian.shop where login_name='" + login_name + "' and user_name='" + user_name + "')"; - else - sql = "select exists (select 1 from weidian.shop where login_name='" + login_name + "' and user_name='" + user_name + - "' and shop_id='" + shop_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - //return "{\"code\":500,\"msg\":\"店铺" + login_name + " " + shop_account + "已存在\"}"; - return MdyWeiDianShop(inputData, isAdmin); - } - - sql = "insert into weidian.shop (login_name,login_pass,cookie,cookie2,wd_token,shop_account,shop_id," + - "mall_id,sub_user_name,user_name,group_name,notes,add_time,mdy_time) " + - "values ('" + login_name + "','" + login_pass + "','" + cookie + "','" + cookie2 + "','" + wd_token + "','" + shop_account + "','" + shop_id + - "','" + mall_id + "','" + sub_user_name + "','" + user_name + "','" + group_name + "','" + notes + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyWeiDianShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string wd_token = RegexUtils.GetStringQuery(ref inputData, "wd_token"); - string new_shop_id = RegexUtils.GetStringQuery(ref inputData, "new_shop_id"); - string old_shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update weidian.shop set"; - if (login_pass != null) - sql += " login_pass='" + login_pass + "',"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (wd_token != null) - sql += " wd_token='" + wd_token + "',"; - if (new_shop_id != null) - sql += " shop_id='" + new_shop_id + "',"; - if (mall_id != null) - sql += " mall_id='" + mall_id + "',"; - if (shop_account != null) - sql += " shop_account='" + shop_account + "',"; - if (sub_user_name != null) - sql += " sub_user_name='" + sub_user_name + "',"; - if (group_name != null) - sql += " group_name='" + group_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and (user_name='" + user_name + "' or sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(old_shop_id)) - sql += " and shop_id='" + old_shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyWeiDianShopCookie(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string wd_token = RegexUtils.GetStringQuery(ref inputData, "wd_token"); - string cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cookie")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":501,\"msg\":\"没有店铺信息\"}"; - } - if (string.IsNullOrEmpty(cookie) && string.IsNullOrEmpty(login_status)) - { - return "{\"code\":501,\"msg\":\"cookie和登录状态不能全为空\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update weidian.shop set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (wd_token != null) - sql += " wd_token='" + wd_token + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string DelWeiDianShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name")?.Replace("'", "\\'"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":501,\"msg\":\"没有指定要删除的店铺\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from weidian.shop where user_name='" + user_name + "' and shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/BXX/BXXUserManage.cs b/KJDService/KJD_WebService/BLL/BXX/BXXUserManage.cs deleted file mode 100644 index 08d197b..0000000 --- a/KJDService/KJD_WebService/BLL/BXX/BXXUserManage.cs +++ /dev/null @@ -1,887 +0,0 @@ -using KJD_Web.BLL.WXXD; -using KJD_Web.Model; -using KJD_Web.Model.PddModel; -using KJD_Web.Model.ShopModel; -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Web; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.BXX -{ - public class BXXUserManage - { - public string CheckUserLogin(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData, true)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from bxx.user where user_name='" - + mobile + "' and password='" + password + "'"; - - var dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (dt == null) - dt = new DataTable(); - - foreach (DataRow row in dt.Rows) - { - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["user_name"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - company_name = row["company_name"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - authority = row["authority"].ToString(), - forbidden_page = row["forbidden_page"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - }; - - if (string.IsNullOrEmpty(user.company_name)) - { - user.company_name = "-"; - } - if (user.group_id != "3" && !string.IsNullOrEmpty(user.parent_user_name)) - { - sql = "select authority from bxx.user where user_name='" + user.parent_user_name + "'"; - var rst = mySql.ExecuteFirst(sql); - if (mySql.Message.IsNullOrEmpty()) - { - user.parent_authority = rst; - } - } - - var data = JsonUtils.SerializeObjectToString(user); - - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - mySql.Close(); - return "{\"code\":1,\"msg\":\"用户名或密码错误\"}"; - - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "company"))?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from bxx.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into bxx.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,parent_user_name,authority,forbidden_page,add_time,mdy_time) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "','" + parent_user_name + "','" + authority + "','" + forbidden_page + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\""+ mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"子账户创建成功!\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var group = RegexUtils.GetStringQuery(ref inputData, "group"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from bxx.user where parent_user_name='" - + user_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from bxx.user where parent_user_name='" - // + user_name + "'"; - sql = "update bxx.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (authority != null) - sql += " authority='" + authority + "',"; - if (forbidden_page != null) - sql += " forbidden_page='" + forbidden_page + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var id = RegexUtils.GetStringQuery(ref inputData, "id"); - if (string.IsNullOrWhiteSpace(id)) - return "{\"code\":500,\"msg\":\"id不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from bxx.user where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败,请稍后重试\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetAllUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var search = RegexUtils.GetStringQuery(ref inputData, "search")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - //string sql = "select * from bxx.user where group_id=3"; - string sql = "select * from bxx.user where 1=1"; - if (!string.IsNullOrEmpty(group_id)) - sql += " and group_id=" + group_id; - if (!string.IsNullOrEmpty(sa_level)) - sql += " and sa_level=" + sa_level; - if (!string.IsNullOrEmpty(search)) - sql += " and (user_name like '%" + search + - "%' or nick_name like '%" + search + - "%' or company_name like '%" + search + "%')"; - sql += " order by id desc"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); ; - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from bxx.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into bxx.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,sa_level,authority,add_time,mdy_time,forbidden_page) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "'," + sa_level + ",'" + authority + "','" + forbidden_page + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from bxx.user where parent_user_name='" - // + user_name + "'"; - sql = "update bxx.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(company_name)) - sql += " company_name='" + company_name + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (!string.IsNullOrEmpty(sa_level)) - sql += " sa_level=" + sa_level + ","; - if (authority != null) - sql += " authority='" + authority + "',"; - if (forbidden_page != null) - sql += " forbidden_page='" + forbidden_page + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string ChangePassword(string inputData) - { - var userName = RegexUtils.GetStringJson(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringJson(ref inputData, "password")?.Replace("'", "\\'"); - var newPassword = RegexUtils.GetStringJson(ref inputData, "new_password")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select user_id,password from pepdtp.user where user_id='" - + userName + "' and password='" + password + "'"; - - var dw = mySql.ExecuteDataTableRow(sql); - if (dw != null) - { - UserLoginResultParam user = new UserLoginResultParam - { - user_name = dw["user_id"].ToString(), - password = dw["password"].ToString(), - }; - sql = "update pepdtp.user set password = '" + newPassword + "' where user_id='" + userName + "'"; - var result = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (result) - { - return "{\"code\":0,\"msg\":\"密码修改成功!\"}"; - } - else - return "{\"code\":19999,\"msg\":\"密码修改失败!请稍后再试。\"}"; - } - else - { - mySql.Close(); - return "{\"code\":1,\"msg\":\"原密码错误。\"}"; - } - } - - public string return_package_secret_key { get; set; } = "aaMETt2bPe6YHzZ1ojbC+6wOvgtwehqc6A+/Rz+pCUU="; - - public string GetPackageSign(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var timestamp = RegexUtils.GetStringQuery(ref inputData, "timestamp")?.Replace("'", "\\'"); - var mallId = RegexUtils.GetStringQuery(ref inputData, "mallId")?.Replace("'", "\\'"); - var returnPackageNo = RegexUtils.GetStringQuery(ref inputData, "returnPackageNo")?.Replace("'", "\\'"); - int r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - string c2 = RegexUtils.GetStringQuery(ref inputData, "c2"); - - if (EncrypUtil.Encryption(r2) != c2) - return "{\"code\":2,\"msg\":\"不合法的输入内容\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from bxx.user where user_name='" - + mobile + "' and password='" + password + "'"; - - sql = "select * from bxx.user where user_name='" + mobile + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt == null || dt.Rows.Count <=0) - { - return "{\"code\":1,\"msg\":\"用户不存在\"}"; - } - - string sign = EncrypUtil.GetMd5(timestamp + return_package_secret_key + mallId + returnPackageNo).ToLower(); - - return "{\"code\":200, \"sign\":\"" + sign + "\", \"msg\":\"\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateScm121Cookie(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = (RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'")).ParseToInt(); - if (id == 0) - id = 1; - var cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cookie"))?.Replace("'", "\\'"); - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.scm121_user set cookie='" + cookie + "' WHERE id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst && string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetScm121Cookie(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = (RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'")).ParseToInt(); - if (id == 0) - id = 1; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select cookie from bxx.scm121_user WHERE id=" + id + ";"; - - var rst = mySql.ExecuteDataTableRow(sql); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"cookie\":" + rst["cookie"] + "}"; - } - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddBuyer(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string buyer_id = RegexUtils.GetStringQuery(ref inputData, "buyer_id")?.Replace("'", "\\'"); - string buyer_name = RegexUtils.GetStringQuery(ref inputData, "buyer_name")?.Replace("'", "\\'"); - string buyer_nick = RegexUtils.GetStringQuery(ref inputData, "buyer_nick")?.Replace("'", "\\'"); - string cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cookie"))?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(buyer_name)) - { - return "{\"code\":501,\"msg\":\"没有买手登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select exists (select 1 from bxx.shop where buyer_id='" + buyer_id + "' and user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"买手" + buyer_name + " " + buyer_nick + "已存在\"}"; - } - - sql = "insert into bxx.buyer (user_name,buyer_id,buyer_name,buyer_nick,cookie,notes) " + - "values ('" + user_name + "','" + buyer_id + "','" + buyer_name + "','" + buyer_nick + "','" + cookie + "','" + notes + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyBuyer(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string buyer_id = RegexUtils.GetStringQuery(ref inputData, "buyer_id")?.Replace("'", "\\'"); - string buyer_name = RegexUtils.GetStringQuery(ref inputData, "buyer_name")?.Replace("'", "\\'"); ; - string buyer_nick = RegexUtils.GetStringQuery(ref inputData, "buyer_nick")?.Replace("'", "\\'"); ; - string cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cookie"))?.Replace("'", "\\'"); ; - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - string status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "status"))?.Replace("'", "\\'"); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(buyer_id)) - { - return "{\"code\":501,\"msg\":\"没有买手号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.buyer set"; - if (buyer_name != null) - sql += " buyer_name='" + buyer_name + "',"; - if (buyer_nick != null) - sql += " buyer_nick='" + buyer_nick + "',"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (status != null) - sql += " status='" + status + "',"; - sql = sql.TrimEnd(','); - - sql += " where buyer_id='" + buyer_id + "' and user_name='" + user_name + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - public string MdyBuyerCookie(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "buyer_user_name")?.Replace("'", "\\'"); - string buyer_id = RegexUtils.GetStringQuery(ref inputData, "buyer_id")?.Replace("'", "\\'"); - string cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cookie"))?.Replace("'", "\\'"); - string status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "status"))?.Replace("'", "\\'"); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(buyer_id)) - { - return "{\"code\":501,\"msg\":\"没有买手号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update bxx.buyer set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (status != null) - sql += " status='" + status + "',"; - sql = sql.TrimEnd(','); - - sql += " where buyer_id='" + buyer_id + "';"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string GetBuyer(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_buyer_id = RegexUtils.GetStringQuery(ref inputData, "search_buyer_id"); - var search_buyer_name = RegexUtils.GetStringQuery(ref inputData, "search_buyer_name"); - var search_buyer_nick = RegexUtils.GetStringQuery(ref inputData, "search_buyer_nick"); - - var buyer_ids = RegexUtils.GetStringQuery(ref inputData, "buyer_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(buyer_ids)) - { - List shopIdLst = buyer_ids.Split(',').ToList(); - buyer_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var buyer_names = RegexUtils.GetStringQuery(ref inputData, "buyer_names"); - if (!string.IsNullOrWhiteSpace(buyer_names)) - { - List shopNameLst = buyer_names.Split(',').ToList(); - buyer_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var buyer_nicks = RegexUtils.GetStringQuery(ref inputData, "buyer_nicks"); - if (!string.IsNullOrWhiteSpace(buyer_nicks)) - { - List shopNotesLst = buyer_nicks.Split(',').ToList(); - buyer_nicks = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM bxx.buyer s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_buyer_id)) - where += " and s.buyer_id like '%" + search_buyer_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_buyer_name)) - where += " and s.buyer_name like '%" + search_buyer_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_buyer_nick)) - where += " and s.buyer_nick like '%" + search_buyer_nick + "%'"; - - if (!string.IsNullOrWhiteSpace(buyer_ids)) - where += " and s.buyer_id in (" + buyer_ids + ")"; - if (!string.IsNullOrWhiteSpace(buyer_names)) - where += " and s.buyer_name in (" + buyer_names + ")"; - if (!string.IsNullOrWhiteSpace(buyer_nicks)) - where += " and s.buyer_nick in (" + buyer_nicks + ")"; - - if (!string.IsNullOrWhiteSpace(user_name)) - where += " and s.user_name='" + user_name + "'"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.*"; - sql += " FROM bxx.buyer s WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List buyerList = new List(); - foreach (DataRow row in dt.Rows) - { - BuyerLoginInfo shop = new BuyerLoginInfo - { - id = Convert.ToInt32(row["id"]), - cookie = row["cookie"].ToString(), - user_name = row["user_name"].ToString(), - notes = row["notes"].ToString(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - buyer_id = row["buyer_id"].ToString(), - buyer_name = row["buyer_name"].ToString(), - buyer_nick = row["buyer_nick"].ToString(), - status = row["status"].ToString(), - }; - buyerList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(buyerList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string DelBuyer(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var buyer_id = RegexUtils.GetStringQuery(ref inputData, "buyer_id"); - if (string.IsNullOrEmpty(buyer_id)) - { - return "{\"code\":500,\"msg\":\"没有买手号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "DELETE FROM bxx.buyer WHERE user_name='" + user_name + "' and buyer_id='" + buyer_id + "'"; - - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":501,\"msg\":" + mySql.Message + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/DYXD/DYShopManage.cs b/KJDService/KJD_WebService/BLL/DYXD/DYShopManage.cs deleted file mode 100644 index 0dab8b5..0000000 --- a/KJDService/KJD_WebService/BLL/DYXD/DYShopManage.cs +++ /dev/null @@ -1,782 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.ShopModel; -using KJD_Web.Utils; -using MySqlX.XDevAPI; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL.DYXD -{ - public class DYShopManage - { - public string GetShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM dyxd.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (isAdmin) - where += " and (s.cookie='' or s.shop_id!='')"; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.anti_contents,s.pddid,s.shop_id,s.shop_account,s.sub_user_name," + - "s.user_name,s.company_name,s.notes,s.login_status,s.login_status2,c.add_product_remaining,c.add_product_month," + - "s.add_time,s.mdy_time,s.add_sub_sa_time,s.operate_sub_sa_name"; - //sql += " FROM dyxd.shop s WHERE 1=1"; - sql += " FROM dyxd.shop s LEFT JOIN dyxd.shop_add_prod_count c ON s.shop_id=c.shop_id WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList=new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = row["add_product_remaining"].ParseToInt(), - add_product_month = row["add_product_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - pddid = row["pddid"].ParseToString(), - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO dyxd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update dyxd.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO dyxd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql+= "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string SubSaGetSelectProdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM dyxd.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and (s.shop_id in (SELECT DISTINCT shop_id From dyxd.product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "') or " + - "s.shop_id in (SELECT DISTINCT shop_id From dyxd.third_product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "'))"; - where += " and (s.cookie='' or s.shop_id!='')"; - //if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - // where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.anti_contents,s.shop_id,s.shop_account,s.sub_user_name,s.user_name," + - "s.company_name,s.notes,s.login_status,s.login_status2,c.add_product_remaining,c.add_product_month,s.add_time,s.mdy_time," + - "s.add_sub_sa_time,s.operate_sub_sa_name"; - sql += " FROM dyxd.shop s LEFT JOIN dyxd.shop_add_prod_count c ON s.shop_id=c.shop_id WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = row["add_product_remaining"].ParseToInt(), - add_product_month = row["add_product_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO dyxd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update dyxd.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO dyxd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - - public string UpdateAddProdRemaining(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var remainCount = RegexUtils.GetStringQuery(ref inputData, "remain_count"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql += "update dyxd.shop_add_prod_count set add_product_remaining=" + remainCount + - " where 1=1 and shop_id in (" + shop_ids + ");"; - - var rst = mySql.ExecuteNonQuery(sql); - var msg = mySql.Message; - mySql.Close(); - - if (rst) - return "{\"code\":200,\"msg\":\"success\"}"; - else - return "{\"code\":50000,\"msg\":\"" + msg + "\"}"; - } - else - { - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } - - //获取一个手机登录号码下的所有店铺(以便有则更新,无则新增) - public string GetOneLoginNameShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,anti_contents,shop_id,shop_account,sub_user_name,user_name from dyxd.shop where user_name='" - + user_name + "' and login_name='" + login_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - //获取一个手机登录号码下特定ID的店铺 - public string GetOneIdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,anti_contents,shop_id,shop_account,sub_user_name,user_name from dyxd.shop where user_name='" - + user_name + "' and login_name='" + login_name + "' and shop_id='" + shop_id + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string AddShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - if (string.IsNullOrEmpty(shop_id)) - sql = "select exists (select 1 from dyxd.shop where login_name='" + login_name + "' and user_name='" + user_name + "')"; - else - sql = "select exists (select 1 from dyxd.shop where login_name='" + login_name + "' and user_name='" + user_name + - "' and shop_id='" + shop_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist>0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"店铺" + login_name +" " + shop_account + "已存在\"}"; - } - - sql = "insert into dyxd.shop (login_name,login_pass,cookie,cookie2,anti_contents,shop_account,shop_id,sub_user_name,user_name,group_name,notes,add_time,mdy_time) " + - "values ('" + login_name + "','" + login_pass + "','" + cookie + "','" + cookie2 + "','" + anti_contents + "','" + shop_account + "','" + shop_id + "','" + - sub_user_name + "','" + user_name + "','" + group_name + "','" + notes + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string new_shop_id = RegexUtils.GetStringQuery(ref inputData, "new_shop_id"); - string old_shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update dyxd.shop set"; - if (login_pass != null) - sql += " login_pass='" + login_pass + "',"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (anti_contents != null) - sql += " anti_contents='" + anti_contents + "',"; - if (new_shop_id != null) - sql += " shop_id='" + new_shop_id + "',"; - if (shop_account != null) - sql += " shop_account='" + shop_account + "',"; - if (sub_user_name != null) - sql += " sub_user_name='" + sub_user_name + "',"; - if (group_name != null) - sql += " group_name='" + group_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and (user_name='" + user_name + "' or sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(old_shop_id)) - sql += " and shop_id='" + old_shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyCookieAndLoginStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - string login_status2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status2")); - string pddid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pddid")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update dyxd.shop set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - if (login_status2 != null) - sql += " login_status2='" + login_status2 + "',"; - if (pddid != null) - sql += " pddid='" + pddid + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - public string DelShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from dyxd.shop where user_name='" + user_name + "' and login_name='" + login_name + "'"; - if (!string.IsNullOrEmpty(shop_id)) - sql += " and shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - /// - /// 设置店铺的二级超管 - /// - /// - public string SetShopSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "shop_login_name")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(login_name)) - { - return "{\"code\":50002,\"msg\":\"未选择任何待上传\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update dyxd.shop set"; - if (operate_sub_sa_name != null) - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - if (!string.IsNullOrEmpty(id)) - sql += " where id in (" + id + ")"; - else if (!string.IsNullOrEmpty(login_name)) - sql += " where login_name in ('" + login_name.Replace(",", "','") + "')"; - else - sql += " where 1=2"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/DYXD/DYUserManage.cs b/KJDService/KJD_WebService/BLL/DYXD/DYUserManage.cs deleted file mode 100644 index e02d5db..0000000 --- a/KJDService/KJD_WebService/BLL/DYXD/DYUserManage.cs +++ /dev/null @@ -1,475 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Web; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.DYXD -{ - public class DYUserManage - { - public string CheckUserLogin(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["LimitVersion"]?.ConnectionString).ParseToInt()) - return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from dyxd.user where user_name='" - + mobile + "' and password='" + password + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - foreach (DataRow row in dt.Rows) - { - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["user_name"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - company_name = row["company_name"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - }; - - if (string.IsNullOrEmpty(user.company_name)) - { - user.company_name = "-"; - } - var data = JsonUtils.SerializeObjectToString(user); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - return "{\"code\":1,\"msg\":\"用户名或密码错误\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "company"))?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from dyxd.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into dyxd.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,parent_user_name,add_time,mdy_time) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "','" + parent_user_name + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\""+ mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"子账户创建成功!\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var group = RegexUtils.GetStringQuery(ref inputData, "group"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from dyxd.user where parent_user_name='" - + user_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from dyxd.user where parent_user_name='" - // + user_name + "'"; - sql = "update dyxd.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string DelUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var id = RegexUtils.GetStringQuery(ref inputData, "id"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from dyxd.user where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败,请稍后重试\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetAllUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var search = RegexUtils.GetStringQuery(ref inputData, "search")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - //string sql = "select * from dyxd.user where group_id=3"; - string sql = "select * from dyxd.user where 1=1"; - if (!string.IsNullOrEmpty(group_id)) - sql += " and group_id=" + group_id; - if (!string.IsNullOrEmpty(sa_level)) - sql += " and sa_level=" + sa_level; - if (!string.IsNullOrEmpty(search)) - sql += " and (user_name like '%" + search + - "%' or nick_name like '%" + search + - "%' or company_name like '%" + search + "%')"; - sql += " order by id desc"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); ; - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from dyxd.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into dyxd.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,sa_level,add_time,mdy_time) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "'," + sa_level + ",'" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from dyxd.user where parent_user_name='" - // + user_name + "'"; - sql = "update dyxd.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(company_name)) - sql += " company_name='" + company_name + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (!string.IsNullOrEmpty(sa_level)) - sql += " sa_level=" + sa_level + ","; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - - public string ChangePassword(string inputData) - { - var userName = RegexUtils.GetStringJson(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringJson(ref inputData, "password")?.Replace("'", "\\'"); - var newPassword = RegexUtils.GetStringJson(ref inputData, "new_password")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select user_id,password from pepdtp.user where user_id='" - + userName + "' and password='" + password + "'"; - - var dw = mySql.ExecuteDataTableRow(sql); - if (dw != null) - { - UserLoginResultParam user = new UserLoginResultParam - { - user_name = dw["user_id"].ToString(), - password = dw["password"].ToString(), - }; - sql = "update pepdtp.user set password = '" + newPassword + "' where user_id='" + userName + "'"; - var result = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (result) - { - return "{\"code\":0,\"msg\":\"密码修改成功!\"}"; - } - else - return "{\"code\":19999,\"msg\":\"密码修改失败!请稍后再试。\"}"; - } - else - { - mySql.Close(); - return "{\"code\":1,\"msg\":\"原密码错误。\"}"; - } - } - - public string return_package_secret_key { get; set; } = "aaMETt2bPe6YHzZ1ojbC+6wOvgtwehqc6A+/Rz+pCUU="; - - public string GetPackageSign(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var timestamp = RegexUtils.GetStringQuery(ref inputData, "timestamp")?.Replace("'", "\\'"); - var mallId = RegexUtils.GetStringQuery(ref inputData, "mallId")?.Replace("'", "\\'"); - var returnPackageNo = RegexUtils.GetStringQuery(ref inputData, "returnPackageNo")?.Replace("'", "\\'"); - int r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - string c2 = RegexUtils.GetStringQuery(ref inputData, "c2"); - - if (EncrypUtil.Encryption(r2) != c2) - return "{\"code\":2,\"msg\":\"不合法的输入内容\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from dyxd.user where user_name='" - + mobile + "' and password='" + password + "'"; - - sql = "select * from dyxd.user where user_name='" + mobile + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt == null || dt.Rows.Count <=0) - { - return "{\"code\":1,\"msg\":\"用户不存在\"}"; - } - - string sign = EncrypUtil.GetMd5(timestamp + return_package_secret_key + mallId + returnPackageNo).ToLower(); - - return "{\"code\":200, \"sign\":\"" + sign + "\", \"msg\":\"\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/OrderManage.cs b/KJDService/KJD_WebService/BLL/KJD/OrderManage.cs deleted file mode 100644 index c5bf5ac..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/OrderManage.cs +++ /dev/null @@ -1,668 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Diagnostics; -using System.Linq; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL -{ - public class OrderManage - { - public List year_mounth_lst = new List() { "202510", "202511", "202512", - "202601", "202602", "202603", "202604", "202605", "202606", "202607", "202608", "202609", "202610", "202611", "202612", - "202701", "202702", "202703", "202704", "202705", "202706", "202707", "202708", "202709", "202710", "202711", "202712", - "202801", "202802", "202803", "202804", "202805", "202806", "202807", "202808", "202809", "202810", "202811", "202812", - "202901", "202902", "202903", "202904", "202905", "202906", "202907", "202908", "202909", "202910", "202911", "202912", - "203001", "203002", "203003", "203004", "203005", "203006", "203007", "203008", "203009", "203010", "203011", "203012", - "203101", "203102", "203103", "203104", "203105", "203106", "203107", "203108", "203109", "203110", "203111", "203112", - "203201", "203202", "203203", "203204", "203205", "203206", "203207", "203208", "203209", "203210", "203211", "203212", - "203301", "203302", "203303", "203304", "203305", "203306", "203307", "203308", "203309", "203310", "203311", "203312" }; - public string AddOrder(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"请输入店铺\"}"; - - string order_data = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_data"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_data)) - return "{\"code\":500,\"msg\":\"请输入订单参数\"}"; - - //string orderPurchaseTime = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_data"))?.Replace("'", "\\'"); - //if (string.IsNullOrEmpty(order_data)) - // return "{\"code\":500,\"msg\":\"请输入订单创建时间\"}"; - - JObject jObj = null; - try - { - jObj = JObject.Parse(order_data); - } - catch - { - return "{\"code\":500,\"msg\":\"数据格式错误\"}"; - } - - //long table_id = shop_id.ParseToLong() % 128; - string table_id = "999999"; - try - { - table_id = TimeUtils.StampMillisecondsToDateTime(long.Parse(jObj["purchaseTime"].ToString())).ToString("yyyyMM"); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "insert into kjd_order.order_" + table_id + " ("; - foreach (var item in jObj) - { - if (item.Key.ParseToString() != "id" && JsonConvert.SerializeObject(item.Value) != "null" && - item.Key.ParseToString() != "add_time" && item.Key.ParseToString() != "mdy_time") - sql += item.Key + ","; - } - sql = sql.Trim(','); - sql += ")"; - sql += "values ("; - foreach (var item in jObj) - { - if (item.Key.ParseToString() != "id" && JsonConvert.SerializeObject(item.Value) != "null" && - item.Key.ParseToString() != "add_time" && item.Key.ParseToString() != "mdy_time") - sql += "'" + item.Value.ParseToString().Replace("\\'", "'").Replace("'", "\\'") + "',"; - } - sql = sql.Trim(','); - sql += ");"; - var rst = mySql.ExecuteInsertId(sql); - mySql.Close(); - if (rst > 0) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetOrderList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - //if (string.IsNullOrEmpty(shop_id)) - // return "{\"code\":500,\"msg\":\"请输入查询店铺\",\"data\":[],\"count\":" + 0 + "}"; - - var upload_order_status = RegexUtils.GetStringQuery(ref inputData, "upload_order_status")?.Replace("'", "\\'"); - //var start_time = RegexUtils.GetStringQuery(ref inputData, "start_time")?.Replace("'", "\\'"); - var start_time = TimeUtils.DateTimeToTimestampMilliseconds(DateTime.Now.Date.AddDays(-30)); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string startTimeStr = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "startTime"))?.Replace("'", "\\'"); - string endTimeStr = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "endTime"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(endTimeStr)) - { - var datetime = DateTime.Now; - startTimeStr = datetime.AddMonths(-1).ToString("yyyyMM"); - endTimeStr = datetime.ToString("yyyyMM"); - } - var startIndex = year_mounth_lst.IndexOf(startTimeStr); - var endIndex = year_mounth_lst.IndexOf(endTimeStr); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - //long table_id = shop_id.ParseToLong() % 128; - //sql = "select count(id) from kjd_order.order_" + table_id + " o where 1=1"; - string sql = ""; - sql += " SELECT count(*) FROM ( "; - for (int i = startIndex; i<=endIndex; i++) - { - if (i > startIndex) - sql += " UNION ALL "; - sql += " SELECT id,purchaseTime,supplierId,upLoadStatus FROM kjd_order.order_" + year_mounth_lst[i]; - } - sql += " ) AS o WHERE 1=1"; - - string where = ""; - if (start_time > 0) - where += " and o.purchaseTime > " + start_time; - if (!string.IsNullOrWhiteSpace(shop_id)) - where += " and o.supplierId = '" + shop_id + "'"; - if (!string.IsNullOrEmpty(upload_order_status)) - where += " and upLoadStatus >= " + upload_order_status; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - //sql = "SELECT * FROM kjd_order.order_" + table_id + " o where 1=1"; // p.is_del=0 - sql = " SELECT * FROM ( "; - for (int i = startIndex; i <= endIndex; i++) - { - if (i > startIndex) - sql += " UNION ALL "; - sql += " SELECT * FROM kjd_order.order_" + year_mounth_lst[i]; - } - sql += " ) AS o WHERE 1=1"; - - //where子句 - sql += where; - - sql += " ORDER BY o.purchaseTime desc"; - //sql += " ORDER BY o.select_total_count desc, p.id desc"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List orderLst = new List(); - foreach (DataRow row in dt.Rows) - { - TemuDBOrderInfo prod = new TemuDBOrderInfo - { - id = Convert.ToInt32(row["id"]), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ParseToString(), - availableSaleDays = row["availableSaleDays"].ParseToNullableDecimal(), - barCodeMd5 = row["barCodeMd5"].ParseToString(), - category = row["category"].ParseToString(), - className = row["className"].ParseToString(), - costPrice = row["costPrice"].ParseToNullableInt(), - currencyType = row["currencyType"].ParseToString(), - deliverQuantity = row["deliverQuantity"].ParseToInt(), - deliverTime = row["deliverTime"].ParseToNullableLong(), - deliveryFee = row["deliveryFee"].ParseToNullableInt(), - deliveryOrderSn = row["deliveryOrderSn"].ParseToString(), - expectLatestArrivalTimeOrDefault = row["expectLatestArrivalTimeOrDefault"].ParseToLong(), - expectLatestDeliverTimeOrDefault = row["expectLatestDeliverTimeOrDefault"].ParseToLong(), - extCode = row["extCode"].ParseToString(), - jiaTongCode = row["jiaTongCode"].ParseToString(), - markFee = row["markFee"].ParseToNullableInt(), - originalPurchaseOrderSn = row["originalPurchaseOrderSn"].ParseToString(), - productId = row["productId"].ParseToString(), - productName = row["productName"].ParseToString(), - productSkcPicture = row["productSkcPicture"].ParseToString(), - productSkcId = row["productSkcId"].ParseToString(), - productSkuId = row["productSkuId"].ParseToString(), - productSn = row["productSn"].ParseToString(), - purchaseQuantity = row["purchaseQuantity"].ParseToInt(), - purchaseTime = row["purchaseTime"].ParseToLong(), - qcResult = row["qcResult"].ParseToNullableInt(), - realReceiveAuthenticQuantity = row["realReceiveAuthenticQuantity"].ParseToInt(), - receiveTime = row["receiveTime"].ParseToNullableLong(), - receiveWarehouseId = row["receiveWarehouseId"].ParseToString(), - receiveWarehouseName = row["receiveWarehouseName"].ParseToString(), - shippingMarkMd5 = row["shippingMarkMd5"].ParseToString(), - status = row["status"].ParseToInt(), - subPurchaseOrderSn = row["subPurchaseOrderSn"].ParseToString(), - supplierId = row["supplierId"].ParseToString(), - supplierName = row["supplierName"].ParseToString(), - supplierPrice = row["supplierPrice"].ParseToInt(), - thumbUrlList = row["thumbUrlList"].ParseToString(), - upLoadStatus = row["upLoadStatus"].ParseToInt(), - upProductId = row["upProductId"].ParseToString(), - warehouseGroupId = row["warehouseGroupId"].ParseToString(), - }; - orderLst.Add(prod); - } - var data = JsonUtils.SerializeObjectToString(orderLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateOrderStatus1(string inputData, bool isDetail = false) - { - //作废 - //if (!string.IsNullOrEmpty(inputData)) - //{ - // var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - // string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - // if (time1 != EncrypUtil.Encryption(time)) - // return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - // var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - // var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - - // var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - // if (string.IsNullOrEmpty(shop_id)) - // return "{\"code\":500,\"msg\":\"请输入查询店铺\"}"; - // var product_id = RegexUtils.GetStringQuery(ref inputData, "product_id")?.Replace("'", "\\'"); - // if (string.IsNullOrEmpty(product_id)) - // return "{\"code\":500,\"msg\":\"请输入商品编号\"}"; - - // int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - // int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - // string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - // MysqlUtils mySql = new MysqlUtils(conn); - - // long table_id = shop_id.ParseToLong() % 128; - // string sql = "update kjd_order.order_" + table_id + " o set o.upLoadStatus=1"; - - // string where = ""; - // where += " and o.supplierId = '" + shop_id + "'"; - // where += " and o.productId = '" + product_id + "'"; - // where += " and o.upLoadStatus < 1"; - // sql += where; - - // var rst = mySql.ExecuteNonQuery(sql); - // mySql.Close(); - - // if (rst) - // { - // return "{\"code\":200,\"msg\":\"success\"}"; - // } - // else - // { - // return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - // } - //} - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string AddOrderCodeFile(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"请输入店铺\"}"; - - string file_md5 = RegexUtils.GetStringQuery(ref inputData, "file_md5")?.Replace("'", "\\'"); - string file_base64 = RegexUtils.GetStringQuery(ref inputData, "file_base64")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(file_md5) || string.IsNullOrEmpty(file_base64)) - return "{\"code\":500,\"msg\":\"请输入文件信息\"}"; - - //long table_id = shop_id.ParseToLong() % 128; - string purchaseTime = RegexUtils.GetStringQuery(ref inputData, "purchaseTime")?.Replace("'", "\\'"); - string table_id = "999999"; - try - { - table_id = TimeUtils.StampMillisecondsToDateTime(long.Parse(purchaseTime)).ToString("yyyyMM"); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"请输入正确的时间:" + ex.Message + "\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select count(fileCodeMd5) from kjd_order.order_code_" + table_id + " where fileCodeMd5='" + file_md5 + "';"; - var rowCount = mySql.ExecuteRowCount(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (rowCount > 0) - { - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\"}"; - } - - sql = "insert into kjd_order.order_code_" + table_id + " (supplierId,fileCodeMd5,fileCodeBase64)"; - sql += " values ('" + shop_id + "','" + file_md5 + "','" + file_base64 + "')"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string SaveOrderCodeFileLink(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"请输入店铺\"}"; - var sub_order_sn = RegexUtils.GetStringQuery(ref inputData, "sub_order_sn")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(sub_order_sn)) - return "{\"code\":500,\"msg\":\"请输入子单号\"}"; - - string jia_tong_code = RegexUtils.GetStringQuery(ref inputData, "jia_tong_code")?.Replace("'", "\\'"); // 佳同码 - string bar_code_md5 = RegexUtils.GetStringQuery(ref inputData, "bar_code_md5")?.Replace("'", "\\'"); // 商品条码md5 - string shipping_mark_md5 = RegexUtils.GetStringQuery(ref inputData, "shipping_mark_md5")?.Replace("'", "\\'"); // 箱唛md5 - if (string.IsNullOrEmpty(jia_tong_code) && string.IsNullOrEmpty(bar_code_md5) && string.IsNullOrEmpty(shipping_mark_md5)) - return "{\"code\":500,\"msg\":\"请输入文件信息\"}"; - - //long table_id = shop_id.ParseToLong() % 128; - string purchaseTime = RegexUtils.GetStringQuery(ref inputData, "purchaseTime")?.Replace("'", "\\'"); // 佳同码 - string table_id = "999999"; - try - { - table_id = TimeUtils.StampMillisecondsToDateTime(long.Parse(purchaseTime)).ToString("yyyyMM"); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"请输入正确的时间:" + ex.Message + "\"}"; - } - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "update kjd_order.order_" + table_id; - sql += " set"; - if (jia_tong_code != null) - sql += " jiaTongCode='" + jia_tong_code + "',"; - if (bar_code_md5 != null) - sql += " barCodeMd5='" + bar_code_md5 + "',"; - if (shipping_mark_md5 != null) - sql += " shippingMarkMd5='" + shipping_mark_md5 + "',"; - sql = sql.TrimEnd(','); - sql += " where subPurchaseOrderSn='" + sub_order_sn + "';"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string getOrderCodeFile(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"请输入店铺\"}"; - - string file_md5 = RegexUtils.GetStringQuery(ref inputData, "file_md5")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(file_md5)) - return "{\"code\":500,\"msg\":\"请输入文件信息\"}"; - - //long table_id = shop_id.ParseToLong() % 128; - string purchaseTime = RegexUtils.GetStringQuery(ref inputData, "purchaseTime")?.Replace("'", "\\'"); - string table_id = "999999"; - try - { - table_id = TimeUtils.StampMillisecondsToDateTime(long.Parse(purchaseTime)).ToString("yyyyMM"); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"请输入正确的时间:" + ex.Message + "\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select fileCodeMd5,fileCodeBase64 from kjd_order.order_code_" + table_id + " where fileCodeMd5='" + file_md5 + "';"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else - { - string file_md5_rst = ""; - string file_base64_rst = ""; - if (dt.Rows.Count > 0) - { - file_md5_rst = dt.Rows[0]["fileCodeMd5"].ParseToString(); - file_base64_rst = dt.Rows[0]["fileCodeBase64"].ParseToString(); - } - return "{\"code\":200,\"msg\":\"success\",\"data\":\"{\"file_md5\":\"" + file_md5_rst + "\",\"file_base64\":\"" + file_base64_rst + "\"}\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UploadOrder(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"请输入店铺\"}"; - - string subPurchaseOrderSn = RegexUtils.GetStringQuery(ref inputData, "subPurchaseOrderSn")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(subPurchaseOrderSn)) - return "{\"code\":500,\"msg\":\"请输入订单编号\"}"; - - string feeStr = RegexUtils.GetStringQuery(ref inputData, "fee")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(feeStr)) - return "{\"code\":500,\"msg\":\"请输入费用\"}"; - decimal fee = feeStr.ParseToDecimal(); - - //long table_id = shop_id.ParseToLong() % 128; - string purchaseTime = RegexUtils.GetStringQuery(ref inputData, "purchaseTime")?.Replace("'", "\\'"); - string table_id = "999999"; - try - { - table_id = TimeUtils.StampMillisecondsToDateTime(long.Parse(purchaseTime)).ToString("yyyyMM"); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"请输入正确的时间:" + ex.Message + "\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select authorized_amount from kjd.user where user_name='" + user_name + "'"; - var value = mySql.ExecuteFirst(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (value.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户不存\"}"; - } - if (value.ParseToDecimal() < fee) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"授权金不足\"}"; - } - - sql = "update kjd_order.order_" + table_id + " set upLoadStatus=2 where upLoadStatus < 2 and subPurchaseOrderSn in('" + subPurchaseOrderSn + "');"; - var rst = mySql.ExecuteAffectedRows(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (rst == 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"订单不存在或已上传\"}"; - } - - sql = "update kjd.user set authorized_amount=authorized_amount-" + fee + " where user_name='" + user_name + "';"; - rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if(rst == 0) - { - return "{\"code\":500,\"msg\":\"订单已提交但扣费失败\"}"; - } - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateOrderStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"请输入店铺\"}"; - - string subPurchaseOrderSn = RegexUtils.GetStringQuery(ref inputData, "subPurchaseOrderSn")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(subPurchaseOrderSn)) - return "{\"code\":500,\"msg\":\"请输入订单编号\"}"; - - string new_status = RegexUtils.GetStringQuery(ref inputData, "new_status")?.Replace("'", "\\'"); - string old_status = RegexUtils.GetStringQuery(ref inputData, "old_status")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(new_status)) - return "{\"code\":500,\"msg\":\"请输入订单状态\"}"; - - //long table_id = shop_id.ParseToLong() % 128; - string purchaseTime = RegexUtils.GetStringQuery(ref inputData, "purchaseTime")?.Replace("'", "\\'"); - string table_id = "999999"; - try - { - table_id = TimeUtils.StampMillisecondsToDateTime(long.Parse(purchaseTime)).ToString("yyyyMM"); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"请输入正确的时间:" + ex.Message + "\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "update kjd_order.order_" + table_id + " set upLoadStatus=" + new_status + " where 1=1"; - if (!string.IsNullOrEmpty(old_status)) - sql += " and upLoadStatus=" + old_status; - sql += " and subPurchaseOrderSn in('" + subPurchaseOrderSn + "');"; - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/PriceManage.cs b/KJDService/KJD_WebService/BLL/KJD/PriceManage.cs deleted file mode 100644 index b85acce..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/PriceManage.cs +++ /dev/null @@ -1,600 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL -{ - public class PriceManage - { - public string AddPrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")).ParseToString(); - int original_price = RegexUtils.GetStringQuery(ref inputData, "original_price").ParseToInt(); - int markup_times = RegexUtils.GetStringQuery(ref inputData, "markup_times").ParseToInt(); - int extra_price = RegexUtils.GetStringQuery(ref inputData, "extra_price").ParseToInt(); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")).ParseToString(); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sqlExist = "select count(ext_code) from kjd.price_markup where ext_code=@ext_code"; - string sql = "insert into kjd.price_markup " + - "(ext_code,original_price,markup_times,extra_price,notes) " + - "values (@ext_code,@original_price,@markup_times,@extra_price,@notes);"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@original_price", Value = original_price, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@markup_times", Value = markup_times, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@extra_price", Value = extra_price, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - if (has != "0") - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - } - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetPriceList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - - string start_original_price = RegexUtils.GetStringQuery(ref inputData, "start_original_price"); - string end_original_price = RegexUtils.GetStringQuery(ref inputData, "end_original_price"); - string start_markup_times = RegexUtils.GetStringQuery(ref inputData, "start_markup_times"); - string end_markup_times = RegexUtils.GetStringQuery(ref inputData, "end_markup_times"); - string start_extra_price = RegexUtils.GetStringQuery(ref inputData, "start_extra_price"); - string end_extra_price = RegexUtils.GetStringQuery(ref inputData, "end_extra_price"); - var search_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_ext_code")); - var search_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_notes")); - var in_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "in_ext_code")); - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_ext_code", Value = "%" + search_ext_code + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_notes", Value = "%" + search_notes + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_original_price", Value = start_original_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_original_price", Value = end_original_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_markup_times", Value = start_markup_times.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_markup_times", Value = end_markup_times.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@start_extra_price", Value = start_extra_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@end_extra_price", Value = end_extra_price.ParseToInt(), }); - //paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_ext_code", Value = "'" + in_ext_code?.Replace(",", "','") + "'", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_ext_code", Value = in_ext_code.ParseToString() }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from kjd.price_markup p where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like @search_ext_code"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and p.notes like @search_notes"; - if (!string.IsNullOrWhiteSpace(start_original_price)) - where += " and p.original_price >= @start_original_price"; - if (!string.IsNullOrWhiteSpace(end_original_price)) - where += " and p.original_price <= @end_original_price"; - if (!string.IsNullOrWhiteSpace(start_markup_times)) - where += " and p.markup_times >= @start_markup_times"; - if (!string.IsNullOrWhiteSpace(end_markup_times)) - where += " and p.markup_times <= @end_markup_times"; - if (!string.IsNullOrWhiteSpace(start_extra_price)) - where += " and p.extra_price >= @start_extra_price"; - if (!string.IsNullOrWhiteSpace(end_extra_price)) - where += " and p.extra_price <= @end_extra_price"; - if (!string.IsNullOrEmpty(in_ext_code)) - where += " and p.ext_code in ('" + in_ext_code?.Replace(",", "','") + "')"; - sql += where; - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from kjd.price_markup p where 1=1"; - - //where子句 - sql += where; - - sql += " order by p.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List priceList = new List(); - foreach (DataRow row in dt.Rows) - { - DBPriceResultParam price = new DBPriceResultParam - { - id = row["id"].ParseToInt(), - extra_price = row["extra_price"].ParseToInt(), - markup_times = row["markup_times"].ParseToInt(), - original_price = row["original_price"].ParseToInt(), - notes = row["notes"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }; - priceList.Add(price); - } - var data = JsonUtils.SerializeObjectToString(priceList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbPrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from kjd.price_markup where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyDBPrice(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")); - string original_price = RegexUtils.GetStringQuery(ref inputData, "original_price"); - string markup_times = RegexUtils.GetStringQuery(ref inputData, "markup_times"); - string extra_price = RegexUtils.GetStringQuery(ref inputData, "extra_price"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@original_price", Value = original_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@markup_times", Value = markup_times.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@extra_price", Value = extra_price.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@db_id", Value = db_id, }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sqlExist = "select count(ext_code) from kjd.price_markup where ext_code=@ext_code and id!=@db_id"; - var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - if (has != "0") - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - } - - string sql = "update kjd.price_markup set"; - if (notes != null) - sql += " notes=@notes,"; - if (ext_code != null) - sql += " ext_code=@ext_code,"; - if (original_price != null) - sql += " original_price=@original_price,"; - if (markup_times != null) - sql += " markup_times=@markup_times,"; - if (extra_price != null) - sql += " extra_price=@extra_price,"; - sql = sql.TrimEnd(','); - sql += " where id=@db_id;"; - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddPurchasePrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_name = RegexUtils.GetStringQuery(ref inputData, "shop_name"); - string spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_id")).ParseToString(); - string skc_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "skc_id")).ParseToString(); - string cat_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_id")).ParseToString(); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name")).ParseToString(); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")).ParseToString(); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name")).ParseToString(); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img")).ParseToString(); - string discount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "discount")).ParseToString(); - string price_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "price_text")).ParseToString(); - string sku_purchase_price_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_purchase_price_json")).ParseToString(); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")).ParseToString(); - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sqlExist = "select count(spu_id) from kjd.product_purchase_price where spu_id=@spu_id"; - string sql = "insert into kjd.product_purchase_price " + - "(shop_id,shop_name,spu_id,skc_id,cat_id,cat_name,ext_code,product_name,main_img,discount,price_text,sku_purchase_price_json,notes) " + - "values (@shop_id,@shop_name,@spu_id,@skc_id,@cat_id,@cat_name,@ext_code,@product_name,@main_img,@discount,@price_text,@sku_purchase_price_json,@notes);"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_name", Value = shop_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@spu_id", Value = spu_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@skc_id", Value = skc_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@discount", Value = discount.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@price_text", Value = price_text, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@sku_purchase_price_json", Value = sku_purchase_price_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var has = mySql.ExecuteFirst(sqlExist, paramLst.ToArray()); - if (has != "0") - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"货号 " + ext_code + " 价格数据已存在\"}"; - } - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyPurchasePrice(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_name = RegexUtils.GetStringQuery(ref inputData, "shop_name"); - string cat_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_id")).ParseToString(); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name")).ParseToString(); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")).ParseToString(); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name")).ParseToString(); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img")).ParseToString(); - string discount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "discount")).ParseToString(); - string price_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "price_text")).ParseToString(); - string sku_purchase_price_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_purchase_price_json")).ParseToString(); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")).ParseToString(); - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@db_id", Value = db_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_name", Value = shop_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "@discount", Value = discount.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@price_text", Value = price_text, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@sku_purchase_price_json", Value = sku_purchase_price_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "update kjd.product_purchase_price set"; - if (shop_id != null) - sql += " shop_id=@shop_id,"; - if (shop_name != null) - sql += " shop_name=@shop_name,"; - if (cat_id != null) - sql += " cat_id=@cat_id,"; - if (cat_name != null) - sql += " cat_name=@cat_name,"; - if (ext_code != null) - sql += " ext_code=@ext_code,"; - if (product_name != null) - sql += " product_name=@product_name,"; - if (main_img != null) - sql += " main_img=@main_img,"; - if (discount != null) - sql += " discount=@discount,"; - if (price_text != null) - sql += " price_text=@price_text,"; - if (sku_purchase_price_json != null) - sql += " sku_purchase_price_json=@sku_purchase_price_json,"; - if (notes != null) - sql += " notes=@notes,"; - sql = sql.TrimEnd(','); - sql += " where id=@db_id;"; - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetPurchasePriceList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - - var search_spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_spu_id")); - var search_skc_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_skc_id")); - var search_ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_ext_code")); - var search_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "search_notes")); - var in_spu_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "in_spu_id")); - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_spu_id", Value = "%" + search_spu_id + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_skc_id", Value = "%" + search_skc_id + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_ext_code", Value = "%" + search_ext_code + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_notes", Value = "%" + search_notes + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@in_spu_id", Value = in_spu_id.ParseToString() }); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from kjd.product_purchase_price p where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_spu_id)) - where += " and p.spu_id like @search_spu_id"; - if (!string.IsNullOrWhiteSpace(search_skc_id)) - where += " and p.skc_id like @search_skc_id"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like @search_ext_code"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and p.notes like @search_notes"; - if (!string.IsNullOrEmpty(in_spu_id)) - where += " and p.spu_id in ('" + in_spu_id?.Replace(",", "','") + "')"; - sql += where; - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from kjd.product_purchase_price p where 1=1"; - - //where子句 - sql += where; - - sql += " order by p.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List purchasePriceList = new List(); - foreach (DataRow row in dt.Rows) - { - ProductPurchasePriceResultParam price = new ProductPurchasePriceResultParam - { - id = row["id"].ParseToInt(), - shop_id = row["shop_id"].ParseToString(), - shop_name = row["shop_name"].ParseToString(), - cat_id = row["cat_id"].ParseToString(), - cat_name = row["cat_name"].ParseToString(), - main_img = row["main_img"].ParseToString(), - discount = row["discount"].ParseToInt(), - price_text = row["price_text"].ParseToString(), - product_name = row["product_name"].ParseToString(), - skc_id = row["skc_id"].ParseToString(), - sku_purchase_price_json = row["sku_purchase_price_json"].ParseToString(), - spu_id = row["spu_id"].ParseToString(), - notes = row["notes"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }; - purchasePriceList.Add(price); - } - var data = JsonUtils.SerializeObjectToString(purchasePriceList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelPurchasePrice(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from kjd.product_purchase_price where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/ProductManage.cs b/KJDService/KJD_WebService/BLL/KJD/ProductManage.cs deleted file mode 100644 index 851edd7..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/ProductManage.cs +++ /dev/null @@ -1,1804 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using NaiBa.Util.Extension; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Diagnostics; -using System.Linq; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL -{ - public class ProductManage - { - public string AddProduct(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string spu_id = RegexUtils.GetStringQuery(ref inputData, "spu_id"); - string skc_id = RegexUtils.GetStringQuery(ref inputData, "skc_id"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name"))?.Replace("'", "\\'"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code"))?.Replace("'", "\\'"); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name"))?.Replace("'", "\\'"); - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json"))?.Replace("'", "\\'"); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json"))?.Replace("'", "\\'"); - string original_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "original_json"))?.Replace("'", "\\'"); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img"))?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - string product_get_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_get_type"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(product_get_type)) - product_get_type = "0"; - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "insert into kjd.product (spu_id,skc_id,cat_id,cat_name,product_name,ext_code,main_img,product_json,size_json,original_json,notes,product_get_type,add_time,mdy_time) " + - "values ('" + spu_id + "','" + skc_id + "','" + cat_id + "','" + cat_name + "','" + product_name + "','" + - ext_code + "','" + main_img + "','" + product_json + "','" + size_json + "','" + original_json + "','" + notes + "','" + - product_get_type + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetProductGroupList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(100); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(distinct p.group) from kjd.product p where p.is_del=0"; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select distinct p.group from kjd.product p where p.is_del=0"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List groupNameLst = new List(); - foreach (DataRow row in dt.Rows) - { - var group = row["group"].ToString(); - groupNameLst.Add(group); - } - var data = JsonUtils.SerializeObjectToString(groupNameLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetProductList(string inputData, bool isDetail = false) - { - DateTime timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_group = RegexUtils.GetStringQuery(ref inputData, "search_group")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - var get_select_count = RegexUtils.GetStringQuery(ref inputData, "get_select_count")?.Replace("'", "\\'"); - var select_shop_id = RegexUtils.GetStringQuery(ref inputData, "select_shop_id")?.Replace("'", "\\'"); - var sort_field = RegexUtils.GetStringQuery(ref inputData, "sort_field")?.Replace("'", "\\'"); - var product_get_type = RegexUtils.GetStringQuery(ref inputData, "product_get_type")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level").ParseToInt(); - if (string.IsNullOrEmpty(product_get_type)) // 母店采集0或前端直采1 - product_get_type = "0"; - if (sa_level != 1 && product_get_type.ToLower() == "all") - product_get_type = "0,1"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM kjd.product p WHERE p.is_del=0"; - - string where = ""; - if (!isDetail && product_get_type != "all") // 详情必须从列表页面进入,不用限制 - where += " AND p.product_get_type in (" + product_get_type + ")"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " AND p.id in (" + search_db_ids + ")"; - if (!string.IsNullOrWhiteSpace(search_group)) - where += " AND p.group = '" + search_group + "'"; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " AND p.spu_id like '%" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " AND p.skc_id like '%" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " AND p.cat_name like '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - { - if (search_ext_code.Contains(",")) - where += " AND p.ext_code in ('" + search_ext_code.Replace(",", "','") + "')"; - else - where += " AND p.ext_code like '%" + search_ext_code + "%'"; - } - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " AND p.product_name like '%" + search_prod_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " AND p.notes like '%" + search_notes + "%'"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - if (isDetail) - sql = "SELECT * from kjd.product p where p.is_del=0"; - else if (string.IsNullOrEmpty(get_select_count)) - sql = "SELECT p.id,p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.ext_code,p.product_name,p.main_img,p.notes,p.group," + - "p.add_time,p.mdy_time,p.select_total_count,p.fission_words,p.head_words,p.end_words,p.product_get_type," + - "p.cost_price,p.delivery_fee,p.mark_fee" + - " FROM kjd.product p" + - " WHERE p.is_del=0"; - else // 统计单店认领次数 - { - sql = "SELECT p.id,p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.ext_code,p.product_name,p.main_img,p.notes,p.group," + - "p.add_time,p.mdy_time,p.select_total_count,p.fission_words,p.head_words,p.end_words,p.product_get_type," + - "p.cost_price,delivery_fee,p.mark_fee" + - ",COUNT(s.id) AS select_count" + - " FROM kjd.product p" + - " LEFT JOIN (" + - " SELECT id,out_product_id,shop_id FROM kjd.product_select WHERE shop_id='" + select_shop_id + "'"; - for (int year = Math.Max(2026, DateTime.Now.AddYears(-3).Year); year <= DateTime.Now.Year; year++) - { - sql += "UNION ALL SELECT id,out_product_id,shop_id FROM kjd_yearly.product_select_" + year + " WHERE shop_id='" + select_shop_id + "'"; - } - sql += ") s" + - " ON s.out_product_id=p.id AND s.shop_id='" + select_shop_id + "'" + - " WHERE p.is_del=0"; - } - - //sql += "SELECT * FROM " + tableName + l_spu_map_table_id + " where draft_id=" + in_draft_id_list[i]; - - //where子句 - sql += where; - - if (!isDetail && !string.IsNullOrEmpty(get_select_count)) - sql += " GROUP BY p.id"; - if (sort_field == "select_total_count") - sql += " ORDER BY p.select_total_count desc, p.id desc"; - else - sql += " ORDER BY p.add_time desc"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ToString(), - group = row["group"].ToString(), - select_total_count = row["select_total_count"].ParseToInt(), - fission_words = row["fission_words"].ParseToString(), - head_words = row["head_words"].ParseToString(), - end_words = row["end_words"].ParseToString(), - cost_price = row["cost_price"].ParseToString(), - delivery_fee = row["delivery_fee"].ParseToString(), - mark_fee = row["mark_fee"].ParseToString(), - product_get_type = row["product_get_type"].ParseToInt(), //0母店采集 1前端直采 - }; - if (isDetail) - { - prod.product_json = row["product_json"].ToString(); - prod.size_json = row["size_json"].ToString(); - } - if (!string.IsNullOrEmpty(get_select_count)) - { - prod.select_count = row["select_count"].ParseToInt(); - } - productLst.Add(prod); - } - var data = JsonUtils.SerializeObjectToString(productLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - //string sql = "delete from kjd.product where id='" + id + "'"; - string sql = "update kjd.product set is_del=1 where id='" + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductNotes(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.product set"; - if (notes != null) - sql += " notes='" + notes + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyDBProduct(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var product_name = RegexUtils.GetStringQuery(ref inputData, "product_name")?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code"))?.Replace("'", "\\'"); - - string group = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group"))?.Replace("'", "\\'"); - string fission_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_words"))?.Replace("'", "\\'"); - string head_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "head_words"))?.Replace("'", "\\'"); - string end_words = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "end_words"))?.Replace("'", "\\'"); - string cost_price = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cost_price"))?.Replace("'", "\\'"); - string delivery_fee = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_fee"))?.Replace("'", "\\'"); - string mark_fee = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "mark_fee"))?.Replace("'", "\\'"); - - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json"))?.Replace("'", "\\'"); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json"))?.Replace("'", "\\'"); - - string original_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "original_json"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(id)) - { - return "{\"code\":500,\"msg\":\"没有指定商品\"}"; - } - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.product set"; - if (product_name != null) - sql += " product_name='" + product_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (group != null) - sql += " kjd.product.group='" + group + "',"; - if (ext_code != null) - sql += " ext_code='" + ext_code + "',"; - if (fission_words != null) - sql += " fission_words='" + fission_words + "',"; - if (head_words != null) - sql += " head_words='" + head_words + "',"; - if (end_words != null) - sql += " end_words='" + end_words + "',"; - if (cost_price != null) - sql += " cost_price='" + cost_price + "',"; - if (delivery_fee != null) - sql += " delivery_fee='" + delivery_fee + "',"; - if (mark_fee != null) - sql += " mark_fee='" + mark_fee + "',"; - if (product_json != null) - sql += " product_json='" + product_json + "',"; - if (size_json != null) - sql += " size_json='" + size_json + "',"; - if (original_json != null) - sql += " original_json='" + original_json + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string AddUserSelectProduct(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var out_product_Id = RegexUtils.GetStringQuery(ref inputData, "out_product_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account")?.Replace("'", "\\'"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "main_user_name")?.Replace("'", "\\'"); - var sub_user_name = RegexUtils.GetStringQuery(ref inputData, "sub_user_name")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var add_product_remaining = RegexUtils.GetStringQuery(ref inputData, "add_product_remaining").ParseToInt(); - var add_fission_product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_fission_product_name").ParseToString())?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"没有店铺信息\"}"; - } - - DateTime addTime = DateTime.Now; - string addTimeStr = addTime.ToString("yyyy-MM-dd HH:mm:ss"); - string dbName = "kjd"; - if (addTime.Year >= 2026) - dbName = "kjd_yearly"; - - bool is_client_jit = RegexUtils.GetStringQuery(ref inputData, "is_client_jit")?.ParseToBool() == true; - string tableName; - if (!is_client_jit) - tableName = dbName + ".product_select"; - else - tableName = dbName + ".jit_product_select"; - - if (addTime.Year >= 2026) - tableName += "_" + addTime.Year; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - if (add_product_remaining > 0) // add_product_remaining 为空或为0表示商品直传,不消耗次数 - { - sql = "select * from kjd.shop_add_prod_count where shop_id='" + shop_id + "';"; - var dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dt != null && dt.Rows.Count > 0) - { - add_product_remaining = dt.Rows[0]["add_product_remaining"].ParseToInt(); - if (add_product_remaining <= 0) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"本月商品认领限额已用完,请下个月再操作!\"}"; - } - } - } - - sql = "INSERT INTO " + tableName + - " (out_product_Id,shop_id,shop_account,user_name,sub_user_name,notes,status,fission_product_name,add_time,mdy_time) VALUES" + - " ('" + out_product_Id + "','" + shop_id + "','" + shop_account + "','" + user_name + "','" + sub_user_name + "','" + - notes + "','" + status + "','" + add_fission_product_name + "','" + - addTimeStr + "','" + - addTimeStr + "');"; - if (add_product_remaining > 0) // add_product_remaining 为空或为0表示商品直传,不消耗次数 - { - add_product_remaining = add_product_remaining - 1; - sql += "\r\n"; - //sql += "UPDATE kjd.shop SET add_product_remaining=" + add_product_remaining + " WHERE shop_id='" + shop_id + "';"; - sql += "UPDATE kjd.product SET select_total_count=select_total_count+1 WHERE id=" + out_product_Id + ";"; - sql += "INSERT INTO kjd.shop_add_prod_count(shop_id, add_product_remaining) VALUES('" + shop_id + "'," + add_product_remaining + ")" + - "ON DUPLICATE KEY UPDATE add_product_remaining=add_product_remaining-1"; - } - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyUserSelectProductStatus(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var select_db_id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var draft_id = RegexUtils.GetStringQuery(ref inputData, "draft_id")?.Replace("'", "\\'"); - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var add_times = RegexUtils.GetStringQuery(ref inputData, "add_times")?.Replace("'", "\\'"); - var is_client_jit = RegexUtils.GetStringQuery(ref inputData, "is_client_jit")?.ParseToBool() == true; - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - long l_draft_id = draft_id.ParseToLong(); - long l_spu_map_table_id = l_draft_id % 128; - long l_select_map_table_id = select_db_id.ParseToLong() % 64; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - // 使用事务一次提交多个sql操作 - //sql += "set @@autocommit=0;\r\n"; - sql += "START TRANSACTION;\r\n"; - if (!string.IsNullOrEmpty(up_spu_id) && !string.IsNullOrEmpty(draft_id)) - { - sql += "INSERT INTO kjd_map.spu_map_" + l_spu_map_table_id + - " (draft_id,from_spu_id,shop_id) VALUES(" + draft_id + "," + up_spu_id + ",'" + shop_id + "');\r\n"; - - if (!select_add_time.HasValue || select_add_time.Value.Year < 2026) - { - if (!is_client_jit) - { - sql += "INSERT INTO kjd_map.product_select_map_" + l_select_map_table_id + - " (product_id,product_select_db_id,shop_id) VALUES(" + draft_id + "," + select_db_id + ",'" + shop_id + "');\r\n"; - } - else - { - sql += "INSERT INTO kjd_map.jit_product_select_map_" + l_select_map_table_id + - " (product_id,product_select_db_id,shop_id) VALUES(" + draft_id + "," + select_db_id + ",'" + shop_id + "');\r\n"; - } - } - else //(select_add_time.HasValue && select_add_time.Value.Year >= 2026) - { - string select_type; - if (!is_client_jit) - select_type = "normal"; - else - select_type = "jit"; - sql += "INSERT INTO kjd_map_yearly.product_select_map_" + select_add_time.Value.Year + - "(product_select_db_id,product_id,shop_id,select_type) VALUES" + - "(" + select_db_id + ",'" + draft_id + "','" + shop_id + "','" + select_type + "');\r\n"; - } - } - - string dbName = "kjd"; - if (select_add_time.HasValue && select_add_time.Value.Year >= 2026) - dbName = "kjd_yearly"; - string tableName; - if (!is_client_jit) - tableName = dbName + ".product_select"; - else - tableName = dbName + ".jit_product_select"; - if (select_add_time.HasValue && select_add_time.Value.Year >= 2026) - tableName += "_" + select_add_time.Value.Year; - - sql += "update " + tableName + " set"; - if (draft_id != null) - sql += " draft_id='" + draft_id + "',"; - if (status != null) - sql += " status='" + status + "',"; - if (status == "已上传") - sql += " add_times=add_times+1,"; - sql += " mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - sql += " WHERE id=" + select_db_id + ";\r\n"; - var rst = mySql.ExecuteNonQuery(sql); - string errMsg = mySql.Message; - if (string.IsNullOrEmpty(errMsg)) - sql = "COMMIT;"; - else - sql = "ROLLBACK;"; - mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + errMsg + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetUserSelectProductList(string inputData, bool isAdmin = false) - { - DateTime timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "\\'"); - var search_shop_id = RegexUtils.GetStringQuery(ref inputData, "search_shop_id")?.Replace("'", "\\'"); - var search_shop_account = RegexUtils.GetStringQuery(ref inputData, "search_shop_account")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_user_notes = RegexUtils.GetStringQuery(ref inputData, "search_user_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - var search_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "search_sub_sa_name")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - var search_end_time = RegexUtils.GetStringJson(ref inputData, "search_end_time")?.ParseToDateTimeNullable(); - if (search_end_time == null || search_end_time.Value > DateTime.Now.Date.AddDays(1)) search_end_time = DateTime.Now.Date.AddDays(1); - var search_start_time = RegexUtils.GetStringJson(ref inputData, "search_start_time")?.ParseToDateTimeNullable(); - if (search_start_time == null || search_start_time.Value >= search_end_time.Value) search_start_time = search_end_time.Value.AddMonths(-6); - int startTableId = Math.Max(2025, search_start_time.Value.Year); - int endTableId = Math.Max(2025, search_end_time.Value.Year); - - var no_sub_sa = RegexUtils.GetStringQuery(ref inputData, "no_sub_sa")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - var is_client_jit = RegexUtils.GetStringQuery(ref inputData, "is_client_jit")?.ParseToBool() == true; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT count(s.id) from ("; - for (int year = search_start_time.Value.Year; year <= search_end_time.Value.Year; year++) - { - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName; - if (!is_client_jit) - tableName = dbName + ".product_select"; - else - tableName = dbName + ".jit_product_select"; - - if (year >= 2026) - tableName += "_" + year; - if (year > search_start_time.Value.Year) - sql += " UNION ALL"; - sql += " SELECT * FROM " + tableName; - } - sql += ") s " + - "LEFT JOIN kjd.product p ON s.out_product_id=p.id " + - "LEFT JOIN kjd.user u ON s.operate_sub_sa_name=u.user_name " + - "WHERE s.add_time BETWEEN '" + search_start_time.Value.ToString("yyyy-MM-dd") + "' AND '" + search_end_time.Value.ToString("yyyy-MM-dd") + "' "; - - string where = ""; - if (!isAdmin || is_client_jit) - where += " AND (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(operate_sub_sa_name)) - { - where += " AND s.operate_sub_sa_name = '" + operate_sub_sa_name + "'"; - } - if (no_sub_sa == "true") - where += " AND s.operate_sub_sa_name IS null"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " AND s.id IN (" + search_db_ids + ")"; - if (!string.IsNullOrEmpty(shop_ids)) - where += " AND s.shop_id IN ('" + string.Join("','", shop_ids.Split(new char[] { '\"', '\'', ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)) + "')"; - if (!string.IsNullOrWhiteSpace(status)) - where += " AND s.status = '" + status + "'"; - if (!string.IsNullOrWhiteSpace(search_shop_id)) - where += " AND s.shop_id LIKE '%" + search_shop_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_shop_account)) - where += " AND s.shop_account LIKE '%" + search_shop_account + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - { - //核价成功 重复 核价成功(重复) - if (search_notes == "无备注") - where += " AND s.notes = ''"; - else if (search_notes == "重复") - where += " AND s.notes LIKE '重复%' AND s.notes NOT LIKE '核价成功%' AND s.notes not LIKE '核价通过%'"; - else if (search_notes == "核价成功") - where += " AND (s.notes LIKE '核价成功%' OR s.notes LIKE '核价通过%') AND s.notes not LIKE '重复%'"; - else if (search_notes == "核价成功(重复)") - where += " AND (s.notes LIKE '核价成功%' OR s.notes LIKE '核价通过%') AND s.notes LIKE '重复%'"; - else - where += " AND s.notes LIKE '%" + search_notes + "%'"; - } - if (!string.IsNullOrWhiteSpace(search_user_notes)) - where += " AND s.user_notes LIKE '%" + search_user_notes + "%'"; - - where += " AND p.is_del=0"; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " AND p.spu_id LIKE '%" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " AND p.skc_id LIKE '%" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " AND p.cat_name LIKE '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " AND p.ext_code LIKE '%" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " AND p.product_name LIKE '%" + search_prod_name + "%'"; - if (!string.IsNullOrEmpty(search_sub_sa_name)) - { - where += " AND (s.operate_sub_sa_name LIKE '%" + search_sub_sa_name + "%'"; - where += " OR u.nick_name LIKE '%" + operate_sub_sa_name + "%')"; - } - - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - //if (isDetail) - //sql = "SELECT * FROM " + tableName + " where 1=1"; - //else - sql = "SELECT s.id,s.out_product_id,s.shop_id,s.shop_account,s.user_name," + - "s.sub_user_name,s.notes,s.user_notes,s.status,s.draft_id,s.add_times,s.add_time,s.mdy_time," + - "s.fission_product_name,s.operate_sub_sa_name,s.add_sub_sa_time," + - "p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.ext_code,p.product_name,p.main_img," + - "p.product_get_type,u.nick_name as operate_sub_sa_nick " + - " FROM ("; - for (int year = search_start_time.Value.Year; year <= search_end_time.Value.Year; year++) - { - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName; - if (!is_client_jit) - tableName = dbName + ".product_select"; - else - tableName = dbName + ".jit_product_select"; - - if (year >= 2026) - tableName += "_" + year; - if (year > search_start_time.Value.Year) - sql += " UNION ALL"; - sql += " SELECT * FROM " + tableName; - } - sql += ") s" + - " LEFT JOIN kjd.product p ON s.out_product_id=p.id" + - " LEFT join kjd.user u ON u.user_name=s.operate_sub_sa_name" + - " WHERE 1=1"; - - sql += where; // where子句 - - sql += " ORDER BY add_time desc"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - ProductSelectResultParam prodSelect = new ProductSelectResultParam() - { - id = row["id"].ParseToLong(), - out_product_Id = row["out_product_Id"].ParseToString(), - shop_account = row["shop_account"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - status = row["status"].ParseToString(), - sub_user_name = row["sub_user_name"].ParseToString(), - user_name = row["user_name"].ParseToString(), - cat_id = row["cat_id"].ParseToString(), - cat_name = row["cat_name"].ParseToString(), - product_name = row["product_name"].ParseToString(), - main_img = row["main_img"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ParseToString(), - draft_id = row["draft_id"].ParseToString(), - add_times = row["add_times"].ParseToInt(), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - operate_sub_sa_name = row["operate_sub_sa_name"].ToString(), - operate_sub_sa_nick = row["operate_sub_sa_nick"].ToString(), - fission_product_name = row["fission_product_name"].ToString(), - user_notes = row["user_notes"].ToString(), - product_get_type = row["product_get_type"].ParseToInt(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - }; - prodSelect.add_sub_sa_time = row["add_sub_sa_time"] as DateTime?; - productLst.Add(prodSelect); - } - var data = JsonUtils.SerializeObjectToString(productLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelSelectProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - var is_client_jit = RegexUtils.GetStringQuery(ref inputData, "is_client_jit")?.ParseToBool() == true; - string dbName = "kjd"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - dbName = "kjd_yearly"; - string tableName; - if (!is_client_jit) - tableName = dbName + ".product_select"; - else - tableName = dbName + ".jit_product_select"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - tableName += "_" + select_add_time.Value.Year; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from " + tableName + " where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 设置上传商品的二级超管 - /// - /// - public string SetSelectProductSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var db_ids = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var db_id_infos = RegexUtils.GetStringQuery(ref inputData, "db_id_infos")?.Replace("'", "\\'"); - - if (operate_sub_sa_name == null) - { - return "{\"code\":50002,\"msg\":\"未选择任何二级超管\"}"; - } - if (string.IsNullOrEmpty(db_ids) && string.IsNullOrEmpty(shop_ids)) - { - return "{\"code\":50002,\"msg\":\"未选择任何待设置对象\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null && db_id_infos == null && db_ids == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - bool rst = false; - - if (!string.IsNullOrEmpty(db_ids)) - { - sql = "UPDATE kjd.product_select SET"; - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; - sql += " WHERE id IN (" + db_ids + ")"; - if (!string.IsNullOrEmpty(status)) - sql += " AND status='" + status + "';"; - - rst = mySql.ExecuteNonQuery(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - else if (!string.IsNullOrEmpty(shop_ids)) - { - List yearLst = new List() { 2025 }; - if (select_add_time != null) - { - yearLst.Clear(); - yearLst.Add(select_add_time.Value.Year); - yearLst.Add(select_add_time.Value.AddMonths(-6).Year); - yearLst = yearLst.Distinct().ToList(); - } - foreach (int year in yearLst) - { - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".product_select"; - if (year >= 2026) - tableName += "_" + year; - - sql = "UPDATE " + tableName + " SET"; - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; - sql += " WHERE shop_id in ('" + shop_ids.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(status)) - sql += " AND status='" + status + "';"; - - rst = mySql.ExecuteNonQuery(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - } - else if (!string.IsNullOrEmpty(db_id_infos)) - { - try - { - JArray jArr = JArray.Parse(db_id_infos); - foreach (JObject jObj in jArr) - { - var year = jObj["year"].ParseToInt(); - var dbIds = jObj["db_ids"].ParseToString(); - - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".product_select"; - if (year >= 2026) - tableName += "_" + year; - - sql = "UPDATE " + tableName + " SET"; - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; - sql += " WHERE id IN (" + dbIds + ")"; - if (!string.IsNullOrEmpty(status)) - sql += " AND status='" + status + "';"; - - rst = mySql.ExecuteNonQuery(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - } - catch (Exception ex) - { - mySql.Close(); - return "{\"code\":50004,\"msg\":\"" + ex.Message + "\"}"; - } - } - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductSelectNotes(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string user_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_notes")); - string fission_product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_product_name")); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - var is_client_jit = RegexUtils.GetStringQuery(ref inputData, "is_client_jit")?.ParseToBool() == true; - string dbName = "kjd"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - dbName = "kjd_yearly"; - string tableName; - if (!is_client_jit) - tableName = dbName + ".product_select"; - else - tableName = dbName + ".jit_product_select"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - tableName += "_" + select_add_time.Value.Year; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update " + tableName + " set"; - if (notes != null) - sql += " notes=@notes,"; - if (user_notes != null) - sql += " user_notes=@user_notes,"; - if (fission_product_name != null) - sql += " fission_product_name=@fission_product_name,"; - sql = sql.TrimEnd(','); - sql += " where id=@db_id;"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int64, ParameterName = "@db_id", Value = db_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@fission_product_name", Value = fission_product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@user_notes", Value = user_notes, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSelectProdDbIdMapDraftIdList(string inputData, bool isDetail = false) - { - DateTime timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"用户为空\"}"; - } - - var select_db_id = RegexUtils.GetStringQuery(ref inputData, "select_db_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(select_db_id)) - { - return "{\"code\":50002,\"msg\":\"未选择选品数据\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - var is_client_jit = RegexUtils.GetStringQuery(ref inputData, "is_client_jit")?.ParseToBool() == true; - string dbName = "kjd_map"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - dbName = "kjd_map_yearly"; - string tableName; - if (!is_client_jit || (select_add_time != null && select_add_time.Value.Year >= 2026)) // 2026年以后的数据在新表,不带jit - tableName = dbName + ".product_select_map_"; - else - tableName = dbName + ".jit_product_select_map_"; - - if (select_add_time != null && select_add_time.Value.Year >= 2026) - tableName += select_add_time.Value.Year; - else - { - long l_select_map_table_id = select_db_id.ParseToLong() % 64; - tableName += +l_select_map_table_id; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM " + tableName + " where 1=1"; - - string where = " and product_select_db_id=" + select_db_id; - if (select_add_time != null && select_add_time.Value.Year >= 2026) // 2026年以后的数据在新表 - where += " AND select_type='" + (!is_client_jit ? "normal" : "jit") + "'"; - - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM " + tableName + " where 1=1"; - //where子句 - sql += where; - sql += " ORDER BY add_time desc"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - if (dt != null) - { - try - { - List dbIdMapProductIdLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProdDbIdMapProductIdResultParam dbIdMapProductId = new DBProdDbIdMapProductIdResultParam - { - id = row["id"].ParseToLong(), - product_select_db_id = row["product_select_db_id"].ParseToLong(), - product_id = row["product_id"].ParseToLong(), - shop_id = row["shop_id"].ParseToLong(), - add_time = Convert.ToDateTime(row["add_time"]), - }; - dbIdMapProductIdLst.Add(dbIdMapProductId); - } - var data = JsonUtils.SerializeObjectToString(dbIdMapProductIdLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":500,\"msg\":\"查询结果为空!\",\"data\":[],\"count\":" + 0 + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetSelectProdMapUpSpuIdList(string inputData, bool isDetail = false) - { - DateTime timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"用户为空\"}"; - } - - var in_draft_ids = RegexUtils.GetStringQuery(ref inputData, "in_draft_ids")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(in_draft_ids)) - { - return "{\"code\":50002,\"msg\":\"未选择选品数据\"}"; - } - var in_draft_id_list = in_draft_ids.Split(new string[] { " ", ",", "," }, StringSplitOptions.RemoveEmptyEntries); - if (in_draft_id_list.Count() <= 0) - { - return "{\"code\":50003,\"msg\":\"未选择选品数据\"}"; - } - string tableName = "kjd_map.spu_map_"; // kjd pdd jit 都在一套表 - long l_spu_map_table_id = 0; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - sql += "SELECT combined_query.*, p.cost_price, p.delivery_fee, p.mark_fee FROM ("; - for (int i = 0; i < in_draft_id_list.Count() && i < 200; i++) - { - if (i > 0) - sql += " UNION ALL "; - l_spu_map_table_id = in_draft_id_list[i].ParseToLong() % 128; - sql += "select * from " + tableName + l_spu_map_table_id + " where draft_id=" + in_draft_id_list[i]; - } - sql += ") AS combined_query left join product p ON combined_query.from_spu_id=p.spu_id"; - sql += " ORDER BY add_time desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - DataTable dt = mySql.ExecuteDataTable(sql); - - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - if (dt != null) - { - try - { - List draftIdMapUpSpuIdLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProdDraftIdMapUpSpuIdResultParam draftIdMapUpSpuId = new DBProdDraftIdMapUpSpuIdResultParam - { - id = row["id"].ParseToLong(), - draft_id = row["draft_id"].ParseToLong(), - from_spu_id = row["from_spu_id"].ParseToLong(), - shop_id = row["shop_id"].ParseToLong(), - add_time = Convert.ToDateTime(row["add_time"]), - cost_price = row["cost_price"].IsNullOrEmpty() ? new decimal?() : row["cost_price"].ParseToDecimal(), - delivery_fee = row["delivery_fee"].IsNullOrEmpty() ? new decimal?() : row["delivery_fee"].ParseToDecimal(), - mark_fee = row["mark_fee"].IsNullOrEmpty() ? new decimal?() : row["mark_fee"].ParseToDecimal(), - }; - draftIdMapUpSpuIdLst.Add(draftIdMapUpSpuId); - } - var data = JsonUtils.SerializeObjectToString(draftIdMapUpSpuIdLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + -1 + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":500,\"msg\":\"查询结果为空!\",\"data\":[],\"count\":" + 0 + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddSkuImg(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string img_md5 = RegexUtils.GetStringQuery(ref inputData, "img_md5"); - string img_base64 = RegexUtils.GetStringQuery(ref inputData, "img_base64"); - string product_id = RegexUtils.GetStringQuery(ref inputData, "product_id"); - string spec_id = RegexUtils.GetStringQuery(ref inputData, "spec_id"); - string spec_name = RegexUtils.GetStringQuery(ref inputData, "spec_name"); - string original_img_url = RegexUtils.GetStringQuery(ref inputData, "original_img_url"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - int img_base64_db_id = 0; - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select id from kjd.sku_img_base64 where img_md5='" + img_md5 + "';"; - var nRst = 0L; - var rst = mySql.ExecuteFirstInt(sql).ParseToLong(); - if (rst <= 0) - { - sql = "insert into kjd.sku_img_base64 (img_md5,img_base64) " + - "values ('" + img_md5 + "','" + img_base64 + "');"; - rst = mySql.ExecuteInsertId(sql); - } - if (rst > 0) - { - img_base64_db_id = (int)rst; - sql = "insert kjd.sku_img (img_base64_db_id,product_id,spec_id,spec_name,original_img_url) " + - "values (" + img_base64_db_id + ",'" + product_id + "','" + spec_id + "','" + spec_name + "','" + original_img_url + "');"; - nRst = mySql.ExecuteInsertId(sql); - } - mySql.Close(); - if (nRst > 0) - { - return "{\"code\":200,\"msg\":\"success\",\"sku_img_id\":" + nRst + ",\"sku_img_Base64_id\":" + img_base64_db_id + "}"; - } - - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelSkuImg(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - int img_id = RegexUtils.GetStringQuery(ref inputData, "img_id").ParseToInt(); - int img_base64_id = RegexUtils.GetStringQuery(ref inputData, "img_base64_id").ParseToInt(); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (img_id == 0 || img_base64_id == 0) - { - return "{\"code\":501,\"msg\":\"图片编号或者图片数据编号为空\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "delete from kjd.sku_img where id=" + img_id + ";"; - var bRst = mySql.ExecuteNonQuery(sql); - if (!bRst) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - sql = "select id from kjd.sku_img where img_base64_db_id=" + img_base64_id + " limit 1;"; - var nRst = mySql.ExecuteRowCount(sql); - //如果已无对图片的引用,则删除原图片 - if (nRst == 0) - { - sql = "delete from kjd.sku_img_base64 where id=" + img_base64_id + ";"; - mySql.ExecuteNonQuery(sql); - } - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSkuImgList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var search_db_id = RegexUtils.GetStringQuery(ref inputData, "search_db_id")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - var search_product_id = RegexUtils.GetStringQuery(ref inputData, "search_product_id")?.Replace("'", "\\'"); - var search_spec_id = RegexUtils.GetStringQuery(ref inputData, "search_spec_id")?.Replace("'", "\\'"); - var search_original_img_url = RegexUtils.GetStringQuery(ref inputData, "search_original_img_url")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - bool is_random = RegexUtils.GetStringQuery(ref inputData, "is_random").ParseToBool(); - if (is_random) - { - page_size = 3; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from kjd.sku_img s where 1=1"; - - string where = ""; - //if (!string.IsNullOrWhiteSpace(search_db_id)) - // where += " and s.id like '%" + search_db_id + "%'"; - //if (!string.IsNullOrWhiteSpace(search_product_id)) - // where += " and s.product_id like '%" + search_product_id + "%'"; - //if (!string.IsNullOrWhiteSpace(search_spec_id)) - // where += " and s.spec_id like '%" + search_spec_id + "%'"; - //if (!string.IsNullOrWhiteSpace(search_original_img_url)) - // where += " and s.original_img_url like '%" + search_original_img_url + "%'"; - if (!string.IsNullOrWhiteSpace(search_db_id)) - where += " and s.id = '" + search_db_id + "'"; - if (!string.IsNullOrWhiteSpace(search_product_id)) - where += " and s.product_id = '" + search_product_id + "'"; - if (!string.IsNullOrWhiteSpace(search_spec_id)) - where += " and s.spec_id = '" + search_spec_id + "'"; - if (!string.IsNullOrWhiteSpace(search_original_img_url)) - where += " and s.original_img_url = '" + search_original_img_url + "'"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and s.id in (" + search_db_ids + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select s.*,b.img_md5,b.use_count,b.img_base64,b.img_url,b.mdy_time base64_mdy_time from kjd.sku_img s left join kjd.sku_img_base64 b on " + - "s.img_base64_db_id = b.id where 1=1"; - - //where子句 - sql += where; - - if (is_random) - sql += " ORDER BY RAND(),s.add_time desc"; - else - sql += " ORDER BY s.add_time desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - - if (dt != null) - { - try - { - List skuImgLst = new List(); - foreach (DataRow row in dt.Rows) - { - SkuImgResult img = new SkuImgResult - { - id = row["id"].ParseToInt(), - img_base64 = row["img_base64"].ParseToString(), - img_base64_db_id = row["img_base64_db_id"].ParseToInt(), - img_md5 = row["img_md5"].ParseToString(), - img_url = row["img_url"].ParseToString(), - original_img_url = row["original_img_url"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - base64_mdy_time = Convert.ToDateTime(row["base64_mdy_time"]), - product_id = row["product_id"].ParseToString(), - spec_id = row["spec_id"].ParseToString(), - spec_name = row["spec_name"].ParseToString(), - use_count = row["use_count"].ParseToInt(), - }; - if(img.base64_mdy_time.AddDays(3) < DateTime.Now) - { - // 每过3天返回给客户端空图,让客户端重传base64图片 - img.img_url = ""; - } - else if (is_random && !string.IsNullOrWhiteSpace(img.img_url)) - { - // (仅上货)3天内返回给客户端图片链接同时不传base64图片 - img.img_base64 = ""; - } - //if (isDetail) - //{ - // img.img_base64 = row["img_base64"].ToString(); - //} - skuImgLst.Add(img); - } - var data = JsonUtils.SerializeObjectToString(skuImgLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyBase64ImgUrl(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var img_url = RegexUtils.GetStringQuery(ref inputData, "img_url")?.Replace("'", "\\'"); - if(string.IsNullOrEmpty(id) || string.IsNullOrEmpty(img_url)) - { - return "{\"code\":500,\"msg\":\"保存失败:缺少图片编号或图片路径\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.sku_img_base64 set img_url=\'" + img_url + "\' where id='" + id + "';"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"保存失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyBase64ImgUseCount(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var ids = RegexUtils.GetStringQuery(ref inputData, "db_ids")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(ids)) - { - return "{\"code\":500,\"msg\":\"保存失败:缺少图片编号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.sku_img_base64 set use_count=use_count+1 where id in (" + ids + ");"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"保存失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddCateSizeWeightConfig(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id"); - string min_len = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minLen"))?.Replace("'", "\\'"); - string max_len = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxLen"))?.Replace("'", "\\'"); - string min_width = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minWidth"))?.Replace("'", "\\'"); - string max_width = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxWidth"))?.Replace("'", "\\'"); - string min_height = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minHeight"))?.Replace("'", "\\'"); - string max_height = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxHeight"))?.Replace("'", "\\'"); - string min_weight = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minWeight"))?.Replace("'", "\\'"); - string max_weight = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxWeight"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "insert into kjd.cate_size_weight_config (cat_id,min_len,max_len,min_width,max_width,min_height,max_height,min_weight,max_weight) " + - "values ('" + cat_id + "'," + min_len + "," + max_len + "," + min_width + "," + max_width + "," + - min_height + "," + max_height + "," + min_weight + "," + max_weight + ");"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetCateSizeWeightConfig(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id"); - string min_len = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minLen"))?.Replace("'", "\\'"); - string max_len = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxLen"))?.Replace("'", "\\'"); - string min_width = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minWidth"))?.Replace("'", "\\'"); - string max_width = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxWidth"))?.Replace("'", "\\'"); - string min_height = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minHeight"))?.Replace("'", "\\'"); - string max_height = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxHeight"))?.Replace("'", "\\'"); - string min_weight = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "minWeight"))?.Replace("'", "\\'"); - string max_weight = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "maxWeight"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - sql = "select * from kjd.cate_size_weight_config where cat_id='" + cat_id + "';"; - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - if(dt.Rows.Count > 0) - { - var row = dt.Rows[0]; - int id = row["id"].ParseToInt(); - string catId = row["cat_id"].ParseToString(); - int minLen = row["min_len"].ParseToInt(); - int maxLen = row["max_len"].ParseToInt(); - int minWidth = row["min_width"].ParseToInt(); - int maxWidth = row["max_width"].ParseToInt(); - int minHeight = row["min_height"].ParseToInt(); - int maxHeight = row["max_height"].ParseToInt(); - int minWeight = row["min_weight"].ParseToInt(); - int maxWeight = row["max_weight"].ParseToInt(); - - return "{\"code\":200,\"msg\":\"success\",\"data\":{\"catId\":\"" + catId + "\"," + - "\"minLen\":" + minLen + ",\"maxLen\":" + maxLen + "," + - "\"minWidth\":" + minWidth + ",\"maxWidth\":" + maxWidth + "," + - "\"minHeight\":" + minHeight + ",\"maxHeight\":" + maxHeight + "," + - "\"minWeight\":" + minWeight + ",\"maxWeight\":" + maxWeight + "}}"; - } - else - return "{\"code\":200,\"msg\":\"success\",\"data\":null}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} - - -/* - List paramLst = new List(); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "spu_id", Value = spu_id, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "skc_id", Value = skc_id, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "cat_id", Value = cat_id, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "cat_name", Value = cat_name, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_name", Value = product_name, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "ext_code", Value = ext_code, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "main_img", Value = main_img, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_json", Value = product_json, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "size_json", Value = size_json, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "notes", Value = notes.ParseToString(), }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_md5", Value = product_md5, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "add_time", Value = add_time, }); -paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "mdy_time", Value = mdy_time, }); -rst = mySql.ExecuteInsertId(sql, paramLst.ToArray());*/ \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/ProductThirdManage.cs b/KJDService/KJD_WebService/BLL/KJD/ProductThirdManage.cs deleted file mode 100644 index 9200da7..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/ProductThirdManage.cs +++ /dev/null @@ -1,1468 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using MySqlX.XDevAPI.Common; -using NaiBa.Util.Extension; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL -{ - public class ProductThirdManage - { - public string AddProduct(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - string spu_id = RegexUtils.GetStringQuery(ref inputData, "spu_id"); - string skc_id = RegexUtils.GetStringQuery(ref inputData, "skc_id"); - string cat_id = RegexUtils.GetStringQuery(ref inputData, "cat_id"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name")); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")); - string product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_name")); - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json")); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json")); - string main_img = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_img")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - var json_sign = RegexUtils.GetStringJson(ref product_json, "signedImageUrl"); // 取商品json数据里不同签名的部分 - var product_md5 = EncrypUtil.GetMd5(product_json?.Replace(json_sign, "") + size_json); - var product_md5_2 = EncrypUtil.GetMd5(product_json?.Replace("'", "\\'").Replace(json_sign, "") + size_json); - sql = "select id from kjd.third_product where product_md5='" + product_md5 + "' or product_md5='" + product_md5_2 + "';"; - var rst = mySql.ExecuteFirstInt(sql).ParseToLong(); - if (rst <= 0) - { - //sql = "insert into kjd.third_product (spu_id,skc_id,cat_id,cat_name,product_name,ext_code,main_img,product_json,size_json,notes,product_md5,add_time,mdy_time) " + - // "values ('" + spu_id + "','" + skc_id + "','" + cat_id + "','" + cat_name + "','" + product_name + "','" + - // ext_code + "','" + main_img + "','" + product_json + "','" + size_json + "','" + notes + "','" + product_md5 + "','" + - // DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - // DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - //rst = mySql.ExecuteInsertId(sql); - - sql = "insert into kjd.third_product (spu_id,skc_id,cat_id,cat_name,product_name," + - "ext_code,main_img,product_json,size_json,notes,product_md5,add_time,mdy_time) " + - "values (@spu_id,@skc_id,@cat_id,@cat_name,@product_name," + - "@ext_code,@main_img,@product_json,@size_json,@notes,@product_md5," + - "@add_time,@mdy_time);"; - string add_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - string mdy_time = add_time; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@spu_id", Value = spu_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@skc_id", Value = skc_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_id", Value = cat_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@cat_name", Value = cat_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@main_img", Value = main_img, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_json", Value = product_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@size_json", Value = size_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_md5", Value = product_md5, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@add_time", Value = add_time, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@mdy_time", Value = mdy_time, }); - rst = mySql.ExecuteInsertId(sql, paramLst.ToArray()); - mySql.Close(); - } - if (rst > 0) - { - return "{\"code\":200,\"msg\":\"success\",\"id\":" + rst + "}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetProductList(string inputData, bool isDetail = false) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'","\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size= RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from kjd.third_product where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " and spu_id like '%" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and skc_id like '%" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and cat_name like '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and ext_code like '%" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " and product_name like '%" + search_prod_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and notes like '%" + search_notes + "%'"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and id in (" + search_db_ids + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - if (isDetail) - sql = "select * from kjd.third_product where 1=1"; - else - sql = "select id,spu_id,skc_id,cat_id,cat_name,change_cat_id,change_cat_name,ext_code,product_name,main_img,notes," + - "add_time,mdy_time from kjd.third_product where 1=1"; - - sql += where; - - sql += " order by id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - change_cat_id = row["change_cat_id"].ToString(), - change_cat_name = row["change_cat_name"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ToString(), - }; - if (isDetail) - { - prod.product_json = row["product_json"].ToString(); - prod.size_json = row["size_json"].ToString(); - } - productLst.Add(prod); - } - var data = JsonUtils.SerializeObjectToString(productLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetProductListEmptyProductJsonForBak(string inputData, bool isDetail = false) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from kjd.third_product where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " and spu_id like '%" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and skc_id like '%" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and cat_name like '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and ext_code like '%" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " and product_name like '%" + search_prod_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and notes like '%" + search_notes + "%'"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and id in (" + search_db_ids + ")"; - where += " AND add_time BETWEEN '26-1-11 17:33:35' and '26-1-15 9:30:00' and product_json='{}'"; - //where += " and product_json='{}' "; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - if (isDetail) - sql = "select * from kjd.third_product where 1=1"; - else - sql = "select id,spu_id,skc_id,cat_id,cat_name,change_cat_id,change_cat_name,ext_code,product_name,main_img,notes," + - "add_time,mdy_time from kjd.third_product where 1=1"; - - sql += where; - - //sql += " order by id desc"; - sql += " order by id"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - change_cat_id = row["change_cat_id"].ToString(), - change_cat_name = row["change_cat_name"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ToString(), - }; - if (isDetail) - { - prod.product_json = row["product_json"].ToString(); - prod.size_json = row["size_json"].ToString(); - } - productLst.Add(prod); - } - var data = JsonUtils.SerializeObjectToString(productLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetProductListBak(string inputData, bool isDetail = false) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name")?.Replace("'", "\\'"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJDBAK"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from kjd.third_product where 1=1"; - - string where = ""; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " and spu_id = '" + search_spu + "'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and skc_id = '" + search_skc + "'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and cat_name like '%" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and ext_code like '%" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " and product_name like '%" + search_prod_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and notes like '%" + search_notes + "%'"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and id in (" + search_db_ids + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - if (isDetail) - sql = "select * from kjd.third_product where 1=1"; - else - sql = "select id,spu_id,skc_id,cat_id,cat_name,change_cat_id,change_cat_name,ext_code,product_name,main_img,notes," + - "add_time,mdy_time from kjd.third_product where 1=1"; - - sql += where; - - sql += " order by id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - change_cat_id = row["change_cat_id"].ToString(), - change_cat_name = row["change_cat_name"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ToString(), - }; - if (isDetail) - { - prod.product_json = row["product_json"].ToString(); - prod.size_json = row["size_json"].ToString(); - } - productLst.Add(prod); - } - var data = JsonUtils.SerializeObjectToString(productLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelDbProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from kjd.third_product where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductNotes(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.third_product set"; - if (notes != null) - sql += " notes='" + notes + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductCategory(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string change_cat_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "change_cat_id"))?.Replace("'", "\\'"); - string change_cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "change_cat_name"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.third_product set"; - if (change_cat_id != null) - sql += " change_cat_id='" + change_cat_id + "',"; - if (change_cat_name != null) - sql += " change_cat_name='" + change_cat_name + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyDBProduct(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - string product_name = RegexUtils.GetStringQuery(ref inputData, "product_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string ext_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ext_code")); - string product_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "product_json")); - string size_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "size_json")); - - if (string.IsNullOrEmpty(id)) - { - return "{\"code\":500,\"msg\":\"没有指定商品\"}"; - } - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.third_product set"; - if (product_name != null) - sql += " product_name=@product_name,"; - if (notes != null) - sql += " notes=@notes,"; - if (ext_code != null) - sql += " ext_code=@ext_code,"; - if (product_json != null) - sql += " product_json=@product_json,"; - if (size_json != null) - sql += " size_json=@size_json,"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ";"; - - - - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@ext_code", Value = ext_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@product_json", Value = product_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@size_json", Value = size_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string AddUserSelectProduct(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var out_product_Id = RegexUtils.GetStringQuery(ref inputData, "out_product_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account")?.Replace("'", "\\'"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "main_user_name")?.Replace("'", "\\'"); - var sub_user_name = RegexUtils.GetStringQuery(ref inputData, "sub_user_name")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var add_product_remaining = RegexUtils.GetStringQuery(ref inputData, "add_product_remaining").ParseToInt(); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"没有店铺信息\"}"; - } - - DateTime addTime = DateTime.Now; - string addTimeStr = addTime.ToString("yyyy-MM-dd HH:mm:ss"); - string dbName = "kjd"; - if (addTime.Year >= 2026) - dbName = "kjd_yearly"; - - string tableName = dbName + ".third_product_select"; - if (addTime.Year >= 2026) - tableName += "_" + addTime.Year; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - if (add_product_remaining > 0) // add_product_remaining 为空或为0表示商品直传,不消耗次数 - { - sql = "select * from kjd.shop_add_prod_count where shop_id='" + shop_id + "';"; - var dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dt != null && dt.Rows.Count > 0) - { - add_product_remaining = dt.Rows[0]["add_product_remaining"].ParseToInt(); - if (add_product_remaining <= 0) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"本月商品认领限额已用完,请下个月再操作!\"}"; - } - } - } - - sql = "INSERT INTO " + tableName + - " (out_product_Id,shop_id,shop_account,user_name,sub_user_name,notes,status,add_time,mdy_time) VALUES" + - " ('" + out_product_Id + "','" + shop_id + "','" + shop_account + "','" + user_name + "','" + sub_user_name + "','" + - notes + "','" + status + "','" + - addTimeStr + "','" + - addTimeStr + "');"; - if (add_product_remaining > 0) // add_product_remaining 为空或为0表示商品直传,不消耗次数 - { - add_product_remaining = add_product_remaining - 1; - sql += "\r\n"; - //sql += "UPDATE kjd.shop SET add_product_remaining=" + add_product_remaining + " where shop_id='" + shop_id + "';"; - sql += "INSERT INTO kjd.shop_add_prod_count(shop_id, add_product_remaining) VALUES('" + shop_id + "'," + add_product_remaining + ")" + - "ON DUPLICATE KEY UPDATE add_product_remaining=add_product_remaining-1"; - } - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyUserSelectProductStatus(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var select_db_id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var draft_id = RegexUtils.GetStringQuery(ref inputData, "draft_id")?.Replace("'", "\\'"); - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var add_times = RegexUtils.GetStringQuery(ref inputData, "add_times")?.Replace("'", "\\'"); - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - long l_draft_id = draft_id.ParseToLong(); - long l_spu_map_table_id = l_draft_id % 128; - long l_select_map_table_id = select_db_id.ParseToLong() % 64; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - // 使用事务一次提交多个sql操作 - //sql += "set @@autocommit=0;\r\n"; - sql += "START TRANSACTION;\r\n"; - if (!string.IsNullOrEmpty(up_spu_id) && !string.IsNullOrEmpty(draft_id)) - { - sql += "INSERT into kjd_map.spu_map_" + l_spu_map_table_id + - " (draft_id,from_spu_id,shop_id) VALUES(" + draft_id + "," + up_spu_id + ",'" + shop_id + "');\r\n"; - if (!select_add_time.HasValue || select_add_time.Value.Year < 2026) - { - sql += "INSERT into kjd_map.product_third_select_map_" + l_select_map_table_id + - " (product_id,product_select_db_id,shop_id) VALUES(" + draft_id + "," + select_db_id + ",'" + shop_id + "');\r\n"; - } - else - { - string select_type = "third-party"; - sql += "INSERT INTO kjd_map_yearly.product_select_map_" + select_add_time.Value.Year + - "(product_select_db_id,product_id,shop_id,select_type) VALUES" + - "(" + select_db_id + ",'" + draft_id + "','" + shop_id + "','" + select_type + "');\r\n"; - } - } - - string dbName = "kjd"; - if (select_add_time.HasValue && select_add_time.Value.Year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (select_add_time.HasValue && select_add_time.Value.Year >= 2026) - tableName += "_" + select_add_time.Value.Year; - - sql += "update " + tableName + " set"; - if (draft_id != null) - sql += " draft_id='" + draft_id + "',"; - if (status != null) - sql += " status='" + status + "',"; - if (status == "已上传") - sql += " add_times=add_times+1,"; - sql += " mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - sql += " WHERE id=" + select_db_id + ";\r\n"; - var rst = mySql.ExecuteNonQuery(sql); - string errMsg = mySql.Message; - if (string.IsNullOrEmpty(errMsg)) - sql = "COMMIT;"; - else - sql = "ROLLBACK;"; - mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + errMsg + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetUserSelectProductList(string inputData, bool isAdmin = false) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "\\'"); - var search_shop_id = RegexUtils.GetStringQuery(ref inputData, "search_shop_id")?.Replace("'", "\\'"); - var search_shop_account = RegexUtils.GetStringQuery(ref inputData, "search_shop_account"); - var search_spu = RegexUtils.GetStringQuery(ref inputData, "search_spu")?.Replace("'", "\\'"); - var search_skc = RegexUtils.GetStringQuery(ref inputData, "search_skc")?.Replace("'", "\\'"); - var search_cat = RegexUtils.GetStringQuery(ref inputData, "search_cat")?.Replace("'", "\\'"); - var search_ext_code = RegexUtils.GetStringQuery(ref inputData, "search_ext_code")?.Replace("'", "\\'"); - var search_prod_name = RegexUtils.GetStringQuery(ref inputData, "search_prod_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes")?.Replace("'", "\\'"); - var search_user_notes = RegexUtils.GetStringQuery(ref inputData, "search_user_notes")?.Replace("'", "\\'"); - var search_db_ids = RegexUtils.GetStringQuery(ref inputData, "search_db_ids")?.Replace("'", "\\'"); - var search_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "search_sub_sa_name")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var search_year = RegexUtils.GetStringQuery(ref inputData, "search_year")?.Replace("'", "\\'").ParseToInt(); - - var search_end_time = RegexUtils.GetStringJson(ref inputData, "search_end_time")?.ParseToDateTimeNullable(); - if (search_end_time == null || search_end_time.Value > DateTime.Now.Date.AddDays(1)) search_end_time = DateTime.Now.Date.AddDays(1); - var search_start_time = RegexUtils.GetStringJson(ref inputData, "search_start_time")?.ParseToDateTimeNullable(); - if (search_start_time == null || search_start_time.Value >= search_end_time.Value) search_start_time = search_end_time.Value.AddMonths(-6); - int startTableId = Math.Max(2025, search_start_time.Value.Year); - int endTableId = Math.Max(2025, search_end_time.Value.Year); - - var no_sub_sa = RegexUtils.GetStringQuery(ref inputData, "no_sub_sa")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - if (search_year != null) - { - string dbName = "kjd"; - if (search_year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (search_year >= 2026) - tableName += "_" + search_year; - sql += " SELECT count(s.id) FROM " + tableName + " s " + - //"LEFT JOIN kjd.third_product p on s.out_product_id=p.id " + - //"LEFT JOIN kjd.user u on s.operate_sub_sa_name=u.user_name " + - "WHERE 1=1"; - } - else - { - sql = "select count(s.id) from ("; - for (int year = search_start_time.Value.Year; year <= search_end_time.Value.Year; year++) - { - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - - if (year >= 2026) - tableName += "_" + year; - if (year > search_start_time.Value.Year) - sql += " UNION ALL"; - sql += " SELECT * FROM " + tableName; - } - sql += ") s " + - "LEFT JOIN kjd.third_product p on s.out_product_id=p.id " + - "LEFT JOIN kjd.user u on s.operate_sub_sa_name=u.user_name " + - "WHERE s.add_time BETWEEN '" + search_start_time.Value.ToString("yyyy-MM-dd") + "' AND '" + search_end_time.Value.ToString("yyyy-MM-dd") + "' "; - } - - string where = ""; - if (!isAdmin) - //where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - where += " and s.user_name='" + user_name + "'"; - if (!string.IsNullOrEmpty(operate_sub_sa_name)) - { - where += " and s.operate_sub_sa_name = '" + operate_sub_sa_name + "'"; - } - if (no_sub_sa == "true") - where += " and s.operate_sub_sa_name is null"; - if (!string.IsNullOrEmpty(search_db_ids)) - where += " and s.id in (" + search_db_ids + ")"; - if (!string.IsNullOrEmpty(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(status)) - where += " and s.status = '" + status + "'"; - if (!string.IsNullOrWhiteSpace(search_shop_id)) - where += " and s.shop_id like '" + search_shop_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_shop_account)) - where += " and s.shop_account like @search_shop_account"; - if (!string.IsNullOrWhiteSpace(search_notes)) - { - //核价成功 重复 核价成功(重复) - if (search_notes == "无备注") - where += " and s.notes = ''"; - else if (search_notes == "重复") - where += " and s.notes like '重复%' and s.notes not like '核价成功%' and s.notes not like '核价通过%'"; - else if (search_notes == "核价成功") - where += " and (s.notes like '核价成功%' or s.notes like '核价通过%') and s.notes not like '重复%'"; - else if (search_notes == "核价成功(重复)") - where += " and (s.notes like '核价成功%' or s.notes like '核价通过%') and s.notes like '重复%'"; - else - where += " and s.notes like '" + search_notes + "%'"; - } - if (!string.IsNullOrWhiteSpace(search_user_notes)) - where += " and s.user_notes like '" + search_user_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_spu)) - where += " and p.spu_id like '" + search_spu + "%'"; - if (!string.IsNullOrWhiteSpace(search_skc)) - where += " and p.skc_id like '" + search_skc + "%'"; - if (!string.IsNullOrWhiteSpace(search_cat)) - where += " and p.cat_name like '" + search_cat + "%'"; - if (!string.IsNullOrWhiteSpace(search_ext_code)) - where += " and p.ext_code like '" + search_ext_code + "%'"; - if (!string.IsNullOrWhiteSpace(search_prod_name)) - where += " and p.product_name like @search_prod_name"; - if (!string.IsNullOrEmpty(search_sub_sa_name)) - { - where += " and (s.operate_sub_sa_name like '" + search_sub_sa_name + "%'"; - where += " or u.nick_name like '" + operate_sub_sa_name + "%')"; - } - - sql += where; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_shop_account", Value = "" + search_shop_account + "%", }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@search_prod_name", Value = "%" + search_prod_name + "%", }); - - var count = mySql.ExecuteRowCount(sql, paramLst.ToArray()); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - //if (isDetail) - //sql = "select * from kjd.third_product_select where 1=1"; - //else - - if (search_year != null) - { - string dbName = "kjd"; - if (search_year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (search_year >= 2026) - tableName += "_" + search_year; - - //sql = "SELECT s.id,s.out_product_id,s.shop_id,s.shop_account,s.user_name," + - // "s.sub_user_name,s.notes,s.user_notes,s.status,s.draft_id,s.add_times,s.add_time,s.mdy_time," + - // "s.fission_product_name,s.operate_sub_sa_name,s.add_sub_sa_time," + - // "p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.change_cat_id,p.change_cat_name,p.ext_code,p.product_name,p.main_img," + - // "u.nick_name as operate_sub_sa_nick " + - // "FROM " + tableName + " s LEFT JOIN kjd.third_product p ON s.out_product_id=p.id " + - // "LEFT JOIN kjd.user u ON u.user_name=s.operate_sub_sa_name " + - // "WHERE 1=1"; - //sql += where; // where子句 - //sql += " order by s.add_time desc"; - //sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - //-------------------------------------------------------------------------------------------------------- - sql = "SELECT s1.id,s1.out_product_id,s1.shop_id,s1.shop_account,s1.user_name," + - "s1.sub_user_name,s1.notes,s1.user_notes,s1.status,s1.draft_id,s1.add_times,s1.add_time,s1.mdy_time," + - "s1.fission_product_name,s1.operate_sub_sa_name,s1.add_sub_sa_time," + - "s2.spu_id,s2.skc_id,s2.cat_id,s2.cat_name,s2.change_cat_id,s2.change_cat_name,s2.ext_code,s2.product_name,s2.main_img "; - if (operate_sub_sa_name != null || 1 == 1) - sql += ",s2.operate_sub_sa_nick"; - sql += " FROM " + tableName + " s1"; - // 子查询 - sql += " JOIN (SELECT s.id," + - "p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.change_cat_id,p.change_cat_name,p.ext_code,p.product_name,p.main_img "; - if (operate_sub_sa_name != null || 1 == 1) - sql += ",u.nick_name as operate_sub_sa_nick "; - sql += " FROM " + tableName + " s LEFT JOIN kjd.third_product p ON s.out_product_id=p.id "; - if (operate_sub_sa_name != null || 1 == 1) - sql += "LEFT JOIN kjd.user u ON u.user_name=s.operate_sub_sa_name "; - sql += "WHERE 1=1"; - sql += where; // where子句 - sql += " order by s.add_time desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - sql += ") as s2 ON s1.id = s2.id"; - } - else - { - sql = "SELECT s.id,s.out_product_id,s.shop_id,s.shop_account,s.user_name," + - "s.sub_user_name,s.notes,s.user_notes,s.status,s.draft_id,s.add_times,s.add_time,s.mdy_time," + - "s.fission_product_name,s.operate_sub_sa_name,s.add_sub_sa_time," + - "p.spu_id,p.skc_id,p.cat_id,p.cat_name,p.change_cat_id,p.change_cat_name,p.ext_code,p.product_name,p.main_img," + - "u.nick_name as operate_sub_sa_nick " + - "FROM ("; - - for (int year = search_start_time.Value.Year; year <= search_end_time.Value.Year; year++) - { - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - - if (year >= 2026) - tableName += "_" + year; - if (year > search_start_time.Value.Year) - sql += " UNION ALL"; - sql += " SELECT * FROM " + tableName; - } - - sql += ") s LEFT JOIN kjd.third_product p ON s.out_product_id=p.id " + - "LEFT JOIN kjd.user u ON u.user_name=s.operate_sub_sa_name " + - "WHERE s.add_time BETWEEN '" + search_start_time.Value.ToString("yyyy-MM-dd") + "' AND '" + search_end_time.Value.ToString("yyyy-MM-dd") + "' "; - - - sql += where; // where子句 - - sql += " order by s.add_time desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - } - dt = mySql.ExecuteDataTable(sql, paramLst.ToArray()); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - ProductSelectResultParam prodSelect = new ProductSelectResultParam() - { - id = row["id"].ParseToLong(), - out_product_Id = row["out_product_Id"].ParseToString(), - shop_account = row["shop_account"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - status = row["status"].ParseToString(), - sub_user_name = row["sub_user_name"].ParseToString(), - user_name = row["user_name"].ParseToString(), - cat_id = row["cat_id"].ParseToString(), - cat_name = row["cat_name"].ParseToString(), - change_cat_id = row["change_cat_id"].ParseToString(), - change_cat_name = row["change_cat_name"].ParseToString(), - product_name = row["product_name"].ParseToString(), - main_img = row["main_img"].ParseToString(), - ext_code = row["ext_code"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - notes = row["notes"].ParseToString(), - draft_id = row["draft_id"].ParseToString(), - add_times = row["add_times"].ParseToInt(), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - operate_sub_sa_name = row["operate_sub_sa_name"].ToString(), - fission_product_name = row["fission_product_name"].ToString(), - user_notes = row["user_notes"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - }; - if (operate_sub_sa_name != null || 1 == 1) - { - prodSelect.operate_sub_sa_nick = row["operate_sub_sa_nick"].ToString(); - } - prodSelect.add_sub_sa_time = row["add_sub_sa_time"] as DateTime?; - productLst.Add(prodSelect); - } - var data = JsonUtils.SerializeObjectToString(productLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelSelectProd(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - string dbName = "kjd"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - tableName += "_" + select_add_time.Value.Year; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from " + tableName + " where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败:" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 设置上传商品的二级超管 - /// - /// - public string SetSelectProductSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var db_ids = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var status = RegexUtils.GetStringQuery(ref inputData, "status")?.Replace("'", "\\'"); - var db_id_infos = RegexUtils.GetStringQuery(ref inputData, "db_id_infos")?.Replace("'", "\\'"); - - if (operate_sub_sa_name == null) - { - return "{\"code\":50002,\"msg\":\"未选择任何二级超管\"}"; - } - if (string.IsNullOrEmpty(db_ids) && string.IsNullOrEmpty(shop_ids) && string.IsNullOrEmpty(db_id_infos)) - { - return "{\"code\":50003,\"msg\":\"未选择任何待设置对象\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null && db_id_infos == null && db_ids == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - bool rst = false; - - if (!string.IsNullOrEmpty(db_ids)) - { - sql = "UPDATE kjd.third_product_select SET"; - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; - sql += " WHERE id IN (" + db_ids + ")"; - if (!string.IsNullOrEmpty(status)) - sql += " AND status='" + status + "';"; - - rst = mySql.ExecuteNonQuery(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - else if (!string.IsNullOrEmpty(shop_ids)) - { - List yearLst = new List() { 2025 }; - if (select_add_time != null) - { - yearLst.Clear(); - yearLst.Add(select_add_time.Value.Year); - yearLst.Add(select_add_time.Value.AddMonths(-6).Year); - yearLst = yearLst.Distinct().ToList(); - } - foreach (int year in yearLst) - { - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (year >= 2026) - tableName += "_" + year; - - sql = "UPDATE " + tableName + " SET"; - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; - sql += " WHERE shop_id in ('" + shop_ids.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(status)) - sql += " AND status='" + status + "';"; - - rst = mySql.ExecuteNonQuery(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - } - else if (!string.IsNullOrEmpty(db_id_infos)) - { - try - { - JArray jArr = JArray.Parse(db_id_infos); - foreach (JObject jObj in jArr) - { - var year = jObj["year"].ParseToInt(); - var dbIds = jObj["db_ids"].ParseToString(); - - string dbName = "kjd"; - if (year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (year >= 2026) - tableName += "_" + year; - - sql = "UPDATE " + tableName + " SET"; - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'"; - sql += " WHERE id IN (" + dbIds + ")"; - if (!string.IsNullOrEmpty(status)) - sql += " AND status='" + status + "';"; - - rst = mySql.ExecuteNonQuery(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - } - catch (Exception ex) - { - mySql.Close(); - return "{\"code\":50004,\"msg\":\"" + ex.Message + "\"}"; - } - } - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string MdyProductSelectNotes(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var db_id = RegexUtils.GetStringQuery(ref inputData, "db_id"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string user_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_notes")); - string fission_product_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "fission_product_name")); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - string dbName = "kjd"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - dbName = "kjd_yearly"; - string tableName = dbName + ".third_product_select"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - tableName += "_" + select_add_time.Value.Year; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update " + tableName + " set"; - if (notes != null) - sql += " notes=@notes,"; - if (user_notes != null) - sql += " user_notes=@user_notes,"; - if (fission_product_name != null) - sql += " fission_product_name=@fission_product_name,"; - sql = sql.TrimEnd(','); - sql += " where id=@id;"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int64, ParameterName = "@id", Value = db_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@fission_product_name", Value = fission_product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@user_notes", Value = user_notes, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@notes", Value = notes, }); - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"更新失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSelectProdDbIdMapDraftIdList(string inputData, bool isDetail = false) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"用户为空\"}"; - } - - var select_db_id = RegexUtils.GetStringQuery(ref inputData, "select_db_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(select_db_id)) - { - return "{\"code\":50002,\"msg\":\"未选择选品数据\"}"; - } - - var select_add_time = RegexUtils.GetStringQuery(ref inputData, "select_add_time")?.Replace("'", "\\'").ParseToDateTimeNullable(); - if (select_add_time == null) - { - return "{\"code\":500,\"msg\":\"当前软件版本不支持该操作,请升级软件。\"}"; - } - - string dbName = "kjd_map"; - if (select_add_time != null && select_add_time.Value.Year >= 2026) - dbName = "kjd_map_yearly"; - string tableName; - if (select_add_time != null && select_add_time.Value.Year >= 2026) // 2026年以后的数据在新表 - tableName = dbName + ".product_select_map_"; - else - tableName = dbName + ".product_third_select_map_"; - - if (select_add_time != null && select_add_time.Value.Year >= 2026) - tableName += select_add_time.Value.Year; - else - { - long l_select_map_table_id = select_db_id.ParseToLong() % 64; - tableName += +l_select_map_table_id; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM " + tableName + " WHERE 1=1"; - string where = " AND product_select_db_id=" + select_db_id; - if (select_add_time != null && select_add_time.Value.Year >= 2026) // 2026年以后的数据在新表 - where += " AND select_type='third-party'"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM " + tableName + " WHERE 1=1"; - //where子句 - sql += where; - sql += " ORDER BY add_time desc"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - if (dt != null) - { - try - { - List dbIdMapProductIdLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProdDbIdMapProductIdResultParam dbIdMapProductId = new DBProdDbIdMapProductIdResultParam - { - id = row["id"].ParseToLong(), - product_select_db_id = row["product_select_db_id"].ParseToLong(), - product_id = row["product_id"].ParseToLong(), - shop_id = row["shop_id"].ParseToLong(), - add_time = Convert.ToDateTime(row["add_time"]), - }; - dbIdMapProductIdLst.Add(dbIdMapProductId); - } - var data = JsonUtils.SerializeObjectToString(dbIdMapProductIdLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":500,\"msg\":\"查询结果为空!\",\"data\":[],\"count\":" + 0 + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/ShopManage.cs b/KJDService/KJD_WebService/BLL/KJD/ShopManage.cs deleted file mode 100644 index 0ee4305..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/ShopManage.cs +++ /dev/null @@ -1,1123 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.ShopModel; -using KJD_Web.Utils; -using MySqlX.XDevAPI; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Security; - -namespace KJD_Web.BLL -{ - public class ShopManage - { - public string GetShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM kjd.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (isAdmin) - where += " and (s.cookie='' or s.shop_id!='')"; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.*, c.add_product_remaining add_remaining, c.add_product_month add_month, cc.jit_expire_time FROM kjd.shop s" + - /*, u.sub_nick_name*/ - //" LEFT JOIN (SELECT parent_user_name, GROUP_CONCAT(nick_name) as sub_nick_name FROM kjd.user WHERE user_name in(s.sub_user_name) GROUP BY parent_user_name) u ON s.shop_id=u.parent_user_name" + - " LEFT JOIN kjd.shop_add_prod_count c ON s.shop_id=c.shop_id" + - " LEFT JOIN (SELECT shop_id, MAX(expire_time) as jit_expire_time FROM kjd.jit_card_code GROUP BY shop_id) cc ON s.shop_id=cc.shop_id" + - " WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList=new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - //sub_nick_name = row["sub_nick_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = Math.Max(0, row["add_remaining"].ParseToInt()), - add_product_month = row["add_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - ad_cookie = row["ad_cookie"].ParseToString(), - ad_login_status = row["ad_login_status"].ParseToString(), - ad_seller_unique_id = row["ad_seller_unique_id"].ParseToString(), - ad_url = row["ad_url"].ParseToString(), - jit_expire_time = row["jit_expire_time"].IsNullOrEmpty() ? new DateTime?() : Convert.ToDateTime(row["jit_expire_time"]), - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO kjd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update kjd.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO kjd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql+= "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string SubSaGetSelectProdShop(string inputData) // 废弃 - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM kjd.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and (s.shop_id in (SELECT DISTINCT shop_id From kjd.product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "') or " + - "s.shop_id in (SELECT DISTINCT shop_id From kjd.third_product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "'))"; - where += " and (s.cookie='' or s.shop_id!='')"; - //if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - // where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.*,c.add_product_remaining add_remaining,c.add_product_month add_month FROM kjd.shop s LEFT JOIN kjd.shop_add_prod_count c ON s.shop_id=c.shop_id WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = Math.Max(0, row["add_remaining"].ParseToInt()), - add_product_month = row["add_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - ad_cookie = row["ad_cookie"].ParseToString(), - ad_login_status = row["ad_login_status"].ParseToString(), - ad_seller_unique_id = row["ad_seller_unique_id"].ParseToString(), - ad_url = row["ad_url"].ParseToString(), - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO kjd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update kjd.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO kjd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - - public string UpdateAddProdRemaining(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var remainCount = RegexUtils.GetStringQuery(ref inputData, "remain_count"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql += "update kjd.shop_add_prod_count set add_product_remaining=" + remainCount + - " where 1=1 and shop_id in (" + shop_ids + ");"; - - var rst = mySql.ExecuteNonQuery(sql); - var msg = mySql.Message; - mySql.Close(); - - if (rst) - return "{\"code\":200,\"msg\":\"success\"}"; - else - return "{\"code\":50000,\"msg\":\"" + msg + "\"}"; - } - else - { - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } - - //获取一个手机登录号码下的所有店铺(以便有则更新,无则新增) - public string GetOneLoginNameShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,shop_id,shop_account,sub_user_name,user_name from kjd.shop where user_name='" - + user_name + "' and login_name='" + login_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - //获取一个手机登录号码下特定ID的店铺 - public string GetOneIdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,shop_id,shop_account,sub_user_name,user_name from kjd.shop where user_name='" - + user_name + "' and login_name='" + login_name + "' and shop_id='" + shop_id + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string AddShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - if (string.IsNullOrEmpty(shop_id)) - sql = "select exists (select 1 from kjd.shop where login_name='" + login_name + "' and user_name='" + user_name + "')"; - else - sql = "select exists (select 1 from kjd.shop where login_name='" + login_name + "' and user_name='" + user_name + - "' and shop_id='" + shop_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist>0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"店铺" + login_name +" " + shop_account + "已存在\"}"; - } - - sql = "insert into kjd.shop (login_name,login_pass,cookie,cookie2,shop_account,shop_id,sub_user_name,user_name,group_name,notes,add_time,mdy_time) " + - "values ('" + login_name + "','" + login_pass + "','" + cookie + "','" + cookie2 + "','" + shop_account + "','" + shop_id + "','" + - sub_user_name + "','" + user_name + "','" + group_name + "','" + notes + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string new_shop_id = RegexUtils.GetStringQuery(ref inputData, "new_shop_id"); - string old_shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.shop set"; - if (login_pass != null) - sql += " login_pass='" + login_pass + "',"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (new_shop_id != null) - sql += " shop_id='" + new_shop_id + "',"; - if (shop_account != null) - sql += " shop_account='" + shop_account + "',"; - if (sub_user_name != null) - sql += " sub_user_name='" + sub_user_name + "',"; - if (group_name != null) - sql += " group_name='" + group_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and (user_name='" + user_name + "' or sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(old_shop_id)) - sql += " and shop_id='" + old_shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyCookieAndLoginStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - string login_status2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status2")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.shop set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - if (login_status2 != null) - sql += " login_status2='" + login_status2 + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyAdsCookieAndLoginStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string ad_url = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ad_url")); - string ad_seller_unique_id = RegexUtils.GetStringQuery(ref inputData, "ad_seller_unique_id"); - string ad_login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ad_login_status")); - string ad_cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "ad_cookie")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.shop set"; - if (ad_url != null) - sql += " ad_url='" + ad_url + "',"; - if (ad_seller_unique_id != null) - sql += " ad_seller_unique_id='" + ad_seller_unique_id + "',"; - if (ad_login_status != null) - sql += " ad_login_status='" + ad_login_status + "',"; - if (ad_cookie != null) - sql += " ad_cookie='" + ad_cookie + "',"; - sql = sql.TrimEnd(','); - sql += " where shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string DelShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from kjd.shop where user_name='" + user_name + "' and login_name='" + login_name + "'"; - if (!string.IsNullOrEmpty(shop_id)) - sql += " and shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - /// - /// 设置店铺的二级超管 - /// - /// - public string SetShopSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "shop_login_name")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(login_name)) - { - return "{\"code\":50002,\"msg\":\"未选择任何待上传\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update kjd.shop set"; - if (operate_sub_sa_name != null) - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - if (!string.IsNullOrEmpty(id)) - sql += " where id in (" + id + ")"; - else if (!string.IsNullOrEmpty(login_name)) - sql += " where login_name in ('" + login_name.Replace(",", "','") + "')"; - else - sql += " where 1=2"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetShopCardCodeList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_card_code_id = RegexUtils.GetStringQuery(ref inputData, "search_card_code_id"); - var search_shop_id = RegexUtils.GetStringQuery(ref inputData, "search_shop_id"); - var search_shop_name = RegexUtils.GetStringQuery(ref inputData, "search_shop_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var card_code_ids = RegexUtils.GetStringQuery(ref inputData, "card_code_ids")?.Replace("'", ""); - var sort_field = RegexUtils.GetStringQuery(ref inputData, "sort_field")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(card_code_ids)) - { - List shopIdLst = card_code_ids.Split(',').ToList(); - card_code_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var list_notes = RegexUtils.GetStringQuery(ref inputData, "list_notes"); - if (!string.IsNullOrWhiteSpace(list_notes)) - { - List notesLst = list_notes.Split(',').ToList(); - list_notes = "'" + string.Join("','", notesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM kjd.jit_card_code s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(search_card_code_id)) - where += " and s.card_code_id like '%" + search_card_code_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_shop_id)) - where += " and s.shop_id like '%" + search_shop_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_shop_name)) - where += " and s.shop_account like '%" + search_shop_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(card_code_ids)) - where += " and s.card_code_id in (" + card_code_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(list_notes)) - where += " and s.notes in (" + list_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.* FROM kjd.jit_card_code s WHERE 1=1"; - - sql += where; // where 子句 - - // 排序 - if (sort_field == "expire_time") - sql += " ORDER BY s.expire_time DESC"; - else - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List cardCodeList = new List(); - foreach (DataRow row in dt.Rows) - { - JitCardCodeParam cardCode = new JitCardCodeParam - { - id = Convert.ToInt32(row["id"]), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - add_time = (DateTime)row["add_time"], - active_time = row["active_time"].IsNullOrEmpty() ? new DateTime?() : Convert.ToDateTime(row["active_time"]), - expire_time = row["expire_time"].IsNullOrEmpty() ? new DateTime?() : Convert.ToDateTime(row["expire_time"]), - card_code_id = row["card_code_id"].ToString(), - notes = row["notes"].ToString(), - }; - cardCodeList.Add(cardCode); - } - var data = JsonUtils.SerializeObjectToString(cardCodeList); - - - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string CreateShopCardCode(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var create_count = RegexUtils.GetStringQuery(ref inputData, "create_count")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(create_count)) - { - return "{\"code\":50002,\"msg\":\"未选择生成数量\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "insert into kjd.jit_card_code (card_code_id) values "; - Random random = new Random(Guid.NewGuid().GetHashCode()); - for (int i = 0; i < create_count.ParseToInt(); i++) - { - sql += "('" + GenerateCardCode(random, 16) + "'),"; - } - sql = sql.TrimEnd(',') + ";"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelShopCardCode(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var del_ids = RegexUtils.GetStringQuery(ref inputData, "del_ids")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(del_ids)) - { - return "{\"code\":50002,\"msg\":\"未选择删除数据\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from kjd.jit_card_code where id in (" + del_ids + ");"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string ActiveJitCardCode(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var card_code_id = RegexUtils.GetStringQuery(ref inputData, "card_code_id")?.Replace("'", "\\'"); - var shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":50002,\"msg\":\"未输入店铺\"}"; - } - if (string.IsNullOrEmpty(card_code_id)) - { - return "{\"code\":50002,\"msg\":\"未输入卡密\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select card_code_id from kjd.jit_card_code where card_code_id = \'" + card_code_id + "\' and active_time is null;"; - var rst = mySql.ExecuteExists(sql); - if (!rst) - { - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"JIT卡密不存在或已激活\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - sql = "select s.shop_id,cc.jit_expire_time from kjd.shop s" + - " LEFT JOIN (SELECT shop_id, MAX(expire_time) as jit_expire_time FROM kjd.jit_card_code GROUP BY shop_id) cc ON s.shop_id=cc.shop_id" + - " where s.shop_id = '" + shop_id + "';"; - var dt = mySql.ExecuteDataTable(sql); - if (dt == null || !mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (dt.Rows.Count == 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"店铺不存在\"}"; - } - - var row = dt.Rows[0]; - ShopParam shop = new ShopParam - { - shop_id = row["shop_id"].ToString(), - jit_expire_time = row["jit_expire_time"].IsNullOrEmpty() ? new DateTime?() : Convert.ToDateTime(row["jit_expire_time"]), - }; - DateTime activeTime = DateTime.Now; - DateTime expireTime = DateTime.Now.Date.AddMonths(1); - if (shop.jit_expire_time != null && shop.jit_expire_time.Value.Date > DateTime.Now.Date) - expireTime = shop.jit_expire_time.Value.Date.AddMonths(1); - shop.jit_expire_time = expireTime; - - sql = "update kjd.jit_card_code set active_time='" + activeTime.ToString("yyyy/MM/dd HH:mm:ss") + "'," + - "expire_time='" + expireTime.ToString("yyyy/MM/dd HH:mm:ss") + "'," + - "shop_id='" + shop_id + "',shop_account='" + shop_account + "'" + - " where card_code_id='" + card_code_id + "';"; - rst = mySql.ExecuteNonQuery(sql); - - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"expire_time\":\"" + expireTime + "\",\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - private static readonly char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".ToCharArray(); // 增加特殊字符 - - public static string GenerateCardCode(Random random, int length) - { - StringBuilder result = new StringBuilder(length); - for (int i = 0; i < length; i++) - { - result.Append(chars[random.Next(chars.Length)]); - } - return result.ToString(); - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/ToolManage.cs b/KJDService/KJD_WebService/BLL/KJD/ToolManage.cs deleted file mode 100644 index 8954bf5..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/ToolManage.cs +++ /dev/null @@ -1,225 +0,0 @@ -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.BLL -{ - public class ToolManage - { - //mysql workbench 存储过程,可以使用分隔符重定义 - // string 存储过程1 = @" - //DELIMITER $ - //DROP PROCEDURE IF EXISTS add_spu_map; - //CREATE PROCEDURE add_spu_map() - //BEGIN - //insert into kjd_map.spu_map_0 (draft_id,from_spu_id,shop_id) values(9122600878,727585921,'3049342434562'); - //update kjd.third_product_select set draft_id='9122600878', status='已上传', add_times=add_times+1, mdy_time='2025-08-06 11:54:50' where id=6532; - //END $ - //DELIMITER ; - //CALL add_spu_map();"; - - //腾讯云服务器存储过程,不能使用分隔符重定义 - // string 存储过程2 = @" - //DROP PROCEDURE IF EXISTS add_spu_map; - //CREATE PROCEDURE add_spu_map() - //BEGIN - //insert into kjd_map.spu_map_1 (draft_id,from_spu_id,shop_id) values(9122600878,727585921,'3049342434562'); - //update kjd.third_product_select set draft_id='9122600878', status='已上传', add_times=add_times+1, mdy_time='2025-08-06 11:54:50' where id=6532; - //END ; - //CALL add_spu_map();"; - - public void CreateTable() - { - //string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - //MysqlUtils mySql = new MysqlUtils(conn); - //string sql = ""; - //for (int i = 0; i < 128; i++) - //{ - // sql = @"drop table if exists bxx_relation.out_prod_relation_" + i.ParseToString().PadLeft(4, '0') + ";\r\n"; - // sql += @"CREATE TABLE bxx_relation.out_prod_relation_" + i.ParseToString().PadLeft(4, '0') + @" ( - // `id` int NOT NULL AUTO_INCREMENT, - // `up_spu_id` varchar(50) NOT NULL COMMENT '源商品id信息,此字段为分表依据', - // `up_goods_name` varchar(255) NOT NULL COMMENT '源商品标题', - // `from_site` varchar(10) NOT NULL COMMENT '商品来源平台如pdd,tb,1688,vd(微店)等', - // `goods_id` varchar(50) NOT NULL COMMENT '映射商品id信息', - // `shop_id` varchar(50) NOT NULL COMMENT '上传到的店铺id', - // `price_min` int NOT NULL COMMENT '最低价,单位分', - // `price_max` int NOT NULL COMMENT '最高价,单位分', - // `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - // PRIMARY KEY(`id`), - // KEY `index_add_time` (`add_time`) USING BTREE, - // KEY `index_up_spu_id` (`up_spu_id`) USING BTREE, - // KEY `index_shop_id` (`shop_id`) USING BTREE, - // KEY `index_price_min` (`price_min`) USING BTREE, - // KEY `index_price_max` (`price_max`) USING BTREE - // ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '记录拼多多关联数据信息'"; - // var rst = mySql.ExecuteNonQuery(sql); - //} - //mySql.Close(); - - - //string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - //MysqlUtils mySql = new MysqlUtils(conn); - //string sql = ""; - //for (int i = 0; i < 1024; i++) - //{ - // sql = @"drop table if exists wxxd_product_up_map.product_up_map_" + i.ParseToString().PadLeft(4, '0') + ";\r\n"; - // sql += @" - //CREATE TABLE wxxd_product_up_map.product_up_map_" + i.ParseToString().PadLeft(4, '0') + @" ( - // `id` int NOT NULL AUTO_INCREMENT, - // `up_secret_spu_id` varchar(50) NOT NULL COMMENT '加密源商品id信息,此字段为分表依据,对应商品货号字段', - // `up_spu_id` varchar(50) NOT NULL COMMENT '源商品id信息', - // `shop_id` varchar(50) NOT NULL COMMENT '上传到的店铺id', - // `price_min` int NOT NULL COMMENT '最低价', - // `price_max` int NOT NULL COMMENT '最高价', - // `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - // PRIMARY KEY(`id`), - // KEY `index_add_time` (`add_time`) USING BTREE, - // KEY `index_up_secret_spu_id_shop_id` (`up_secret_spu_id`, `shop_id`) USING BTREE - //) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '记录微信商品上传到哪些店铺的信息'"; - // var rst = mySql.ExecuteNonQuery(sql); - //} - //mySql.Close(); - - - // string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - // MysqlUtils mySql = new MysqlUtils(conn); - // string sql = ""; - // string sql1 = ""; - // for (int i = 0; i < 64; i++) - // { - // //sql = @"drop table if exists kjd_map.spu_map_" + i + ";\r\n"; - // sql = @"CREATE TABLE IF NOT EXISTS kjd_map.jit_product_select_map_" + i + @" ( - // `id` int NOT NULL AUTO_INCREMENT, - // `product_id` bigint NOT NULL COMMENT '草稿箱/商品Id', - // `product_select_db_id` bigint NOT NULL COMMENT '选品上传数据库Id', - // `shop_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上传的店铺', - // PRIMARY KEY (`id`) - //) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '上传商品kjd库Id与商品DraftId映射关系';"; - - // sql += @" - //ALTER TABLE - // kjd_map.jit_product_select_map_" + i + @" - //ADD - // COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP"; - // var rst = mySql.ExecuteNonQuery(sql); - // } - // mySql.Close(); - - - - // string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - // MysqlUtils mySql = new MysqlUtils(conn); - // string sql = ""; - // for (int i = 0; i < 128; i++) - // { - // //sql = @"drop table if exists kjd_map.spu_map_" + i + ";\r\n"; - // sql = @"CREATE TABLE IF NOT EXISTS kjd_order.order_code_" + i + @" ( - // `id` int unsigned NOT NULL AUTO_INCREMENT, - // `supplierId` varchar(25) COLLATE utf8mb4_general_ci NOT NULL, - // `subPurchaseOrderSn` varchar(25) COLLATE utf8mb4_general_ci DEFAULT NULL, - // `jiaTongCode` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, - // `barCodeMd5` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, - // `barCodeBase64` longtext COLLATE utf8mb4_general_ci, - // `shippingMark​Md5` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL, - // `shippingMarkBase64` longtext COLLATE utf8mb4_general_ci, - // `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - // `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - // PRIMARY KEY (`id`), - // UNIQUE KEY `index_subPurchaseOrderSn` (`subPurchaseOrderSn`) USING BTREE - //) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci"; - // sql = "ALTER TABLE\r\n kjd_order.order_code_" + i + "\r\nMODIFY\r\n COLUMN `jiaTongCode` varchar (50) NULL COMMENT '佳同码'\r\nAFTER\r\n `subPurchaseOrderSn`"; - // var rst = mySql.ExecuteNonQuery(sql); - // } - // mySql.Close(); - - - - //string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - //MysqlUtils mySql = new MysqlUtils(conn); - //string sql = ""; - // for (int i = 1; i <= 12; i++) - // { - - // //sql = @"drop table if exists kjd_order.order_code_" + i + ";\r\n"; - // sql = @"CREATE TABLE IF NOT EXISTS kjd_order.order_2026" + i.ToString("D2") + @" ( - // `id` int NOT NULL AUTO_INCREMENT, - // `supplierId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '店铺Id', - // `supplierName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '店铺名称', - // `originalPurchaseOrderSn` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '备母货单号', - // `subPurchaseOrderSn` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '备货单号', - // `productName` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `category` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `productId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品编号', - // `upProductId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上家编号', - // `productSkcId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `productSkcPicture` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主图', - // `productSn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '货号', - // `status` int NOT NULL COMMENT '状态 1待发货 2已送货 7已入库 8已作废', - // `productSkuId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `extCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'sku货号', - // `className` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'sku规格', - // `currencyType` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `supplierPrice` int NOT NULL COMMENT '申报价格', - // `costPrice` int DEFAULT NULL COMMENT '成本价', - // `deliveryFee` int DEFAULT NULL COMMENT '车队费', - // `markFee` int DEFAULT NULL COMMENT '贴标费', - // `purchaseQuantity` int NOT NULL COMMENT '备货件数', - // `deliverQuantity` int NOT NULL COMMENT '送货件数', - // `realReceiveAuthenticQuantity` int NOT NULL COMMENT '入库件数', - // `availableSaleDays` decimal(10, 0) DEFAULT NULL COMMENT '可售天数', - // `qcResult` int DEFAULT NULL COMMENT '抽检结果 1合格 2不合格', - // `thumbUrlList` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'sku图片', - // `purchaseTime` bigint NOT NULL COMMENT '备货单创建时间', - // `deliverTime` bigint DEFAULT NULL COMMENT '发货时间', - // `receiveTime` bigint DEFAULT NULL COMMENT '收货时间', - // `expectLatestDeliverTimeOrDefault` bigint NOT NULL COMMENT '最迟发货时间', - // `expectLatestArrivalTimeOrDefault` bigint NOT NULL COMMENT '最迟到货时间', - // `deliveryOrderSn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发货单号', - // `receiveWarehouseId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '实际收货仓库Id', - // `receiveWarehouseName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '实际收货仓库', - // `warehouseGroupId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '仓组Id', - // `jiaTongCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '佳同码', - // `barCodeMd5` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品条码MD5', - // `shippingMarkMd5` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '箱唛文件MD5', - // `notes` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', - // `upLoadStatus` int NOT NULL DEFAULT '0' COMMENT '是否上传订单(上传后扣除用户授权金额,产生扣费记录)', - // `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - // `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - // PRIMARY KEY (`id`), - // UNIQUE KEY `index_subPurchaseOrderSn` (`subPurchaseOrderSn`) USING BTREE - //) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单推送表'"; - - // //sql = @"drop table if exists kjd_order.order_code_" + i + ";\r\n"; - // sql = @"CREATE TABLE IF NOT EXISTS kjd_order.order_code_2026" + i.ToString("D2") + @" ( - // `id` int unsigned NOT NULL AUTO_INCREMENT, - // `supplierId` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `fileCodeMd5` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `fileCodeBase64` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - // `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - // `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - // PRIMARY KEY (`id`), - // UNIQUE KEY `index_fileCodeMd5` (`fileCodeMd5`) USING BTREE - //) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci"; - - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nADD\r\n COLUMN `upLoadStatus` int NOT NULL DEFAULT 0 COMMENT '是否上传订单(上传后扣除用户授权金额,产生扣费记录)',\r\nMODIFY\r\n COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP\r\nAFTER\r\n `upLoadStatus`,\r\nMODIFY\r\n COLUMN `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\r\nAFTER\r\n `add_time`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nADD\r\n COLUMN `extCode` varchar (50) NOT NULL COMMENT 'sku货号',\r\nMODIFY\r\n COLUMN `className` varchar (100) NOT NULL COMMENT 'sku规格'\r\nAFTER\r\n `extCode`,\r\nMODIFY\r\n COLUMN `currencyType` varchar (10) NOT NULL\r\nAFTER\r\n `className`,\r\nMODIFY\r\n COLUMN `supplierPrice` int NOT NULL COMMENT '申报价格'\r\nAFTER\r\n `currencyType`,\r\nMODIFY\r\n COLUMN `purchaseQuantity` int NOT NULL COMMENT '备货件数'\r\nAFTER\r\n `supplierPrice`,\r\nMODIFY\r\n COLUMN `deliverQuantity` int NOT NULL COMMENT '送货件数'\r\nAFTER\r\n `purchaseQuantity`,\r\nMODIFY\r\n COLUMN `realReceiveAuthenticQuantity` int NOT NULL COMMENT '入库件数'\r\nAFTER\r\n `deliverQuantity`,\r\nMODIFY\r\n COLUMN `availableSaleDays` decimal (10, 0) NOT NULL COMMENT '可售天数'\r\nAFTER\r\n `realReceiveAuthenticQuantity`,\r\nMODIFY\r\n COLUMN `qcResult` int NULL COMMENT '抽检结果 1合格 2不合格'\r\nAFTER\r\n `availableSaleDays`,\r\nMODIFY\r\n COLUMN `thumbUrlList` varchar (500) NULL COMMENT 'sku图片'\r\nAFTER\r\n `qcResult`,\r\nMODIFY\r\n COLUMN `purchaseTime` bigint NOT NULL COMMENT '备货单创建时间'\r\nAFTER\r\n `thumbUrlList`,\r\nMODIFY\r\n COLUMN `deliverTime` bigint NULL COMMENT '发货时间'\r\nAFTER\r\n `purchaseTime`,\r\nMODIFY\r\n COLUMN `receiveTime` bigint NULL COMMENT '收货时间'\r\nAFTER\r\n `deliverTime`,\r\nMODIFY\r\n COLUMN `expectLatestDeliverTimeOrDefault` bigint NOT NULL COMMENT '最迟发货时间'\r\nAFTER\r\n `receiveTime`,\r\nMODIFY\r\n COLUMN `expectLatestArrivalTimeOrDefault` bigint NOT NULL COMMENT '最迟到货时间'\r\nAFTER\r\n `expectLatestDeliverTimeOrDefault`,\r\nMODIFY\r\n COLUMN `deliveryOrderSn` varchar (50) NULL COMMENT '发货单号'\r\nAFTER\r\n `expectLatestArrivalTimeOrDefault`,\r\nMODIFY\r\n COLUMN `receiveWarehouseId` varchar (25) NULL COMMENT '实际收货仓库Id'\r\nAFTER\r\n `deliveryOrderSn`,\r\nMODIFY\r\n COLUMN `receiveWarehouseName` varchar (50) NULL COMMENT '实际收货仓库'\r\nAFTER\r\n `receiveWarehouseId`,\r\nMODIFY\r\n COLUMN `warehouseGroupId` varchar (25) NULL COMMENT '仓组Id'\r\nAFTER\r\n `receiveWarehouseName`,\r\nMODIFY\r\n COLUMN `jiaTongCode` varchar (50) NULL COMMENT '佳同码'\r\nAFTER\r\n `warehouseGroupId`,\r\nMODIFY\r\n COLUMN `barCodeMd5` varchar (32) NULL COMMENT '商品条码MD5'\r\nAFTER\r\n `jiaTongCode`,\r\nMODIFY\r\n COLUMN `shippingMark​Md5` varchar (32) NULL COMMENT '箱唛文件MD5'\r\nAFTER\r\n `barCodeMd5`,\r\nMODIFY\r\n COLUMN `notes` varchar (50) NULL COMMENT '备注'\r\nAFTER\r\n `shippingMark​Md5`,\r\nMODIFY\r\n COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP\r\nAFTER\r\n `notes`,\r\nMODIFY\r\n COLUMN `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\r\nAFTER\r\n `add_time`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nMODIFY\r\n COLUMN `extCode` varchar (50) NOT NULL COMMENT 'sku货号'\r\nAFTER\r\n `productSkuId`,\r\nMODIFY\r\n COLUMN `className` varchar (100) NOT NULL COMMENT 'sku规格'\r\nAFTER\r\n `extCode`,\r\nMODIFY\r\n COLUMN `currencyType` varchar (10) NOT NULL\r\nAFTER\r\n `className`,\r\nMODIFY\r\n COLUMN `supplierPrice` int NOT NULL COMMENT '申报价格'\r\nAFTER\r\n `currencyType`,\r\nMODIFY\r\n COLUMN `purchaseQuantity` int NOT NULL COMMENT '备货件数'\r\nAFTER\r\n `supplierPrice`,\r\nMODIFY\r\n COLUMN `deliverQuantity` int NOT NULL COMMENT '送货件数'\r\nAFTER\r\n `purchaseQuantity`,\r\nMODIFY\r\n COLUMN `realReceiveAuthenticQuantity` int NOT NULL COMMENT '入库件数'\r\nAFTER\r\n `deliverQuantity`,\r\nMODIFY\r\n COLUMN `availableSaleDays` decimal (10, 0) NOT NULL COMMENT '可售天数'\r\nAFTER\r\n `realReceiveAuthenticQuantity`,\r\nMODIFY\r\n COLUMN `qcResult` int NULL COMMENT '抽检结果 1合格 2不合格'\r\nAFTER\r\n `availableSaleDays`,\r\nMODIFY\r\n COLUMN `thumbUrlList` varchar (500) NULL COMMENT 'sku图片'\r\nAFTER\r\n `qcResult`,\r\nMODIFY\r\n COLUMN `purchaseTime` bigint NOT NULL COMMENT '备货单创建时间'\r\nAFTER\r\n `thumbUrlList`,\r\nMODIFY\r\n COLUMN `deliverTime` bigint NULL COMMENT '发货时间'\r\nAFTER\r\n `purchaseTime`,\r\nMODIFY\r\n COLUMN `receiveTime` bigint NULL COMMENT '收货时间'\r\nAFTER\r\n `deliverTime`,\r\nMODIFY\r\n COLUMN `expectLatestDeliverTimeOrDefault` bigint NOT NULL COMMENT '最迟发货时间'\r\nAFTER\r\n `receiveTime`,\r\nMODIFY\r\n COLUMN `expectLatestArrivalTimeOrDefault` bigint NOT NULL COMMENT '最迟到货时间'\r\nAFTER\r\n `expectLatestDeliverTimeOrDefault`,\r\nMODIFY\r\n COLUMN `deliveryOrderSn` varchar (50) NULL COMMENT '发货单号'\r\nAFTER\r\n `expectLatestArrivalTimeOrDefault`,\r\nMODIFY\r\n COLUMN `receiveWarehouseId` varchar (25) NULL COMMENT '实际收货仓库Id'\r\nAFTER\r\n `deliveryOrderSn`,\r\nMODIFY\r\n COLUMN `receiveWarehouseName` varchar (50) NULL COMMENT '实际收货仓库'\r\nAFTER\r\n `receiveWarehouseId`,\r\nMODIFY\r\n COLUMN `warehouseGroupId` varchar (25) NULL COMMENT '仓组Id'\r\nAFTER\r\n `receiveWarehouseName`,\r\nMODIFY\r\n COLUMN `jiaTongCode` varchar (50) NULL COMMENT '佳同码'\r\nAFTER\r\n `warehouseGroupId`,\r\nMODIFY\r\n COLUMN `barCodeMd5` varchar (32) NULL COMMENT '商品条码MD5'\r\nAFTER\r\n `jiaTongCode`,\r\nMODIFY\r\n COLUMN `shippingMark​Md5` varchar (32) NULL COMMENT '箱唛文件MD5'\r\nAFTER\r\n `barCodeMd5`,\r\nMODIFY\r\n COLUMN `notes` varchar (50) NULL COMMENT '备注'\r\nAFTER\r\n `shippingMark​Md5`,\r\nMODIFY\r\n COLUMN `upLoadStatus` int NOT NULL DEFAULT '0' COMMENT '是否上传订单(上传后扣除用户授权金额,产生扣费记录)'\r\nAFTER\r\n `notes`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nADD\r\n COLUMN `costPrice` int NULL COMMENT '成本价',\r\nADD\r\n COLUMN `deliveryFee` int NULL COMMENT '车队费',\r\nADD\r\n COLUMN `markFee` int NULL COMMENT '贴标费',\r\nMODIFY\r\n COLUMN `purchaseQuantity` int NOT NULL COMMENT '备货件数'\r\nAFTER\r\n `markFee`,\r\nMODIFY\r\n COLUMN `deliverQuantity` int NOT NULL COMMENT '送货件数'\r\nAFTER\r\n `purchaseQuantity`,\r\nMODIFY\r\n COLUMN `realReceiveAuthenticQuantity` int NOT NULL COMMENT '入库件数'\r\nAFTER\r\n `deliverQuantity`,\r\nMODIFY\r\n COLUMN `availableSaleDays` decimal (10, 0) NOT NULL COMMENT '可售天数'\r\nAFTER\r\n `realReceiveAuthenticQuantity`,\r\nMODIFY\r\n COLUMN `qcResult` int NULL COMMENT '抽检结果 1合格 2不合格'\r\nAFTER\r\n `availableSaleDays`,\r\nMODIFY\r\n COLUMN `thumbUrlList` varchar (500) NULL COMMENT 'sku图片'\r\nAFTER\r\n `qcResult`,\r\nMODIFY\r\n COLUMN `purchaseTime` bigint NOT NULL COMMENT '备货单创建时间'\r\nAFTER\r\n `thumbUrlList`,\r\nMODIFY\r\n COLUMN `deliverTime` bigint NULL COMMENT '发货时间'\r\nAFTER\r\n `purchaseTime`,\r\nMODIFY\r\n COLUMN `receiveTime` bigint NULL COMMENT '收货时间'\r\nAFTER\r\n `deliverTime`,\r\nMODIFY\r\n COLUMN `expectLatestDeliverTimeOrDefault` bigint NOT NULL COMMENT '最迟发货时间'\r\nAFTER\r\n `receiveTime`,\r\nMODIFY\r\n COLUMN `expectLatestArrivalTimeOrDefault` bigint NOT NULL COMMENT '最迟到货时间'\r\nAFTER\r\n `expectLatestDeliverTimeOrDefault`,\r\nMODIFY\r\n COLUMN `deliveryOrderSn` varchar (50) NULL COMMENT '发货单号'\r\nAFTER\r\n `expectLatestArrivalTimeOrDefault`,\r\nMODIFY\r\n COLUMN `receiveWarehouseId` varchar (25) NULL COMMENT '实际收货仓库Id'\r\nAFTER\r\n `deliveryOrderSn`,\r\nMODIFY\r\n COLUMN `receiveWarehouseName` varchar (50) NULL COMMENT '实际收货仓库'\r\nAFTER\r\n `receiveWarehouseId`,\r\nMODIFY\r\n COLUMN `warehouseGroupId` varchar (25) NULL COMMENT '仓组Id'\r\nAFTER\r\n `receiveWarehouseName`,\r\nMODIFY\r\n COLUMN `jiaTongCode` varchar (50) NULL COMMENT '佳同码'\r\nAFTER\r\n `warehouseGroupId`,\r\nMODIFY\r\n COLUMN `barCodeMd5` varchar (32) NULL COMMENT '商品条码MD5'\r\nAFTER\r\n `jiaTongCode`,\r\nMODIFY\r\n COLUMN `shippingMark​Md5` varchar (32) NULL COMMENT '箱唛文件MD5'\r\nAFTER\r\n `barCodeMd5`,\r\nMODIFY\r\n COLUMN `notes` varchar (50) NULL COMMENT '备注'\r\nAFTER\r\n `shippingMark​Md5`,\r\nMODIFY\r\n COLUMN `upLoadStatus` int NOT NULL DEFAULT '0' COMMENT '是否上传订单(上传后扣除用户授权金额,产生扣费记录)'\r\nAFTER\r\n `notes`,\r\nMODIFY\r\n COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP\r\nAFTER\r\n `upLoadStatus`,\r\nMODIFY\r\n COLUMN `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\r\nAFTER\r\n `add_time`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nMODIFY\r\n COLUMN `originalPurchaseOrderSn` varchar (25) NOT NULL COMMENT '备母货单号'\r\nAFTER\r\n `supplierId`,\r\nMODIFY\r\n COLUMN `subPurchaseOrderSn` varchar (25) NOT NULL COMMENT '备货单号'\r\nAFTER\r\n `originalPurchaseOrderSn`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nMODIFY\r\n COLUMN `availableSaleDays` decimal (10, 0) NULL COMMENT '可售天数'\r\nAFTER\r\n `realReceiveAuthenticQuantity`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nADD\r\n COLUMN `upProductId` varchar (25) NOT NULL COMMENT '上家编号',\r\nMODIFY\r\n COLUMN `productSkcId` varchar (25) NOT NULL\r\nAFTER\r\n `upProductId`,\r\nMODIFY\r\n COLUMN `productSkcPicture` varchar (250) NOT NULL COMMENT '主图'\r\nAFTER\r\n `productSkcId`,\r\nMODIFY\r\n COLUMN `productSn` varchar (50) NULL COMMENT '货号'\r\nAFTER\r\n `productSkcPicture`,\r\nMODIFY\r\n COLUMN `status` int NOT NULL COMMENT '状态 1待发货 2已送货 7已入库 8已作废'\r\nAFTER\r\n `productSn`,\r\nMODIFY\r\n COLUMN `productSkuId` varchar (25) NOT NULL\r\nAFTER\r\n `status`,\r\nMODIFY\r\n COLUMN `extCode` varchar (50) NOT NULL COMMENT 'sku货号'\r\nAFTER\r\n `productSkuId`,\r\nMODIFY\r\n COLUMN `className` varchar (100) NOT NULL COMMENT 'sku规格'\r\nAFTER\r\n `extCode`,\r\nMODIFY\r\n COLUMN `currencyType` varchar (10) NOT NULL\r\nAFTER\r\n `className`,\r\nMODIFY\r\n COLUMN `supplierPrice` int NOT NULL COMMENT '申报价格'\r\nAFTER\r\n `currencyType`,\r\nMODIFY\r\n COLUMN `costPrice` int NULL COMMENT '成本价'\r\nAFTER\r\n `supplierPrice`,\r\nMODIFY\r\n COLUMN `deliveryFee` int NULL COMMENT '车队费'\r\nAFTER\r\n `costPrice`,\r\nMODIFY\r\n COLUMN `markFee` int NULL COMMENT '贴标费'\r\nAFTER\r\n `deliveryFee`,\r\nMODIFY\r\n COLUMN `purchaseQuantity` int NOT NULL COMMENT '备货件数'\r\nAFTER\r\n `markFee`,\r\nMODIFY\r\n COLUMN `deliverQuantity` int NOT NULL COMMENT '送货件数'\r\nAFTER\r\n `purchaseQuantity`,\r\nMODIFY\r\n COLUMN `realReceiveAuthenticQuantity` int NOT NULL COMMENT '入库件数'\r\nAFTER\r\n `deliverQuantity`,\r\nMODIFY\r\n COLUMN `availableSaleDays` decimal (10, 0) NULL COMMENT '可售天数'\r\nAFTER\r\n `realReceiveAuthenticQuantity`,\r\nMODIFY\r\n COLUMN `qcResult` int NULL COMMENT '抽检结果 1合格 2不合格'\r\nAFTER\r\n `availableSaleDays`,\r\nMODIFY\r\n COLUMN `thumbUrlList` varchar (500) NULL COMMENT 'sku图片'\r\nAFTER\r\n `qcResult`,\r\nMODIFY\r\n COLUMN `purchaseTime` bigint NOT NULL COMMENT '备货单创建时间'\r\nAFTER\r\n `thumbUrlList`,\r\nMODIFY\r\n COLUMN `deliverTime` bigint NULL COMMENT '发货时间'\r\nAFTER\r\n `purchaseTime`,\r\nMODIFY\r\n COLUMN `receiveTime` bigint NULL COMMENT '收货时间'\r\nAFTER\r\n `deliverTime`,\r\nMODIFY\r\n COLUMN `expectLatestDeliverTimeOrDefault` bigint NOT NULL COMMENT '最迟发货时间'\r\nAFTER\r\n `receiveTime`,\r\nMODIFY\r\n COLUMN `expectLatestArrivalTimeOrDefault` bigint NOT NULL COMMENT '最迟到货时间'\r\nAFTER\r\n `expectLatestDeliverTimeOrDefault`,\r\nMODIFY\r\n COLUMN `deliveryOrderSn` varchar (50) NULL COMMENT '发货单号'\r\nAFTER\r\n `expectLatestArrivalTimeOrDefault`,\r\nMODIFY\r\n COLUMN `receiveWarehouseId` varchar (25) NULL COMMENT '实际收货仓库Id'\r\nAFTER\r\n `deliveryOrderSn`,\r\nMODIFY\r\n COLUMN `receiveWarehouseName` varchar (50) NULL COMMENT '实际收货仓库'\r\nAFTER\r\n `receiveWarehouseId`,\r\nMODIFY\r\n COLUMN `warehouseGroupId` varchar (25) NULL COMMENT '仓组Id'\r\nAFTER\r\n `receiveWarehouseName`,\r\nMODIFY\r\n COLUMN `jiaTongCode` varchar (50) NULL COMMENT '佳同码'\r\nAFTER\r\n `warehouseGroupId`,\r\nMODIFY\r\n COLUMN `barCodeMd5` varchar (32) NULL COMMENT '商品条码MD5'\r\nAFTER\r\n `jiaTongCode`,\r\nMODIFY\r\n COLUMN `shippingMark​Md5` varchar (32) NULL COMMENT '箱唛文件MD5'\r\nAFTER\r\n `barCodeMd5`,\r\nMODIFY\r\n COLUMN `notes` varchar (50) NULL COMMENT '备注'\r\nAFTER\r\n `shippingMark​Md5`,\r\nMODIFY\r\n COLUMN `upLoadStatus` int NOT NULL DEFAULT '0' COMMENT '是否上传订单(上传后扣除用户授权金额,产生扣费记录)'\r\nAFTER\r\n `notes`,\r\nMODIFY\r\n COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP\r\nAFTER\r\n `upLoadStatus`,\r\nMODIFY\r\n COLUMN `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\r\nAFTER\r\n `add_time`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nMODIFY\r\n COLUMN `upProductId` varchar (25) NULL COMMENT '上家编号'\r\nAFTER\r\n `productId`"; - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + "\r\nADD\r\n COLUMN `supplierName` varchar (50) NOT NULL COMMENT '店铺名称',\r\nMODIFY\r\n COLUMN `originalPurchaseOrderSn` varchar (25) NOT NULL COMMENT '备母货单号'\r\nAFTER\r\n `supplierName`,\r\nMODIFY\r\n COLUMN `subPurchaseOrderSn` varchar (25) NOT NULL COMMENT '备货单号'\r\nAFTER\r\n `originalPurchaseOrderSn`,\r\nMODIFY\r\n COLUMN `productName` varchar (1000) NOT NULL\r\nAFTER\r\n `subPurchaseOrderSn`,\r\nMODIFY\r\n COLUMN `category` varchar (50) NOT NULL\r\nAFTER\r\n `productName`,\r\nMODIFY\r\n COLUMN `productId` varchar (25) NOT NULL COMMENT '商品编号'\r\nAFTER\r\n `category`,\r\nMODIFY\r\n COLUMN `upProductId` varchar (25) NULL COMMENT '上家编号'\r\nAFTER\r\n `productId`,\r\nMODIFY\r\n COLUMN `productSkcId` varchar (25) NOT NULL\r\nAFTER\r\n `upProductId`,\r\nMODIFY\r\n COLUMN `productSkcPicture` varchar (250) NOT NULL COMMENT '主图'\r\nAFTER\r\n `productSkcId`,\r\nMODIFY\r\n COLUMN `productSn` varchar (50) NULL COMMENT '货号'\r\nAFTER\r\n `productSkcPicture`,\r\nMODIFY\r\n COLUMN `status` int NOT NULL COMMENT '状态 1待发货 2已送货 7已入库 8已作废'\r\nAFTER\r\n `productSn`,\r\nMODIFY\r\n COLUMN `productSkuId` varchar (25) NOT NULL\r\nAFTER\r\n `status`,\r\nMODIFY\r\n COLUMN `extCode` varchar (50) NOT NULL COMMENT 'sku货号'\r\nAFTER\r\n `productSkuId`,\r\nMODIFY\r\n COLUMN `className` varchar (100) NOT NULL COMMENT 'sku规格'\r\nAFTER\r\n `extCode`,\r\nMODIFY\r\n COLUMN `currencyType` varchar (10) NOT NULL\r\nAFTER\r\n `className`,\r\nMODIFY\r\n COLUMN `supplierPrice` int NOT NULL COMMENT '申报价格'\r\nAFTER\r\n `currencyType`,\r\nMODIFY\r\n COLUMN `costPrice` int NULL COMMENT '成本价'\r\nAFTER\r\n `supplierPrice`,\r\nMODIFY\r\n COLUMN `deliveryFee` int NULL COMMENT '车队费'\r\nAFTER\r\n `costPrice`,\r\nMODIFY\r\n COLUMN `markFee` int NULL COMMENT '贴标费'\r\nAFTER\r\n `deliveryFee`,\r\nMODIFY\r\n COLUMN `purchaseQuantity` int NOT NULL COMMENT '备货件数'\r\nAFTER\r\n `markFee`,\r\nMODIFY\r\n COLUMN `deliverQuantity` int NOT NULL COMMENT '送货件数'\r\nAFTER\r\n `purchaseQuantity`,\r\nMODIFY\r\n COLUMN `realReceiveAuthenticQuantity` int NOT NULL COMMENT '入库件数'\r\nAFTER\r\n `deliverQuantity`,\r\nMODIFY\r\n COLUMN `availableSaleDays` decimal (10, 0) NULL COMMENT '可售天数'\r\nAFTER\r\n `realReceiveAuthenticQuantity`,\r\nMODIFY\r\n COLUMN `qcResult` int NULL COMMENT '抽检结果 1合格 2不合格'\r\nAFTER\r\n `availableSaleDays`,\r\nMODIFY\r\n COLUMN `thumbUrlList` varchar (500) NULL COMMENT 'sku图片'\r\nAFTER\r\n `qcResult`,\r\nMODIFY\r\n COLUMN `purchaseTime` bigint NOT NULL COMMENT '备货单创建时间'\r\nAFTER\r\n `thumbUrlList`,\r\nMODIFY\r\n COLUMN `deliverTime` bigint NULL COMMENT '发货时间'\r\nAFTER\r\n `purchaseTime`,\r\nMODIFY\r\n COLUMN `receiveTime` bigint NULL COMMENT '收货时间'\r\nAFTER\r\n `deliverTime`,\r\nMODIFY\r\n COLUMN `expectLatestDeliverTimeOrDefault` bigint NOT NULL COMMENT '最迟发货时间'\r\nAFTER\r\n `receiveTime`,\r\nMODIFY\r\n COLUMN `expectLatestArrivalTimeOrDefault` bigint NOT NULL COMMENT '最迟到货时间'\r\nAFTER\r\n `expectLatestDeliverTimeOrDefault`,\r\nMODIFY\r\n COLUMN `deliveryOrderSn` varchar (50) NULL COMMENT '发货单号'\r\nAFTER\r\n `expectLatestArrivalTimeOrDefault`,\r\nMODIFY\r\n COLUMN `receiveWarehouseId` varchar (25) NULL COMMENT '实际收货仓库Id'\r\nAFTER\r\n `deliveryOrderSn`,\r\nMODIFY\r\n COLUMN `receiveWarehouseName` varchar (50) NULL COMMENT '实际收货仓库'\r\nAFTER\r\n `receiveWarehouseId`,\r\nMODIFY\r\n COLUMN `warehouseGroupId` varchar (25) NULL COMMENT '仓组Id'\r\nAFTER\r\n `receiveWarehouseName`,\r\nMODIFY\r\n COLUMN `jiaTongCode` varchar (50) NULL COMMENT '佳同码'\r\nAFTER\r\n `warehouseGroupId`,\r\nMODIFY\r\n COLUMN `barCodeMd5` varchar (32) NULL COMMENT '商品条码MD5'\r\nAFTER\r\n `jiaTongCode`,\r\nMODIFY\r\n COLUMN `shippingMark​Md5` varchar (32) NULL COMMENT '箱唛文件MD5'\r\nAFTER\r\n `barCodeMd5`,\r\nMODIFY\r\n COLUMN `notes` varchar (50) NULL COMMENT '备注'\r\nAFTER\r\n `shippingMark​Md5`,\r\nMODIFY\r\n COLUMN `upLoadStatus` int NOT NULL DEFAULT '0' COMMENT '是否上传订单(上传后扣除用户授权金额,产生扣费记录)'\r\nAFTER\r\n `notes`,\r\nMODIFY\r\n COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP\r\nAFTER\r\n `upLoadStatus`,\r\nMODIFY\r\n COLUMN `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\r\nAFTER\r\n `add_time`"; - - // // sql = "ALTER TABLE\r\n kjd_order.order_" + i + " CHANGE COLUMN `shippingMark​Md5` `shippingMarkMd5` varchar (32) NULL COMMENT '箱唛文件MD5'"; - // // sql = "ALTER TABLE\r\n kjd_order.order_code_" + i + " DROP COLUMN `subPurchaseOrderSn`,\r\n DROP COLUMN `jiaTongCode`,\r\n DROP COLUMN `shippingMark​Md5`,\r\n DROP COLUMN `shippingMarkBase64`,\r\n CHANGE COLUMN `barCodeMd5` `fileCodeMd5` varchar (32) NOT NULL,\r\n CHANGE COLUMN `barCodeBase64` `fileCodeBase64` longtext NOT NULL,\r\nMODIFY\r\n COLUMN `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP\r\nAFTER\r\n `fileCodeBase64`,\r\nMODIFY\r\n COLUMN `mdy_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\r\nAFTER\r\n `add_time`,\r\n DROP INDEX `index_subPurchaseOrderSn`,\r\nADD\r\n UNIQUE `index_fileCodeMd5` USING btree (`fileCodeMd5`)"; - // var rst = mySql.ExecuteNonQuery(sql); - //} - //mySql.Close(); - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/UpdateManage.cs b/KJDService/KJD_WebService/BLL/KJD/UpdateManage.cs deleted file mode 100644 index 2dbf444..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/UpdateManage.cs +++ /dev/null @@ -1,223 +0,0 @@ -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Web; - -namespace KJD_Web.BLL -{ - public class UpdateManage - { - public string GetUpdate(string inputData) - { - //string time1 = Encryption(time); - //return "time=" + time + "&code=" + time1 + "&NbCodeVersion=1" + "&version=" + BaseClass.VersionCount - - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - var serverVersion = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateVersion"].ConnectionString; - var UpdateFiles = ""; //System.Configuration.ConfigurationManager.ConnectionStrings["UpdateFiles"].ConnectionString; - var UpdateExe = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateExe"].ConnectionString; - var UpdateExeChk = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateExeChk"].ConnectionString; - var LowVersion = System.Configuration.ConfigurationManager.ConnectionStrings["LowVersion"].ConnectionString; - - serverVersion = "1115"; - UpdateFiles = "http://weidian.e57.cn/kjd_update/Update1115.zip"; - - if (version > LowVersion.ParseToInt()) - { - return "{\"code\":200,\"msg\":\"success\",\"next_version\":" + serverVersion + ",\"exe_check\":\"" + UpdateExeChk + - "\",\"exe_address\":\"" + UpdateExe + "\",\"file_address\":\"" + UpdateFiles + "\"}"; - } - else if (version > 0) - { - return "{\"code\":501,\"msg\":\"版本过低已无法直接升级,请联系管理员获取最新安装包\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"get update version failed\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string GetUpdateNew(string inputData) - { - //string time1 = Encryption(time); - //return "time=" + time + "&code=" + time1 + "&NbCodeVersion=1" + "&version=" + BaseClass.VersionCount - - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var path = RegexUtils.GetStringQuery(ref inputData, "path"); - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - var serverVersion = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateVersion"].ConnectionString; - var UpdateNewUrl = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateNewUrl"].ConnectionString; - var UpdateExe = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateExe"].ConnectionString; - var UpdateExeChk = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateExeChk"].ConnectionString; - var LowVersion = System.Configuration.ConfigurationManager.ConnectionStrings["LowVersion"].ConnectionString; - - int MaxVersion = 999999; - if (version <= 1200) - MaxVersion = 1200; - if (version <= 1159) - MaxVersion = 1159; - - if (version > LowVersion.ParseToInt()) - { - if (path != null) - { - try - { - var fileDir = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateFileDir"].ConnectionString; - if (path == "29wx") - { - var file = Directory.GetFiles(fileDir); - var versionTmp = 0; - foreach (var f in file) - { - var v = Path.GetFileName(f).Replace("Update29wx", "").Replace(".zip", "").ParseToInt(); - if (v > versionTmp && v <= serverVersion.ParseToInt() && v <= MaxVersion) - { - versionTmp = v; - } - } - if (versionTmp > 0) - { - serverVersion = versionTmp.ToString(); - return "{\"code\":200,\"msg\":\"success\",\"next_version\":" + serverVersion + ",\"exe_check\":\"" + UpdateExeChk + - "\",\"exe_address\":\"" + UpdateExe + "\",\"file_address\":\"" + UpdateNewUrl + "Update" + serverVersion + ".zip\"}"; - } - } - if (path == "29pdd") - { - var file = Directory.GetFiles(fileDir); - var versionTmp = 0; - foreach (var f in file) - { - var v = Path.GetFileName(f).Replace("Update29pdd", "").Replace(".zip", "").ParseToInt(); - if (v > versionTmp && v <= serverVersion.ParseToInt() && v <= MaxVersion) - { - versionTmp = v; - } - } - if (versionTmp > 0) - { - serverVersion = versionTmp.ToString(); - return "{\"code\":200,\"msg\":\"success\",\"next_version\":" + serverVersion + ",\"exe_check\":\"" + UpdateExeChk + - "\",\"exe_address\":\"" + UpdateExe + "\",\"file_address\":\"" + UpdateNewUrl + "Update" + serverVersion + ".zip\"}"; - } - } - } - catch (Exception ex) - { - //return "{\"code\":500,\"msg\":\"升级文件查询失败\"}"; - } - } - - if (serverVersion.ParseToInt() > MaxVersion) - serverVersion = MaxVersion.ParseToString(); - return "{\"code\":200,\"msg\":\"success\",\"next_version\":" + serverVersion + ",\"exe_check\":\"" + UpdateExeChk + - "\",\"exe_address\":\"" + UpdateExe + "\",\"file_address\":\"" + UpdateNewUrl + "Update" + serverVersion + ".zip\"}"; - } - else if (version > 0) - { - return "{\"code\":501,\"msg\":\"版本过低已无法直接升级,请联系管理员获取最新安装包\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"get update version failed\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - public string GetWxFindOrderUpdate(string inputData) - { - //string time1 = Encryption(time); - //return "time=" + time + "&code=" + time1 + "&NbCodeVersion=1" + "&version=" + BaseClass.VersionCount - - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var path = RegexUtils.GetStringQuery(ref inputData, "path"); - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - var serverVersion = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateVersion"].ConnectionString; - var UpdateFileNewUrl = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateWxFindOrderUrl"].ConnectionString; - var UpdateExe = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateExe"].ConnectionString; - var UpdateExeChk = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateExeChk"].ConnectionString; - var LowVersion = System.Configuration.ConfigurationManager.ConnectionStrings["WxFindOrderLowVersion"].ConnectionString; - - if (version > LowVersion.ParseToInt()) - { - //if (path != null) - { - try - { - var fileDir = System.Configuration.ConfigurationManager.ConnectionStrings["UpdateWxFindOrderFileDir"].ConnectionString; - //if (path == "29wx") - { - var file = Directory.GetFiles(fileDir); - var versionTmp = 0; - foreach (var f in file) - { - var v = Path.GetFileName(f).Replace("WxFindOrderUpdate", "").Replace(".zip", "").ParseToInt(); - if (v > versionTmp && v <= serverVersion.ParseToInt()) - { - versionTmp = v; - } - } - if (versionTmp > 0) - { - serverVersion = versionTmp.ToString(); - return "{\"code\":200,\"msg\":\"success\",\"next_version\":" + serverVersion + ",\"exe_check\":\"" + UpdateExeChk + - "\",\"exe_address\":\"" + UpdateExe + "\",\"file_address\":\"" + UpdateFileNewUrl + "WxFindOrderUpdate" + serverVersion + ".zip\"}"; - } - } - } - catch (Exception ex) - { - //return "{\"code\":500,\"msg\":\"升级文件查询失败\"}"; - } - } - - if (serverVersion.ParseToInt() > 1159) - serverVersion = 1159.ToString(); - return "{\"code\":200,\"msg\":\"success\",\"next_version\":" + serverVersion + ",\"exe_check\":\"" + UpdateExeChk + - "\",\"exe_address\":\"" + UpdateExe + "\",\"file_address\":\"" + UpdateFileNewUrl + "WxFindOrderUpdate" + serverVersion + ".zip\"}"; - } - else if (version > 0) - { - return "{\"code\":501,\"msg\":\"版本过低已无法直接升级,请联系管理员获取最新安装包\"}"; - } - else - { - return "{\"code\":502,\"msg\":\"get update version failed\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/KJD/UserManage.cs b/KJDService/KJD_WebService/BLL/KJD/UserManage.cs deleted file mode 100644 index 99a5de4..0000000 --- a/KJDService/KJD_WebService/BLL/KJD/UserManage.cs +++ /dev/null @@ -1,549 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Web; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL -{ - public class UserManage - { - public string CheckUserLogin(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from kjd.user where user_name='" - + mobile + "' and password='" + password + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - foreach (DataRow row in dt.Rows) - { - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["user_name"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - company_name = row["company_name"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - authorized_amount = row.Table.Columns.Contains("authorized_amount") ? row["authorized_amount"].ParseToInt() : 0, - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - - }; - - if (string.IsNullOrEmpty(user.company_name)) - { - user.company_name = "-"; - } - var data = JsonUtils.SerializeObjectToString(user); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - return "{\"code\":1,\"msg\":\"用户名或密码错误\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "company"))?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from kjd.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into kjd.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,parent_user_name,authority,forbidden_page,add_time,mdy_time) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "','" + parent_user_name + "','" + authority + "','" + forbidden_page + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\""+ mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"子账户创建成功!\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var group = RegexUtils.GetStringQuery(ref inputData, "group"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from kjd.user where parent_user_name='" - + user_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from kjd.user where parent_user_name='" - // + user_name + "'"; - sql = "update kjd.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (!string.IsNullOrEmpty(authority)) - sql += " authority='" + authority + "',"; - if (!string.IsNullOrEmpty(forbidden_page)) - sql += " forbidden_page='" + forbidden_page + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string DelUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var id = RegexUtils.GetStringQuery(ref inputData, "id"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from kjd.user where id='" - + id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败,请稍后重试\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetAllUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var search = RegexUtils.GetStringQuery(ref inputData, "search")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var user_name_in = RegexUtils.GetStringQuery(ref inputData, "user_name_in")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - //string sql = "select * from kjd.user where group_id=3"; - string sql = "select * from kjd.user where 1=1"; - if (!string.IsNullOrEmpty(group_id)) - sql += " and group_id=" + group_id; - if (!string.IsNullOrEmpty(sa_level)) - sql += " and sa_level=" + sa_level; - if (!string.IsNullOrEmpty(user_name_in)) - sql += " AND user_name IN(" + user_name_in + ")"; - if (!string.IsNullOrEmpty(search)) - sql += " and (user_name like '%" + search + - "%' or nick_name like '%" + search + - "%' or company_name like '%" + search + "%')"; - sql += " order by id desc"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - authorized_amount = row.Table.Columns.Contains("authorized_amount") ? row["authorized_amount"].ParseToInt() : 0, - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); ; - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var authorized_amount = RegexUtils.GetStringQuery(ref inputData, "authorized_amount")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from kjd.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into kjd.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,sa_level," + - "authorized_amount,authority,forbidden_page,add_time,mdy_time) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "'," + sa_level + "," + authorized_amount + ",'" + authority + "','" + forbidden_page + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var authorized_amount = RegexUtils.GetStringQuery(ref inputData, "authorized_amount")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from kjd.user where parent_user_name='" - // + user_name + "'"; - sql = "update kjd.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(company_name)) - sql += " company_name='" + company_name + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (!string.IsNullOrEmpty(sa_level)) - sql += " sa_level=" + sa_level + ","; - if (!string.IsNullOrEmpty(authorized_amount)) - sql += " authorized_amount=" + authorized_amount + ","; - if (authority != null) - sql += " authority='" + authority + "',"; - if (forbidden_page != null) - sql += " forbidden_page='" + forbidden_page + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string ChangePassword(string inputData) - { - var userName = RegexUtils.GetStringJson(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringJson(ref inputData, "password")?.Replace("'", "\\'"); - var newPassword = RegexUtils.GetStringJson(ref inputData, "new_password")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select user_id,password from pepdtp.user where user_id='" - + userName + "' and password='" + password + "'"; - - var dw = mySql.ExecuteDataTableRow(sql); - if (dw != null) - { - UserLoginResultParam user = new UserLoginResultParam - { - user_name = dw["user_id"].ToString(), - password = dw["password"].ToString(), - }; - sql = "update pepdtp.user set password = '" + newPassword + "' where user_id='" + userName + "'"; - var result = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (result) - { - return "{\"code\":0,\"msg\":\"密码修改成功!\"}"; - } - else - return "{\"code\":19999,\"msg\":\"密码修改失败!请稍后再试。\"}"; - } - else - { - mySql.Close(); - return "{\"code\":1,\"msg\":\"原密码错误。\"}"; - } - } - - public string GetUserAmount(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "time"), out time); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"请输入用户\"}"; - } - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select authorized_amount from kjd.user where user_name=" + user_name; - - var rst = mySql.ExecuteFirst(sql); - mySql.Close(); - if (!string.IsNullOrEmpty(rst)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":" + rst + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string return_package_secret_key { get; set; } = "aaMETt2bPe6YHzZ1ojbC+6wOvgtwehqc6A+/Rz+pCUU="; - - public string GetPackageSign(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var timestamp = RegexUtils.GetStringQuery(ref inputData, "timestamp")?.Replace("'", "\\'"); - var mallId = RegexUtils.GetStringQuery(ref inputData, "mallId")?.Replace("'", "\\'"); - var returnPackageNo = RegexUtils.GetStringQuery(ref inputData, "returnPackageNo")?.Replace("'", "\\'"); - int r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - string c2 = RegexUtils.GetStringQuery(ref inputData, "c2"); - - if (EncrypUtil.Encryption(r2) != c2) - return "{\"code\":2,\"msg\":\"不合法的输入内容\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from kjd.user where user_name='" - + mobile + "' and password='" + password + "'"; - - sql = "select * from kjd.user where user_name='" + mobile + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt == null || dt.Rows.Count <=0) - { - return "{\"code\":1,\"msg\":\"用户不存在\"}"; - } - - string sign = EncrypUtil.GetMd5(timestamp + return_package_secret_key + mallId + returnPackageNo).ToLower(); - - return "{\"code\":200, \"sign\":\"" + sign + "\", \"msg\":\"\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string IsGetReturnPackage(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - - int r2 = RegexUtils.GetStringQuery(ref inputData, "r2").ParseToInt(); - string c2 = RegexUtils.GetStringQuery(ref inputData, "c2"); - - if (EncrypUtil.Encryption(r2) != c2) - return "{\"code\":2,\"msg\":\"不合法的输入内容\"}"; - - var isGetReturn = System.Configuration.ConfigurationManager.ConnectionStrings["GetReturnPackage"]?.ConnectionString; - return "{\"code\":200, \"is_get\":\"" + isGetReturn + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXExpressOptimizeManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXExpressOptimizeManage.cs deleted file mode 100644 index bebec30..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXExpressOptimizeManage.cs +++ /dev/null @@ -1,877 +0,0 @@ -using KJD_Web.Model.WxModel; -using KJD_Web.Utils; -using KJD_WebService.Model; -using MySql.Data.MySqlClient; -using NaiBa.Util.Extension; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Runtime.Remoting.Messaging; -using System.Web; -using System.Web.Security; -using System.Web.Services.Description; - -namespace KJD_Web.BLL.WXXD -{ - public class WXExpressOptimizeManage - { - public string GetWayBill(string inputData, bool isNoUserName = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - //var delivery_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_id"))?.Replace("'", "\\'"); - //var delivery_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_name"))?.Replace("'", "\\'"); - //var waybill_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "waybill_id"))?.Replace("'", "\\'"); - //if (string.IsNullOrEmpty(delivery_id) || string.IsNullOrEmpty(delivery_name) || string.IsNullOrEmpty(waybill_id)) - //{ - // return "{\"code\":500,\"msg\":\"运单号信息不完整\"}"; - //} - var status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "status"))?.Replace("'", "\'"); - var order_ids = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_ids"))?.Replace("'", "\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.Replace("'", "\'"); - if (!isNoUserName && user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"用户名不能为空\"}"; - } - if (isNoUserName && order_ids.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"订单号不能为空\"}"; - } - - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - - //string tableName = "wxxd.express_optimize"; - //sql = "select exists (SELECT table_name FROM information_schema.tables WHERE table_schema = 'wxxd' AND table_name = 'express_optimize')"; - //var existTable = mySql.ExecuteFirstInt(sql); - //if (existTable == 0) - // sql = "select count(*) from wxxd.express_optimize where 1=1"; - //else - sql = "select count(*) from wxxd.express_optimize where 1=1"; - - string where = ""; - if (!isNoUserName) - where += " AND user_name='" + user_name + "'"; - if (status != null) - where += " AND status in (" + status + ")"; - if (order_ids != null) - where += " AND order_id in ('" + order_ids.Replace(",", "','") + "')"; - - sql += where; - - var count = 0; - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from wxxd.express_optimize where 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - - if (dt != null) - { - try - { - List WxOptimizeExpressInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WxOptimizeExpressInfoLst.Add(new WxOptimizeExpressInfo() - { - id = row["id"].ParseToInt(), - delivery_id = row["delivery_id"].ParseToString(), - delivery_name = row["delivery_name"].ParseToString(), - order_id = row["order_id"].ParseToString(), - bind_order_id = row["bind_order_id"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - status = row["status"].ParseToInt(), - waybill_id = row["waybill_id"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - use_time = row["use_time"].ParseToString().ParseToDateTimeNullable(), - waybill_pickup_time = row["waybill_pickup_time"].ParseToString().ParseToDateTimeNullable(), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WxOptimizeExpressInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 添加运单 - /// - /// - /// - public string AddWaybill(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var delivery_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_id"))?.Replace("'", "\\'"); - var delivery_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_name"))?.Replace("'", "\\'"); - var waybill_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "waybill_id"))?.Replace("'", "\\'"); - var bind_order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "bind_order_id"))?.Replace("'", "\\'"); - var waybill_pickup_time = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "waybill_pickup_time")).ParseToDateTimeNullable(); - if (string.IsNullOrEmpty(delivery_id) || string.IsNullOrEmpty(delivery_name) || string.IsNullOrEmpty(waybill_id)) - { - return "{\"code\":500,\"msg\":\"运单号信息不完整\"}"; - } - if (waybill_pickup_time == null && bind_order_id.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"揽收时间和绑定订单编号不能同时为空\"}"; - } - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.ParseToString(); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"请输入用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "SELECT EXISTS (SELECT 1 FROM wxxd.express_optimize WHERE waybill_id='" + waybill_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"运单号已存在\"}"; - } - - sql = "INSERT INTO wxxd.express_optimize (user_name,delivery_id,delivery_name,waybill_id,"; - if (!bind_order_id.IsNullOrEmpty()) - sql += "bind_order_id,"; - if (waybill_pickup_time != null) - sql += "waybill_pickup_time,"; - sql = sql.Trim(','); - sql += ") VALUES ('" + user_name + "','" + delivery_id + "','" + delivery_name + "','" + waybill_id + "',"; - if (!bind_order_id.IsNullOrEmpty()) - sql += "'" + bind_order_id + "',"; - if (waybill_pickup_time != null) - sql += "'" + waybill_pickup_time.Value.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.Trim(','); - sql += ");"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelWaybill(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var waybill_ids = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "waybill_ids"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(waybill_ids)) - { - return "{\"code\":500,\"msg\":\"运单号信息不完整\"}"; - } - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.ParseToString(); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"请输入用户名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "DELETE FROM wxxd.express_optimize WHERE waybill_id in ('" + waybill_ids.Replace(",", "','") + "') and status=0"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst || !mySql.Message.IsNullOrEmpty()) - return "{\"code\":501,\"msg\":\"删除失败 " + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 选择并使用运单 - /// - /// - /// - public string SelectAndSetWaybill(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.ParseToString(); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"请输入用户名\"}"; - } - var shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - var order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id) || string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"缺少订单信息\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - - string sql = ""; - sql = "select * from wxxd.express_optimize where order_id='" + order_id + "' and status = 1"; - var dt = mySql.ExecuteDataTable(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流信息查询失败 " + mySql.Message + "\"}"; - } - if (dt?.Rows?.Count == 0) - { - sql = "UPDATE wxxd.express_optimize SET order_id='" + order_id + "',status=1 WHERE user_name='" + user_name + - "' AND status=0 AND (order_id IS NULL OR order_id='') LIMIT 1"; - var cnt = mySql.ExecuteAffectedRows(sql); - if (cnt == 0 || !mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流信息提取失败 " + mySql.Message + "\"}"; - } - - sql = "SELECT * FROM wxxd.express_optimize WHERE user_name='" + user_name + "' AND order_id='" + order_id + "' AND status = 1"; - dt = mySql.ExecuteDataTable(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流信息提取失败 " + mySql.Message + "\"}"; - } - if (dt?.Rows?.Count == 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流信息提取失败 " + mySql.Message + "\"}"; - } - } - var waybill_id = dt.Rows[0]["waybill_id"].ToString(); - - // todo E57调用接口处理 - - mySql.Close(); - mySql = new MysqlUtils(conn, true); - sql = " UPDATE wxxd.express_optimize SET shop_id='" + shop_id + "',status=2,use_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' " + - " WHERE user_name='" + user_name + "' AND status=1 AND order_id='" + order_id + "' AND waybill_id='" + waybill_id + "'"; - var rst = mySql.ExecuteAffectedRows(sql); - if (rst == 0 || !mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"修改物流信息失败 " + mySql.Message + "\"}"; - } - else - { - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string SelectWaybill(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.ParseToString(); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"请输入用户名\"}"; - } - var shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - var order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - var order_time = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_time")).ParseToDateTimeNullable(); - - if (string.IsNullOrEmpty(order_id) || string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"缺少订单信息\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - - try - { - string sql = ""; - sql = "select * from wxxd.express_optimize WHERE user_name='" + user_name + "' AND order_id='" + order_id + "' and status = 1 LIMIT 1"; - var dt = mySql.ExecuteDataTable(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流查询失败 " + mySql.Message + "\"}"; - } - if (dt?.Rows?.Count == 0) - { - // 获取事先绑定的订单运单 - sql = " UPDATE wxxd.express_optimize SET order_id='" + order_id + "',status=1" + - " WHERE user_name='" + user_name + "' AND status=0 AND bind_order_id='" + order_id + "'" + - " ORDER BY RAND() LIMIT 1"; - var cnt = mySql.ExecuteAffectedRows(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流提取失败 " + mySql.Message + "\"}"; - } - // 根据订单时间提取指定时间段内的运单号 - if (cnt == 0 && order_time != null) - { - // 第一天的订单用第二天的物流发货 - var start_time = order_time.Value.Date.AddHours(24).ToString("yyyy-MM-dd HH:mm:ss"); - var end_time = order_time.Value.Date.AddHours(48).AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss"); - sql = " UPDATE wxxd.express_optimize SET order_id='" + order_id + "',status=1" + - " WHERE user_name='" + user_name + "' AND status=0 AND (order_id IS NULL OR order_id='') AND (bind_order_id IS NULL OR bind_order_id='')" + - " AND waybill_pickup_time between '" + start_time + "' and '" + end_time + "'" + - " ORDER BY RAND() LIMIT 1"; - cnt = mySql.ExecuteAffectedRows(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流提取失败 " + mySql.Message + "\"}"; - } - } - // 挑选最早入库的运单号 - //if (cnt == 0 && order_time == null) - //{ - // sql = " UPDATE wxxd.express_optimize SET order_id='" + order_id + "',status=1" + - // " WHERE user_name='" + user_name + "' AND status=0 AND (order_id IS NULL OR order_id='') AND (bind_order_id IS NULL OR bind_order_id='')" + - // " LIMIT 1"; - // cnt = mySql.ExecuteAffectedRows(sql); - // if (!mySql.Message.IsNullOrEmpty()) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":501,\"msg\":\"物流提取失败 " + mySql.Message + "\"}"; - // } - //} - if (cnt == 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"没有可用的运单号\"}"; - } - - sql = "SELECT * FROM wxxd.express_optimize WHERE user_name='" + user_name + "' AND order_id='" + order_id + "' AND status = 1"; - dt = mySql.ExecuteDataTable(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流提取失败 " + mySql.Message + "\"}"; - } - if (dt?.Rows?.Count == 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流提取失败 " + mySql.Message + "\"}"; - } - } - var waybill_id = dt.Rows[0]["waybill_id"].ToString(); - var delivery_id = dt.Rows[0]["delivery_id"].ParseToString(); - var delivery_name = dt.Rows[0]["delivery_name"].ParseToString(); - - mySql.Commit(); - mySql.Close(); - - return "{\"code\":200,\"msg\":\"success\",\"data\":{\"waybill_id\":\"" + waybill_id + - "\",\"delivery_id\":\"" + delivery_id + "\",\"delivery_name\":\"" + delivery_name + "\"}}"; - } - catch (Exception ex) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"物流提取失败 " + ex.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateUsedWaybill(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.ParseToString(); - if (user_name.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"请输入用户名\"}"; - } - var shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - var order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - var waybill_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "waybill_id"))?.Replace("'", "\\'"); - var is_rollback = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "is_rollback"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id) || string.IsNullOrEmpty(shop_id) || string.IsNullOrEmpty(waybill_id)) - { - return "{\"code\":500,\"msg\":\"缺少订单信息\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - - var sql = " UPDATE wxxd.express_optimize SET shop_id='" + shop_id + "',status=2,use_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' " + - " WHERE user_name='" + user_name + "' AND status=1 AND order_id='" + order_id + "' AND waybill_id='" + waybill_id + "'"; - if (is_rollback == "true") - sql = " UPDATE wxxd.express_optimize SET shop_id='',order_id='',status=0,use_time=NULL" + - " WHERE user_name='" + user_name + "' AND status=1 AND order_id='" + order_id + "' AND waybill_id='" + waybill_id + "'"; - - var rst = mySql.ExecuteAffectedRows(sql); - if (rst == 0 || !mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"修改物流信息失败 " + mySql.Message + "\"}"; - } - - // 记录修改结果,暂时注释 - if (is_rollback != "true") - { - //var relation_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "relation_id"))?.Replace("'", "\\'"); - //var optimize_rst = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "optimize_rst"))?.Replace("'", "\\'"); - //var delivery_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_name"))?.Replace("'", "\\'"); - //if (optimize_rst != null) - //{ - // sql = "select exists (select 1 from wxxd.express_optimize where order_id='" + order_id + "')"; - // var exist = mySql.ExecuteFirstInt(sql); - // if (exist > 0) - // { - // sql = " UPDATE wxxd.express_optimize_rst SET "; - // if (shop_id != null) - // sql += " shop_id=@shop_id,"; - // if (relation_id != null) - // sql += " relation_id=@relation_id,"; - // if (optimize_rst != null) - // sql += " optimize_rst=@optimize_rst,"; - // if (waybill_id != null) - // sql += " waybill_id=@waybill_id,"; - // if (delivery_name != null) - // sql += " delivery_name=@delivery_name,"; - // sql = sql.TrimEnd(','); - // sql += " WHERE order_id=@order_id"; - // } - // else - // { - // sql = " insert into wxxd.express_optimize_rst (shop_id,order_id,"; - // if (relation_id != null) - // sql += "relation_id,"; - // if (optimize_rst != null) - // sql += "optimize_rst,"; - // if (waybill_id != null) - // sql += "waybill_id,"; - // if (delivery_name != null) - // sql += "delivery_name,"; - // sql = sql.TrimEnd(','); - // sql += ") "; - // sql += " values (@shop_id,@order_id,"; - // if (relation_id != null) - // sql += "@relation_id,"; - // if (optimize_rst != null) - // sql += "@optimize_rst,"; - // if (waybill_id != null) - // sql += "@waybill_id,"; - // if (delivery_name != null) - // sql += "@delivery_name,"; - // sql = sql.TrimEnd(','); - // sql += ");"; - // } - - // List paramLst = new List(); - // paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - // paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@relation_id", Value = relation_id, }); - // paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@optimize_rst", Value = optimize_rst, }); - // paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@waybill_id", Value = waybill_id, }); - // paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@delivery_name", Value = delivery_name, }); - // paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@order_id", Value = order_id, }); - // var rows = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - //} - } - - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddMdyExpressOptimizeRst(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - var order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - var optimize_rst = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "optimize_rst"))?.Replace("'", "\\'"); - var waybill_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "waybill_id"))?.Replace("'", "\\'"); - var delivery_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delivery_name"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id)) - { - return "{\"code\":500,\"msg\":\"请输入订单编号\"}"; - } - if (string.IsNullOrEmpty(optimize_rst)) - { - return "{\"code\":500,\"msg\":\"请输入补发结果\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from wxxd.express_optimize_rst where order_id='" + order_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - if (exist > 0) - { - sql = " UPDATE wxxd.express_optimize_rst SET "; - if (shop_id != null) - sql += " shop_id=@shop_id,"; - if (optimize_rst != null) - sql += " optimize_rst=@optimize_rst,"; - if (waybill_id != null) - sql += " waybill_id=@waybill_id,"; - if (delivery_name != null) - sql += " delivery_name=@delivery_name,"; - sql = sql.TrimEnd(','); - sql += " WHERE order_id=@order_id"; - } - else - { - sql = " insert into wxxd.express_optimize_rst (shop_id,order_id,"; - if (optimize_rst != null) - sql += "optimize_rst,"; - if (waybill_id != null) - sql += "waybill_id,"; - if (delivery_name != null) - sql += "delivery_name,"; - sql = sql.TrimEnd(','); - sql += ") "; - sql += " values (@shop_id,@order_id,"; - if (optimize_rst != null) - sql += "@optimize_rst,"; - if (waybill_id != null) - sql += "@waybill_id,"; - if (delivery_name != null) - sql += "@delivery_name,"; - sql = sql.TrimEnd(','); - sql += ");"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@optimize_rst", Value = optimize_rst, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@waybill_id", Value = waybill_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@delivery_name", Value = delivery_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@order_id", Value = order_id, }); - var rows = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - mySql.Close(); - if (!mySql.Message.IsNullOrEmpty()) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rows + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetExpressOptimizeRst(string inputData, bool isNoUserName = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var order_ids = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_ids"))?.Replace("'", "\'"); - if (isNoUserName && order_ids.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"订单号不能为空\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select count(*) from wxxd.express_optimize_rst where 1=1"; - - string where = ""; - if (order_ids != null) - where += " AND order_id in ('" + order_ids.Replace(",", "','") + "')"; - - sql += where; - - var count = 0; - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from wxxd.express_optimize_rst where 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - - if (dt != null) - { - try - { - List WxOptimizeRstInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WxOptimizeRstInfoLst.Add(new WxOptimizeRstInfo() - { - id = row["id"].ParseToInt(), - waybill_id = row["waybill_id"].ParseToString(), - delivery_name = row["delivery_name"].ParseToString(), - order_id = row["order_id"].ParseToString(), - optimize_rst = row["optimize_rst"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WxOptimizeRstInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string AddMdyExpressOptimizeRemark(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - var order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - var remark = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "remark"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id)) - { - return "{\"code\":500,\"msg\":\"请输入订单编号\"}"; - } - if (remark == null) - { - return "{\"code\":500,\"msg\":\"请输入备注内容\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from wxxd.express_optimize_remark where order_id='" + order_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - if (exist > 0) - { - sql = " UPDATE wxxd.express_optimize_remark SET "; - if (shop_id != null) - sql += " shop_id=@shop_id,"; - if (remark != null) - sql += " remark=@remark,"; - sql = sql.TrimEnd(','); - sql += " WHERE order_id=@order_id"; - } - else - { - sql = " insert into wxxd.express_optimize_remark (shop_id,order_id,"; - if (remark != null) - sql += "remark,"; - sql = sql.TrimEnd(','); - sql += ") "; - sql += " values (@shop_id,@order_id,"; - if (remark != null) - sql += "@remark,"; - sql = sql.TrimEnd(','); - sql += ");"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@remark", Value = remark, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "@order_id", Value = order_id, }); - var rows = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - mySql.Close(); - if (!mySql.Message.IsNullOrEmpty()) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rows + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetExpressOptimizeRemark(string inputData, bool isNoUserName = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var order_ids = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_ids"))?.Replace("'", "\'"); - if (isNoUserName && order_ids.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"订单号不能为空\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select count(*) from wxxd.express_optimize_remark where 1=1"; - - string where = ""; - if (order_ids != null) - where += " AND order_id in ('" + order_ids.Replace(",", "','") + "')"; - - sql += where; - - var count = 0; - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select * from wxxd.express_optimize_remark where 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - - if (dt != null) - { - try - { - List WxOptimizeRemarkInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WxOptimizeRemarkInfoLst.Add(new WxOptimizeRemarkInfo() - { - id = row["id"].ParseToInt(), - order_id = row["order_id"].ParseToString(), - remark = row["remark"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WxOptimizeRemarkInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXOemManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXOemManage.cs deleted file mode 100644 index 619de20..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXOemManage.cs +++ /dev/null @@ -1,139 +0,0 @@ -using KJD_Web.Model.WxModel; -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Web; - -namespace KJD_Web.BLL.WXXD -{ - public class WXOemManage - { - public string AddMdyOem(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var oem_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "oem_id")?.Replace("'", "\\'")); - var oem_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "oem_name")?.Replace("'", "\\'")); - var oem_owner = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "oem_owner")?.Replace("'", "\\'")); - if (oem_id.IsNullOrEmpty() || oem_name.IsNullOrEmpty()) - return "{\"code\":500,\"msg\":\"oem信息不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "INSERT INTO wxxd.oem (oem_id,oem_name,oem_owner) VALUES('" + oem_id + "','" + oem_name + "','" + oem_owner + "')" + - "ON DUPLICATE KEY UPDATE oem_name=VALUES(oem_name),oem_owner=VALUES(oem_owner);"; - - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rst + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelOem(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var id = (RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'")); - var oem_id = (RegexUtils.GetStringQuery(ref inputData, "oem_id")?.Replace("'", "\\'")); - if (oem_id.IsNullOrEmpty() && id.IsNullOrEmpty()) - return "{\"code\":500,\"msg\":\"oem信息不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "UPDATE wxxd.oem SET is_del=1 WHERE id=" + id + " or oem_id='" + oem_id + "'"; - - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetOem(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var timeCalc = DateTime.Now; - var oem_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "oem_id")?.Replace("'", "\\'")); - var oem_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "oem_name")?.Replace("'", "\\'")); - var oem_owner = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "oem_owner")?.Replace("'", "\\'")); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "SELECT * FROM wxxd.oem WHERE is_del=0"; - - string where = ""; - if (!string.IsNullOrEmpty(oem_id)) - where += " and oem_id in ('" + oem_id.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(oem_name)) - where += " and oem_name in ('" + oem_name.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(oem_owner)) - where += " and oem_owner in ('" + oem_owner.Replace(",", "','") + "')"; - - sql += where; - sql += " ORDER BY add_time DESC;"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message) || dt == null) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - oem prod = new oem - { - id = row["id"].ParseToInt(), - oem_icon = null, - oem_id = row["oem_id"].ParseToString(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - oem_img = null, - oem_name = row["oem_name"].ParseToString(), - oem_owner = row["oem_owner"].ParseToString(), - }; - productLst.Add(prod); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(productLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + -1 + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXOrderManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXOrderManage.cs deleted file mode 100644 index d121c16..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXOrderManage.cs +++ /dev/null @@ -1,2474 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.WxModel; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using MySqlX.XDevAPI; -using NaiBa.Util.Extension; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlClient; -using System.Drawing.Printing; -using System.Linq; -using System.Net.NetworkInformation; -using System.Text; -using System.Text.RegularExpressions; -using System.Web; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.WXXD -{ - public class WXOrderManage - { - public string WXGetErpOrderList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - var erp_shop_id_in = RegexUtils.GetStringQuery(ref inputData, "erp_shop_id_in")?.Replace("'", "\\'"); - var erp_order_id_in = RegexUtils.GetStringQuery(ref inputData, "erp_order_id_in")?.Replace("'", "\\'"); - if (erp_shop_id_in.IsNullOrEmpty() && erp_order_id_in.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"未指定店铺和订单\"}"; - } - var query_status = RegexUtils.GetStringQuery(ref inputData, "query_status")?.Replace("'", "\\'"); - var purchase_status = RegexUtils.GetStringQuery(ref inputData, "purchase_status")?.Replace("'", "\\'"); - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var start_time = RegexUtils.GetStringQuery(ref inputData, "start_time").ParseToInt(); - var end_time = RegexUtils.GetStringQuery(ref inputData, "end_time").ParseToInt(); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") == "true"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM erp.oms_wei_order o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(erp_shop_id_in)) - where += " and o.shop_id in (" + erp_shop_id_in + ")"; - if (!string.IsNullOrWhiteSpace(erp_order_id_in)) - where += " and o.order_id in ('" + erp_order_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrWhiteSpace(query_status)) - where += " and o.status = " + query_status; - if (!string.IsNullOrWhiteSpace(purchase_status)) - where += " and o.purchase_status = " + purchase_status; - if (start_time > 0) - where += " and o.update_time >= " + start_time; - if (end_time > 0) - where += " and o.update_time <= " + end_time; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - //tinyint(1)中存超过两个值,只返回true或false,无法直接取值解决办法 - //解决方法: - //1.强制修改mapResult中的映射,将po属性的类型由Boolean改为Byte - //2.查询 tinyint(1) 的sql 字段时,转为(status + 0) as status - //3.避免使用 tinyint(1) 作为字段的数据类型 - - sql = "SELECT o.*,(out_shipped+0) as out_shipped_int FROM erp.oms_wei_order o WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - //sql += " ORDER BY o.create_time ASC, o.id desc"; - sql += " ORDER BY o.create_time ASC"; - else - sql += " ORDER BY o.create_time DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List orderList = new List(); - foreach (DataRow row in dt.Rows) - { - oms_wei_order order = new oms_wei_order - { - id = row["id"].ParseToLong(), - aftersale_detail = row["aftersale_detail"].ParseToNullableString(), - audit_status = row["audit_status"].ParseToNullableInt(), - //audit_time = row["audit_time"].ParseToNullableString().ParseToDateTime(), - city_name = row["city_name"].ParseToNullableString(), - colour_flag = row["colour_flag"].ParseToNullableInt(), - colour_flag_update_time = row["colour_flag_update_time"].ParseToNullableString().ParseToDateTime(), - commission_amount = row["commission_amount"].ParseToNullableInt(), - county_name = row["county_name"].ParseToNullableString(), - create_time = row["create_time"].ParseToInt(), - delivery_deadline = row["delivery_deadline"].ParseToNullableInt(), - //delivery_product_info = row["delivery_product_info"].ParseToNullableString(), - delivery_time = row["delivery_time"].ParseToNullableInt(), - detail_info = row["detail_info"].ParseToNullableString(), - discounted_price = row["discounted_price"].ParseToNullableInt(), - erp_send_code = row["erp_send_code"].ParseToNullableString(), - erp_send_company = row["erp_send_company"].ParseToNullableString(), - erp_send_status = row["erp_send_status"].ParseToNullableInt(), - erp_send_time = row["erp_send_time"].ParseToNullableString().ParseToDateTime(), - //ewaybill_order_code = row["ewaybill_order_code"].ParseToNullableString(), - external_gift = row["external_gift"].ParseToNullableInt(), - //ext_info = row["ext_info"].ParseToNullableString(), - freight = row["freight"].ParseToNullableInt(), - freight_insurance_amount = row["freight_insurance_amount"].ParseToNullableInt(), - gift_order_status = row["gift_order_status"].ParseToNullableInt(), - hash_code = row["hash_code"].ParseToNullableString(), - has_freight_insurance = row["has_freight_insurance"].ParseToNullableInt(), - house_number = row["house_number"].ParseToNullableString(), - is_express_no_used = row["is_express_no_used"].ParseToNullableInt(), - is_shipment_optimized = row["is_shipment_optimized"].ParseToNullableInt(), - merchant_id = row["merchant_id"].ParseToLong(), - openid = row["openid"].ParseToNullableString(), - order_id = row["order_id"].ParseToNullableString(), - order_price = row["order_price"].ParseToNullableInt(), - out_account = row["out_account"].ParseToNullableString(), - out_after_sale_status = row["out_after_sale_status"].ParseToNullableString(), - out_amount = row["out_amount"].ParseToNullableInt(), - out_express_company = row["out_express_company"].ParseToNullableString(), - out_express_no = row["out_express_no"].ParseToNullableString(), - out_order_no = row["out_order_no"].ParseToNullableString(), - out_shipped = row["out_shipped_int"].ParseToNullableInt(), - //pay_info = row["pay_info"].ParseToNullableString(), - postal_code = row["postal_code"].ParseToNullableString(), - predict_commission_fee = row["predict_commission_fee"].ParseToNullableInt(), - product_price = row["product_price"].ParseToNullableInt(), - profit = row["profit"].ParseToNullableInt(), - province_name = row["province_name"].ParseToNullableString(), - purchase_price = row["purchase_price"].ParseToNullableInt(), - purchase_status = row["purchase_status"].ParseToNullableInt(), - purchase_time = row["purchase_time"].ParseToNullableInt(), - settle_info = row["settle_info"].ParseToNullableString(), - ship_done_time = row["ship_done_time"].ParseToNullableInt(), - shop_id = row["shop_id"].ParseToLong(), - shop_name = row["shop_name"].ParseToNullableString(), - shop_remark = row["shop_remark"].ParseToNullableString(), - soft_remark = row["soft_remark"].ParseToNullableString(), - status = row["status"].ParseToNullableInt(), - supplier_remark_exception = row["supplier_remark_exception"].ParseToNullableString(), - tel_number = row["tel_number"].ParseToNullableString(), - tel_number_ext_info = row["tel_number_ext_info"].ParseToNullableString(), - transfer_warehouse_status = row["transfer_warehouse_status"].ParseToNullableInt(), - unionid = row["unionid"].ParseToNullableString(), - update_time = row["update_time"].ParseToInt(), - user_name = row["user_name"].ParseToNullableString(), - use_tel_number = row["use_tel_number"].ParseToNullableInt(), - virtual_order_tel_number = row["virtual_order_tel_number"].ParseToNullableString(), - }; - if (order.order_id == "3737914129536416512") - { - - } - orderList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(orderList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXGetErpOrderItemList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var erp_order_id_in = RegexUtils.GetStringQuery(ref inputData, "erp_order_id_in")?.Replace("'", "\\'"); - if (erp_order_id_in.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") != "false"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM erp.oms_wei_order_item o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(erp_order_id_in)) - where += " and o.order_id in ('" + erp_order_id_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM erp.oms_wei_order_item o WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.id ASC"; - else - sql += " ORDER BY o.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List orderItemList = new List(); - foreach (DataRow row in dt.Rows) - { - oms_wei_order_item order = new oms_wei_order_item - { - id = row["id"].ParseToLong(), - commission_amount = row["commission_amount"].ParseToNullableInt(), - freight = row["freight"].ParseToNullableInt(), - merchant_id = row["merchant_id"].ParseToLong(), - order_id = row["order_id"].ParseToNullableString(), - predict_commission_fee = row["predict_commission_fee"].ParseToNullableInt(), - purchase_price = row["purchase_price"].ParseToNullableInt(), - shop_id = row["shop_id"].ParseToLong(), - cash_coupon_discounted_price = row["cash_coupon_discounted_price"].ParseToNullableInt(), - change_price = row["change_price"].ParseToNullableInt(), - deduction_price = row["deduction_price"].ParseToNullableInt(), - erp_goods_id = row["erp_goods_id"].ParseToNullableLong(), - erp_goods_sku_id = row["erp_goods_sku_id"].ParseToNullableLong(), - estimate_price = row["estimate_price"].ParseToNullableInt(), - extra_service = row["extra_service"].ParseToNullableString(), - finish_aftersale_sku_cnt = row["finish_aftersale_sku_cnt"].ParseToNullableInt(), - is_change_price = row["is_change_price"].ParseToNullableString(), - is_discounted = row["is_discounted"].ParseToNullableString(), - market_price = row["market_price"].ParseToNullableInt(), - on_aftersale_sku_cnt = row["on_aftersale_sku_cnt"].ParseToNullableInt(), - order_product_coupon_info_list = row["order_product_coupon_info_list"].ParseToNullableString(), - out_product_id = row["out_product_id"].ParseToNullableString(), - out_sku_id = row["out_sku_id"].ParseToNullableString(), - out_warehouse_id = row["out_warehouse_id"].ParseToNullableString(), - product_id = row["product_id"].ParseToNullableString(), - real_price = row["real_price"].ParseToNullableInt(), - refund_status = row["refund_status"].ParseToNullableInt(), - return_address = row["return_address"].ParseToNullableString(), - sale_price = row["sale_price"].ParseToNullableInt(), - sku_attrs = row["sku_attrs"].ParseToNullableString(), - sku_cnt = row["sku_cnt"].ParseToNullableInt(), - sku_code = row["sku_code"].ParseToNullableString(), - sku_deliver_info = row["sku_deliver_info"].ParseToNullableString(), - sku_id = row["sku_id"].ParseToNullableString(), - thumb_img = row["thumb_img"].ParseToNullableString(), - title = row["title"].ParseToNullableString(), - use_deduction = row["use_deduction"].ParseToNullableString(), - }; - orderItemList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(orderItemList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXGetErpRefundList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var erp_order_id_in = RegexUtils.GetStringQuery(ref inputData, "erp_order_id_in")?.Replace("'", "\\'"); - if (erp_order_id_in.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") != "false"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM erp.oms_wei_refund o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(erp_order_id_in)) - where += " and o.order_id in ('" + erp_order_id_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM" + - " erp.oms_wei_refund o " + - " WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.id ASC"; - else - sql += " ORDER BY o.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List refundItemList = new List(); - foreach (DataRow row in dt.Rows) - { - oms_wei_refund order = new oms_wei_refund - { - id = row["id"].ParseToLong(), - merchant_id = row["merchant_id"].ParseToLong(), - order_id = row["order_id"].ParseToNullableString(), - shop_id = row["shop_id"].ParseToLong(), - erp_goods_id = row["erp_goods_id"].ParseToNullableLong(), - erp_goods_sku_id = row["erp_goods_sku_id"].ParseToNullableLong(), - product_id = row["product_id"].ParseToNullableString(), - sku_id = row["sku_id"].ParseToNullableString(), - after_sale_order_id = row["after_sale_order_id"].ParseToNullableString(), - complaint_id = row["complaint_id"].ParseToNullableString(), - count = row["count"].ParseToNullableInt(), - create_time = row["create_time"].ParseToNullableInt(), - details = row["details"].ParseToNullableString(), - fast_refund = row["fast_refund"].ParseToNullableString(), - merchant_upload_info = row["merchant_upload_info"].ParseToNullableString(), - openid = row["openid"].ParseToNullableString(), - pull_status = row["pull_status"].ParseToNullableInt(), - pull_time = row["pull_time"].ParseToNullableString().ParseToDateTime(), - reason = row["reason"].ParseToNullableString(), - reason_text = row["reason_text"].ParseToNullableString(), - refund_amount = row["refund_amount"].ParseToNullableInt(), - refund_reason = row["refund_reason"].ParseToNullableInt(), - refund_resp = row["refund_resp"].ParseToNullableString(), - return_delivery_id = row["return_delivery_id"].ParseToNullableString(), - return_delivery_name = row["return_delivery_name"].ParseToNullableString(), - return_waybill_id = row["return_waybill_id"].ParseToNullableString(), - status = row["status"].ParseToNullableString(), - type = row["type"].ParseToNullableString(), - unionid = row["unionid"].ParseToNullableString(), - update_time = row["update_time"].ParseToNullableInt(), - warehouse_status = row["warehouse_status"].ParseToNullableInt(), - return_city = row["return_city"].ParseToNullableString(), - return_county = row["return_county"].ParseToNullableString(), - return_detail = row["return_detail"].ParseToNullableString(), - return_province = row["return_province"].ParseToNullableString(), - return_tel = row["return_tel"].ParseToNullableString(), - return_user_name = row["return_user_name"].ParseToNullableString(), - }; - refundItemList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(refundItemList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - - - /// - /// 微信添加修改采购映射商品(含sku映射和) - /// - /// - /// - public string WXAddMdyBuyProdMap(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - // 软件用户名 - string spu_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_code"))?.Replace("'", "\\'"); - string sku_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_code"))?.Replace("'", "\\'"); - string user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_user_name"))?.Replace("'", "\\'"); - string map_url = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "map_url"))?.Replace("'", "\\'"); - string map_goods_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "map_goods_name"))?.Replace("'", "\\'"); - string map_spec_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "map_spec_name"))?.Replace("'", "\\'"); - string map_goods_id = RegexUtils.GetStringQuery(ref inputData, "map_goods_id")?.Replace("'", "\\'"); - string map_sku_id = RegexUtils.GetStringQuery(ref inputData, "map_sku_id")?.Replace("'", "\\'"); - string map_send_address = RegexUtils.GetStringQuery(ref inputData, "map_send_address")?.Replace("'", "\\'"); - string transit_warehouse_id = RegexUtils.GetStringQuery(ref inputData, "transit_warehouse_id")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(spu_code) || string.IsNullOrEmpty(sku_code)) - return "{\"code\":500,\"msg\":\"缺少系统商品或SKU编号\"}"; - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":500,\"msg\":\"缺少用户名\"}"; - if (string.IsNullOrEmpty(map_url) && (string.IsNullOrEmpty(map_goods_id) || string.IsNullOrEmpty(map_sku_id))) - return "{\"code\":500,\"msg\":\"缺少采购商品信息\"}"; - if (string.IsNullOrEmpty(transit_warehouse_id)) - return "{\"code\":500,\"msg\":\"缺少中转仓信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT 1 FROM `bxx`.`product_buy_map` where user_name='" + user_name + "' AND spu_code='" + spu_code + "' AND sku_code='" + sku_code + "'"; - string where = ""; - sql += where; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (exist == 0) - { - sql = " INSERT INTO `bxx`.`product_buy_map` (user_name,spu_code,sku_code,map_url,map_goods_name,map_spec_name,map_goods_id,map_sku_id,map_send_address,transit_warehouse_id)" + - " VALUES (@user_name,@spu_code,@sku_code,@map_url,@map_goods_name,@map_spec_name,@map_goods_id,@map_sku_id,@map_send_address,@transit_warehouse_id);"; - } - else - { - sql = "UPDATE `bxx`.`product_buy_map` SET "; - if (map_url != null) - sql += " map_url=@map_url,"; - if (map_goods_name != null) - sql += " map_goods_name=@map_goods_name,"; - if (map_spec_name != null) - sql += " map_spec_name=@map_spec_name,"; - if (map_goods_id != null) - sql += " map_goods_id=@map_goods_id,"; - if (map_sku_id != null) - sql += " map_sku_id=@map_sku_id,"; - if (map_send_address != null) - sql += " map_send_address=@map_send_address,"; - if (transit_warehouse_id != null) - sql += " transit_warehouse_id=@transit_warehouse_id,"; - sql = sql.TrimEnd(','); - sql += " WHERE user_name=@user_name and spu_code=@spu_code and sku_code=@sku_code;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = user_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "spu_code", Value = spu_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "sku_code", Value = sku_code, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "map_url", Value = map_url, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "map_goods_name", Value = map_goods_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "map_spec_name", Value = map_spec_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "map_goods_id", Value = map_goods_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "map_sku_id", Value = map_sku_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "map_send_address", Value = map_send_address, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "transit_warehouse_id", Value = transit_warehouse_id, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 微信获取采购映射商品 - /// - /// - /// - public string WXGetBuyPordMap(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string spu_codes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_codes"))?.Replace("'", "\\'"); - string sku_codes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sku_codes"))?.Replace("'", "\\'"); - string user_name = RegexUtils.GetStringQuery(ref inputData, "main_user_name")?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(spu_codes)) - return "{\"code\":500,\"msg\":\"商品编码不能为空\"}"; - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":500,\"msg\":\"用户名不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "SELECT COUNT(*) FROM `bxx`.`product_buy_map` WHERE 1=1"; - string where = ""; - if (spu_codes != null) - where += " and spu_code IN ('" + spu_codes.Replace(",", "','") + "')"; - if (sku_codes != null) - where += " and sku_code IN ('" + sku_codes.Replace(",", "','") + "')"; - if (user_name != null) - where += " and user_name='" + user_name + "'"; - sql += where; - sql += ";"; - - if (not_count == "false") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `bxx`.`product_buy_map` WHERE 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List WXBuyMapInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WXBuyMapInfoLst.Add(new WXBuyMapInfo() - { - id = row["id"].ParseToInt(), - user_name = row["user_name"].ParseToNullableString(), - spu_code = row["spu_code"].ParseToNullableString(), - sku_code = row["sku_code"].ParseToNullableString(), - map_url = row["map_url"].ParseToNullableString(), - map_goods_name = row["map_goods_name"].ParseToNullableString(), - map_spec_name = row["map_spec_name"].ParseToNullableString(), - map_goods_id = row["map_goods_id"].ParseToNullableString(), - map_sku_id = row["map_sku_id"].ParseToNullableString(), - map_send_address = row["map_send_address"].ParseToNullableString(), - transit_warehouse_id = row["transit_warehouse_id"].ParseToNullableString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WXBuyMapInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 获取中转仓订单信息 - /// - /// - /// - public string WXGetTransitOrder(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - var count = -1; - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_no"))?.Replace("'", "\\'"); - string order_sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_sku_id"))?.Replace("'", "\\'"); - string out_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_no"))?.Replace("'", "\\'"); - string pre_allocated_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pre_allocated_order_no"))?.Replace("'", "\\'"); - string transfer_warehouse_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "transfer_warehouse_status"))?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - string is_admin = RegexUtils.GetStringQuery(ref inputData, "is_admin")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_no) && string.IsNullOrEmpty(out_order_no) && string.IsNullOrEmpty(order_sku_id) && is_admin != "true") - return "{\"code\":500,\"msg\":\"中转订单查询信息不能为空\"}"; - - try - { - var oms_wei_external_procurement_log_list = GetTransitOrderTable(page, page_size, order_no, order_sku_id, out_order_no, pre_allocated_order_no, transfer_warehouse_status, not_count, out count); - if (oms_wei_external_procurement_log_list != null) - { - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(oms_wei_external_procurement_log_list, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - - } - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - /// - /// 查询中转仓订单 - /// - public List GetTransitOrderTable( - int page, - int pageSize, - string orderNo, - string orderSkuId, - string outOrderNo, - string preAllocatedOrderNo, - string transferWarehouseStatus, - string not_count, out int count) - { - var timeCalc = DateTime.Now; - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - - string sql = ""; - count = -1; - - sql = "SELECT COUNT(*) FROM `erp`.`oms_wei_external_procurement_log` WHERE 1=1"; - string where = ""; - if (!string.IsNullOrEmpty(orderNo)) - where += $" and order_no IN ('{orderNo.Replace(",", "','")}')"; - - if (!string.IsNullOrEmpty(orderSkuId)) - where += $" and order_sku_id IN ('{orderSkuId.Replace(",", "','")}')"; - - if (!string.IsNullOrEmpty(outOrderNo)) - where += $" and out_order_no IN ('{outOrderNo.Replace(",", "','")}')"; - - if (!string.IsNullOrEmpty(preAllocatedOrderNo)) - where += $" and pre_allocated_order_no IN ({preAllocatedOrderNo})"; - - if (!string.IsNullOrEmpty(transferWarehouseStatus)) - where += $" and transfer_warehouse_status IN ({transferWarehouseStatus})"; - sql += where; - sql += ";"; - - if (not_count == "false") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `erp`.`oms_wei_external_procurement_log` WHERE 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * pageSize + "," + pageSize + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - List oms_wei_external_procurement_log_list = new List(); - - foreach (DataRow row in dt.Rows) - { - oms_wei_external_procurement_log_list.Add(new oms_wei_external_procurement_log() - { - id = row["id"].ParseToInt(), - buyer_account = row["buyer_account"].ParseToNullableString(), - order_no = row["order_no"].ParseToNullableString(), - order_sku_id = row["order_sku_id"].ParseToNullableString(), - out_amount = row["out_amount"].ParseToNullableInt(), - out_order_no = row["out_order_no"].ParseToNullableString(), - purchaser_note = row["purchaser_note"].ParseToNullableString(), - created_time = row["created_time"].ParseToNullableString().ParseToDateTime(), - express_1_company = row["express_1_company"].ParseToNullableString(), - express_1_waybill = row["express_1_waybill"].ParseToNullableString(), - express_2_company = row["express_2_company"].ParseToNullableString(), - express_2_waybill = row["express_2_waybill"].ParseToNullableString(), - order_code = row["order_code"].ParseToNullableString(), - order_platform_code = row["order_platform_code"].ParseToNullableString(), - pickup_time = row["pickup_time"].ParseToNullableString().ParseToDateTime(), - platform = row["platform"].ParseToNullableString(), - pre_allocated_order_no = row["pre_allocated_order_no"].ParseToNullableInt(), - raw_message = row["raw_message"].ParseToNullableString(), - refund_status = row["refund_status"].ParseToNullableString(), - transfer_warehouse_status = row["transfer_warehouse_status"].ParseToNullableInt(), - updated_time = row["updated_time"].ParseToNullableString().ParseToDateTime(), - is_transfer_ship = row["is_transfer_ship"].ParseToNullableInt(), - random_code = row["random_code"].ParseToNullableString(), - transfer_refund_status = row["transfer_refund_status"].ParseToNullableInt(), - order_void_status = row["order_void_status"].ParseToNullableInt(), - warehouse_status = row["warehouse_status"].ParseToNullableInt(), - inbound_time = row["inbound_time"].ParseToNullableString().ParseToDateTimeNullable(), - outbound_time = row["outbound_time"].ParseToNullableString().ParseToDateTimeNullable(), - has_reject = row["has_reject"].ParseToInt(), - blocked_arrival_time = row["blocked_arrival_time"].ParseToNullableString().ParseToDateTimeNullable(), - rejected_time = row["rejected_time"].ParseToNullableString().ParseToDateTimeNullable(), - }); - } - return oms_wei_external_procurement_log_list; - } - else - { - throw new Exception(mySql.Message); - } - return null; - } - - - /// - /// 修改中转仓订单信息(真实物流),临时补救 - /// - /// - /// - public string WXUpdateErpOrderExpress(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string out_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_no"))?.Replace("'", "\\'"); - string express_1_company = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "express_1_company"))?.Replace("'", "\\'"); - string express_1_waybill = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "express_1_waybil"))?.Replace("'", "\\'"); - string refund_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "refund_status"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(out_order_no)) - return "{\"code\":500,\"msg\":\"订单外部ID信息不能为空\"}"; - //if (string.IsNullOrEmpty(express_1_company)) - // return "{\"code\":500,\"msg\":\"物流公司不能为空\"}"; - //if (string.IsNullOrEmpty(express_1_waybill)) - // return "{\"code\":500,\"msg\":\"物流单号不能为空\"}"; - - if (string.IsNullOrEmpty(express_1_company) && string.IsNullOrEmpty(express_1_waybill) && string.IsNullOrEmpty(refund_status)) - return "{\"code\":500,\"msg\":\"修改信息不能为空\"}"; - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = " update `erp`.`oms_wei_external_procurement_log` set "; - if (!string.IsNullOrEmpty(express_1_company)) - sql += " express_1_company='" + express_1_company + "',"; - if (!string.IsNullOrEmpty(express_1_waybill)) - sql += " express_1_waybill='" + express_1_waybill + "',"; - if (!string.IsNullOrEmpty(refund_status)) - sql += " refund_status='" + refund_status + "',"; - sql = sql.TrimEnd(','); - sql += " where out_order_no = '" + out_order_no + "';"; - - count = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 修改中转仓订单信息(取号状态),临时补救 - /// - /// - /// - public string WXUpdateErpAllocatedOrderNo(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string out_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_no"))?.Replace("'", "\\'"); - string pre_allocated_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pre_allocated_order_no"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(out_order_no)) - return "{\"code\":500,\"msg\":\"订单外部ID信息不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = " update `erp`.`oms_wei_external_procurement_log` set "; - if (!string.IsNullOrEmpty(pre_allocated_order_no)) - sql += " pre_allocated_order_no=" + pre_allocated_order_no + ","; - sql = sql.TrimEnd(','); - sql += " where out_order_no = '" + out_order_no + "';"; - - count = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 删除中转仓订单 临时补救,慎用 - /// - /// - /// - public string WXDelErpTransitWarehouseOrder(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string out_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_no"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(out_order_no)) - return "{\"code\":500,\"msg\":\"订单外部ID信息不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = " DELETE FROM `erp`.`oms_wei_external_procurement_log` WHERE out_order_no in ('" + out_order_no.Replace(",", "','") + "')"; - - count = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - if (count == 0) - { - return "{\"code\":500,\"msg\":\"删除失败,订单不存在\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 修改订单软件备注 - /// - /// - /// - public string WXUpdateErpSoftRemark(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - string soft_remark = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "soft_remark"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = " update erp.oms_wei_order set "; - if (soft_remark != null) - sql += " soft_remark='" + soft_remark + "',"; - sql = sql.TrimEnd(','); - sql += " where order_id = '" + order_id + "';"; - - count = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXUpdateErpColorFlag(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - string colour_flag = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "colour_flag"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = " update erp.oms_wei_order set "; - if (colour_flag != null) - { - sql += " colour_flag=" + colour_flag + ","; - sql += " colour_flag_update_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - } - sql = sql.TrimEnd(','); - sql += " where order_id = '" + order_id + "';"; - - count = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXUpdateErpOutAfterSaleStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_id)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - string out_after_sale_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_after_sale_status"))?.Replace("'", "\\'"); - if (out_after_sale_status == null) - return "{\"code\":500,\"msg\":\"售后状态不能为NULL\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = " update erp.oms_wei_order set "; - if (out_after_sale_status != null) - { - if (out_after_sale_status == "" || out_after_sale_status == "NULL") - sql += " out_after_sale_status=NULL,"; - else - sql += " out_after_sale_status='" + out_after_sale_status + "',"; - } - sql = sql.TrimEnd(','); - sql += " where order_id = '" + order_id + "';"; - - count = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXAddMdyBuyerOrder(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string wx_order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_order_id"))?.Replace("'", "\\'"); - string wx_sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_sku_id"))?.Replace("'", "\\'"); - string wx_send_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_send_type"))?.Replace("'", "\\'"); - if (wx_send_type.IsNullOrEmpty()) - wx_send_type = "0"; - string TransitCreateTime = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "TransitCreateTime"))?.Replace("'", "\\'"); - string pre_allocated_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pre_allocated_order_no"))?.Replace("'", "\\'"); - string buyerId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buyerId"))?.Replace("'", "\\'"); - string buyerName = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buyerName"))?.Replace("'", "\\'"); - string pdd_order_sn = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pdd_order_sn"))?.Replace("'", "\\'"); - string order_amount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_amount"))?.Replace("'", "\\'"); - string order_time = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_time"))?.Replace("'", "\\'"); - string outExpressCompanyCode = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "outExpressCompanyCode"))?.Replace("'", "\\'"); - string tracking_number = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "tracking_number"))?.Replace("'", "\\'"); - string order_status_prompt = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_status_prompt"))?.Replace("'", "\\'"); - string after_sales_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "after_sales_status"))?.Replace("'", "\\'"); - string order_detail = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_detail"))?.Replace("'", "\\'"); - string wx_order_send_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_order_send_type"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(wx_order_send_type)) - wx_order_send_type = "1"; - if (string.IsNullOrEmpty(wx_order_id) || string.IsNullOrEmpty(pdd_order_sn)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "select id from wxxd.order_pdd_buyer_order where order_sn='" + pdd_order_sn + "'"; - var id = mySql.ExecuteFirstInt(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - //sql = "INSERT INTO wxxd.order_pdd_buyer_order (wx_order_id,wx_sku_id,TransitCreateTime,pre_allocated_order_no,buyerId,buyerName,order_sn,order_amount,order_time," + - // "outExpressCompanyCode,tracking_number,order_status_prompt,after_sales_status,order_detail)"; - //sql += "VALUES(@wx_order_id,@wx_sku_id,@TransitCreateTime,@pre_allocated_order_no,@buyerId,@buyerName,@pdd_order_sn,@order_amount,@order_time," + - // "@outExpressCompanyCode,@tracking_number,@order_status_prompt,@after_sales_status,@order_detail)"; - //sql += " ON DUPLICATE KEY UPDATE wx_order_id=VALUES(@wx_order_id),wx_sku_id=VALUES(@wx_sku_id),TransitCreateTime=VALUES(@TransitCreateTime)," + - // "pre_allocated_order_no=VALUES(@pre_allocated_order_no),buyerId=VALUES(@buyerId),buyerName=VALUES(@buyerName),order_amount=VALUES(@order_amount)," + - // "order_time=VALUES(@order_time),outExpressCompanyCode=VALUES(@outExpressCompanyCode),tracking_number=VALUES(@tracking_number),order_status_prompt=VALUES(@order_status_prompt)," + - // "after_sales_status=VALUES(@after_sales_status),order_detail=VALUES(@order_detail)"; - - if (id == 0) - { - sql = "INSERT INTO wxxd.order_pdd_buyer_order (wx_order_id,wx_sku_id,wx_send_type,TransitCreateTime,pre_allocated_order_no,buyerId,buyerName,order_sn,order_amount,order_time," + - "outExpressCompanyCode,tracking_number,order_status_prompt,after_sales_status,order_detail)"; - sql += "VALUES(@wx_order_id,@wx_sku_id,@wx_send_type,@TransitCreateTime,@pre_allocated_order_no,@buyerId,@buyerName,@pdd_order_sn,@order_amount,@order_time," + - "@outExpressCompanyCode,@tracking_number,@order_status_prompt,@after_sales_status,@order_detail);"; - } - else - { - sql = "UPDATE wxxd.order_pdd_buyer_order SET "; - if (!string.IsNullOrEmpty(wx_order_id)) - sql += " wx_order_id=@wx_order_id,"; - if (!string.IsNullOrEmpty(wx_sku_id)) - sql += " wx_sku_id=@wx_sku_id,"; - if (!string.IsNullOrEmpty(wx_send_type)) - sql += " wx_send_type=@wx_send_type,"; - if (!string.IsNullOrEmpty(TransitCreateTime)) - sql += " TransitCreateTime=@TransitCreateTime,"; - if (!string.IsNullOrEmpty(pre_allocated_order_no)) - sql += " pre_allocated_order_no=@pre_allocated_order_no,"; - if (!string.IsNullOrEmpty(buyerId)) - sql += " buyerId=@buyerId,"; - if (!string.IsNullOrEmpty(buyerName)) - sql += " buyerName=@buyerName,"; - if (!string.IsNullOrEmpty(order_amount)) - sql += " order_amount=@order_amount,"; - if (!string.IsNullOrEmpty(order_time)) - sql += " order_time=@order_time,"; - if (!string.IsNullOrEmpty(outExpressCompanyCode)) - sql += " outExpressCompanyCode=@outExpressCompanyCode,"; - if (!string.IsNullOrEmpty(tracking_number)) - sql += " tracking_number=@tracking_number,"; - if (!string.IsNullOrEmpty(order_status_prompt)) - sql += " order_status_prompt=@order_status_prompt,"; - if (!string.IsNullOrEmpty(after_sales_status)) - sql += " after_sales_status=@after_sales_status,"; - if (!string.IsNullOrEmpty(order_detail)) - sql += " order_detail=@order_detail,"; - sql = sql.TrimEnd(','); - sql += " where order_sn=@pdd_order_sn"; - } - //260705-105706954352823 - - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "wx_order_id", Value = wx_order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "wx_sku_id", Value = wx_sku_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "wx_send_type", Value = wx_send_type.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.DateTime, ParameterName = "TransitCreateTime", Value = TransitCreateTime.ParseToDateTime(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "pre_allocated_order_no", Value = pre_allocated_order_no.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buyerId", Value = buyerId, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buyerName", Value = buyerName, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "pdd_order_sn", Value = pdd_order_sn, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "order_amount", Value = order_amount.ParseToNullableInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int64, ParameterName = "order_time", Value = order_time.ParseToLong(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "outExpressCompanyCode", Value = outExpressCompanyCode, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "tracking_number", Value = tracking_number, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_status_prompt", Value = order_status_prompt, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "after_sales_status", Value = after_sales_status.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_detail", Value = order_detail, }); - //sql = " update `wxxd`.`order_pdd_buyer_order` set "; - //if (!string.IsNullOrEmpty(soft_remark)) - // sql += " soft_remark=" + soft_remark + ","; - //sql = sql.TrimEnd(','); - //sql += " where order_id = '" + wx_order_id + "';"; - - count = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetBuyerOrderList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - var wx_order_id_in = RegexUtils.GetStringQuery(ref inputData, "wx_order_id_in")?.Replace("'", "\\'"); - var buyer_order_sn_in = RegexUtils.GetStringQuery(ref inputData, "buyer_order_sn_in")?.Replace("'", "\\'"); - if (wx_order_id_in.IsNullOrEmpty() && string.IsNullOrEmpty(buyer_order_sn_in)) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") != "false"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM wxxd.order_pdd_buyer_order o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(wx_order_id_in)) - where += " and o.wx_order_id in ('" + wx_order_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrWhiteSpace(buyer_order_sn_in)) - where += " and o.order_sn in ('" + buyer_order_sn_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM" + - " wxxd.order_pdd_buyer_order o " + - " WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.id ASC"; - else - sql += " ORDER BY o.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List buyerOrderList = new List(); - foreach (DataRow row in dt.Rows) - { - order_pdd_buyer_order order = new order_pdd_buyer_order - { - id = row["id"].ParseToLong(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - after_sales_status = row["after_sales_status"].ParseToNullableInt(), - buyerId = row["buyerId"].ParseToString(), - buyerName = row["buyerName"].ParseToString(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - order_amount = row["order_amount"].ParseToNullableInt(), - order_detail = row["order_detail"].ParseToString(), - order_sn = row["order_sn"].ParseToString(), - order_status_prompt = row["order_status_prompt"].ParseToString(), - order_time = row["order_time"].ParseToNullableLong(), - outExpressCompanyCode = row["outExpressCompanyCode"].ParseToString(), - pre_allocated_order_no = row["pre_allocated_order_no"].ParseToNullableInt(), - tracking_number = row["tracking_number"].ParseToString(), - TransitCreateTime = row["TransitCreateTime"].ParseToString().ParseToDateTime(), - wx_order_id = row["wx_order_id"].ParseToString(), - wx_sku_id = row["wx_sku_id"].ParseToString(), - wx_send_type = row["wx_send_type"].ParseToInt(), - }; - buyerOrderList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(buyerOrderList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXAddMdyBuyerAfterSale(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string wx_order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_order_id"))?.Replace("'", "\\'"); - string wx_sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_sku_id"))?.Replace("'", "\\'"); - string wx_send_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_send_type"))?.Replace("'", "\\'"); - if (wx_send_type.IsNullOrEmpty()) - wx_send_type = "0"; - string TransitCreateTime = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "TransitCreateTime"))?.Replace("'", "\\'"); - string pre_allocated_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pre_allocated_order_no"))?.Replace("'", "\\'"); - string buyerId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buyerId"))?.Replace("'", "\\'"); - string buyerName = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buyerName"))?.Replace("'", "\\'"); - string orderSn = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "orderSn"))?.Replace("'", "\\'"); - string afterSalesId = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "afterSalesId"))?.Replace("'", "\\'"); - string orderAmount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "orderAmount"))?.Replace("'", "\\'"); - string orderDate = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "orderDate"))?.Replace("'", "\\'"); - string order_detail = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_detail"))?.Replace("'", "\\'"); - string refundAmount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "refundAmount"))?.Replace("'", "\\'"); - string statusText = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "statusText"))?.Replace("'", "\\'"); - string afterSaleAddress = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "afterSaleAddress"))?.Replace("'", "\\'"); - string is_mdy = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "is_mdy"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(wx_order_id) || string.IsNullOrEmpty(orderSn) || string.IsNullOrEmpty(afterSalesId)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "select id from wxxd.order_pdd_buyer_after_sale where afterSalesId='" + afterSalesId + "'"; - var id = mySql.ExecuteFirstInt(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (id == 0 && is_mdy != "true") - { - sql = "INSERT INTO wxxd.order_pdd_buyer_after_sale (wx_order_id,wx_sku_id,wx_send_type,TransitCreateTime,pre_allocated_order_no,buyerId,buyerName,orderSn,afterSalesId,orderAmount,orderDate," + - "refundAmount,statusText,afterSaleAddress,order_detail)"; - sql += "VALUES(@wx_order_id,@wx_sku_id,@wx_send_type,@TransitCreateTime,@pre_allocated_order_no,@buyerId,@buyerName,@orderSn,@afterSalesId,@orderAmount,@orderDate," + - "@refundAmount,@statusText,@afterSaleAddress,@order_detail);"; - } - else - { - sql = "UPDATE wxxd.order_pdd_buyer_after_sale SET "; - if (!string.IsNullOrEmpty(wx_order_id)) - sql += " wx_order_id=@wx_order_id,"; - if (!string.IsNullOrEmpty(wx_sku_id)) - sql += " wx_sku_id=@wx_sku_id,"; - if (!string.IsNullOrEmpty(wx_send_type)) - sql += " wx_send_type=@wx_send_type,"; - if (!string.IsNullOrEmpty(TransitCreateTime)) - sql += " TransitCreateTime=@TransitCreateTime,"; - if (!string.IsNullOrEmpty(pre_allocated_order_no)) - sql += " pre_allocated_order_no=@pre_allocated_order_no,"; - if (!string.IsNullOrEmpty(buyerId)) - sql += " buyerId=@buyerId,"; - if (!string.IsNullOrEmpty(buyerName)) - sql += " buyerName=@buyerName,"; - if (!string.IsNullOrEmpty(orderSn)) - sql += " orderSn=@orderSn,"; - if (!string.IsNullOrEmpty(orderAmount)) - sql += " orderAmount=@orderAmount,"; - if (!string.IsNullOrEmpty(refundAmount)) - sql += " refundAmount=@refundAmount,"; - if (!string.IsNullOrEmpty(statusText)) - sql += " statusText=@statusText,"; - if (!string.IsNullOrEmpty(orderDate)) - sql += " orderDate=@orderDate,"; - if (!string.IsNullOrEmpty(afterSaleAddress)) - sql += " afterSaleAddress=@afterSaleAddress,"; - - if (!string.IsNullOrEmpty(order_detail)) - sql += " order_detail=@order_detail,"; - sql = sql.TrimEnd(','); - sql += " where afterSalesId=@afterSalesId"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "wx_order_id", Value = wx_order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "wx_sku_id", Value = wx_sku_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "wx_send_type", Value = wx_send_type.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.DateTime, ParameterName = "TransitCreateTime", Value = TransitCreateTime.ParseToDateTime(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "pre_allocated_order_no", Value = pre_allocated_order_no.ParseToInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buyerId", Value = buyerId, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buyerName", Value = buyerName, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "statusText", Value = statusText, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "orderSn", Value = orderSn, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "afterSalesId", Value = afterSalesId, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "refundAmount", Value = refundAmount.ParseToNullableInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "orderAmount", Value = orderAmount.ParseToNullableInt(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int64, ParameterName = "orderDate", Value = orderDate.ParseToLong(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "afterSaleAddress", Value = afterSaleAddress, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_detail", Value = order_detail, }); - - count = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetBuyerAfterSaleList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - var wx_order_id_in = RegexUtils.GetStringQuery(ref inputData, "wx_order_id_in")?.Replace("'", "\\'"); - var buyer_order_sn_in = RegexUtils.GetStringQuery(ref inputData, "buyer_order_sn_in")?.Replace("'", "\\'"); - if (wx_order_id_in.IsNullOrEmpty() && string.IsNullOrEmpty(buyer_order_sn_in)) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") != "false"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM wxxd.order_pdd_buyer_after_sale o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(wx_order_id_in)) - where += " and o.wx_order_id in ('" + wx_order_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrWhiteSpace(buyer_order_sn_in)) - where += " and o.order_sn in ('" + buyer_order_sn_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM" + - " wxxd.order_pdd_buyer_after_sale o " + - " WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.id ASC"; - else - sql += " ORDER BY o.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List buyerAfterSaleLst = new List(); - foreach (DataRow row in dt.Rows) - { - order_pdd_buyer_after_sale afterSale = new order_pdd_buyer_after_sale - { - id = row["id"].ParseToLong(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - afterSalesId = row["afterSalesId"].ParseToString(), - buyerId = row["buyerId"].ParseToString(), - buyerName = row["buyerName"].ParseToString(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - orderAmount = row["orderAmount"].ParseToNullableInt(), - order_detail = row["order_detail"].ParseToString(), - orderSn = row["orderSn"].ParseToString(), - orderDate = row["orderDate"].ParseToNullableInt(), - refundAmount = row["refundAmount"].ParseToNullableInt(), - statusText = row["statusText"].ParseToString(), - afterSaleAddress = row["afterSaleAddress"].ParseToString(), - pre_allocated_order_no = row["pre_allocated_order_no"].ParseToNullableInt(), - TransitCreateTime = row["TransitCreateTime"].ParseToString().ParseToDateTime(), - wx_order_id = row["wx_order_id"].ParseToString(), - wx_sku_id = row["wx_sku_id"].ParseToString(), - wx_send_type = row["wx_send_type"].ParseToInt(), - }; - buyerAfterSaleLst.Add(afterSale); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(buyerAfterSaleLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXGetTransitWarehouseAfterSaleList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - var wx_order_id_in = RegexUtils.GetStringQuery(ref inputData, "wx_order_id_in")?.Replace("'", "\\'"); - var buyer_order_sn_in = RegexUtils.GetStringQuery(ref inputData, "buyer_order_sn_in")?.Replace("'", "\\'"); - if (wx_order_id_in.IsNullOrEmpty() && string.IsNullOrEmpty(buyer_order_sn_in)) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") != "false"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(1000); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM erp.oms_wei_external_procurement_after_sale o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(wx_order_id_in)) - where += " and o.order_no in ('" + wx_order_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrWhiteSpace(buyer_order_sn_in)) - where += " and o.order_code in ('" + buyer_order_sn_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM" + - " erp.oms_wei_external_procurement_after_sale o " + - " WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.id ASC"; - else - sql += " ORDER BY o.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List refundItemList = new List(); - foreach (DataRow row in dt.Rows) - { - oms_wei_external_procurement_after_sale_info order = new oms_wei_external_procurement_after_sale_info - { - id = row["id"].ParseToLong(), - order_no = row["order_no"].ParseToString(), - order_code = row["order_code"].ParseToString(), - inbound_time = row["inbound_time"].ParseToString().ParseToDateTimeNullable(), - outbound_time = row["outbound_time"].ParseToString().ParseToDateTimeNullable(), - account_user = row["account_user"].ParseToString(), - after_sale_no = row["after_sale_no"].ParseToString(), - created_time = row["created_time"].ParseToString().ParseToDateTimeNullable(), - create_user = row["create_user"].ParseToString(), - downstream_express_code = row["downstream_express_code"].ParseToString(), - downstream_waybill = row["downstream_waybill"].ParseToString(), - external_order_no = row["external_order_no"].ParseToString(), - raw_message = row["raw_message"].ParseToString(), - recipient_name = row["recipient_name"].ParseToString(), - recipient_phone = row["recipient_phone"].ParseToString(), - refund_city = row["refund_city"].ParseToString(), - refund_county = row["refund_county"].ParseToString(), - refund_detail_address = row["refund_detail_address"].ParseToString(), - refund_province = row["refund_province"].ParseToString(), - refund_waybill = row["refund_waybill"].ParseToString(), - return_express_company = row["return_express_company"].ParseToString(), - return_or_exchange = row["return_or_exchange"].ParseToNullableInt(), - status = row["status"].ParseToNullableInt(), - updated_time = row["updated_time"].ParseToString().ParseToDateTimeNullable(), - update_user = row["update_user"].ParseToString(), - warehouse_status = row["warehouse_status"].ParseToNullableInt(), - }; - refundItemList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(refundItemList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 订单异常重拍 - /// - /// - /// - public string WXUpdateAbnormalTransitOrder(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var out_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_no"))?.Replace("'", "\\'"); - var order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_no"))?.Replace("'", "\\'"); - var order_sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_sku_id"))?.Replace("'", "\\'"); - var buyer_account = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buyer_account"))?.Replace("'", "\\'"); - var out_amount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_amount"))?.Replace("'", "\\'"); - var purchaser_note = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "purchaser_note"))?.Replace("'", "\\'"); - var refund_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "refund_status"))?.Replace("'", "\\'"); - var old_out_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_out_order_no"))?.Replace("'", "\\'"); - var old_order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_order_no"))?.Replace("'", "\\'"); - var old_order_sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_order_sku_id"))?.Replace("'", "\\'"); - var old_buyer_account = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_buyer_account"))?.Replace("'", "\\'"); - var old_out_amount = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_out_amount"))?.Replace("'", "\\'"); - var old_purchaser_note = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_purchaser_note"))?.Replace("'", "\\'"); - var old_refund_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "old_refund_status"))?.Replace("'", "\\'"); - var order_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_code"))?.Replace("'", "\\'"); - if (order_code.IsNullOrEmpty() || old_purchaser_note.IsNullOrEmpty() || old_out_amount.ParseToInt().IsNullOrZero() || old_buyer_account.IsNullOrEmpty() || old_order_no.IsNullOrEmpty() || old_out_order_no.IsNullOrEmpty() || - purchaser_note.IsNullOrEmpty() || out_amount.ParseToInt().IsNullOrZero() || buyer_account.IsNullOrEmpty() || order_no.IsNullOrEmpty() || out_order_no.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"异常单记录信息不完整\",\"affected_rows\":" + 0 + "}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - - string sql; - - sql = "INSERT INTO wxxd.order_abnormal_transit_order_rebuy_record (out_order_no,order_no,order_sku_id,buyer_account,out_amount,purchaser_note,refund_status,order_code) "; - sql += " VALUES('" + old_out_order_no + "','" + old_order_no + "','" + old_order_sku_id + "','" + old_buyer_account + "'," + old_out_amount + ",'" + - old_purchaser_note + "','" + old_refund_status + "','" + order_code + "')"; - var rows = mySql.ExecuteAffectedRows(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + rows + "}"; - } - if (rows == 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"创建异常单重拍记录失败\",\"affected_rows\":" + rows + "}"; - } - - sql = "UPDATE erp.oms_wei_external_procurement_log SET "; - sql += " out_order_no='" + out_order_no + "',"; - sql += " order_no='" + order_no + "',"; - sql += " order_sku_id='" + order_sku_id + "',"; - sql += " buyer_account='" + buyer_account + "',"; - sql += " out_amount=" + out_amount + ","; - sql += " purchaser_note='" + purchaser_note + "',"; - sql += " refund_status='" + refund_status + "',"; - sql = sql.TrimEnd(','); - sql += " WHERE order_code='" + order_code + "' AND order_no='" + old_order_no + "';"; - rows = mySql.ExecuteAffectedRows(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + rows + "}"; - } - if (rows == 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"更新异常单拍单失败\",\"affected_rows\":" + rows + "}"; - } - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rows + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - /// - /// 订单拒收状态维护 - /// - /// - /// - public string WXUpdateTransitOrderRejectStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var order_no = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_no"))?.Replace("'", "\\'"); - var order_sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_sku_id"))?.Replace("'", "\\'"); - var order_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_code"))?.Replace("'", "\\'"); - var has_reject = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "has_reject"))?.Replace("'", "\\'"); - if (order_code.IsNullOrEmpty() && (order_no.IsNullOrEmpty() || order_sku_id.IsNullOrEmpty())) - { - return "{\"code\":500,\"msg\":\"拒收信息不完整\",\"affected_rows\":" + 0 + "}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - - string sql; - - sql = "UPDATE erp.oms_wei_external_procurement_log SET "; - sql += " has_reject=" + has_reject + ","; - sql = sql.TrimEnd(','); - if (!order_code.IsNullOrEmpty()) - sql += " WHERE order_code='" + order_code + "' AND order_no='" + order_code + "';"; - else - sql += " WHERE order_no='" + order_no + "' AND order_sku_id='" + order_sku_id + "';"; - var rows = mySql.ExecuteAffectedRows(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + rows + "}"; - } - if (rows == 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"更新拒收状态失败,未找到记录\",\"affected_rows\":" + rows + "}"; - } - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rows + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXAddOrderItemExtInfo(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_order_id"))?.Replace("'", "\\'"); - string sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_sku_id"))?.Replace("'", "\\'"); - string out_order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_id"))?.Replace("'", "\\'"); - string shop_app_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_app_id"))?.Replace("'", "\\'"); - string shop_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_name"))?.Replace("'", "\\'"); - string buy_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buy_type"))?.Replace("'", "\\'"); - string abnormal_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "abnormal_text"))?.Replace("'", "\\'"); - string flag = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "flag"))?.Replace("'", "\\'"); - string label = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "label"))?.Replace("'", "\\'"); - string remark = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "remark"))?.Replace("'", "\\'"); - string after_sale_user_delivery_address = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "after_sale_user_delivery_address"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(order_id) || string.IsNullOrEmpty(sku_id)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "select id from wxxd.order_item_ext where order_id='" + order_id + "' and sku_id='" + sku_id + "'"; - var id = mySql.ExecuteFirstInt(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (id > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"订单已存在\"}"; - } - - sql = "INSERT INTO wxxd.order_item_ext (order_id,sku_id,out_order_id,shop_app_id,shop_name,buy_type,abnormal_text,flag,label,remark,after_sale_user_delivery_address)"; - sql += "VALUES(@order_id,@sku_id,@out_order_id,@shop_app_id,@shop_name,@buy_type,@abnormal_text,@flag,@label,@remark,@after_sale_user_delivery_address);"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_id", Value = order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "sku_id", Value = sku_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "out_order_id", Value = out_order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_app_id", Value = shop_app_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_name", Value = shop_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buy_type", Value = buy_type, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "abnormal_text", Value = abnormal_text, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "flag", Value = flag, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "label", Value = label, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "remark", Value = remark, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "after_sale_user_delivery_address", Value = after_sale_user_delivery_address, }); - - count = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXMdyOrderItemExtInfo(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - string order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_order_id"))?.Replace("'", "\\'"); - string sku_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "wx_sku_id"))?.Replace("'", "\\'"); - string out_order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "out_order_id"))?.Replace("'", "\\'"); - string shop_app_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_app_id"))?.Replace("'", "\\'"); - string shop_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_name"))?.Replace("'", "\\'"); - string buy_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buy_type"))?.Replace("'", "\\'"); - string abnormal_text = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "abnormal_text"))?.Replace("'", "\\'"); - string flag = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "flag"))?.Replace("'", "\\'"); - string label = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "label"))?.Replace("'", "\\'"); - string remark = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "remark"))?.Replace("'", "\\'"); - string after_sale_user_delivery_address = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "after_sale_user_delivery_address"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(order_id)) - return "{\"code\":500,\"msg\":\"订单ID不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "UPDATE wxxd.order_item_ext SET "; - if (!string.IsNullOrEmpty(shop_app_id)) - sql += " shop_app_id=@shop_app_id,"; - if (!string.IsNullOrEmpty(out_order_id)) - sql += " out_order_id=@out_order_id,"; - if (!string.IsNullOrEmpty(shop_name)) - sql += " shop_name=@shop_name,"; - if (buy_type != null) - sql += " buy_type=@buy_type,"; - if (abnormal_text != null) - sql += " abnormal_text=@abnormal_text,"; - if (!string.IsNullOrEmpty(flag)) - sql += " flag=@flag,"; - if (label != null) - sql += " label=@label,"; - if (remark != null) - sql += " remark=@remark,"; - if (!string.IsNullOrEmpty(after_sale_user_delivery_address)) - sql += " after_sale_user_delivery_address=@after_sale_user_delivery_address,"; - sql = sql.TrimEnd(','); - sql += " where 1=1"; - if (!string.IsNullOrEmpty(order_id)) - sql += " and order_id=@order_id"; - if (!string.IsNullOrEmpty(sku_id)) - sql += " and sku_id=@sku_id"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_id", Value = order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "sku_id", Value = sku_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "out_order_id", Value = out_order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_app_id", Value = shop_app_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_name", Value = shop_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buy_type", Value = buy_type, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "abnormal_text", Value = abnormal_text, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "flag", Value = flag, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "label", Value = label, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "remark", Value = remark, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "after_sale_user_delivery_address", Value = after_sale_user_delivery_address, }); - - var count = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + count + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetOrderItemExtInfoList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - var wx_order_id_in = RegexUtils.GetStringQuery(ref inputData, "wx_order_id_in")?.Replace("'", "\\'"); - var wx_sku_id = RegexUtils.GetStringQuery(ref inputData, "wx_sku_id_in")?.Replace("'", "\\'"); - var out_order_id_in = RegexUtils.GetStringQuery(ref inputData, "out_order_id_in")?.Replace("'", "\\'"); - if (wx_order_id_in.IsNullOrEmpty() && out_order_id_in.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") != "false"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM wxxd.order_item_ext o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(wx_order_id_in)) - where += " and o.order_id in ('" + wx_order_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrWhiteSpace(wx_sku_id)) - where += " and o.sku_id in ('" + wx_sku_id.Replace(",", "','") + "')"; - if (!string.IsNullOrWhiteSpace(out_order_id_in)) - where += " and o.out_order_id in ('" + out_order_id_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM" + - " wxxd.order_item_ext o " + - " WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.id ASC"; - else - sql += " ORDER BY o.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List buyerOrderList = new List(); - foreach (DataRow row in dt.Rows) - { - order_item_ext order = new order_item_ext - { - id = row["id"].ParseToLong(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - buy_type = row["buy_type"].ParseToString(), - abnormal_text = row["abnormal_text"].ParseToString(), - after_sale_user_delivery_address = row["after_sale_user_delivery_address"].ParseToString(), - flag = row["flag"].ParseToNullableInt(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - label = row["label"].ParseToString(), - order_id = row["order_id"].ParseToString(), - remark = row["remark"].ParseToString(), - shop_app_id = row["shop_app_id"].ParseToString(), - shop_name = row["shop_name"].ParseToString(), - sku_id = row["sku_id"].ParseToString(), - out_order_id = row["out_order_id"].ParseToString(), - }; - buyerOrderList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(buyerOrderList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetErpReturnOrderList(string inputData, bool isDetail = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - var timeCalc = DateTime.Now; - - var erp_order_id_in = RegexUtils.GetStringQuery(ref inputData, "erp_order_id_in")?.Replace("'", "\\'"); - if (erp_order_id_in.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"未指定订单\"}"; - } - var sort_type = RegexUtils.GetStringQuery(ref inputData, "sort_type")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") == "true"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(500); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(id) FROM erp.distrib_return_order o WHERE 1=1 "; - - string where = ""; - if (!string.IsNullOrWhiteSpace(erp_order_id_in)) - where += " and o.order_code_source in ('" + erp_order_id_in.Replace(",", "','") + "')"; - sql += where; - - var count = 0; - if (!is_not_count) - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "SELECT o.* FROM erp.distrib_return_order o WHERE 1=1"; - - //where子句 - sql += where; - - if (sort_type == "asc") - sql += " ORDER BY o.created_at ASC"; - else - sql += " ORDER BY o.created_at DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List orderList = new List(); - foreach (DataRow row in dt.Rows) - { - distrib_return_order_info order = new distrib_return_order_info - { - id = row["id"].ParseToLong(), - additional_weight_fee = row["additional_weight_fee"].ParseToNullableInt(), - after_sale_no = row["after_sale_no"].ParseToNullableString(), - created_at = row["created_at"].ParseToString().ParseToDateTime(), - ext_field1 = row["ext_field1"].ParseToNullableString(), - ext_field2 = row["ext_field2"].ParseToNullableString(), - first_weight_fee = row["first_weight_fee"].ParseToNullableInt(), - logistics_code = row["logistics_code"].ParseToNullableString(), - logistics_express_no = row["logistics_express_no"].ParseToNullableString(), - order_code = row["order_code"].ParseToNullableString(), - order_code_source = row["order_code_source"].ParseToNullableString(), - order_void_status = row["order_void_status"].ParseToNullableInt(), - platform = row["platform"].ParseToNullableString(), - platform_code = row["platform_code"].ParseToNullableString(), - platform_order_no = row["platform_order_no"].ParseToNullableString(), - postage = row["postage"].ParseToNullableInt(), - real_logistics_code = row["real_logistics_code"].ParseToNullableString(), - real_logistics_express_code = row["real_logistics_express_code"].ParseToNullableString(), - receiver_address = row["receiver_address"].ParseToNullableString(), - receiver_area = row["receiver_area"].ParseToNullableString(), - receiver_city = row["receiver_city"].ParseToNullableString(), - receiver_name = row["receiver_name"].ParseToNullableString(), - receiver_phone = row["receiver_phone"].ParseToNullableString(), - receiver_province = row["receiver_province"].ParseToNullableString(), - response_msg = row["response_msg"].ParseToNullableString(), - return_order_status = row["return_order_status"].ParseToNullableInt(), - sender_info = row["sender_info"].ParseToNullableString(), - sender_name = row["sender_name"].ParseToNullableString(), - sender_phone = row["sender_phone"].ParseToNullableString(), - shop_name = row["shop_name"].ParseToNullableString(), - updated_at = row["updated_at"].ParseToString().ParseToDateTime(), - warehouse_in_time = row["warehouse_in_time"].ParseToString().ParseToDateTime(), - warehouse_out_time = row["warehouse_out_time"].ParseToString().ParseToDateTime(), - warehouse_status = row["warehouse_status"].ParseToNullableInt(), - }; - orderList.Add(order); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(orderList, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 获取wx订单状态 - /// - public string GetWxTaskStatus(string inputData, bool isDetail = false) - { - if (string.IsNullOrEmpty(inputData)) - return "{\"code\":19999,\"msg\":\"参数为空\"}"; - - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"签名校验失败\"}"; - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - - string shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "");//所有店铺信息 - if (string.IsNullOrEmpty(shop_ids)) - throw new ArgumentException("请选择店铺"); - List shopIdLst = shop_ids.Split(',').ToList(); - if (shopIdLst.Count > 0) - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - - string start_Time = RegexUtils.GetStringQuery(ref inputData, "start_time")?.Replace("'", ""); - string end_Time = RegexUtils.GetStringQuery(ref inputData, "end_time")?.Replace("'", ""); - DateTime startTime = DateTime.Now.AddDays(-7); - DateTime endTime = DateTime.Now; - if (!string.IsNullOrEmpty(start_Time)) - startTime = TimeUtils.StampMillisecondsToDateTime(start_Time.ParseToLong()); - if (!string.IsNullOrEmpty(end_Time)) - endTime = TimeUtils.StampMillisecondsToDateTime(end_Time.ParseToLong()); - if (endTime <= startTime) - throw new ArgumentException("结束时间必须大于开始时间"); - //if (endTime > startTime.AddDays(10)) - // throw new ArgumentException("时间范围不能超过10天"); - int startTimestamp = TimeUtils.DateTimeToTimestampSeconds(startTime); - int endTimestamp = TimeUtils.DateTimeToTimestampSeconds(endTime); - - var timeCalc = DateTime.Now; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - // ---------- 1. 查主任务 ---------- - StringBuilder sbTask = new StringBuilder(); - - sbTask.Append("SELECT "); - sbTask.Append("A.id, "); - sbTask.Append("A.task_type, "); - sbTask.Append("A.task_describe, "); - sbTask.Append("A.shop_ids, "); - sbTask.Append("C.name AS shop_name, "); - sbTask.Append("A.object_ids, "); - sbTask.Append("A.sub_task_num, "); - sbTask.Append("A.success_task_num, "); - sbTask.Append("A.fail_task_num, "); - sbTask.Append("A.status, "); - sbTask.Append("A.create_by, "); - sbTask.Append("A.update_by, "); - sbTask.Append("A.remark, "); - sbTask.Append("A.task_fail_reason, "); - sbTask.Append("A.create_time, "); - sbTask.Append("A.update_time "); - sbTask.Append("FROM erp.o_user_operate_task AS A "); - sbTask.Append("INNER JOIN erp.o_shop AS C ON A.shop_ids = C.id "); - sbTask.Append("WHERE A.task_type IN (25, 31, 36) "); - - // 时间条件 - { - sbTask.Append("AND A.create_time BETWEEN '"); - sbTask.Append(startTime); - sbTask.Append("' AND '"); - sbTask.Append(endTime); - sbTask.Append("' "); - } - - // 店铺条件 - if (!string.IsNullOrEmpty(shop_ids)) - { - sbTask.Append("AND A.shop_ids IN ("); - sbTask.Append(shop_ids); - sbTask.Append(") "); - } - - sbTask.Append("ORDER BY A.create_time DESC, A.id DESC;"); - - DataTable taskDt = null; - try - { - taskDt = mySql.ExecuteDataTable(sbTask.ToString()); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - - } - - - if (taskDt != null) - { - List orderList = new List(); - - foreach (DataRow row in taskDt.Rows) - { - var g = new user_operate_task_info - { - id = row["id"].ParseToLong(), - task_type = row["task_type"].ParseToNullableInt(), - task_describe = row["task_describe"].ParseToNullableString(), - shop_ids = row["shop_ids"].ParseToNullableString(), - shop_name = row["shop_name"].ParseToNullableString(), - object_ids = row["object_ids"].ParseToNullableString(), - sub_task_num = row["sub_task_num"].ParseToNullableInt(), - success_task_num = row["success_task_num"].ParseToNullableInt(), - fail_task_num = row["fail_task_num"].ParseToNullableInt(), - status = row["status"].ParseToInt(), - create_by = row["create_by"].ParseToNullableString(), - update_by = row["update_by"].ParseToNullableString(), - remark = row["remark"].ParseToNullableString(), - task_fail_reason = row["task_fail_reason"].ParseToNullableString(), - create_time = row["create_time"].ParseToString().ParseToDateTimeNullable(), - update_time = row["update_time"].ParseToString().ParseToDateTimeNullable(), - sub_tasks = new List() // 初始化子任务列表 - }; - orderList.Add(g); - } - - - - - List taskIdList = orderList.Select(x => x.id).ToList(); - if (taskIdList.Count > 0) - { - StringBuilder sbSubTask = new StringBuilder(); - - sbSubTask.Append("SELECT "); - sbSubTask.Append("id, "); - sbSubTask.Append("task_id, "); - sbSubTask.Append("platform_code, "); - sbSubTask.Append("shop_id, "); - sbSubTask.Append("platform_object_id, "); - sbSubTask.Append("object_id, "); - sbSubTask.Append("platform_resp_code, "); - sbSubTask.Append("platform_resp_msg, "); - sbSubTask.Append("platform_resp_data, "); - sbSubTask.Append("sys_msg, "); - sbSubTask.Append("CAST(`status` AS SIGNED) AS `status`, "); - sbSubTask.Append("audit_result, "); - sbSubTask.Append("audit_reason, "); - sbSubTask.Append("create_time, "); - sbSubTask.Append("create_by, "); - sbSubTask.Append("update_time, "); - sbSubTask.Append("update_by "); - sbSubTask.Append("FROM erp.o_user_operate_sub_task "); - sbSubTask.Append("WHERE task_id IN ("); - - for (int i = 0; i < taskIdList.Count; i++) - { - if (i > 0) - { - sbSubTask.Append(", "); - } - sbSubTask.Append(taskIdList[i]); - } - sbSubTask.Append(") "); - sbSubTask.Append("ORDER BY task_id, create_time DESC;"); - - DataTable subTaskDt = null; - try - { - subTaskDt = mySql.ExecuteDataTable(sbSubTask.ToString()); - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - - // 按task_id分组存储子任务 - Dictionary> subTaskDict = new Dictionary>(); - - if (subTaskDt != null) - { - foreach (DataRow row in subTaskDt.Rows) - { - var subTask = new user_operate_sub_task_info - { - id = row["id"].ParseToLong(), - task_id = row["task_id"].ParseToLong(), - platform_code = row["platform_code"].ParseToNullableString(), - shop_id = row["shop_id"].ParseToLong(), - platform_object_id = row["platform_object_id"].ParseToNullableString(), - object_id = row["object_id"].ParseToNullableString(), - platform_resp_code = row["platform_resp_code"].ParseToNullableString(), - platform_resp_msg = row["platform_resp_msg"].ParseToNullableString(), - platform_resp_data = row["platform_resp_data"].ParseToNullableString(), - sys_msg = row["sys_msg"].ParseToNullableString(), - status = row["status"].ParseToInt(), - audit_result = row["audit_result"].ParseToNullableInt(), - audit_reason = row["audit_reason"].ParseToNullableString(), - create_time = row["create_time"].ParseToString().ParseToDateTimeNullable(), - create_by = row["create_by"].ParseToNullableString(), - update_time = row["update_time"].ParseToString().ParseToDateTimeNullable(), - update_by = row["update_by"].ParseToNullableString() - }; - - long taskId = subTask.task_id; - if (!subTaskDict.ContainsKey(taskId)) - { - subTaskDict[taskId] = new List(); - } - subTaskDict[taskId].Add(subTask); - } - // 将子任务列表赋值给对应的主任务 - foreach (var task in orderList) - { - if (subTaskDict.ContainsKey(task.id)) - { - task.sub_tasks = subTaskDict[task.id]; - } - } - } - - // ---------- 3. 合并错误信息到主任务 ---------- - foreach (var task in orderList) - { - List errorList = new List(); - - // 主任务错误 - if (!string.IsNullOrEmpty(task.task_fail_reason)) - { - errorList.Add(task.task_fail_reason); - } - - // 获取该任务的子任务列表 - if (subTaskDict.ContainsKey(task.id)) - { - var subTasks = subTaskDict[task.id]; - - // 对于36类型,子任务可能有更详细的错误 - if (task.task_type == 36) - { - foreach (var subTask in subTasks) - { - // 子任务失败的错误信息 - if (subTask.status == 2 && !string.IsNullOrEmpty(subTask.sys_msg)) - { - errorList.Add(subTask.sys_msg); - } - // 审核不通过的原因 - if (subTask.audit_result == 2 && !string.IsNullOrEmpty(subTask.audit_reason)) - { - errorList.Add("审核不通过:" + subTask.audit_reason); - } - } - } - else - { - // 25、31类型,如果主任务没有错误,但子任务有错误,也收集 - foreach (var subTask in subTasks) - { - if (subTask.status == 2 && !string.IsNullOrEmpty(subTask.sys_msg)) - { - errorList.Add(subTask.sys_msg); - } - } - } - } - - // 合并错误信息(去重) - task.task_fail_reason = errorList - .Where(x => !string.IsNullOrEmpty(x)) - .Distinct() - .ToList() - .Count > 0 ? string.Join("; ", errorList.Distinct()) : null; - } - } - - JsonSerializerSettings jsonSetting = new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - ContractResolver = new DefaultContractResolver - { - // 核心:设置命名策略为 SnakeCaseNamingStrategy - // 这样序列化时,ProjectId 会变成 "project_id"; - // 反序列化时,"project_id" 也能正确映射回 ProjectId - NamingStrategy = new SnakeCaseNamingStrategy() - } - }; - string jsonResult = JsonConvert.SerializeObject(new - { - code = 200, - msg = "success", - data = orderList, - count = orderList.Count - }, jsonSetting); - return jsonResult; - } - - - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - private JsonSerializerSettings JsonSerializer = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore - }; - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXProductManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXProductManage.cs deleted file mode 100644 index dce8523..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXProductManage.cs +++ /dev/null @@ -1,1360 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.ShopModel; -using KJD_Web.Model.WxModel; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using Mysqlx.Crud; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Threading; -using System.Web; -using System.Web.Security; -using System.Web.UI.HtmlControls; - -namespace KJD_Web.BLL.WXXD -{ - public class WXProductManage - { - public string WXGetPDDProductList(string inputData, bool isDetail = false) - { - return new BLL.BXX.BXXProductManage().GetProductList(inputData, isDetail); - } - - public string WXGetPDDProductGroups(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT DISTINCT p.group FROM `bxx`.`product` p where p.is_del=0"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - try - { - string group_data = ""; - foreach (DataRow row in dt.Rows) - { - group_data += row["group"].ToString() + ","; - } - var data = group_data.Trim(','); - return "{\"code\":200,\"msg\":\"success\",\"data\":\"" + data + "\"}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetPDDProductCates(string inputData) - { - return new BXX.BXXProductManage().GetProductMainCates(inputData); - } - - /// - /// 随机获取商品(无详情) 随机添加到上传列表所以不需要获取详情 - /// - /// - /// - public string WXGetPDDProductListRandom(string inputData) - { - return new BXX.BXXProductManage().GetProductListRandom(inputData); - /* - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var in_ext_codes = RegexUtils.GetStringQuery(ref inputData, "in_ext_codes")?.Replace("'", "\\'"); - var in_skc_ids = RegexUtils.GetStringQuery(ref inputData, "in_skc_ids")?.Replace("'", "\\'"); - var in_groups = RegexUtils.GetStringQuery(ref inputData, "in_groups")?.Replace("'", "\\'"); - var in_cates = RegexUtils.GetStringQuery(ref inputData, "in_cates")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select count(id) from bxx.product p where p.is_del=0"; - - string where = ""; - if (!string.IsNullOrEmpty(in_ext_codes)) - { - in_ext_codes = "'" + string.Join("','", in_ext_codes.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.ext_code in (" + in_ext_codes + ")"; - } - if (!string.IsNullOrEmpty(in_skc_ids)) - { - in_skc_ids = "'" + string.Join("','", in_skc_ids.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.skc_id in (" + in_skc_ids + ")"; - } - if (!string.IsNullOrEmpty(in_groups)) - { - in_groups = "'" + string.Join("','", in_groups.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and p.group in (" + in_groups + ")"; - } - if (!string.IsNullOrEmpty(in_cates)) - { - in_cates = "'" + string.Join("','", in_cates.Split(new string[] { ",", ",", " " }, StringSplitOptions.RemoveEmptyEntries)) + "'"; - where += " and (p.cat_name in (" + in_cates + ") or p.main_cat_name in (" + in_cates + "))"; - } - - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "select p.id,p.from_shop_id,p.spu_id,p.skc_id,p.main_cat_id,p.main_cat_name,p.cat_id,p.cat_name,p.price_text,p.ext_code," + - "p.product_name,p.main_img,p.group,p.notes,p.add_time,p.mdy_time,p.select_total_count," + - "p.fission_words,p.head_words,p.end_words from bxx.product p where p.is_del=0"; - - //where子句 - sql += where; - - sql += " ORDER BY RAND()"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - try - { - List productLst = new List(); - foreach (DataRow row in dt.Rows) - { - DBProductResultParam prod = new DBProductResultParam - { - id = Convert.ToInt32(row["id"]), - from_shop_id = row["from_shop_id"].ToString(), - skc_id = row["skc_id"].ToString(), - spu_id = row["spu_id"].ToString(), - cat_id = row["cat_id"].ToString(), - cat_name = row["cat_name"].ToString(), - main_cat_id = row["main_cat_id"].ToString(), - main_cat_name = row["main_cat_name"].ToString(), - price_text = row["price_text"].ToString(), - product_name = row["product_name"].ToString(), - main_img = row["main_img"].ToString(), - ext_code = row["ext_code"].ToString(), - //product_json = row["product_json"].ToString(), - //size_json = row["size_json"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - group = row["group"].ToString(), - notes = row["notes"].ToString(), - select_total_count = row["select_total_count"].ParseToInt(), - end_words = row["end_words"].ParseToString(), - fission_words = row["fission_words"].ParseToString(), - head_words = row["head_words"].ParseToString(), - }; - productLst.Add(prod); - } - var data = JsonUtils.SerializerObjectToString(productLst); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - */ - } - - public string WXMdyPDDProduct(string inputData) - { - return new BXX.BXXProductManage().MdyProduct(inputData); - } - - public string MdyBestSaleProd(string inputData) - { - return new BXX.BXXProductManage().MdyBestSaleProd(inputData); - } - - public string WXAddSecretSpuIdShopIdMap(string inputData) - { - return "{\"code\":500,\"msg\":\"接口已作废\"}"; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var up_secret_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_secret_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_secret_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少商品编号1\"}"; - } - var index = RegexUtils.GetStringQuery(ref inputData, "index").ParseToNullableLong(); - if (index == null) - index = up_secret_spu_id.ParseToLong() % 1024; - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少商品编号2\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"缺少店铺编号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id from wxxd_product_shop_map.product_shop_map_" + index.ParseToString().PadLeft(4, '0') + - " where up_secret_spu_id='" + up_secret_spu_id + "' and shop_id='" + shop_id + "';"; - - DataTable dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message) || dt == null || dt.Rows == null) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"失败:" + mySql.Message + "\"}"; - } - if (dt.Rows.Count > 0) - { - mySql.Close(); - return "{\"code\":200,\"msg\":\"数据已存在\"}"; - } - - sql = "insert into wxxd_product_shop_map.product_shop_map_" + index.ParseToString().PadLeft(4, '0') + - " (up_secret_spu_id,up_spu_id,shop_id) " + - " values ('" + up_secret_spu_id + "','" + up_spu_id + "','" + shop_id + "');"; - mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (mySql.Message.IsNullOrEmpty()) - { - return "{\"code\":200,\"msg\":\"成功\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXAddSecretIdUpMap(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var up_secret_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_secret_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_secret_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少商品编号1\"}"; - } - var index = RegexUtils.GetStringQuery(ref inputData, "index").ParseToNullableLong(); - if (index == null) - index = Math.Abs(up_secret_spu_id.GetHashCode()) % 1024; - var up_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少商品编号2\"}"; - } - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(shop_id)) - { - return "{\"code\":500,\"msg\":\"缺少店铺编号\"}"; - } - var price_max = RegexUtils.GetStringQuery(ref inputData, "price_max")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(price_max)) - { - return "{\"code\":500,\"msg\":\"缺少最高价格\"}"; - } - var price_min = RegexUtils.GetStringQuery(ref inputData, "price_min")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(price_min)) - { - return "{\"code\":500,\"msg\":\"缺少最低价格\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "insert into wxxd_product_up_map.product_up_map_" + index.ParseToString().PadLeft(4, '0') + - " (up_secret_spu_id,up_spu_id,shop_id,price_min,price_max) " + - " values ('" + up_secret_spu_id + "','" + up_spu_id + "','" + shop_id + "'," + price_min + "," + price_max + ");"; - mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (mySql.Message.IsNullOrEmpty()) - { - return "{\"code\":200,\"msg\":\"成功\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"失败:" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetSecretSpuIdShopIdMapList(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var up_secret_spu_id = RegexUtils.GetStringQuery(ref inputData, "up_secret_spu_id")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(up_secret_spu_id)) - { - return "{\"code\":500,\"msg\":\"缺少商品编号1\"}"; - } - var index = RegexUtils.GetStringQuery(ref inputData, "index").ParseToNullableLong(); - if (index == null) - index = up_secret_spu_id.ParseToLong() % 1024; - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count") == "true"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - int count = 0; - string sql = ""; - if (!is_not_count) - { - sql = "select count(*) from wxxd_product_shop_map.product_shop_map_" + index.ParseToString().PadLeft(4, '0') + - " where up_secret_spu_id='" + up_secret_spu_id; - if (!shop_id.IsNullOrEmpty()) - sql += "' and shop_id='" + shop_id + "'"; - sql += ";"; - - count = mySql.ExecuteRowCount(sql); - Thread.Sleep(100); - } - - DataTable dt; - if (count == 0 && !is_not_count) - { - dt = new DataTable(); - } - else - { - sql = "select * from wxxd_product_shop_map.product_shop_map_" + index.ParseToString().PadLeft(4, '0') + - " where up_secret_spu_id='" + up_secret_spu_id; - if (!shop_id.IsNullOrEmpty()) - sql += "' and shop_id='" + shop_id + "'"; - sql += " order by add_time desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - - dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message) || dt == null) - { - Thread.Sleep(1000); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - - if (dt != null) - { - try - { - List prodSecretIdMapLst = new List(); - foreach (DataRow row in dt.Rows) - { - WxProdSecretSpuIdShopIdMapParam idMap = new WxProdSecretSpuIdShopIdMapParam - { - id = Convert.ToInt32(row["id"]), - up_secret_spu_id = row["up_secret_spu_id"].ToString(), - up_spu_id = row["up_spu_id"].ToString(), - shop_id = row["shop_id"].ToString(), - add_time = Convert.ToDateTime(row["add_time"]), - //mdy_time = Convert.ToDateTime(row["mdy_time"]), - }; - prodSecretIdMapLst.Add(idMap); - } - var data = JsonUtils.SerializeObjectToString(prodSecretIdMapLst); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string SetRandomCompanyProductConfig(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string product_group = RegexUtils.GetStringQuery(ref inputData, "product_group")?.Replace("'", "\\'"); - string product_interval = RegexUtils.GetStringQuery(ref inputData, "product_interval")?.Replace("'", "\\'"); - string is_on = RegexUtils.GetStringQuery(ref inputData, "is_on")?.Replace("'", "\\'"); - - string sql = "update wxxd.product_com_random set "; - if (product_group != null) - sql += "product_group='" + product_group + "',"; - if (product_interval != null) - sql += "product_interval=" + product_interval + ","; - if (is_on != null) - sql += "is_on=" + is_on + ","; - sql = sql.TrimEnd(','); - sql += " where 1=1;"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetRandomCompanyProductConfig(string inputData) - { - var timeCalc = DateTime.Now; - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":50000,\"msg\":\"用户不存在\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "select p.* from wxxd.product_com_random p" + - " where 1=1;"; - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - try - { - string product_group = dt.Rows[0]["product_group"].ParseToString(); - string product_interval = dt.Rows[0]["product_interval"].ParseToString(); - string is_on = dt.Rows[0]["is_on"].ParseToString(); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\"" + - ",\"product_group\":\"" + product_group + "\"" + - ",\"product_interval\":" + product_interval + - ",\"is_on\":" + is_on + - ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\"}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXAddMdyAfterSale(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string coid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "coid"))?.Replace("'", "\\'"); - string after_sale_json = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "after_sale_json"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(coid)) - return "{\"code\":50001,\"msg\":\"没有售后编号\"}"; - if (string.IsNullOrEmpty(after_sale_json)) - return "{\"code\":50001,\"msg\":\"没有售后信息\"}"; - string supplier_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "supplier_name"))?.Replace("'", "\\'"); - string type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "type"))?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT coid FROM `wxxd`.`after_sale` where coid='" + coid + "' and is_del=0"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - if (dt.Rows.Count == 0) - { - sql = "INSERT INTO `wxxd`.`after_sale` (coid,after_sale_json,supplier_name,type) VALUES (@coid,@after_sale_json,@supplier_name,@type);"; - } - else - { - sql = "UPDATE `wxxd`.`after_sale` SET after_sale_json=@after_sale_json"; - if (supplier_name != null) - sql += ", supplier_name=@supplier_name "; - if (type != null) - sql += ", type=@type "; - sql += " WHERE coid=@coid and is_del=0;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "coid", Value = coid, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "after_sale_json", Value = after_sale_json, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "supplier_name", Value = supplier_name.ParseToString(), }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "type", Value = type.IsNullOrEmpty() ? "jst" : type, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 上货实时获取聚水潭等外部平台售后地址 - /// - /// - /// - public string WXGetAfterSale(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT * FROM `wxxd`.`after_sale` where coid='" + coid + "' and is_del=0"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - try - { - string group_data = ""; - foreach (DataRow row in dt.Rows) - { - group_data += row["after_sale_json"].ToString(); - break; - } - var data = group_data.Trim(','); - if (data.IsNullOrEmpty()) - data = "\"\""; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + "}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetRandomAfterSaleList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string type = RegexUtils.GetStringQuery(ref inputData, "type")?.Replace("'", "\\'"); - string isDel = RegexUtils.GetStringQuery(ref inputData, "isDel")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT count(*) FROM `wxxd`.`after_sale` where 1=1"; - - string where = ""; - if (type != null) - where += " and type='" + type + "'"; - - if (isDel == "true") - where += " and is_del>0"; - else - where += " and is_del=0"; - - sql += where; - sql += ";"; - - var count = 0; - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `wxxd`.`after_sale` where 1=1"; - sql += where; - sql += " order by RAND() limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List WXAddressInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WXAddressInfoLst.Add(new WXAddressInfo() - { - id = row["id"].ParseToInt(), - after_sale_json = row["after_sale_json"].ParseToString(), - coid = row["coid"].ParseToString(), - supplier_name = row["supplier_name"].ParseToString(), - type = row["type"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WXAddressInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 聚水潭等外部平台售后列表 - /// - /// - /// - public string WXGetAfterSaleList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - string type = RegexUtils.GetStringQuery(ref inputData, "type")?.Replace("'", "\\'"); - string supplier_name = RegexUtils.GetStringQuery(ref inputData, "supplier_name")?.Replace("'", "\\'"); - string detail = RegexUtils.GetStringQuery(ref inputData, "detail")?.Replace("'", "\\'"); - string isDel = RegexUtils.GetStringQuery(ref inputData, "isDel")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT count(*) FROM `wxxd`.`after_sale` where 1=1"; - - string where = ""; - if (coid != null) - where += " and coid='" + coid + "'"; - if (type != null) - where += " and type='" + type + "'"; - if (supplier_name != null) - where += " and supplier_name='" + supplier_name + "'"; - if (detail != null) - where += " and after_sale_json like '%" + detail + "%'"; - - if (isDel == "true") - where += " and is_del>0"; - else - where += " and is_del=0"; - - sql += where; - sql += ";"; - - var count = 0; - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `wxxd`.`after_sale` where 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List WXAddressInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WXAddressInfoLst.Add(new WXAddressInfo() - { - id = row["id"].ParseToInt(), - after_sale_json = row["after_sale_json"].ParseToString(), - coid = row["coid"].ParseToString(), - supplier_name = row["supplier_name"].ParseToString(), - type = row["type"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WXAddressInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXDelAddress(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - var coid = RegexUtils.GetStringQuery(ref inputData, "coid"); - if (string.IsNullOrEmpty(coid)) - { - return "{\"code\":50002,\"msg\":\"没有售后地址编号\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - //string sql = "delete from wxxd.after_sale where coid='" + coid + "' and is_del=false"; - string sql = "update wxxd.after_sale set is_del=" + RandomUtils.GetId(1, Int32.MaxValue) + " where coid='" + coid + "' and is_del=false"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string WXAddMdyShippingTemplate(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - string shipping_template_json = RegexUtils.GetStringQuery(ref inputData, "shipping_template_json")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty("coid")) - return "{\"code\":50001,\"msg\":\"没有运费编号\"}"; - if (string.IsNullOrEmpty("shipping_template_json")) - return "{\"code\":50001,\"msg\":\"没有运费信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT * FROM `wxxd`.`shipping_template` where coid='" + coid + "'"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - if (dt.Rows.Count == 0) - { - sql = "INSERT INTO `wxxd`.`shipping_template` (coid,shipping_template_json) VALUES (@coid,@shipping_template_json);"; - } - else - { - sql = "UPDATE `wxxd`.`shipping_template` SET shipping_template_json=@shipping_template_json WHERE coid=@coid;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "coid", Value = coid, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shipping_template_json", Value = shipping_template_json, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetShippingTemplate(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT * FROM `wxxd`.`shipping_template` where coid='" + coid + "'"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - try - { - string group_data = ""; - foreach (DataRow row in dt.Rows) - { - group_data += row["shipping_template_json"].ToString(); - break; - } - var data = group_data.Trim(','); - if (data.IsNullOrEmpty()) - data = "\"\""; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + "}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXAddMdyCommissionRate(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string spu_id = RegexUtils.GetStringQuery(ref inputData, "spu_id")?.Replace("'", "\\'"); - string product_name = RegexUtils.GetStringQuery(ref inputData, "product_name")?.Replace("'", "\\'"); - int? commission_rate = RegexUtils.GetStringQuery(ref inputData, "commission_rate").ParseToNullableInt(); - if (string.IsNullOrEmpty(spu_id)) - return "{\"code\":50001,\"msg\":\"没有商品Id\"}"; - if (string.IsNullOrEmpty(product_name)) - return "{\"code\":50001,\"msg\":\"没有商品名称\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT * FROM `bxx`.`product_wx_commission_rate` where spu_id='" + spu_id + "'"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - if (dt.Rows.Count == 0) - { - sql = "INSERT INTO `bxx`.`product_wx_commission_rate` (spu_id,product_name,commission_rate) VALUES (@spu_id,@product_name,@commission_rate);"; - } - else - { - sql = "UPDATE `bxx`.`product_wx_commission_rate` SET product_name=@product_name,commission_rate=@commission_rate WHERE spu_id=@spu_id;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "spu_id", Value = spu_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "product_name", Value = product_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "commission_rate", Value = commission_rate, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetCommissionRate(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string spu_ids = RegexUtils.GetStringQuery(ref inputData, "spu_ids")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT * FROM `bxx`.`product_wx_commission_rate` where spu_id in ('" + spu_ids.Replace(",", "','") + "')"; - - string where = ""; - sql += where; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - JArray jArr = new JArray(); - try - { - foreach (DataRow row in dt.Rows) - { - JObject jObj = new JObject(); - jObj["id"] = row["id"].ToString(); - jObj["product_name"] = row["product_name"].ToString(); - jObj["commission_rate"] = row["commission_rate"].ParseToNullableInt(); - jObj["add_time"] = Convert.ToDateTime(row["add_time"]); - jObj["mdy_time"] = Convert.ToDateTime(row["mdy_time"]); - jArr.Add(jObj); - } - return "{\"code\":200,\"msg\":\"success\",\"data\":" + JsonUtils.SerializeObject(jArr) + "}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":[]}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":[]}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXAddMdyQualificationImage(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - //int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - //int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(50); - string img_md5 = RegexUtils.GetStringQuery(ref inputData, "img_md5")?.Replace("'", "\\'"); - string img_base64 = RegexUtils.GetStringQuery(ref inputData, "img_base64")?.Replace("'", "\\'"); - string img_thumb_base64 = RegexUtils.GetStringQuery(ref inputData, "img_thumb_base64")?.Replace("'", "\\'"); - string txt_margin = RegexUtils.GetStringQuery(ref inputData, "txt_margin")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(img_md5)) - return "{\"code\":50001,\"msg\":\"没有图片码\"}"; - if (string.IsNullOrEmpty("product_name")) - return "{\"code\":50001,\"msg\":\"没有图片\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "INSERT INTO wxxd.wx_qualification_image (img_md5,img_base64,img_thumb_base64,txt_margin) VALUES " + - " ('" + img_md5 + "','" + img_base64 + "','" + img_thumb_base64 + "','" + txt_margin + "')" + - " ON DUPLICATE KEY UPDATE img_base64=VALUES(img_base64),img_thumb_base64=VALUES(img_thumb_base64),txt_margin=VALUES(txt_margin);"; - - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!mySql.Message.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (rst < 1) - { - return "{\"code\":500,\"msg\":\"未新增或更新\"}"; - } - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetQualificationImage(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(1); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string img_md5 = RegexUtils.GetStringQuery(ref inputData, "img_md5")?.Replace("'", "\\'"); - string cat_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cat_name"))?.Replace("'", "\\'"); - string is_detail = RegexUtils.GetStringQuery(ref inputData, "is_detail")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT * FROM wxxd.wx_qualification_image where 1=1"; - - string where = ""; - if (!string.IsNullOrEmpty(img_md5)) - where += " and img_md5 in ('" + img_md5.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(cat_name)) - where += " and cat_name in ('" + cat_name.Replace(",", "','") + "')"; - sql += where; - sql += " ORDER BY id DESC"; - sql += " LIMIT " + (page - 1) * page_size + "," + page_size + ";"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - - if (dt != null) - { - JArray jArr = new JArray(); - List wxQualificationImageInfos = new List(); - try - { - foreach (DataRow row in dt.Rows) - { - var img = new wx_qualification_image_info() - { - id = row["id"].ParseToInt(), - cat_name = row["cat_name"].ParseToString(), - img_md5 = row["img_md5"].ParseToString(), - img_thumb_base64 = row["img_thumb_base64"].ParseToNullableString(), - txt_margin = row["txt_margin"].ParseToNullableString(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - }; - if (is_detail == "true") - img.img_base64 = row["img_base64"].ParseToNullableString(); - wxQualificationImageInfos.Add(img); - } - return "{\"code\":200,\"msg\":\"success\",\"data\":" + JsonUtils.SerializeObject(wxQualificationImageInfos) + "}"; - } - catch (Exception ex) - { - return "{\"code\":50002,\"msg\":\"" + ex.Message + "\",\"data\":[]}"; - } - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":[]}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXDelQualificationImage(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - string img_md5 = RegexUtils.GetStringQuery(ref inputData, "img_md5")?.Replace("'", "\\'"); - string id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - if (id.IsNullOrZero() && img_md5.IsNullOrEmpty()) - { - return "{\"code\":50001,\"msg\":\"图片id不能为空\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "delete FROM wxxd.wx_qualification_image where 1=1"; - - string where = ""; - if (!string.IsNullOrEmpty(img_md5)) - where += " and img_md5 in ('" + img_md5.Replace(",", "','") + "')"; - if (!id.IsNullOrZero()) - where += " and id in (" + id + ")"; - sql += where + ";"; - - var rows = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if(!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":50002,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rows + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string E57GetFreightTemplate(string inputData) - { - if (string.IsNullOrEmpty(inputData)) - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - // 供应商id - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - - try - { - // 获取运费模板 - //"https://po.e57.cn/prod-api/api/sys-api/system/open/api/freightTemplate/list?warehouseNum=10361546"; - var urlShip = "https://po.e57.cn/prod-api/api/sys-api/system/open/api/freightTemplate/list?warehouseNum=" + coid; - var shipRst = HttpUtils.e57GetResponse(urlShip, ""); - return shipRst; - } - catch (Exception ex) - { - return "{\"code\":50001,\"msg\":\"" + ex.Message + "\"}"; - } - } - - public string E57AfterSale(string inputData) - { - if (string.IsNullOrEmpty(inputData)) - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - // 供应商id - string coid = RegexUtils.GetStringQuery(ref inputData, "coid")?.Replace("'", "\\'"); - - try - { - // 获取推单售后地址 - //https://po.e57.cn/prod-api/api/sys-api/system/open/api/afterSale/info?warehouseNum=10361546&shopId=46568955 - var urlAfter = "https://po.e57.cn/prod-api/api/sys-api/system/open/api/afterSale/info?warehouseNum=" + coid; - var shipRst = HttpUtils.e57GetResponse(urlAfter, ""); - return shipRst; - } - catch (Exception ex) - { - return "{\"code\":50001,\"msg\":\"" + ex.Message + "\"}"; - } - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXShopManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXShopManage.cs deleted file mode 100644 index d0db0cd..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXShopManage.cs +++ /dev/null @@ -1,1867 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.ErpModel; -using KJD_Web.Model.ShopModel; -using KJD_Web.Model.WxModel; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using MySqlX.XDevAPI; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Reflection; -using System.Security.Cryptography; -using System.Web; -using System.Web.Security; -using System.Web.UI.HtmlControls; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.WXXD -{ - public class WXShopManage - { - public string GetShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - var is_show_expire = RegexUtils.GetStringQuery(ref inputData, "is_show_expire")?.ParseToBool(); - var is_get_erp_shop_id = RegexUtils.GetStringQuery(ref inputData, "is_get_erp_shop_id")?.ParseToBool(); - - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql; - bool isPayUser = false; - if (!isAdmin) - { - sql = "select u.authority,uu.authority as main_authority " + - "FROM wxxd.user u LEFT JOIN wxxd.user uu ON uu.user_name=u.parent_user_name where u.user_name='" - + user_name + "'"; - - var dtRow = mySql.ExecuteDataTableRow(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\",\"data\":null}"; - } - if (dtRow == null) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\",\"data\":null}"; - } - isPayUser = dtRow["authority"].ToString().Contains("充值用户") || dtRow["main_authority"].ToString().Contains("充值用户"); - } - - sql = "SELECT COUNT(*) FROM wxxd.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (isAdmin) - where += " and (s.cookie='' or s.shop_id!='')"; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = " SELECT s.*,se.expire_time‌ " + - " FROM wxxd.shop s" + - " LEFT JOIN wxxd.user_points_shop_expire se ON s.shop_id=se.shop_id" + - " WHERE 1=1"; - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\",\"data\":null}"; - } - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = row["add_product_remaining"].ParseToInt(), - add_product_month = row["add_product_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - openid = row["openid"].ParseToString(), - group_name = row["group_name"].ParseToString(), - add_time = row["add_time"].IsNullOrEmpty() ? DateTime.MinValue : Convert.ToDateTime(row["add_time"]), - //mdy_time = row["mdy_time"].IsNullOrEmpty() ? DateTime.MinValue : Convert.ToDateTime(row["mdy_time"]), - expire_time = row["expire_time"].ParseToInt(), - }; - if (shop.shop_id == "wx2543ce37a0009883") - { - var exp = row["expire_time"].ParseToString(); - } - var expire_datetime = TimeUtils.StampToDateTime(shop.expire_time.Value); - if (isPayUser && expire_datetime < DateTime.Now) - shop.is_point_shop_expire = true; - - shopList.Add(shop); - } - - if (is_get_erp_shop_id == true) - { - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - sql = " SELECT app_key,id,corporate_account_user_id,manage_user_id " + - " FROM erp.o_shop" + - " WHERE app_key in ('" + string.Join ("','", shopList.Select(s=>s.shop_id)) + "');"; - dt = mySql.ExecuteDataTable(sql); - - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\",\"data\":null}"; - } - if (dt != null) - { - foreach (DataRow row in dt.Rows) - { - var erpDbId = row["id"].ParseToNullableLong(); - var erpCorporateUserId = row["corporate_account_user_id"].ParseToNullableLong(); - var erpManageUserId = row["manage_user_id"].ParseToNullableLong(); - var appKey = row["app_key"].ParseToString(); - var shop = shopList.FirstOrDefault(s => s.shop_id == appKey && !s.shop_id.IsNullOrEmpty()); - if (shop != null) - { - shop.erp_corporate_account_user_id = erpCorporateUserId; - shop.erp_manage_user_id = erpManageUserId; - shop.erp_shop_id = erpDbId; - } - } - } - } - - var data = JsonUtils.SerializeObjectToString(shopList); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - /// - /// 获取erp店铺对应账户的余额 - /// - /// - /// - /// - public string GetShopErpMerchant(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var corporate_account_user_id = RegexUtils.GetStringQuery(ref inputData, "corporate_account_user_id")?.Replace("'", "\\'"); - var manage_user_id = RegexUtils.GetStringQuery(ref inputData, "manage_user_id")?.Replace("'", "\\'"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - if (corporate_account_user_id.IsNullOrEmpty() && manage_user_id.IsNullOrEmpty()) - return "{\"code\":500,\"msg\":\"未指定商户\"}"; - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 200; - - var manage_user_ids = new List(); - if (!manage_user_id.IsNullOrEmpty()) - manage_user_ids.Add(manage_user_id); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql; - - if (!string.IsNullOrEmpty(corporate_account_user_id)) - { - sql = "SELECT manage_user_id FROM erp.o_shop_group WHERE corporate_account_user_id = '" + corporate_account_user_id + "';"; - var manage_user_id_tb = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\",\"data\":null}"; - } - if (manage_user_id_tb == null) - { - mySql.Close(); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":[],\"count\":-2,\"seconds\":" + seconds + "}"; - } - manage_user_ids.AddRange(manage_user_id_tb.Rows.Cast().Select(t => t["manage_user_id"].ToString())); - if (manage_user_ids.Count == 0) - { - mySql.Close(); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":[],\"count\":-2,\"seconds\":" + seconds + "}"; - } - } - - sql = "select * FROM erp.o_user_account u where u.user_id in ('" + string.Join("','", manage_user_ids) + "')"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - var dt = mySql.ExecuteDataTable(sql); - - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\",\"data\":null}"; - } - if (dt != null) - { - List erpAccountInfo = new List(); - foreach (DataRow row in dt.Rows) - { - ErpMerchantInfo shop = new ErpMerchantInfo - { - id = Convert.ToInt32(row["id"]), - account_name = row["account_name"].ToString(), - account_status = row["account_status"].ParseToInt(), - account_type = row["account_type"].ParseToInt(), - balance = row["balance"].ParseToDecimal(), - create_by = row["create_by"].ParseToNullableLong(), - create_time = row["create_time"].ParseToString().ParseToDateTime(), - frozen_amount = row["frozen_amount"].ParseToDecimal(), - recharge_amount_total = row["recharge_amount_total"].ParseToDecimal(), - update_by = row["update_by"].ParseToNullableLong(), - update_time = row["update_time"].ParseToString().ParseToDateTime(), - user_id = row["user_id"].ParseToLong(), - withdrawn_amount = row["withdrawn_amount"].ParseToDecimal(), - withdraw_account_image_url = row["withdraw_account_image_url"].ParseToString(), - }; - erpAccountInfo.Add(shop); - } - erpAccountInfo = erpAccountInfo.OrderByDescending(s => s.balance).ToList(); - var count = -1; - var data = JsonUtils.SerializeObjectToString(erpAccountInfo); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string SubSaGetSelectProdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM wxxd.shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and (s.shop_id in (SELECT DISTINCT shop_id From wxxd.product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "') or " + - "s.shop_id in (SELECT DISTINCT shop_id From wxxd.third_product_select WHERE operate_sub_sa_name='" + operate_sub_sa_name + "'))"; - where += " and (s.cookie='' or s.shop_id!='')"; - //if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - // where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.anti_contents,s.shop_id,s.openid,s.shop_account,s.sub_user_name,s.user_name," + - "s.company_name,s.notes,s.group_name,s.login_status,s.login_status2,c.add_product_remaining,c.add_product_month,s.add_time,s.mdy_time," + - "s.add_sub_sa_time,s.operate_sub_sa_name"; - sql += " FROM wxxd.shop s LEFT JOIN wxxd.shop_add_prod_count c ON s.shop_id=c.shop_id WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - add_product_remaining = row["add_product_remaining"].ParseToInt(), - add_product_month = row["add_product_month"].ParseToInt(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - openid = row["openid"].ToString(), - group_name = row["group_name"].ToString(), - }; - shopList.Add(shop); - } - - //sql = "\r\nINSERT INTO wxxd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - //foreach (var shop in shopList) - //{ - // sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + shop.add_product_remaining + "," + shop.add_product_month + "),"; - //} - //sql = sql.TrimEnd(',') + " \r\n"; - //sql += "ON DUPLICATE KEY UPDATE " + - // "shop_account=VALUES(shop_account)," + - // "add_product_remaining=VALUES(add_product_remaining)," + - // "add_product_month=VALUES(add_product_month);"; - //var result = mySql.ExecuteNonQuery(sql); - //mySql.Close(); - - int month = DateTime.Now.Month; - var shopMonthList = shopList.Where(s => s.add_product_month != month); - if (shopMonthList.Count() > 0) - { - int remainCount = 300; - var shopMonthIdList = shopMonthList.Select(s => s.id); - mySql = new MysqlUtils(conn); - string ids = string.Join(",", shopMonthIdList); - sql = ""; - sql += "update wxxd.shop set add_product_remaining=" + remainCount + ", add_product_month=" + month + - " where 1=1 and id in (" + ids + ");"; - - sql += "\r\nINSERT INTO wxxd.shop_add_prod_count(shop_id,shop_account,add_product_remaining,add_product_month) VALUES "; - foreach (var shop in shopMonthList) - { - sql += "\r\n('" + shop.shop_id + "','" + shop.shop_account + "'," + remainCount + "," + month + "),"; - } - sql = sql.TrimEnd(',') + " \r\n"; - sql += "ON DUPLICATE KEY UPDATE " + - "shop_account=VALUES(shop_account)," + - "add_product_remaining=VALUES(add_product_remaining)," + - "add_product_month=VALUES(add_product_month);"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (rst) - { - foreach (var shop in shopMonthList) - { - shop.add_product_month = month; - shop.add_product_remaining = remainCount; - } - } - } - var data = JsonUtils.SerializeObjectToString(shopList); - - - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - - public string UpdateAddProdRemaining(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var remainCount = RegexUtils.GetStringQuery(ref inputData, "remain_count"); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql += "update wxxd.shop_add_prod_count set add_product_remaining=" + remainCount + - " where 1=1 and shop_id in (" + shop_ids + ");"; - - var rst = mySql.ExecuteNonQuery(sql); - var msg = mySql.Message; - mySql.Close(); - - if (rst) - return "{\"code\":200,\"msg\":\"success\"}"; - else - return "{\"code\":50000,\"msg\":\"" + msg + "\"}"; - } - else - { - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } - - //获取一个手机登录号码下的所有店铺(以便有则更新,无则新增) - public string GetOneLoginNameShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,anti_contents,shop_id,openid,shop_account,sub_user_name,user_name from wxxd.shop where user_name='" - + user_name + "' and login_name='" + login_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - openid = row["openid"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - //获取一个手机登录号码下特定ID的店铺 - public string GetOneIdShop(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select id,login_name,login_pass,cookie,cookie2,anti_contents,shop_id,openid,shop_account,sub_user_name,user_name from wxxd.shop where user_name='" - + user_name + "' and login_name='" + login_name + "' and shop_id='" + shop_id + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - openid = row["openid"].ToString(), - }; - shopList.Add(shop); - } - var data = JsonUtils.SerializeObjectToString(shopList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string AddShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = RegexUtils.GetStringQuery(ref inputData, "group_name"); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - if (string.IsNullOrEmpty(shop_id)) - sql = "select exists (select 1 from wxxd.shop where login_name='" + login_name + "' and user_name='" + user_name + "')"; - else - sql = "select exists (select 1 from wxxd.shop where login_name='" + login_name + "' and user_name='" + user_name + - "' and shop_id='" + shop_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist>0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"店铺" + login_name +" " + shop_account + "已存在\"}"; - } - - sql = "insert into wxxd.shop (login_name,login_pass,cookie,cookie2,anti_contents,shop_account,shop_id,sub_user_name,user_name,group_name,notes,add_time,mdy_time) " + - "values ('" + login_name + "','" + login_pass + "','" + cookie + "','" + cookie2 + "','" + anti_contents + "','" + shop_account + "','" + shop_id + "','" + - sub_user_name + "','" + user_name + "','" + group_name + "','" + notes + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string new_shop_id = RegexUtils.GetStringQuery(ref inputData, "new_shop_id"); - string old_shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group_name")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update wxxd.shop set"; - if (login_pass != null) - sql += " login_pass='" + login_pass + "',"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (anti_contents != null) - sql += " anti_contents='" + anti_contents + "',"; - if (new_shop_id != null) - sql += " shop_id='" + new_shop_id + "',"; - if (shop_account != null) - sql += " shop_account='" + shop_account + "',"; - if (sub_user_name != null) - sql += " sub_user_name='" + sub_user_name + "',"; - if (group_name != null) - sql += " group_name='" + group_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and (user_name='" + user_name + "' or sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(old_shop_id)) - sql += " and shop_id='" + old_shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string MdyCookieAndLoginStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - string login_status2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status2")); - string openid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "openid")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update wxxd.shop set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - if (login_status2 != null) - sql += " login_status2='" + login_status2 + "',"; - if (openid != null) - sql += " openid='" + openid + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - - public string DelShop(string inputData, bool isAdmin=false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from wxxd.shop where user_name='" + user_name + "' and login_name='" + login_name + "'"; - if (!string.IsNullOrEmpty(shop_id)) - sql += " and shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - /// - /// 设置店铺的二级超管 - /// - /// - public string SetShopSubSa(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":50001,\"msg\":\"没有用户名\"}"; - } - - var id = RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'"); - var login_name = RegexUtils.GetStringQuery(ref inputData, "shop_login_name")?.Replace("'", "\\'"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(login_name)) - { - return "{\"code\":50002,\"msg\":\"未选择任何待上传\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update wxxd.shop set"; - if (operate_sub_sa_name != null) - sql += " operate_sub_sa_name='" + operate_sub_sa_name + "',"; - sql += " add_sub_sa_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - sql = sql.TrimEnd(','); - if (!string.IsNullOrEmpty(id)) - sql += " where id in (" + id + ")"; - else if (!string.IsNullOrEmpty(login_name)) - sql += " where login_name in ('" + login_name.Replace(",", "','") + "')"; - else - sql += " where 1=2"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXAddMdyShopDefaultAddress(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - // 软件用户名 - string user_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name"))?.Replace("'", "\\'"); - string shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - string province_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "province_name"))?.Replace("'", "\\'"); - string city_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "city_name"))?.Replace("'", "\\'"); - string county_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "county_name"))?.Replace("'", "\\'"); - string detail_info = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "detail_info"))?.Replace("'", "\\'"); - string tel_number = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "tel_number"))?.Replace("'", "\\'"); - // 收件人 - string user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "receiver"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_id)) - return "{\"code\":500,\"msg\":\"缺少用户编号\"}"; - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"缺少店铺编号\"}"; - if (string.IsNullOrEmpty(province_name) || string.IsNullOrEmpty(city_name) || string.IsNullOrEmpty(county_name) || string.IsNullOrEmpty(detail_info)) - return "{\"code\":500,\"msg\":\"省市区或详细地址不完整\"}"; - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":500,\"msg\":\"缺少收件人\"}"; - if (string.IsNullOrEmpty(tel_number)) - return "{\"code\":500,\"msg\":\"缺少收件人电话\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT 1 FROM `wxxd`.`wx_shop_default_address` where user_id='" + user_id + "' AND shop_id='" + shop_id + "'"; - string where = ""; - sql += where; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (exist == 0) - { - sql = " INSERT INTO `wxxd`.`wx_shop_default_address` (user_id,shop_id,province_name,city_name,county_name,detail_info,tel_number,user_name)" + - " VALUES (@user_id,@shop_id,@province_name,@city_name,@county_name,@detail_info,@tel_number,@user_name);"; - } - else - { - sql = "UPDATE `wxxd`.`wx_shop_default_address` SET "; - if (province_name != null) - sql += " province_name=@province_name,"; - if (city_name != null) - sql += " city_name=@city_name,"; - if (county_name != null) - sql += " county_name=@county_name,"; - if (detail_info != null) - sql += " detail_info=@detail_info,"; - if (tel_number != null) - sql += " tel_number=@tel_number,"; - if (user_name != null) - sql += " user_name=@user_name,"; - sql = sql.TrimEnd(','); - sql += " WHERE user_id=@user_id and shop_id=@shop_id;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "province_name", Value = province_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "city_name", Value = city_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "county_name", Value = county_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "detail_info", Value = detail_info, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "tel_number", Value = tel_number, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = user_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_id", Value = user_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_id", Value = shop_id, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetShopDefaultAddressList(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string user_id = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "SELECT count(*) FROM `wxxd`.`wx_shop_default_address` where 1=1"; - string where = ""; - if (user_id != null) - where += " and user_id='" + user_id + "'"; - if (shop_ids != null) - where += " and shop_id IN ('" + shop_ids.Replace(",", "','") + "')"; - sql += where; - sql += ";"; - - if (not_count != "true") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `wxxd`.`wx_shop_default_address` where 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List WXShopDefaultAddressInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WXShopDefaultAddressInfoLst.Add(new WXShopDefaultAddressInfo() - { - id = row["id"].ParseToInt(), - city_name = row["city_name"].ParseToString(), - county_name = row["county_name"].ParseToString(), - detail_info = row["detail_info"].ParseToString(), - province_name = row["province_name"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - tel_number = row["tel_number"].ParseToString(), - user_id = row["user_id"].ParseToString(), - user_name = row["user_name"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WXShopDefaultAddressInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXDelShopDefaultAddress(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string user_id = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - string shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "\\'"); - if (shop_ids.IsNullOrEmpty() || user_id.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"店铺编号不能为空\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - - sql = "Delete FROM `wxxd`.`wx_shop_default_address` where user_id = '" + user_id + "' AND shop_id in ('" + shop_ids.Replace(",", "','") + "')"; - sql += ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - - public string WXAddMdyOrderDecryptAddress(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - // 软件用户名 - string shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - string order_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_id"))?.Replace("'", "\\'"); - string order_address = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "order_address"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(shop_id)) - return "{\"code\":500,\"msg\":\"缺少店铺编号\"}"; - if (string.IsNullOrEmpty(order_id)) - return "{\"code\":500,\"msg\":\"缺少订单编号\"}"; - if (string.IsNullOrEmpty(order_address)) - return "{\"code\":500,\"msg\":\"缺少地址信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT 1 FROM `wxxd`.`order_decrypt_address` where order_id='" + order_id + "' AND shop_id='" + shop_id + "'"; - string where = ""; - sql += where; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (exist == 0) - { - sql = " INSERT INTO `wxxd`.`order_decrypt_address` (shop_id,order_id,order_address)" + - " VALUES (@shop_id,@order_id,@order_address);"; - } - else - { - sql = "UPDATE `wxxd`.`order_decrypt_address` SET "; - if (order_address != null) - sql += " order_address=@order_address,"; - sql = sql.TrimEnd(','); - sql += " WHERE order_id=@order_id and shop_id=@shop_id;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_address", Value = order_address, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "order_id", Value = order_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_id", Value = shop_id, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetOrderDecryptAddress(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string order_ids = RegexUtils.GetStringQuery(ref inputData, "order_ids")?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(order_ids)) - return "{\"code\":500,\"msg\":\"订单编号不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "SELECT count(*) FROM `wxxd`.`order_decrypt_address` where 1=1"; - string where = ""; - if (order_ids != null) - where += " and order_id IN ('" + order_ids.Replace(",", "','") + "')"; - sql += where; - sql += ";"; - - if (not_count != "true") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `wxxd`.`order_decrypt_address` where 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List WXOrderAddressInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WXOrderAddressInfoLst.Add(new WXOrderDecryptAddressInfo() - { - id = row["id"].ParseToInt(), - shop_id = row["shop_id"].ParseToString(), - order_address = row["order_address"].ParseToString(), - order_id = row["order_id"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WXOrderAddressInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string WXAddMdyBuyUrlNotes(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - // 软件用户名 - string spu_code = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_code"))?.Replace("'", "\\'"); - string user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "main_user_name"))?.Replace("'", "\\'"); - string buy_url_notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "buy_url_notes"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(spu_code)) - return "{\"code\":500,\"msg\":\"缺少店铺编号\"}"; - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":500,\"msg\":\"缺少用户名\"}"; - if (string.IsNullOrEmpty(buy_url_notes)) - return "{\"code\":500,\"msg\":\"缺少地址信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT 1 FROM `bxx`.`product_buy_url_notes` where user_name='" + user_name + "' AND spu_code='" + spu_code + "'"; - string where = ""; - sql += where; - var exist = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (exist == 0) - { - sql = " INSERT INTO `bxx`.`product_buy_url_notes` (spu_code,user_name,buy_url_notes)" + - " VALUES (@spu_code,@user_name,@buy_url_notes);"; - } - else - { - sql = "UPDATE `bxx`.`product_buy_url_notes` SET "; - if (buy_url_notes != null) - sql += " buy_url_notes=@buy_url_notes,"; - sql = sql.TrimEnd(','); - sql += " WHERE user_name=@user_name and spu_code=@spu_code;"; - } - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "buy_url_notes", Value = buy_url_notes, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = user_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "spu_code", Value = spu_code, }); - mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":\"\"}"; - } - else - { - return "{\"code\":50003,\"msg\":\"" + mySql.Message + "\",\"data\":\"\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXGetBuyUrlNotes(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var timeCalc = DateTime.Now; - if (!WXUserManage.GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - string spu_codes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "spu_codes"))?.Replace("'", "\\'"); - string user_name = RegexUtils.GetStringQuery(ref inputData, "main_user_name")?.Replace("'", "\\'"); - string not_count = RegexUtils.GetStringQuery(ref inputData, "not_count")?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(spu_codes)) - return "{\"code\":500,\"msg\":\"商品编码不能为空\"}"; - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":500,\"msg\":\"用户名不能为空\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = ""; - var count = -1; - - sql = "SELECT COUNT(*) FROM `bxx`.`product_buy_url_notes` WHERE 1=1"; - string where = ""; - if (spu_codes != null) - where += " and spu_code IN ('" + spu_codes.Replace(",", "','") + "')"; - if (user_name != null) - where += " and user_name='" + user_name + "'"; - sql += where; - sql += ";"; - - if (not_count != "true") - count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT * FROM `bxx`.`product_buy_url_notes` WHERE 1=1"; - sql += where; - sql += " order by id desc limit " + Math.Max(0, page - 1) * page_size + "," + page_size + ";"; - dt = mySql.ExecuteDataTable(sql); - } - mySql.Close(); - - if (dt != null) - { - try - { - List WXBuyUrlNotesInfoLst = new List(); - foreach (DataRow row in dt.Rows) - { - WXBuyUrlNotesInfoLst.Add(new WXBuyUrlNotesInfo() - { - id = row["id"].ParseToInt(), - user_name = row["user_name"].ParseToString(), - spu_code = row["spu_code"].ParseToString(), - buy_url_notes = row["buy_url_notes"].ParseToString(), - add_time = Convert.ToDateTime(row["add_time"]), - mdy_time = Convert.ToDateTime(row["mdy_time"]), - }); - } - JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; - var data = JsonUtils.SerializeObjectToString(WXBuyUrlNotesInfoLst, jsonSetting); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + ",\"seconds\":" + seconds + "}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - else - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\",\"data\":[],\"count\":" + 0 + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string WXAddMdy29WxPddShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group_name")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - if (string.IsNullOrEmpty(shop_id)) - sql = "select exists (select 1 from wxxd.pdd_shop where login_name='" + login_name + "' and user_name='" + user_name + "')"; - else - sql = "select exists (select 1 from wxxd.pdd_shop where login_name='" + login_name + "' and user_name='" + user_name + - "' and shop_id='" + shop_id + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - //return "{\"code\":500,\"msg\":\"店铺" + login_name + " " + shop_account + "已存在\"}"; - return WXMdy29WxPddShop(inputData); - } - - sql = "insert into wxxd.pdd_shop (login_name,login_pass,cookie,cookie2,anti_contents,shop_account,shop_id," + - "mall_id,sub_user_name,user_name,group_name,notes,add_time,mdy_time) " + - "values ('" + login_name + "','" + login_pass + "','" + cookie + "','" + cookie2 + "','" + anti_contents + "','" + shop_account + "','" + shop_id + - "','" + mall_id + "','" + sub_user_name + "','" + user_name + "','" + group_name + "','" + notes + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string WXMdy29WxPddShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - string user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string login_pass = RegexUtils.GetStringQuery(ref inputData, "login_pass"); - string sub_user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_user_name")); - //string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - //string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string anti_contents = RegexUtils.GetStringQuery(ref inputData, "anti_contents"); - string new_shop_id = RegexUtils.GetStringQuery(ref inputData, "new_shop_id"); - string old_shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - string mall_id = RegexUtils.GetStringQuery(ref inputData, "mall_id"); - string shop_account = RegexUtils.GetStringQuery(ref inputData, "shop_account"); - string group_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "group_name")); - string notes = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "notes")); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update wxxd.pdd_shop set"; - if (login_pass != null) - sql += " login_pass='" + login_pass + "',"; - //if (cookie != null) - // sql += " cookie='" + cookie + "',"; - //if (cookie2 != null) - // sql += " cookie2='" + cookie2 + "',"; - if (anti_contents != null) - sql += " anti_contents='" + anti_contents + "',"; - if (new_shop_id != null) - sql += " shop_id='" + new_shop_id + "',"; - if (mall_id != null) - sql += " mall_id='" + mall_id + "',"; - if (shop_account != null) - sql += " shop_account='" + shop_account + "',"; - if (sub_user_name != null) - sql += " sub_user_name='" + sub_user_name + "',"; - if (group_name != null) - sql += " group_name='" + group_name + "',"; - if (notes != null) - sql += " notes='" + notes + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "' and (user_name='" + user_name + "' or sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrEmpty(old_shop_id)) - sql += " and shop_id='" + old_shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string WXMdy29WxPddCookieAndLoginStatus(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - string login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - string cookie = RegexUtils.GetStringQuery(ref inputData, "cookie"); - string cookie2 = RegexUtils.GetStringQuery(ref inputData, "cookie2"); - string login_status = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status")); - string login_status2 = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "login_status2")); - string pddid = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "pddid")); - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrWhiteSpace(login_name)) - { - return "{\"code\":500,\"msg\":\"店铺没有登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update wxxd.pdd_shop set"; - if (cookie != null) - sql += " cookie='" + cookie + "',"; - if (cookie2 != null) - sql += " cookie2='" + cookie2 + "',"; - if (login_status != null) - sql += " login_status='" + login_status + "',"; - if (login_status2 != null) - sql += " login_status2='" + login_status2 + "',"; - if (pddid != null) - sql += " pddid='" + pddid + "',"; - sql = sql.TrimEnd(','); - sql += " where login_name='" + login_name + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string WXDel29WxPddShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var login_name = RegexUtils.GetStringQuery(ref inputData, "login_name"); - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - if (isAdmin) - user_name = RegexUtils.GetStringQuery(ref inputData, "shop_user_name"); - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - if (string.IsNullOrEmpty(user_name)) - { - return "{\"code\":500,\"msg\":\"没有用户名\"}"; - } - if (string.IsNullOrEmpty(login_name)) - { - return "{\"code\":501,\"msg\":\"没有店铺登录名\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from wxxd.pdd_shop where user_name='" + user_name + "' and login_name='" + login_name + "'"; - if (!string.IsNullOrEmpty(shop_id)) - sql += " and shop_id='" + shop_id + "'"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string WXGet29WxPddShop(string inputData, bool isAdmin = false) - { - if (!string.IsNullOrEmpty(inputData)) - { - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var search_id = RegexUtils.GetStringQuery(ref inputData, "search_id"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name"); - var search_login_name = RegexUtils.GetStringQuery(ref inputData, "search_login_name"); - var search_notes = RegexUtils.GetStringQuery(ref inputData, "search_notes"); - var search_name = RegexUtils.GetStringQuery(ref inputData, "search_name"); - var operate_sub_sa_name = RegexUtils.GetStringQuery(ref inputData, "operate_sub_sa_name")?.Replace("'", "\\'"); - - // 特殊处理一下修复客户端店铺导入没有立即登录导致的cookie串的bug - //var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", ""); - var shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids"); - if (shop_ids == "''") - shop_ids = "999999999999999"; - shop_ids = shop_ids?.Replace("'", ""); - if (!string.IsNullOrWhiteSpace(shop_ids)) - { - List shopIdLst = shop_ids.Split(',').ToList(); - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - } - var shop_names = RegexUtils.GetStringQuery(ref inputData, "shop_names"); - if (!string.IsNullOrWhiteSpace(shop_names)) - { - List shopNameLst = shop_names.Split(',').ToList(); - shop_names = "'" + string.Join("','", shopNameLst) + "'"; - } - var shop_notes = RegexUtils.GetStringQuery(ref inputData, "shop_notes"); - if (!string.IsNullOrWhiteSpace(shop_notes)) - { - List shopNotesLst = shop_notes.Split(',').ToList(); - shop_notes = "'" + string.Join("','", shopNotesLst) + "'"; - } - - var page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - var page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(); - - if (page_size == 0) - page_size = 50; - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT COUNT(s.id) FROM wxxd.pdd_shop s WHERE 1=1"; - - //where子句 - string where = ""; - if (isAdmin) - where += " and (s.cookie='' or s.shop_id!='')"; - if (!isAdmin) - where += " and (s.user_name='" + user_name + "' or s.sub_user_name like '%" + user_name + "%')"; - if (!string.IsNullOrWhiteSpace(operate_sub_sa_name)) - where += " and s.operate_sub_sa_name='" + operate_sub_sa_name + "'"; - if (!string.IsNullOrWhiteSpace(search_user_name)) - where += " and s.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_login_name)) - where += " and s.login_name like '%" + search_login_name + "%'"; - if (!string.IsNullOrWhiteSpace(search_notes)) - where += " and s.notes like '%" + search_notes + "%'"; - if (!string.IsNullOrWhiteSpace(search_id)) - where += " and s.shop_id like '%" + search_id + "%'"; - if (!string.IsNullOrWhiteSpace(search_name)) - where += " and s.shop_account like '%" + search_name + "%'"; - if (!string.IsNullOrWhiteSpace(shop_ids)) - where += " and s.shop_id in (" + shop_ids + ")"; - if (!string.IsNullOrWhiteSpace(shop_names)) - where += " and s.shop_account in (" + shop_names + ")"; - if (!string.IsNullOrWhiteSpace(shop_notes)) - where += " and s.notes in (" + shop_notes + ")"; - sql += where; - - var count = mySql.ExecuteRowCount(sql); - - DataTable dt; - if (count == 0) - { - dt = new DataTable(); - } - else - { - sql = "SELECT s.id,s.login_name,s.login_pass,s.cookie,s.cookie2,s.anti_contents,s.pddid,s.mall_id,s.shop_id,s.shop_account,s.sub_user_name," + - "s.user_name,s.company_name,s.notes,s.login_status,s.login_status2," + - "s.add_time,s.mdy_time,s.add_sub_sa_time,s.operate_sub_sa_name"; - //sql += " FROM bxx.shop s WHERE 1=1"; - sql += " FROM wxxd.pdd_shop s WHERE 1=1"; - - sql += where; // where 子句 - - sql += " ORDER BY s.id DESC"; - sql += " LIMIT " + Math.Max(page - 1, 0) * page_size + "," + page_size; - dt = mySql.ExecuteDataTable(sql); - } - - mySql.Close(); - if (dt != null) - { - List shopList = new List(); - foreach (DataRow row in dt.Rows) - { - ShopParam shop = new ShopParam - { - id = Convert.ToInt32(row["id"]), - login_name = row["login_name"].ToString(), - login_pass = row["login_pass"].ToString(), - cookie = row["cookie"].ToString(), - cookie2 = row["cookie2"].ToString(), - anti_contents = row["anti_contents"].ToString(), - shop_id = row["shop_id"].ToString(), - shop_account = row["shop_account"].ToString(), - sub_user_name = row["sub_user_name"].ToString(), - user_name = row["user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - login_status = row["login_status"].ToString(), - login_status2 = row["login_status2"].ToString(), - operate_sub_sa_name = row["operate_sub_sa_name"].ParseToString(), - pddid = row["pddid"].ParseToString(), - mall_id = row["mall_id"].ParseToString(), - }; - shopList.Add(shop); - } - - var data = JsonUtils.SerializeObjectToString(shopList); - //return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"未知错误\"}"; - } - - public string E57GetWxTokens(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var id = (RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'")).ParseToInt(); - if (id == 0) - id = 1; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select tokens,mdy_time from wxxd.wx_token WHERE id=" + id + ";"; - var rst = mySql.ExecuteDataTableRow(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - try - { - string tokens = rst["tokens"].ParseToString(); - var mdyTime = Convert.ToDateTime(rst["mdy_time"]); - if (mdyTime.AddMinutes(60) < DateTime.Now) - { - //var tokenRst = HttpUtils.e57GetResponse("https://po.e57.cn/prod-api/api/sys-api/system/open/api/shop/list?userName=阿杰账户", ""); - var tokenRst = HttpUtils.e57GetResponse("https://po.e57.cn/prod-api/api/sys-api/system/open/api/shop/list?userName=合肥测试一组", ""); - if (!tokenRst.Contains("\"code\":0")) - tokenRst = HttpUtils.e57GetResponse("https://po.e57.cn/prod-api/api/sys-api/system/open/api/shop/list?userName=合肥测试一组", ""); - //https://po.e57.cn/prod-api/api/sys-api/system/open/api/shop/list?userName=pdd用户 - if (!tokenRst.Contains("\"code\":0")) - { - var errMsg = RegexUtils.GetStringJson(ref tokenRst, "msg"); - if (string.IsNullOrEmpty(errMsg)) - errMsg = tokenRst; - return "{\"code\":500,\"msg\":\"" + errMsg + "\"}"; - } - mdyTime = DateTime.Now; - tokens = JsonUtils.SerializeObjectToString(JObject.Parse(tokenRst)["list"]); - - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - sql = "update wxxd.wx_token set tokens='" + tokens + "' where id=1;"; - bool su = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":200,\"tokens\":" + tokens + ",\"mdy_time\":\"" + mdyTime.ToString("yyyy-MM-dd HH:mm:ss") + "\"}"; - } - catch (Exception ex) - { - return "{\"code\":500,\"msg\":\"" + ex.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string E57GetWxShopToken(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - var shop_id = RegexUtils.GetStringQuery(ref inputData, "shop_id")?.Replace("'", "\\'"); - var url = "https://po.e57.cn/prod-api/api/sys-api/system/open/api/shop/info?appId=" + shop_id; - - var tokenRst = HttpUtils.e57GetResponse(url, ""); - if (!tokenRst.Contains("\"code\":0")) - tokenRst = HttpUtils.e57GetResponse(url, ""); - return tokenRst; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXShopRevenueStatisticsManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXShopRevenueStatisticsManage.cs deleted file mode 100644 index 5d8dbef..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXShopRevenueStatisticsManage.cs +++ /dev/null @@ -1,301 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.WxModel; -using KJD_Web.Upload.Prod; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using Mysqlx.Crud; -using NaiBa.Util.Extension; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Newtonsoft.Json.Serialization; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Web; -using System.Web.ApplicationServices; -using System.Web.Security; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.WXXD -{ - public class WXShopRevenueStatisticsManage - { - public WXShopRevenueStatisticsManage() - { - - } - public string GetShopOrderAmountRange(string inputData) - { - Result ret = Result.ArgumentNull(); - if (!string.IsNullOrEmpty(inputData)) - { - try - { - // todo 获取当前用户微信店铺,或指定某一个店铺,某一段时间 - // 获取店铺下时间范围内的所有订单涉及到的金额 - // 直接返回 - if (!WXUserManage.GetSign(inputData)) - throw new ArgumentException("校验失败"); - var timeCalc = DateTime.Now; - - string shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "");//所有店铺信息 - if (string.IsNullOrEmpty(shop_ids)) - throw new ArgumentException("请选择店铺"); - List shopIdLst = shop_ids.Split(',').ToList(); - if (shopIdLst.Count > 0) - shop_ids = "'" + string.Join("','", shopIdLst) + "'"; - - - - string start_Time = RegexUtils.GetStringQuery(ref inputData, "start_time")?.Replace("'", ""); - string end_Time = RegexUtils.GetStringQuery(ref inputData, "end_time")?.Replace("'", ""); - DateTime startTime = DateTime.Now.AddDays(-7); - DateTime endTime = DateTime.Now; - if (!string.IsNullOrEmpty(start_Time)) - startTime = TimeUtils.StampMillisecondsToDateTime(start_Time.ParseToLong()); - if (!string.IsNullOrEmpty(end_Time)) - endTime = TimeUtils.StampMillisecondsToDateTime(end_Time.ParseToLong()); - if (endTime <= startTime) - throw new ArgumentException("结束时间必须大于开始时间"); - if (endTime > startTime.AddMonths(3)) - throw new ArgumentException("时间范围不能超过3个月"); - - int startTimestamp = TimeUtils.DateTimeToTimestampSeconds(startTime); - int endTimestamp = TimeUtils.DateTimeToTimestampSeconds(endTime); - - StringBuilder sb = new StringBuilder(); - sb.Append("SELECT "); - sb.Append("A.shop_name, "); - sb.Append("A.create_time, "); - sb.Append("A.order_id, "); - sb.Append("A.`status`, "); - sb.Append("A.product_price, "); - sb.Append("A.order_price, "); - sb.Append("A.purchase_price, "); - sb.Append("A.freight, "); - sb.Append("A.predict_commission_fee, "); - sb.Append("A.commission_amount, "); - sb.Append("A.discounted_price, "); - sb.Append("A.profit, "); - sb.Append("A.purchase_status, "); - sb.Append("A.out_amount, "); - sb.Append("B.refund_status, "); - sb.Append("c.`status` as refund_status_string, "); - sb.Append("IFNULL(C.refund_amount, 0) AS refund_amount "); - sb.Append("FROM erp.oms_wei_order AS A "); - sb.Append("INNER JOIN erp.`oms_wei_order_item` AS B ON A.`order_id` = B.`order_id` "); - sb.Append("LEFT JOIN ( SELECT order_id,`status`,refund_amount,id FROM erp.`oms_wei_refund` WHERE id IN ( SELECT MAX(id) FROM erp.`oms_wei_refund` GROUP BY order_id)) AS C ON A.order_id = C.order_id "); - sb.Append("WHERE A.create_time BETWEEN " + startTimestamp + " AND " + endTimestamp + " "); - sb.Append("AND A.`status` > 10 "); - sb.Append("AND A.shop_id IN (" + shop_ids + ") "); - sb.Append("ORDER BY A.create_time asc"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - DataTable dt = mySql.ExecuteDataTable(sb.ToString()); - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - throw new Exception(mySql.Message); - - // out_amount 为空或为0的订单,从中转仓订单表(GetTransitOrderTable)补全外采金额 - // external_procurement:0=未查到,1=从 GetTransitOrderTable 查询到 - Dictionary transitOutAmountMap = new Dictionary(); - if (dt != null && dt.Rows.Count > 0) - { - HashSet needLookupOrderIds = new HashSet(); - foreach (DataRow row in dt.Rows) - { - int? rowOutAmount = row["out_amount"].ParseToInt(); - if (rowOutAmount == null || rowOutAmount.Value == 0) - { - string orderId = row["order_id"].ParseToString(); - if (!string.IsNullOrEmpty(orderId)) - needLookupOrderIds.Add(orderId); - } - } - - if (needLookupOrderIds.Count > 0) - { - WXOrderManage wxOrderManage = new WXOrderManage(); - const int chunkSize = 100; - const int transitPageSize = 500; - List needLookupList = needLookupOrderIds.ToList(); - for (int i = 0; i < needLookupList.Count; i += chunkSize) - { - int takeCount = Math.Min(chunkSize, needLookupList.Count - i); - string chunkOrderIds = string.Join(",", needLookupList.GetRange(i, takeCount)); - int pageIndex = 1; - while (true) - { - int count = -1; - var transitList = wxOrderManage.GetTransitOrderTable(pageIndex, transitPageSize, chunkOrderIds, null, null, null, null, "true", out count); - if (transitList == null || transitList.Count == 0) - break; - foreach (var transit in transitList) - { - if (transit != null && !string.IsNullOrEmpty(transit.order_no) && needLookupOrderIds.Contains(transit.order_no)) - { - if (!transitOutAmountMap.ContainsKey(transit.order_no)) - transitOutAmountMap[transit.order_no] = transit.out_amount ?? 0; - } - } - if (transitList.Count < transitPageSize) - break; - pageIndex++; - } - } - } - } - - List orderList = new List(); - if (dt != null) - { - foreach (DataRow row in dt.Rows) - orderList.Add(BuildOrderAmountInfo(row, transitOutAmountMap)); - } - - // 买手号退款金额:退款订单(refund_status>1)且非外采时,从买手售后表补全退款金额 - FillBuyerRefundAmount(orderList, conn); - - ret.Code = 200; - ret.Msg = "success"; - ret.Data = orderList; - } - catch (Exception ex) - { - ret.Code = 500; - ret.Msg = ex.Message; - } - } - return JsonUtils.SerializeObjectToString(ret, new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore - }); - } - - /// - /// 将订单行转换为金额详情:out_amount 为空或0时从中转仓订单表补全,并计算利润 - /// - private WXOrderAmountInfo BuildOrderAmountInfo(DataRow row, Dictionary transitOutAmountMap) - { - string orderId = row["order_id"].ParseToString(); - - int outAmount = row["out_amount"].ParseToInt(); - int externalProcurement = 0; - if (outAmount == 0) - { - int transitAmount; - if (transitOutAmountMap.TryGetValue(orderId, out transitAmount)) - { - externalProcurement = 1; - outAmount = transitAmount; - } - } - - int orderPrice = row["order_price"].ParseToInt(); - int predictCommissionFee = row["predict_commission_fee"].ParseToInt(); - int commissionAmount = row["commission_amount"].ParseToInt(); - int refund_status = row["refund_status"].ParseToInt(); - int refund_amount = row["refund_amount"].ParseToInt(); - // 利润 = 订单金额 - 外采金额 - 平台服务费 - 达人佣金(为空按0处理) - int profit = orderPrice - outAmount - predictCommissionFee - commissionAmount; - if (refund_status > 1 && refund_amount > 0) //退款利润计算 - { - profit = orderPrice - refund_amount; - } - - return new WXOrderAmountInfo - { - shop_name = row["shop_name"].ParseToString(), - create_time = row["create_time"].ParseToInt(), - order_id = orderId, - status = row["status"].ParseToInt(), - product_price = row["product_price"].ParseToInt(), - order_price = orderPrice, - purchase_price = row["purchase_price"].ParseToInt(), - freight = row["freight"].ParseToInt(), - predict_commission_fee = predictCommissionFee, - commission_amount = commissionAmount, - discounted_price = row["discounted_price"].ParseToInt(), - profit = profit, - purchase_status = row["purchase_status"].ParseToInt(), - out_amount = outAmount, - refund_status = row["refund_status"].ParseToInt(), - refund_status_string = row["refund_status_string"].ParseToString(), - refund_amount = row["refund_amount"].ParseToInt(), - external_procurement = externalProcurement - }; - } - - /// - /// 买手号退款金额:退款订单(refund_status>1)且非外采时,从买手售后表(wxxd.order_pdd_buyer_after_sale)查询退款金额(refundAmount)填入 - /// - private void FillBuyerRefundAmount(List orderList, string conn) - { - if (orderList == null || orderList.Count == 0) - return; - - // 退款订单(refund_status>1)且非外采(out_amount、external_procurement都为0)的订单才查询买手号退款金额 - HashSet needLookupOrderIds = new HashSet(); - foreach (WXOrderAmountInfo order in orderList) - { - if (order.refund_status > 1 && order.external_procurement == 1 && order.out_amount > 0) - { - if (!string.IsNullOrEmpty(order.order_id)) - needLookupOrderIds.Add(order.order_id); - } - } - if (needLookupOrderIds.Count == 0) - return; - - Dictionary> buyerRefundAmountMap = new Dictionary>(); - MysqlUtils mySql = new MysqlUtils(conn); - try - { - const int chunkSize = 100; - List needLookupList = needLookupOrderIds.ToList(); - for (int i = 0; i < needLookupList.Count; i += chunkSize) - { - int takeCount = Math.Min(chunkSize, needLookupList.Count - i); - string chunkOrderIds = string.Join("','", needLookupList.GetRange(i, takeCount)); - string sql = "SELECT WX_ORDER_ID,refundAmount,statusText FROM wxxd.order_pdd_buyer_after_sale a " + - "WHERE a.WX_ORDER_ID IN ('" + chunkOrderIds + "') AND a.id = ( SELECT MAX(b.id) FROM wxxd.order_pdd_buyer_after_sale b WHERE b.WX_ORDER_ID = a.WX_ORDER_ID) ORDER BY a.WX_ORDER_ID;"; - DataTable buyerDt = mySql.ExecuteDataTable(sql); - if (buyerDt != null) - { - foreach (DataRow row in buyerDt.Rows) - { - string wxOrderId = row["WX_ORDER_ID"].ParseToString(); - int refundAmount = row["refundAmount"].ParseToInt(); - string statusText = row["statusText"].ParseToString(); - if (!string.IsNullOrEmpty(wxOrderId) && !buyerRefundAmountMap.ContainsKey(wxOrderId)) - buyerRefundAmountMap[wxOrderId] = new Tuple(refundAmount, statusText); - } - } - } - } - finally - { - mySql.Close(); - } - if (!string.IsNullOrEmpty(mySql.Message)) - throw new Exception(mySql.Message); - - foreach (WXOrderAmountInfo order in orderList) - { - Tuple buyerRefundAmount; - if (buyerRefundAmountMap.TryGetValue(order.order_id, out buyerRefundAmount)) - { - order.buyer_refund_amount = buyerRefundAmount.Item1; - order.buyer_refund_status = buyerRefundAmount.Item2; - } - } - } - } -} diff --git a/KJDService/KJD_WebService/BLL/WXXD/WXUserManage.cs b/KJDService/KJD_WebService/BLL/WXXD/WXUserManage.cs deleted file mode 100644 index 9377ab2..0000000 --- a/KJDService/KJD_WebService/BLL/WXXD/WXUserManage.cs +++ /dev/null @@ -1,1734 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Model.WxModel; -using KJD_Web.Utils; -using MySql.Data.MySqlClient; -using Mysqlx.Crud; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Data; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Threading; -using System.Web; -using System.Web.ApplicationServices; -using System.Web.Security; -using System.Web.UI.WebControls; - -namespace KJD_Web.BLL.WXXD -{ - public class WXUserManage - { - public static bool GetSign(string signData, bool isUserLogin = false) - { - if (string.IsNullOrEmpty(signData)) { return false; } - - var time = RegexUtils.GetStringQuery(ref signData, "time").ParseToInt(); - var time1 = RegexUtils.GetStringQuery(ref signData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return false; - - if (!isUserLogin) - { - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref signData, "user_name"))?.ParseToString(); - if (user_name.IsNullOrEmpty()) - { - //return "{\"code\":500,\"msg\":\"请输入用户名\"}"; - return false; - } - } - - return true; - } - - public static DateTime dtAuthorizationExpireTime = DateTime.Now; - public static string e57Authorization = ""; - public string GetE57Authorization(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - if (dtAuthorizationExpireTime <= DateTime.Now || string.IsNullOrEmpty(e57Authorization)) - { - //{"msg":"username required","code":500} - //{"msg":"操作成功","code":200,"token":"eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImIxYTU3OWI2LTM0NWUtNDQwOC05ZjFiLTk0ZTUyOTIxMzlmZCJ9.3qvRXiWeCo_cIOHs6gbCHqDrmfCrH6XDOrMY0BjuUOIu3yVsCwFGVO0hT0A5Wssh_VFPJLouyb1moTcODt0vow"} - var url = "https://po.e57.cn/prod-api/api/sys-api/internal/createTokenForUser"; - var data = "{\"username\":\"admin\"}"; - var html = HttpUtils.e57PostResponse(url, data, ""); - e57Authorization = RegexUtils.GetStringJson(ref html, "token").ParseToString(); - dtAuthorizationExpireTime = DateTime.Now.AddHours(2); - //dtAuthorizationExpireTime = DateTime.Now.AddMinutes(10); - return html.Replace("token", "authorization"); - } - return "{\"code\":200,\"authorization\":\"" + e57Authorization + "\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string CheckUserLogin(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData, true)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var mobile = RegexUtils.GetStringQuery(ref inputData, "mobile")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var sub_soft_type = RegexUtils.GetStringQuery(ref inputData, "sub_soft_type")?.Replace("'", "\\'"); - - - var version = RegexUtils.GetStringQuery(ref inputData, "version").ParseToInt(); - if (sub_soft_type == "order") - { - if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["WxFindOrderLimitVersion"]?.ConnectionString).ParseToInt()) - return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - } - else - { - if (version < (System.Configuration.ConfigurationManager.ConnectionStrings["LimitVersion"]?.ConnectionString).ParseToInt()) - return "{\"code\":1,\"msg\":\"当前版本过于陈旧,请立即升级新版\"}"; - } - - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select u.*,uu.authority as main_authority,uu.oem_id as main_oem_id,uu.postage_per_order as main_postage_per_order," + - "uu.refund_postage_per_order as main_refund_postage_per_order,uu.gift_oem_amount_per_order as main_gift_oem_amount_per_order " + - "FROM wxxd.user u LEFT JOIN wxxd.user uu ON uu.user_name=u.parent_user_name where u.user_name='" - + mobile + "' and u.password='" + password + "'"; - - var dt = mySql.ExecuteDataTable(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (dt == null) - dt = new DataTable(); - - foreach (DataRow row in dt.Rows) - { - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["user_name"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - company_name = row["company_name"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - parent_user_name = row["parent_user_name"].ToString(), - oem_id = row["oem_id"].ToString(), - points = row.Table.Columns.Contains("points") ? row["points"].ParseToInt() : 0, - shop_points_per_month = row.Table.Columns.Contains("shop_points_per_month") ? row["shop_points_per_month"].ParseToInt() : 30, - balance = row.Table.Columns.Contains("balance") ? row["balance"].ParseToDecimal() : 0, - recharge_amount_total = row.Table.Columns.Contains("recharge_amount_total") ? row["recharge_amount_total"].ParseToDecimal() : 0, - postage_per_order = row.Table.Columns.Contains("postage_per_order") ? row["postage_per_order"].ParseToNullableDecimal() : null, - refund_postage_per_order = row.Table.Columns.Contains("refund_postage_per_order") ? row["refund_postage_per_order"].ParseToNullableDecimal() : null, - gift_oem_amount_per_order = row.Table.Columns.Contains("gift_oem_amount_per_order") ? row["gift_oem_amount_per_order"].ParseToNullableDecimal() : null, - }; - var main_authority = row.Table.Columns.Contains("main_authority") ? row["main_authority"].ParseToString() : ""; - var main_oem_id = row.Table.Columns.Contains("main_oem_id") ? row["main_oem_id"].ParseToString() : ""; - var main_postage_per_order = row.Table.Columns.Contains("main_postage_per_order") ? row["main_postage_per_order"].ParseToDecimal() : 0m; - var main_refund_postage_per_order = row.Table.Columns.Contains("main_refund_postage_per_order") ? row["main_refund_postage_per_order"].ParseToDecimal() : 0m; - var main_gift_oem_amount_per_order = row.Table.Columns.Contains("main_gift_oem_amount_per_order") ? row["main_gift_oem_amount_per_order"].ParseToDecimal() : 0m; - - // 填写子账号的父账号权限 - if (user.group_id != "3") - { - user.parent_authority = main_authority; - - // 子账号积分用户权限跟随主账号 - var userAuthLst = user.authority.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); - if (!main_authority.Contains("积分用户")) - { - userAuthLst.Remove("积分用户"); - user.authority = string.Join(",", userAuthLst); - } - else if (!user.authority.Contains("积分用户")) - { - user.authority = (user.authority + "," + "积分用户").Trim(','); - } - - // 子账号贴牌编号跟随主账号 - user.oem_id = main_oem_id; - - // 子账号每单扣费金额跟随主账号 - user.postage_per_order = Math.Max(2.2m, main_postage_per_order); - user.refund_postage_per_order = Math.Max(2.5m, main_refund_postage_per_order); - user.gift_oem_amount_per_order = Math.Max(0m, main_gift_oem_amount_per_order); - } - if (string.IsNullOrEmpty(user.company_name)) - { - user.company_name = "-"; - } - - if (!user.oem_id.IsNullOrEmpty()) - { - sql = "select * from wxxd.oem where oem_id='" + user.oem_id + "'"; - var dtr = mySql.ExecuteDataTableRow(sql); - if (!string.IsNullOrEmpty(mySql.Message) || dtr == null) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"获取用户信息失败,请重试\"}"; - } - user.oem_name = dtr["oem_name"].ParseToString(); - user.is_oem_owner = dtr["oem_owner"].ParseToString() == user.user_name; - } - - var data = JsonUtils.SerializeObjectToString(user); - - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - mySql.Close(); - return "{\"code\":1,\"msg\":\"用户名或密码错误\"}"; - - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 添加子账号 - /// - /// - /// - public string AddSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "company"))?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from wxxd.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "INSERT into wxxd.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,parent_user_name," + - "authority,forbidden_page,add_time,mdy_time) " + - "VALUES ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "','" + parent_user_name + "','" + authority + "','" + forbidden_page + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\""+ mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"子账户创建成功!\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var password = RegexUtils.GetStringQuery(ref inputData, "password"); - var group = RegexUtils.GetStringQuery(ref inputData, "group"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select * from wxxd.user where parent_user_name='" - + user_name + "'"; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - }; - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"c\":\"" + EncrypUtil.Encryption(r2) + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateSubUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var parent_user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "sub_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "sub_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from wxxd.user where parent_user_name='" - // + user_name + "'"; - sql = "update wxxd.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (authority != null) - sql += " authority='" + authority + "',"; - if (forbidden_page != null) - sql += " forbidden_page='" + forbidden_page + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string DelUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name"); - var id = RegexUtils.GetStringQuery(ref inputData, "id"); - int r2 = 0; - int.TryParse(RegexUtils.GetStringQuery(ref inputData, "r2"), out r2); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "delete from wxxd.user where id='" - + id + "' and balance=0"; - - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - if (rst > 0) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - if (rst == 0) - { - return "{\"code\":500,\"msg\":\"删除失败,请检查账户拍单余额是否还有剩余\"}"; - } - else - return "{\"code\":500,\"msg\":\"删除失败,请稍后重试\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetAllUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var search = RegexUtils.GetStringQuery(ref inputData, "search")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var user_name_in = RegexUtils.GetStringQuery(ref inputData, "user_name_in")?.Replace("'", "\\'"); - var search_user_name = RegexUtils.GetStringQuery(ref inputData, "search_user_name")?.Replace("'", "\\'"); - var search_nick_name = RegexUtils.GetStringQuery(ref inputData, "search_nick_name")?.Replace("'", "\\'"); - var search_company_name = RegexUtils.GetStringQuery(ref inputData, "search_company_name")?.Replace("'", "\\'"); - var search_authoritys_and = RegexUtils.GetStringQuery(ref inputData, "search_authoritys_and")?.Replace("'", "\\'"); - var search_authoritys_or = RegexUtils.GetStringQuery(ref inputData, "search_authoritys_or")?.Replace("'", "\\'"); - var oem_id = RegexUtils.GetStringQuery(ref inputData, "oem_id")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count")?.Replace("'", "\\'"); - - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(5000); - - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - //string sql = "select * from wxxd.user where group_id=3"; - string sql = "select COUNT(*) " + - " FROM wxxd.user u " + - " LEFT JOIN wxxd.user uu ON uu.user_name=u.parent_user_name " + - " LEFT JOIN wxxd.oem o ON uu.oem_id=o.oem_id or u.oem_id=o.oem_id " + - " WHERE 1=1"; - - - string where = ""; - if (!string.IsNullOrEmpty(group_id)) - where += " AND u.group_id=" + group_id; - if (!string.IsNullOrEmpty(sa_level)) - where += " AND u.sa_level=" + sa_level; - if (!string.IsNullOrEmpty(user_name_in)) - where += " AND u.user_name in ('" + user_name_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(search_user_name)) - where += " AND u.user_name like '%" + search_user_name + "%'"; - if (!string.IsNullOrEmpty(search_nick_name)) - where += " AND u.nick_name like '%" + search_nick_name + "%'"; - if (!string.IsNullOrEmpty(search_company_name)) - where += " AND u.company_name like '%" + search_company_name + "%'"; - if (!string.IsNullOrEmpty(search_authoritys_and)) - { - var search_authority_list = search_authoritys_and.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToList(); - foreach (var auth in search_authority_list) - { - where += " AND u.authority like '%" + auth + "%'"; - } - } - if (!string.IsNullOrEmpty(search_authoritys_or)) - { - where += " AND ("; - var search_authority_list = search_authoritys_or.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToList(); - int index = 0; - foreach (var auth in search_authority_list) - { - if (index == 0) - where += " u.authority like '%" + auth + "%'"; - else - where += " or u.authority like '%" + auth + "%'"; - index++; - } - where += " )"; - } - - if (!string.IsNullOrEmpty(search)) - where += " AND (u.user_name like '%" + search + - "%' or u.nick_name like '%" + search + - "%' or u.company_name like '%" + search + "%')"; - - if (!string.IsNullOrEmpty(oem_id)) - where += " AND (u.oem_id='" + oem_id + "' or uu.oem_id='" + oem_id + "')"; - - sql += where; - - int count = -1; - if (is_not_count != "true") - { - count = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (count == 0) - { - return "{\"code\":200,\"msg\":\"success\",\"data\":[]}"; - } - } - - sql = "select u.*,uu.authority as main_authority,uu.oem_id as main_oem_id," + - " uu.postage_per_order as main_postage_per_order," + - " uu.refund_postage_per_order as main_refund_postage_per_order," + - " uu.gift_oem_amount_per_order as main_gift_oem_amount_per_order,o.oem_name " + - " FROM wxxd.user u " + - " LEFT JOIN wxxd.user uu ON uu.user_name=u.parent_user_name " + - " LEFT JOIN wxxd.oem o ON uu.oem_id=o.oem_id or u.oem_id=o.oem_id " + - " WHERE 1=1"; - sql += where; - - sql += " ORDER BY u.id desc"; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dt != null) - { - List userList = new List(); - foreach (DataRow row in dt.Rows) - { - UserLoginResultParam user = new UserLoginResultParam - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ToString(), - nick_name = row["nick_name"].ToString(), - mobile = row["mobile"].ToString(), - password = row["password"].ToString(), - group_id = row["group_id"].ToString(), - card_id = row["card_id"].ToString(), - parent_user_name = row["parent_user_name"].ToString(), - oem_id = row["oem_id"].ToString(), - oem_name = row["oem_name"].ToString(), - company_name = row["company_name"].ToString(), - notes = row["notes"].ToString(), - is_sa = row.Table.Columns.Contains("is_sa") ? row["is_sa"].ParseToInt() : 0, - sa_level = row.Table.Columns.Contains("sa_level") ? row["sa_level"].ParseToInt() : 0, - authority = row.Table.Columns.Contains("authority") ? row["authority"].ParseToString() : "", - forbidden_page = row.Table.Columns.Contains("forbidden_page") ? row["forbidden_page"].ParseToString() : "", - points = row.Table.Columns.Contains("points") ? row["points"].ParseToInt() : 0, - shop_points_per_month = row.Table.Columns.Contains("shop_points_per_month") ? row["shop_points_per_month"].ParseToInt() : 30, - balance = row.Table.Columns.Contains("balance") ? row["balance"].ParseToDecimal() : 0, - recharge_amount_total = row.Table.Columns.Contains("recharge_amount_total") ? row["recharge_amount_total"].ParseToDecimal() : 0, - postage_per_order = row.Table.Columns.Contains("postage_per_order") ? row["postage_per_order"].ParseToNullableDecimal() : null, - refund_postage_per_order = row.Table.Columns.Contains("refund_postage_per_order") ? row["refund_postage_per_order"].ParseToNullableDecimal() : null, - gift_oem_amount_per_order = row.Table.Columns.Contains("gift_oem_amount_per_order") ? row["gift_oem_amount_per_order"].ParseToNullableDecimal() : null, - }; - var main_authority = row.Table.Columns.Contains("main_authority") ? row["main_authority"].ParseToString() : ""; - var main_oem_id = row.Table.Columns.Contains("main_oem_id") ? row["main_oem_id"].ParseToString() : ""; - var main_postage_per_order = row.Table.Columns.Contains("main_postage_per_order") ? row["main_postage_per_order"].ParseToDecimal() : 0m; - var main_refund_postage_per_order = row.Table.Columns.Contains("main_refund_postage_per_order") ? row["main_refund_postage_per_order"].ParseToDecimal() : 0m; - var main_gift_oem_amount_per_order = row.Table.Columns.Contains("main_gift_oem_amount_per_order") ? row["main_gift_oem_amount_per_order"].ParseToDecimal() : 0m; - - if (user.group_id != "3") - { - // 子账号积分用户权限跟随主账号 - var userAuthLst = user.authority.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); - if (!main_authority.Contains("积分用户")) - { - userAuthLst.Remove("积分用户"); - user.authority = string.Join(",", userAuthLst); - } - else if (!user.authority.Contains("积分用户")) - { - user.authority = (user.authority + "," + "积分用户").Trim(','); - } - - // 子账号贴牌编号跟随主账号 - user.oem_id = main_oem_id; - - // 子账号每单扣费金额跟随主账号 - user.postage_per_order = Math.Max(2.2m, main_postage_per_order); - user.refund_postage_per_order = Math.Max(2.5m, main_refund_postage_per_order); - user.gift_oem_amount_per_order = Math.Max(0m, main_gift_oem_amount_per_order); - } - if (string.IsNullOrEmpty(user.mobile)) - { - user.mobile = row["user_name"].ToString(); - } - userList.Add(user); - } - var data = JsonUtils.SerializeObjectToString(userList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":" + count + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); ; - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - var oem_id = RegexUtils.GetStringQuery(ref inputData, "oem_id")?.Replace("'", "\\'"); - - var shop_points_per_month = RegexUtils.GetStringQuery(ref inputData, "shop_points_per_month")?.Replace("'", "\\'"); - if (shop_points_per_month.ParseToInt() <= 30) // 充值用户月积分消耗点数,最小30 - shop_points_per_month = "30"; - var postage_per_order = RegexUtils.GetStringQuery(ref inputData, "postage_per_order").ParseToDecimal(); - if (postage_per_order.ParseToDecimal() <= 2.2m) // 每单费用 - postage_per_order = 2.2m; - var refund_postage_per_order = RegexUtils.GetStringQuery(ref inputData, "refund_postage_per_order").ParseToDecimal().ParseToDecimal(); - if (refund_postage_per_order.ParseToDecimal() <= 2.5m) // 每单费用 - refund_postage_per_order = 2.5m; - var gift_oem_amount_per_order = RegexUtils.GetStringQuery(ref inputData, "gift_oem_amount_per_order").ParseToDecimal(); - if (gift_oem_amount_per_order.ParseToDecimal() < 0m) // 每单费用 - gift_oem_amount_per_order = 0; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - sql = "select exists (select 1 from wxxd.user where user_name='" + user_name + "')"; - var exist = mySql.ExecuteFirstInt(sql); - if (exist > 0) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"用户名已存在\"}"; - } - - sql = "insert into wxxd.user (nick_name,user_name,mobile,password,card_id,group_id,company_name,notes,sa_level,authority," + - "forbidden_page,shop_points_per_month,postage_per_order,refund_postage_per_order,gift_oem_amount_per_order,oem_id,add_time,mdy_time) " + - "values ('" + nick_name + "','" + user_name + "','" + mobile + "','" + password + "','" + card_id + "','" + - group_id + "','" + company_name + "','" + notes + "'," + sa_level + ",'" + authority + "','" + forbidden_page + "'," + - shop_points_per_month + "," + postage_per_order + "," + refund_postage_per_order + "," + gift_oem_amount_per_order + ",@oem_id,'" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + - DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "');"; - - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "oem_id", Value = oem_id, }); - - var rst = mySql.ExecuteNonQuery(sql, paramLst.ToArray()); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateUser(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var id = RegexUtils.GetStringQuery(ref inputData, "id")?.Replace("'", "\\'"); - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var mobile = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_mobile"))?.Replace("'", "\\'"); - var company_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_company"))?.Replace("'", "\\'"); - var password = RegexUtils.GetStringQuery(ref inputData, "add_password")?.Replace("'", "\\'"); - var group_id = RegexUtils.GetStringQuery(ref inputData, "group_id")?.Replace("'", "\\'"); - var card_id = RegexUtils.GetStringQuery(ref inputData, "card_id")?.Replace("'", "\\'"); - var notes = RegexUtils.GetStringQuery(ref inputData, "notes")?.Replace("'", "\\'"); - var sa_level = RegexUtils.GetStringQuery(ref inputData, "sa_level")?.Replace("'", "\\'"); - var authority = RegexUtils.GetStringQuery(ref inputData, "authority")?.Replace("'", "\\'"); - var forbidden_page = RegexUtils.GetStringQuery(ref inputData, "forbidden_page")?.Replace("'", "\\'"); - var shop_points_per_month = RegexUtils.GetStringQuery(ref inputData, "shop_points_per_month")?.Replace("'", "\\'"); - var postage_per_order = RegexUtils.GetStringQuery(ref inputData, "postage_per_order")?.Replace("'", "\\'"); - var refund_postage_per_order = RegexUtils.GetStringQuery(ref inputData, "refund_postage_per_order")?.Replace("'", "\\'"); - var gift_oem_amount_per_order = RegexUtils.GetStringQuery(ref inputData, "gift_oem_amount_per_order")?.Replace("'", "\\'"); - var oem_id = RegexUtils.GetStringQuery(ref inputData, "oem_id")?.Replace("'", "\\'"); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = ""; - //sql = "select * from wxxd.user where parent_user_name='" - // + user_name + "'"; - sql = "update wxxd.user set"; - if (!string.IsNullOrEmpty(nick_name)) - sql += " nick_name='" + nick_name + "',"; - if (!string.IsNullOrEmpty(user_name)) - sql += " user_name='" + user_name + "',"; - if (!string.IsNullOrEmpty(mobile)) - sql += " mobile='" + mobile + "',"; - if (!string.IsNullOrEmpty(company_name)) - sql += " company_name='" + company_name + "',"; - if (!string.IsNullOrEmpty(password)) - sql += " password='" + password + "',"; - if (!string.IsNullOrEmpty(group_id)) - sql += " group_id=" + group_id + ","; - if (!string.IsNullOrEmpty(card_id)) - sql += " card_id='" + card_id + "',"; - if (!string.IsNullOrEmpty(notes)) - sql += " notes='" + notes + "',"; - if (!string.IsNullOrEmpty(sa_level)) - sql += " sa_level=" + sa_level + ","; - if (authority != null) - sql += " authority='" + authority + "',"; - if (forbidden_page != null) - sql += " forbidden_page='" + forbidden_page + "',"; - if (shop_points_per_month != null) - sql += " shop_points_per_month=" + shop_points_per_month + ","; - if (postage_per_order != null) - sql += " postage_per_order=" + postage_per_order + ","; - if (refund_postage_per_order != null) - sql += " refund_postage_per_order=" + refund_postage_per_order + ","; - if (gift_oem_amount_per_order != null) - sql += " gift_oem_amount_per_order=" + gift_oem_amount_per_order + ","; - if (oem_id != null) - sql += " oem_id='" + oem_id + "',"; - sql = sql.TrimEnd(','); - sql += " where id=" + id + ""; - - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - if (!mySql.Message.IsNullOrEmpty()) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - return "{\"code\":200,\"msg\":\"success\",\"affected_rows\":" + rst + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string AddUserTopUpMsg(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var nick_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_nick_name"))?.Replace("'", "\\'"); - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "add_user_name"))?.Replace("'", "\\'"); - var msg = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "msg"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(user_name)) - return "{\"code\":501,\"msg\":\"请输入用户名\"}"; - if (string.IsNullOrEmpty(msg)) - return "{\"code\":501,\"msg\":\"请输入充值备注信息\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql; - sql = "INSERT INTO wxxd.user_points_top_up_msg (nick_name,user_name,msg) " + - "VALUES ('" + nick_name + "','" + user_name + "','" + msg + "');"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string UpdateUserTopUpMsg(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "id"))?.Replace("'", "\\'"); - var op_rst = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "op_rst"))?.Replace("'", "\\'"); - if (string.IsNullOrEmpty(id)) - return "{\"code\":501,\"msg\":\"请输入要修改的记录\"}"; - if (string.IsNullOrEmpty(op_rst)) - return "{\"code\":501,\"msg\":\"请输入操作结果\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql; - sql = "UPDATE wxxd.user_points_top_up_msg SET op_rst='" + op_rst + "' WHERE id='" + id + "';"; - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (!rst) - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - else - return "{\"code\":200,\"msg\":\"success\"}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 增加或减少用户积分 - /// - /// - /// - public string UpdateUserPoints(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "update_user_name"))?.Replace("'", "\\'"); - var user_nick = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "update_user_nick"))?.Replace("'", "\\'"); - var delta_points = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delta_points")).ParseToInt(); - var option_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "option_type"))?.Replace("'", "\\'"); - var operator_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "operator_type"))?.Replace("'", "\\'"); - var operator_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "operator_name"))?.Replace("'", "\\'"); - var operator_nick = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "operator_nick"))?.Replace("'", "\\'"); - var shop_id = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_id"))?.Replace("'", "\\'"); - var shop_account = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "shop_account"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name) || string.IsNullOrEmpty(user_nick)) - { - return "{\"code\":500,\"msg\":\"操作对象不能为空\"}"; - } - if (delta_points <= 0 && option_type == "续费") - { - return "{\"code\":500,\"msg\":\"续费金额错误,需大于0\"}"; - } - if (delta_points == 0) - { - return "{\"code\":500,\"msg\":\"操作金额错误,不能等于0\"}"; - } - if (string.IsNullOrEmpty(option_type) || string.IsNullOrEmpty(operator_type) || string.IsNullOrEmpty(operator_name)) - { - return "{\"code\":500,\"msg\":\"操作或操作者信息错误\"}"; - } - if (option_type != "充值" && option_type != "续费" && option_type != "转移") - { - return "{\"code\":500,\"msg\":\"操作类型错误\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - string sql; - decimal userPoints; - decimal userPointsNew; - decimal userTotalPoints; - decimal userTotalPointsNew; - decimal operatorPoints; - decimal operatorPointsNew; - decimal shopPointsPerMonth = 30; - - // 账户之间的转移单独写 - if (option_type == "转移") - { - // 转移查找自己账户及对方账户确定余额足够 - sql = "SELECT points FROM `wxxd`.`user` WHERE user_name='" + operator_name + "'"; - operatorPoints = mySql.ExecuteFirstDecimal(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"查询错误:" + mySql.Message + "\"}"; - } - if (operatorPoints < delta_points) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"余额不足\"}"; - } - sql = "SELECT points FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - userPoints = mySql.ExecuteFirstDecimal(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"查询错误:" + mySql.Message + "\"}"; - } - if (userPoints < -delta_points) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"对方账户余额不足\"}"; - } - sql = "SELECT recharge_points_total FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - userTotalPoints = mySql.ExecuteFirstDecimal(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"查询错误:" + mySql.Message + "\"}"; - } - - userPointsNew = userPoints + delta_points; - userTotalPointsNew = userTotalPoints + delta_points; - sql = " UPDATE `wxxd`.`user` SET points=" + userPointsNew + ",recharge_points_total=" + userTotalPointsNew; - sql += " WHERE user_name='" + user_name + "' AND points=" + userPoints + ";"; - var toPointsRst = mySql.ExecuteAffectedRows(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (toPointsRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"收款账户已发生改变,请刷新账户后重新操作\"}"; - } - - operatorPointsNew = operatorPoints - delta_points; - sql = " UPDATE `wxxd`.`user` SET points=" + operatorPointsNew; - sql += " WHERE user_name='" + operator_name + "' AND points=" + operatorPoints + ";"; - var fromPointsRst = mySql.ExecuteAffectedRows(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (fromPointsRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"付款账户已发生改变,请刷新账户后重新操作\"}"; - } - - // 转入 - sql = " INSERT INTO wxxd.user_points_record" + - " (user_name,user_nick,delta_points,new_points,option_type,operator_type,operator_name,shop_id,shop_account,counterparty_account_name)"; - sql += " VALUES" + - " (@user_name,@user_nick,@delta_points,@new_points,@option_type,@operator_type,@operator_name,@shop_id,@shop_account,@counterparty_account_name);"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = user_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_nick", Value = user_nick, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "delta_points", Value = delta_points, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "new_points", Value = userPointsNew, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "option_type", Value = "转入" }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "operator_type", Value = operator_type, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "operator_name", Value = operator_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_account", Value = shop_account, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "counterparty_account_name", Value = operator_name, }); - var addOptionRst = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (addOptionRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"新增操作记录失败,请稍候重试\"}"; - } - - // 转出 - sql = " INSERT INTO wxxd.user_points_record" + - "(user_name,user_nick,delta_points,new_points,option_type,operator_type,operator_name,shop_id,shop_account,counterparty_account_name)"; - sql += " VALUES" + - "(@user_name,@user_nick,@delta_points,@new_points,@option_type,@operator_type,@operator_name,@shop_id,@shop_account,@counterparty_account_name);"; - paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = operator_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_nick", Value = operator_nick, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "delta_points", Value = delta_points, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "new_points", Value = operatorPointsNew, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "option_type", Value = "转出" }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "operator_type", Value = operator_type, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "operator_name", Value = operator_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_account", Value = shop_account, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "counterparty_account_name", Value = user_name, }); - addOptionRst = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (addOptionRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"新增操作记录失败,请稍候重试\"}"; - } - - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"newOperatorPoints\":" + operatorPointsNew + ",\"newUserPoints\":" + userPointsNew + "}"; - } - else - { - #region 计算是否余额不足 - sql = "SELECT points FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - userPoints = mySql.ExecuteFirstDecimal(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - sql = "SELECT recharge_points_total FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - userTotalPoints = mySql.ExecuteFirstDecimal(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"查询错误:" + mySql.Message + "\"}"; - } - - if (option_type == "续费") - { - sql = "SELECT shop_points_per_month FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - shopPointsPerMonth = mySql.ExecuteFirstDecimal(sql); // 店铺续费一个月的点数,默认30,可以设置为其他值 - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - shopPointsPerMonth = Math.Max(30, shopPointsPerMonth); - - if (delta_points <= 0 || delta_points.ParseToInt().ParseToDecimal() != delta_points || delta_points.ParseToInt() % shopPointsPerMonth.ParseToInt() > 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"续费点数必须是" + shopPointsPerMonth.ParseToInt() + "的整倍数\"}"; - } - else if (userPoints < delta_points) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"余额不足\"}"; - } - } - #endregion - - sql = "UPDATE `wxxd`.`user` SET"; - if (option_type == "充值") - { - userPointsNew = userPoints + delta_points; - sql += " points=" + userPointsNew + ","; - userTotalPointsNew = userTotalPoints + delta_points; - sql += " recharge_points_total=" + userTotalPointsNew + ","; - } - else - { - userPointsNew = userPoints - delta_points; - sql += " points=" + userPointsNew + ","; - } - sql = sql.TrimEnd(','); - sql += " WHERE user_name='" + user_name + "' AND points=" + userPoints + ";"; - var changePointsRst = mySql.ExecuteAffectedRows(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (changePointsRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"账户已发生改变,请刷新账户后重新操作\"}"; - } - - sql = " INSERT INTO wxxd.user_points_record(user_name,user_nick,delta_points,new_points,option_type,operator_type,operator_name,shop_id,shop_account)"; - sql += " VALUES(@user_name,@user_nick,@delta_points,@new_points,@option_type,@operator_type,@operator_name,@shop_id,@shop_account);"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = user_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_nick", Value = user_nick, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "delta_points", Value = delta_points, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "new_points", Value = userPointsNew, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "option_type", Value = option_type, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "operator_type", Value = operator_type, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "operator_name", Value = operator_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_id", Value = shop_id, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "shop_account", Value = shop_account, }); - var addOptionRst = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (addOptionRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"新增操作记录失败,请稍候重试\"}"; - } - - int expireTime = 0; - int newExpireTime = 0; - if (option_type == "续费") - { - sql = "SELECT expire_time‌ FROM `wxxd`.`user_points_shop_expire` WHERE shop_id='" + shop_id + "';"; - expireTime = mySql.ExecuteFirstInt(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - - if (expireTime == 0) - { - newExpireTime = TimeUtils.DateTimeToTimestampSeconds(DateTime.Now.AddMonths(delta_points.ParseToInt() / shopPointsPerMonth.ParseToInt())); - sql = " INSERT INTO `wxxd`.`user_points_shop_expire` (shop_id,expire_time‌)" + - " VALUES ('" + shop_id + "'," + newExpireTime + ");"; - } - else - { - DateTime expireDateTime = TimeUtils.StampToDateTime(expireTime); - if (expireDateTime < DateTime.Now) - expireDateTime = DateTime.Now.AddMonths(delta_points.ParseToInt() / shopPointsPerMonth.ParseToInt()); - else - expireDateTime = expireDateTime.AddMonths(delta_points.ParseToInt() / shopPointsPerMonth.ParseToInt()); - newExpireTime = TimeUtils.DateTimeToTimestampSeconds(expireDateTime); - - sql = "UPDATE `wxxd`.`user_points_shop_expire` set expire_time‌=" + newExpireTime + " WHERE shop_id='" + shop_id + "' AND expire_time‌=" + expireTime; - } - var renewalRst = mySql.ExecuteAffectedRows(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (renewalRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"店铺已发生改变,请刷新店铺后重新操作\"}"; - } - } - - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"newExpireTime\":" + newExpireTime + ",\"newUserPoints\":" + userPointsNew + "}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - public string GetUserPoints(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var option_type_in = RegexUtils.GetStringQuery(ref inputData, "option_type_in")?.Replace("'", "\\'"); - var user_name_in = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name_in"))?.Replace("'", "\\'"); - var shop_id_in = RegexUtils.GetStringQuery(ref inputData, "shop_id_in")?.Replace("'", "\\'"); - var shop_account_in = RegexUtils.GetStringQuery(ref inputData, "shop_account_in")?.Replace("'", "\\'"); - var create_time_begin = RegexUtils.GetStringQuery(ref inputData, "create_time_begin")?.Replace("'", "\\'"); - var create_time_end = RegexUtils.GetStringQuery(ref inputData, "create_time_end")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT count(*) " + - " FROM wxxd.user_points_record up " + - " WHERE 1=1"; - string where = ""; - if (!string.IsNullOrEmpty(option_type_in)) - where += " AND up.option_type in ('" + option_type_in + "')"; - if (!string.IsNullOrEmpty(user_name_in)) - where += " AND up.user_name in ('" + user_name_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(shop_id_in)) - where += " AND up.shop_id in ('" + shop_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(shop_account_in)) - where += " AND up.shop_account in ('" + shop_account_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(create_time_begin)) - where += " AND up.add_time >= '" + create_time_begin + "'"; - if (!string.IsNullOrEmpty(create_time_end)) - where += " AND up.add_time <= '" + create_time_end + "'"; - - sql += where; - - int count = -1; - if (is_not_count != "true") - { - count = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - - sql = "SELECT * " + - " FROM wxxd.user_points_record up " + - " WHERE 1=1"; - sql += where; - sql += " ORDER BY up.add_time desc "; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dt != null) - { - List userPaymentList = new List(); - foreach (DataRow row in dt.Rows) - { - user_points_record_info userPayment = new user_points_record_info - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ParseToString(), - delta_points = row["delta_points"].ParseToInt(), - new_points = row["new_points"].ParseToNullableInt(), - operator_name = row["operator_name"].ParseToString(), - operator_type = row["operator_type"].ParseToString(), - option_type = row["option_type"].ParseToString(), - shop_account = row["shop_account"].ParseToString(), - shop_id = row["shop_id"].ParseToString(), - user_nick = row["user_nick"].ParseToString(), - remark = row["remark"].ParseToString(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - counterparty_account_name = row["counterparty_account_name"].ParseToString(), - }; - userPaymentList.Add(userPayment); - } - var data = JsonUtils.SerializeObjectToString(userPaymentList); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":\"" + count + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - - /// - /// 增加或减少用户积分 - /// - /// - /// - public string UpdateUserBalance(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var user_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "update_user_name"))?.Replace("'", "\\'"); - var user_nick = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "update_user_nick"))?.Replace("'", "\\'"); - var delta_balance = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "delta_balance")).ParseToDecimal(); - var option_type = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "option_type"))?.Replace("'", "\\'"); - var operator_name = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "operator_name"))?.Replace("'", "\\'"); - - if (string.IsNullOrEmpty(user_name) || string.IsNullOrEmpty(user_nick)) - { - return "{\"code\":500,\"msg\":\"操作对象不能为空\"}"; - } - if (delta_balance <= 0 && option_type == "消费") - { - return "{\"code\":500,\"msg\":\"消费金额错误,需大于0\"}"; - } - if (delta_balance == 0) - { - return "{\"code\":500,\"msg\":\"操作金额错误,不能等于0\"}"; - } - if (string.IsNullOrEmpty(option_type) || string.IsNullOrEmpty(operator_name)) - { - return "{\"code\":500,\"msg\":\"操作或操作者信息错误\"}"; - } - if (option_type != "充值" && option_type != "消费") - { - return "{\"code\":500,\"msg\":\"操作类型错误\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn, true); - string sql; - decimal balance = 0; - decimal recharge_amount_total = 0; - decimal newBalance = 0; - decimal newRechargeAmountTotal = 0; - - #region 计算是否余额不足 - sql = "SELECT balance,recharge_amount_total FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - var dataRow = mySql.ExecuteDataTableRow(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - if (dataRow == null) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"用户不存在\"}"; - } - try - { - balance = dataRow["balance"].ParseToDecimal(); - newBalance = balance; - recharge_amount_total = dataRow["recharge_amount_total"].ParseToDecimal(); - newRechargeAmountTotal = recharge_amount_total; - } - catch - { - } - //if (option_type == "消费") - //{ - // sql = "SELECT shop_points_per_month FROM `wxxd`.`user` WHERE user_name='" + user_name + "'"; - // shopPointsPerMonth = mySql.ExecuteFirstInt(sql); // 店铺消费一个月的点数,默认30,可以设置为其他值 - // if (!string.IsNullOrEmpty(mySql.Message)) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - // } - // shopPointsPerMonth = Math.Max(30, shopPointsPerMonth); - - // if (delta_balance <= 0 || delta_balance % shopPointsPerMonth > 0) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":501,\"msg\":\"消费点数必须是" + shopPointsPerMonth + "的整倍数\"}"; - // } - // else if (balance < delta_balance) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":500,\"msg\":\"余额不足\"}"; - // } - //} - #endregion - - sql = "UPDATE `wxxd`.`user` SET"; - if (option_type == "充值") - { - newBalance = balance + delta_balance; - sql += " balance=" + newBalance + ","; - newRechargeAmountTotal = recharge_amount_total + delta_balance; - sql += " recharge_amount_total=" + newRechargeAmountTotal + ","; - } - else - { - newBalance = balance - delta_balance.ParseToInt(); - sql += " balance=" + newBalance + ","; - } - sql = sql.TrimEnd(','); - sql += " WHERE user_name='" + user_name + "' AND balance=" + balance + " AND recharge_amount_total=" + recharge_amount_total + ";"; - var changePointsRst = mySql.ExecuteAffectedRows(sql); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (changePointsRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + option_type + "失败,账户余额已发生改变,请刷新账户后重新操作\"}"; - } - - sql = " INSERT INTO wxxd.user_payment_record(type,amount,balance,user_name,create_by,create_time,update_by,update_time,counterparty_account_name)"; - sql += " VALUES(@type,@amount,@balance,@user_name,@create_by,@create_time,@update_by,@update_time,@counterparty_account_name);"; - List paramLst = new List(); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "user_name", Value = user_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "amount", Value = delta_balance, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Decimal, ParameterName = "balance", Value = newBalance, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.Int32, ParameterName = "type", Value = option_type == "充值" ? 1 : 0, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "create_by", Value = operator_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.DateTime, ParameterName = "create_time", Value = DateTime.Now, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "update_by", Value = operator_name, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.DateTime, ParameterName = "update_time", Value = DateTime.Now, }); - paramLst.Add(new MySqlParameter() { DbType = DbType.String, ParameterName = "counterparty_account_name", Value = operator_name, }); - var addOptionRst = mySql.ExecuteAffectedRows(sql, paramLst.ToArray()); - if (!string.IsNullOrEmpty(mySql.Message)) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - } - else if (addOptionRst <= 0) - { - mySql.RollBack(); - mySql.Close(); - return "{\"code\":500,\"msg\":\"新增操作记录失败,请稍候重试\"}"; - } - - //int expireTime = 0; - //int newExpireTime = 0; - //if (option_type == "消费") - //{ - // sql = "SELECT expire_time‌ FROM `wxxd`.`user_points_shop_expire` WHERE shop_id='" + shop_id + "';"; - // expireTime = mySql.ExecuteFirstInt(sql); - // if (!string.IsNullOrEmpty(mySql.Message)) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - // } - - // if (expireTime == 0) - // { - // newExpireTime = TimeUtils.DateTimeToTimestampSeconds(DateTime.Now.AddMonths(delta_balance.ParseToInt() / shopPointsPerMonth)); - // sql = " INSERT INTO `wxxd`.`user_points_shop_expire` (shop_id,expire_time‌)" + - // " VALUES ('" + shop_id + "'," + newExpireTime + ");"; - // } - // else - // { - // DateTime expireDateTime = TimeUtils.StampToDateTime(expireTime); - // if (expireDateTime < DateTime.Now) - // expireDateTime = DateTime.Now.AddMonths(delta_balance.ParseToInt() / shopPointsPerMonth); - // else - // expireDateTime = expireDateTime.AddMonths(delta_balance.ParseToInt() / shopPointsPerMonth); - // newExpireTime = TimeUtils.DateTimeToTimestampSeconds(expireDateTime); - - // sql = "UPDATE `wxxd`.`user_points_shop_expire` set expire_time‌=" + newExpireTime + " WHERE shop_id='" + shop_id + "' AND expire_time‌=" + expireTime; - // } - // var renewalRst = mySql.ExecuteAffectedRows(sql); - // if (!string.IsNullOrEmpty(mySql.Message)) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":501,\"msg\":\"" + mySql.Message + "\"}"; - // } - // else if (renewalRst <= 0) - // { - // mySql.RollBack(); - // mySql.Close(); - // return "{\"code\":500,\"msg\":\"店铺已发生改变,请刷新店铺后重新操作\"}"; - // } - //} - - mySql.Commit(); - mySql.Close(); - return "{\"code\":200,\"msg\":\"success\",\"newRechargeAmountTotal\":" + newRechargeAmountTotal + ",\"newBalance\":" + newBalance + "}"; - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetUserBalance(string inputData) - { - // ALTER TABLE books ALTER INDEX idx_name INVISIBLE; --隐藏 - // ALTER TABLE books ALTER INDEX idx_name VISIBLE; --恢复 - // 双字匹配的全文索引 ALTER TABLE `user_payment_record` ADD FULLTEXT INDEX `remark_fulltext` (`remark`) WITH parser ngram - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var timeCalc = DateTime.Now; - - var type_in = RegexUtils.GetStringQuery(ref inputData, "type_in")?.Replace("'", "\\'"); - var user_name_in = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "user_name_in"))?.Replace("'", "\\'"); - var order_id_in = RegexUtils.GetStringQuery(ref inputData, "order_id_in")?.Replace("'", "\\'"); - var after_sale_id_in = RegexUtils.GetStringQuery(ref inputData, "after_sale_id_in")?.Replace("'", "\\'"); - var create_time_begin = RegexUtils.GetStringQuery(ref inputData, "create_time_begin")?.Replace("'", "\\'"); - var create_time_end = RegexUtils.GetStringQuery(ref inputData, "create_time_end")?.Replace("'", "\\'"); - var is_not_count = RegexUtils.GetStringQuery(ref inputData, "is_not_count")?.Replace("'", "\\'"); - var remark_fulltext = RegexUtils.GetStringQuery(ref inputData, "remark_fulltext")?.Replace("'", "\\'"); - - int page = RegexUtils.GetStringQuery(ref inputData, "page").ParseToInt(); - int page_size = RegexUtils.GetStringQuery(ref inputData, "page_size").ParseToInt(200); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - string sql = "SELECT count(*) " + - " FROM wxxd.user_payment_record up " + - " WHERE 1=1"; - string where = ""; - if (!string.IsNullOrEmpty(type_in)) - where += " AND up.type in (" + type_in + ")"; - if (!string.IsNullOrEmpty(user_name_in)) - where += " AND up.user_name in ('" + user_name_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(order_id_in)) - where += " AND up.order_id in ('" + order_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(after_sale_id_in)) - where += " AND up.after_sale_id in ('" + after_sale_id_in.Replace(",", "','") + "')"; - if (!string.IsNullOrEmpty(create_time_begin)) - where += " AND up.create_time >= '" + create_time_begin + "'"; - if (!string.IsNullOrEmpty(create_time_end)) - where += " AND up.create_time <= '" + create_time_end + "'"; - //if (!string.IsNullOrEmpty(remark_fulltext)) - //{ - // List fullTextSearchStr = new List(); - // var remark_fulltextLst = remark_fulltext.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); - // foreach (var t in remark_fulltextLst) - // { - // var t1 = t; - // while (t1.Length >= 12) - // { - // fullTextSearchStr.Add(t1.Substring(0, 10)); - // t1 = t1.Substring(10); - // } - // fullTextSearchStr.Add(t1); - // } - // where += " AND MATCH(remark) AGAINST('" + string.Join(" +", fullTextSearchStr) + "' IN BOOLEAN MODE) "; - // //where += " AND MATCH(remark) AGAINST('" + string.Join(" +", fullTextSearchStr) + "' IN NATURAL LANGUAGE MODE) "; - // //where += " AND MATCH(remark) AGAINST('" + remark_fulltext.Replace(",", " ") + "' IN NATURAL LANGUAGE MODE) "; - //} - if (!string.IsNullOrEmpty(remark_fulltext)) - { - where += " AND MATCH(remark) AGAINST('" + remark_fulltext + "' IN BOOLEAN MODE)"; - } - - sql += where; - - int count = -1; - if (is_not_count != "true") - { - count = mySql.ExecuteFirstInt(sql); - if (!mySql.Message.IsNullOrEmpty()) - { - mySql.Close(); - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - - sql = "SELECT * " + - " FROM wxxd.user_payment_record up " + - " WHERE 1=1"; - sql += where; - sql += " ORDER BY up.create_time desc "; - sql += " limit " + Math.Max(page - 1, 0) * page_size + "," + page_size; - - var dt = mySql.ExecuteDataTable(sql); - mySql.Close(); - if (dt != null) - { - List userPaymentList = new List(); - foreach (DataRow row in dt.Rows) - { - user_payment_record_info userPayment = new user_payment_record_info - { - id = Convert.ToInt32(row["id"]), - user_name = row["user_name"].ParseToString(), - after_sale_id = row["after_sale_id"].ParseToLong(), - amount = row["amount"].ParseToDecimal(), - counterparty_account_name = row["counterparty_account_name"].ParseToString(), - create_by = row["create_by"].ParseToString(), - balance = row["balance"].ParseToDecimal(), - create_time = row["create_time"].ParseToString().ParseToDateTime(), - is_deleted = row["is_deleted"].ParseToInt(), - order_id = row["order_id"].ParseToString(), - platform_code = row["platform_code"].ParseToString(), - remark = row["remark"].ParseToString(), - type = row["type"].ParseToInt(), - update_by = row["update_by"].ParseToString(), - update_time = row["update_time"].ParseToString().ParseToDateTime(), - }; - userPaymentList.Add(userPayment); - } - var data = JsonUtils.SerializeObjectToString(userPaymentList); - var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000"); - return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + ",\"count\":\"" + count + "\",\"seconds\":\"" + seconds + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string ChangePassword(string inputData) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var userName = RegexUtils.GetStringJson(ref inputData, "user_name")?.Replace("'", "\\'"); - var password = RegexUtils.GetStringJson(ref inputData, "password")?.Replace("'", "\\'"); - var newPassword = RegexUtils.GetStringJson(ref inputData, "new_password")?.Replace("'", "\\'"); - - if (string.IsNullOrWhiteSpace(userName) || string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(newPassword)) - { - return "{\"code\":500,\"msg\":\"输入不能为空\"}"; - } - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select user_id,password from pepdtp.user where user_id='" - + userName + "' and password='" + password + "'"; - - var dw = mySql.ExecuteDataTableRow(sql); - if (dw != null) - { - UserLoginResultParam user = new UserLoginResultParam - { - user_name = dw["user_id"].ToString(), - password = dw["password"].ToString(), - }; - sql = "update pepdtp.user set password = '" + newPassword + "' where user_id='" + userName + "'"; - var result = mySql.ExecuteNonQuery(sql); - mySql.Close(); - - if (result) - { - return "{\"code\":0,\"msg\":\"密码修改成功!\"}"; - } - else - return "{\"code\":19999,\"msg\":\"密码修改失败!请稍后再试。\"}"; - } - else - { - mySql.Close(); - return "{\"code\":1,\"msg\":\"原密码错误。\"}"; - } - } - - public string UpdateWxSaleAssistantCookie(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = (RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'")).ParseToInt(); - if (id == 0) - id = 1; - var cookie = HtmlUtils.UrlDecodeUtf8(RegexUtils.GetStringQuery(ref inputData, "cookie"))?.Replace("'", "\\'"); - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "update wxxd.wx_sale_assistant_user set cookie='" + cookie + "' WHERE id=" + id + ";"; - - var rst = mySql.ExecuteNonQuery(sql); - mySql.Close(); - if (rst && string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"msg\":\"success\"}"; - } - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - public string GetWxSaleAssistantCookie(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - var id = (RegexUtils.GetStringQuery(ref inputData, "db_id")?.Replace("'", "\\'")).ParseToInt(); - if (id == 0) - id = 1; - var time = RegexUtils.GetStringQuery(ref inputData, "time").ParseToInt(); - string time1 = RegexUtils.GetStringQuery(ref inputData, "code"); - if (time1 != EncrypUtil.Encryption(time)) - return "{\"code\":50000,\"msg\":\"校验失败\"}"; - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "select cookie from wxxd.wx_sale_assistant_user WHERE id=" + id + ";"; - - var rst = mySql.ExecuteDataTableRow(sql); - mySql.Close(); - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200,\"cookie\":" + rst["cookie"] + "}"; - } - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 添加充值二维码 - /// - /// - /// - public string UpdateTopUpQrcode(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var qrcode_base64 = (RegexUtils.GetStringQuery(ref inputData, "qrcode_base64")?.Replace("'", "\\'")); - var agent_code = (RegexUtils.GetStringQuery(ref inputData, "agent_code")?.Replace("'", "\\'")).ParseToString(); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - //string sql = "UPDATE wxxd.user_top_up_qrcode SET qrcode_base64='" + qrcode_base64 + "' WHERE agent_code=" + agent_code + ";"; - string sql = "INSERT INTO wxxd.user_top_up_qrcode (agent_code,qrcode_base64) VALUES('" + agent_code + "','" + qrcode_base64 + "')" + - "ON DUPLICATE KEY UPDATE agent_code=VALUES(agent_code),qrcode_base64=VALUES(qrcode_base64);"; - - var rst = mySql.ExecuteAffectedRows(sql); - mySql.Close(); - - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - - /// - /// 获取充值二维码 - /// - /// - /// - public string GetTopUpQrcode(string inputData) - { - if (!string.IsNullOrEmpty(inputData)) - { - if (!GetSign(inputData)) - return "{\"code\":999,\"msg\":\"校验失败\"}"; - - var agent_code = (RegexUtils.GetStringQuery(ref inputData, "agent_code")?.Replace("'", "\\'")).ParseToString(); - - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - string sql = "SELECT qrcode_base64 from wxxd.user_top_up_qrcode WHERE agent_code = '" + agent_code + "';"; - - var qrcode_base64 = mySql.ExecuteFirst(sql); - mySql.Close(); - - if (string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":200, \"qrcode_base64\":\"" + qrcode_base64 + "\"}"; - } - if (!string.IsNullOrEmpty(mySql.Message)) - { - return "{\"code\":500,\"msg\":\"" + mySql.Message + "\"}"; - } - } - return "{\"code\":19999,\"msg\":\"输入为空\"}"; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/BXXPriceService.asmx b/KJDService/KJD_WebService/BXXPriceService.asmx deleted file mode 100644 index 90f5330..0000000 --- a/KJDService/KJD_WebService/BXXPriceService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="BXXPriceService.asmx.cs" Class="KJD_Web.BXXPriceService" %> diff --git a/KJDService/KJD_WebService/BXXPriceService.asmx.cs b/KJDService/KJD_WebService/BXXPriceService.asmx.cs deleted file mode 100644 index 6ae84fa..0000000 --- a/KJDService/KJD_WebService/BXXPriceService.asmx.cs +++ /dev/null @@ -1,198 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// PriceService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class BXXPriceService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_price_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().GetPriceList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().AddPrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().DelDbPrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_db_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().MdyDBPrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_purchase_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().MdyPurchasePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_purchase_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().AddPurchasePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_purchase_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().DelPurchasePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_purchase_price_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().GetPurchasePriceList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //AddExtCodePrice - [WebMethod] - public void add_ext_code_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().AddExtCodePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_ext_code_price_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().GetExtCodePriceList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_ext_code_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().DelDbExtCodePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_db_ext_code_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXPriceManage().MdyDBExtCodePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/BXXProductService.asmx b/KJDService/KJD_WebService/BXXProductService.asmx deleted file mode 100644 index 3fbe178..0000000 --- a/KJDService/KJD_WebService/BXXProductService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="BXXProductService.asmx.cs" Class="KJD_Web.BXXProductService" %> diff --git a/KJDService/KJD_WebService/BXXProductService.asmx.cs b/KJDService/KJD_WebService/BXXProductService.asmx.cs deleted file mode 100644 index afaae19..0000000 --- a/KJDService/KJD_WebService/BXXProductService.asmx.cs +++ /dev/null @@ -1,581 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ProductService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class BXXProductService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_product_spu_id_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductSpuIdLst(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //AddProdDownSku - [WebMethod] - public void add_prod_down_sku() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddProdDownSku(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_prod_down_sku_lst_by_sku_codes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProdDownSkuLstBySkuCodes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_detail_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_list_random() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductListRandom(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_prod_wx_complate() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddProdWXComplate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_prod_wx_complate_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProdWXComplateList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sku_replace_img_list_random() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetSkuReplaceImgListRandom(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().MdyProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_violation_prod() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().MdyViolationProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_best_sale_prod() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().MdyBestSaleProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().DelDbProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //[WebMethod] - //public void mdy_product() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // //result = new BXXProductManage().MdyShop(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - //[WebMethod] - //public void mdy_product_notes() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // result = new BXXProductManage().MdyProductNotes(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - [WebMethod] - public void mdy_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().MdyDBProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_groups() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductGroups(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_product_groups() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddProductGroup(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_product_groups() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().DelProductGroup(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_product_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddProductNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_product_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().DelProductNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_pdd_product_cates() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductMainCates(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_product_cates() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProductCates(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_sku_img_replace() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddSkuImgReplace(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_sku_img_replace() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().MdySkuImgReplace(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_sku_img_replace_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetSkuImgReplaceList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sku_img_replace_detail_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetSkuImgReplaceList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - //AddSkuImg - [WebMethod] - public void add_sku_img() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddSkuImg(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_wx_tokens() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().E57GetWxTokens(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_api_get_all_cate() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().WxApiGetWxAllCate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_api_category_classify() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().WxApiCategoryClassify(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_api_upload_image() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().WxApiUploadImage(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //AddJSTSku - [WebMethod] - public void add_jst_sku() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddJSTSku(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void mdy_jst_sku() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().MdyJSTSku(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_jst_sku_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetJSTSkuList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_random_company_product_config() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().SetRandomCompanyProductConfig(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_random_company_product_config() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetRandomCompanyProductConfig(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 拼多多关联新增 - /// - [WebMethod] - public void add_relation() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddRelation(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - /// - /// 拼多多关联获取 - /// - [WebMethod] - public void get_relation() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetRelation(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_mdy_jst_product_ban() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().AddMdyJstProductBan(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_jst_product_coid_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetJstProductCoidList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_jst_product_ban_platform_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetJstProductBanPlatformList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/BXXProductThirdService.asmx b/KJDService/KJD_WebService/BXXProductThirdService.asmx deleted file mode 100644 index cb44d7d..0000000 --- a/KJDService/KJD_WebService/BXXProductThirdService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="BXXProductThirdService.asmx.cs" Class="KJD_Web.BXXProductThirdService" %> diff --git a/KJDService/KJD_WebService/BXXProductThirdService.asmx.cs b/KJDService/KJD_WebService/BXXProductThirdService.asmx.cs deleted file mode 100644 index d2e2985..0000000 --- a/KJDService/KJD_WebService/BXXProductThirdService.asmx.cs +++ /dev/null @@ -1,221 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ProductThirdService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class BXXProductThirdService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().GetProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_detail_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().GetProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().AddProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().DelDbProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //[WebMethod] - //public void mdy_product() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // //result = new ProductThridManage().MdyShop(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - //[WebMethod] - //public void mdy_product_notes() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // result = new BXXProductThirdManage().MdyProductNotes(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - [WebMethod] - public void mdy_product_category() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().MdyProductCategory(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_user_select_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().AddUserSelectProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_user_select_product_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().MdyUserSelectProductStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_user_select_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().GetUserSelectProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void admin_get_user_select_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().GetUserSelectProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_select_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().DelSelectProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_select_product_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().SetSelectProductSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_product_select_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductThirdManage().MdyProductSelectNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/BXXShopService.asmx b/KJDService/KJD_WebService/BXXShopService.asmx deleted file mode 100644 index d7c76f1..0000000 --- a/KJDService/KJD_WebService/BXXShopService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="BXXShopService.asmx.cs" Class="KJD_Web.BXXShopService" %> diff --git a/KJDService/KJD_WebService/BXXShopService.asmx.cs b/KJDService/KJD_WebService/BXXShopService.asmx.cs deleted file mode 100644 index 3473b16..0000000 --- a/KJDService/KJD_WebService/BXXShopService.asmx.cs +++ /dev/null @@ -1,335 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ShopService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class BXXShopService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_pdd_client_info() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().GetPddClientInfo(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_shop_client_info() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().GetShopClientInfo(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - //WXAddMdyShopClientInfo - [WebMethod] - public void add_mdy_shop_client_info() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().AddMdyShopClientInfo(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().GetShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_one_login_name_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().GetOneLoginNameShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().AddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().DelShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().MdyShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_anti_content() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().MdyAntiContent(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop_cookie_and_login_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().MdyCookieAndLoginStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().GetShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void sub_sa_get_select_prod_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().SubSaGetSelectProdShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_add_prod_remaining() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().UpdateAddProdRemaining(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().MdyShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().AddShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().DelShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_shop_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().SetShopSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void e57_get_wx_tokens() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().E57GetWxTokens(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void e57_get_pdd_shop_token() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().E57GetPddShopToken(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_weidian_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().AddWeiDianShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void mdy_weidian_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().MdyWeiDianShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void mdy_weidian_shop_cookie() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().MdyWeiDianShopCookie(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_weidian_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().GetWeiDianShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void del_weidian_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXShopManage().DelWeiDianShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/BXXUserService.asmx b/KJDService/KJD_WebService/BXXUserService.asmx deleted file mode 100644 index d5fb7c2..0000000 --- a/KJDService/KJD_WebService/BXXUserService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="BXXUserService.asmx.cs" Class="KJD_Web.BXXUserService" %> diff --git a/KJDService/KJD_WebService/BXXUserService.asmx.cs b/KJDService/KJD_WebService/BXXUserService.asmx.cs deleted file mode 100644 index 1eeee06..0000000 --- a/KJDService/KJD_WebService/BXXUserService.asmx.cs +++ /dev/null @@ -1,258 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UserService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class BXXUserService : System.Web.Services.WebService - { - [WebMethod] - public string hello_world() - { - return "Hello World"; - } - - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void user_login() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().CheckUserLogin(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_package_sign() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().GetPackageSign(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void change_password() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().ChangePassword(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().GetSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().UpdateSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().AddSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void delete_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().DelUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_all_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().GetAllUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().UpdateUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().AddUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_scm121_cookie() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().UpdateScm121Cookie(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_scm121_cookie() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().GetScm121Cookie(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //AddBuyer - [WebMethod] - public void add_buyer() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().AddBuyer(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void mdy_buyer() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().MdyBuyer(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void mdy_buyer_cookie() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().MdyBuyerCookie(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_buyer() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().GetBuyer(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void del_buyer() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXUserManage().DelBuyer(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/DYShopService.asmx b/KJDService/KJD_WebService/DYShopService.asmx deleted file mode 100644 index bd9fe38..0000000 --- a/KJDService/KJD_WebService/DYShopService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="DYShopService.asmx.cs" Class="KJD_Web.DYShopService" %> diff --git a/KJDService/KJD_WebService/DYShopService.asmx.cs b/KJDService/KJD_WebService/DYShopService.asmx.cs deleted file mode 100644 index a604f33..0000000 --- a/KJDService/KJD_WebService/DYShopService.asmx.cs +++ /dev/null @@ -1,208 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.DYXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ShopService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class DYShopService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().GetShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_one_login_name_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().GetOneLoginNameShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().AddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().DelShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().MdyShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop_cookie_and_login_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().MdyCookieAndLoginStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().GetShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void sub_sa_get_select_prod_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().SubSaGetSelectProdShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_add_prod_remaining() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().UpdateAddProdRemaining(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().MdyShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().AddShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().DelShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_shop_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYShopManage().SetShopSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/DYUserService.asmx b/KJDService/KJD_WebService/DYUserService.asmx deleted file mode 100644 index 500c319..0000000 --- a/KJDService/KJD_WebService/DYUserService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="DYUserService.asmx.cs" Class="KJD_Web.DYUserService" %> diff --git a/KJDService/KJD_WebService/DYUserService.asmx.cs b/KJDService/KJD_WebService/DYUserService.asmx.cs deleted file mode 100644 index 091034a..0000000 --- a/KJDService/KJD_WebService/DYUserService.asmx.cs +++ /dev/null @@ -1,178 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.DYXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UserService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class DYUserService : System.Web.Services.WebService - { - [WebMethod] - public string hello_world() - { - return "Hello World"; - } - - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void user_login() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().CheckUserLogin(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_package_sign() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().GetPackageSign(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void change_password() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().ChangePassword(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().GetSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().UpdateSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().AddSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void delete_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().DelUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_all_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().GetAllUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().UpdateUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new DYUserManage().AddUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/Global.asax b/KJDService/KJD_WebService/Global.asax deleted file mode 100644 index ae7cf35..0000000 --- a/KJDService/KJD_WebService/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="KJD_Web.Global" Language="C#" %> diff --git a/KJDService/KJD_WebService/Global.asax.cs b/KJDService/KJD_WebService/Global.asax.cs deleted file mode 100644 index 8bfb466..0000000 --- a/KJDService/KJD_WebService/Global.asax.cs +++ /dev/null @@ -1,199 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Security; -using System.Web.SessionState; -using KJD_Web.Utils; - -namespace KJD_Web -{ - public class Global : System.Web.HttpApplication - { - - protected void Application_Start(object sender, EventArgs e) - { - - } - - protected void Session_Start(object sender, EventArgs e) - { - - } - - protected void Application_BeginRequest(object sender, EventArgs e) - { - string hPath = Request.Url.LocalPath.ToString(); - if (!hPath.Contains(".asmx") && hPath.Contains("/user/")) - { - hPath = hPath.Replace("/user/", "/UserService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/shop/")) - { - hPath = hPath.Replace("/shop/", "/ShopService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/update/")) - { - hPath = hPath.Replace("/update/", "/UpdateService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/order/")) - { - hPath = hPath.Replace("/order/", "/OrderService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/product/")) - { - hPath = hPath.Replace("/product/", "/ProductService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/product_third/")) - { - hPath = hPath.Replace("/product_third/", "/ProductThirdService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/price/")) - { - hPath = hPath.Replace("/price/", "/PriceService.asmx/"); - Context.RewritePath(hPath); - } - - - if (!hPath.Contains(".asmx") && hPath.Contains("/bxx_user/")) - { - hPath = hPath.Replace("/bxx_user/", "/BXXUserService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/bxx_shop/")) - { - hPath = hPath.Replace("/bxx_shop/", "/BXXShopService.asmx/"); - Context.RewritePath(hPath); - } - //else if (!hPath.Contains(".asmx") && hPath.Contains("/update/")) - //{ - // hPath = hPath.Replace("/update/", "/UpdateService.asmx/"); - // Context.RewritePath(hPath); - //} - else if (!hPath.Contains(".asmx") && hPath.Contains("/bxx_product/")) - { - hPath = hPath.Replace("/bxx_product/", "/BXXProductService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/bxx_product_third/")) - { - hPath = hPath.Replace("/bxx_product_third/", "/BXXProductThirdService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/bxx_price/")) - { - hPath = hPath.Replace("/bxx_price/", "/BXXPriceService.asmx/"); - Context.RewritePath(hPath); - } - - - if (!hPath.Contains(".asmx") && hPath.Contains("/dyxd_user/")) - { - hPath = hPath.Replace("/dyxd_user/", "/DYUserService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/dyxd_shop/")) - { - hPath = hPath.Replace("/dyxd_shop/", "/DYShopService.asmx/"); - Context.RewritePath(hPath); - } - //else if (!hPath.Contains(".asmx") && hPath.Contains("/update/")) - //{ - // hPath = hPath.Replace("/update/", "/UpdateService.asmx/"); - // Context.RewritePath(hPath); - //} - else if (!hPath.Contains(".asmx") && hPath.Contains("/dyxd_product/")) - { - hPath = hPath.Replace("/dyxd_product/", "/DYProductService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/dyxd_product_third/")) - { - hPath = hPath.Replace("/dyxd_product_third/", "/DYProductThirdService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/dyxd_price/")) - { - hPath = hPath.Replace("/dyxd_price/", "/DYPriceService.asmx/"); - Context.RewritePath(hPath); - } - - - - if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_user/")) - { - hPath = hPath.Replace("/wxxd_user/", "/WXUserService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_shop/")) - { - hPath = hPath.Replace("/wxxd_shop/", "/WXShopService.asmx/"); - Context.RewritePath(hPath); - } - //else if (!hPath.Contains(".asmx") && hPath.Contains("/update/")) - //{ - // hPath = hPath.Replace("/update/", "/UpdateService.asmx/"); - // Context.RewritePath(hPath); - //} - else if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_product/")) - { - hPath = hPath.Replace("/wxxd_product/", "/WXProductService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_product_third/")) - { - hPath = hPath.Replace("/wxxd_product_third/", "/WXProductThirdService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_price/")) - { - hPath = hPath.Replace("/wxxd_price/", "/WXPriceService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_order/")) - { - hPath = hPath.Replace("/wxxd_order/", "/WXOrderService.asmx/"); - Context.RewritePath(hPath); - } - else if (!hPath.Contains(".asmx") && hPath.Contains("/wxxd_shop_revenue_statistics/")) - { - hPath = hPath.Replace("/wxxd_shop_revenue_statistics/", "/WXShopRevenueStatistics.asmx/"); - Context.RewritePath(hPath); - } - // 请求录制:捕获请求链接与请求内容,用于迁移后的回放校验 - //try { ApiRequestLogger.BeginRequest(Context); } catch { } - } - - protected void Application_AuthenticateRequest(object sender, EventArgs e) - { - - } - - protected void Application_EndRequest(object sender, EventArgs e) - { - // 请求录制:合并响应内容并落盘 - //try { ApiRequestLogger.EndRequest(Context); } catch { } - } - - protected void Application_Error(object sender, EventArgs e) - { - - } - - protected void Session_End(object sender, EventArgs e) - { - - } - - protected void Application_End(object sender, EventArgs e) - { - - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/KJD_WebService.csproj b/KJDService/KJD_WebService/KJD_WebService.csproj deleted file mode 100644 index 81e7388..0000000 --- a/KJDService/KJD_WebService/KJD_WebService.csproj +++ /dev/null @@ -1,341 +0,0 @@ - - - - - Debug - AnyCPU - - - 2.0 - {A6C03FE1-142A-4C97-99A9-67FD915836B6} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - KJD_Web - KJD_WebService - v4.6.2 - true - - 44313 - - - - - - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - false - - - true - pdbonly - true - bin\ - TRACE - prompt - 4 - false - - - - ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - - - - ..\Dll\MySql.Data.dll - - - False - ..\Dll\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WXOrderService.asmx - Component - - - - - WXProdHot.aspx - ASPXCodeBehind - - - WXProdHot.aspx - - - WXProd.aspx - ASPXCodeBehind - - - WXProd.aspx - - - - - WXProductService.asmx - Component - - - WXShopService.asmx - Component - - - DYShopService.asmx - Component - - - WXShopRevenueStatistics.asmx - Component - - - WXUserService.asmx - Component - - - DYUserService.asmx - Component - - - Global.asax - - - - - - - - - - - - - - - - BXXPriceService.asmx - Component - - - PriceService.asmx - Component - - - BXXProductService.asmx - Component - - - BXXProductThirdService.asmx - Component - - - OrderService.asmx - Component - - - ProductThirdService.asmx - Component - - - - ProductService.asmx - Component - - - BXXShopService.asmx - Component - - - ShopService.asmx - Component - - - UpdateService.asmx - Component - - - ToolService.asmx - Component - - - BXXUserService.asmx - Component - - - UserService.asmx - Component - - - - - - - - - - - - - - - - - - - - - - Web.config - - - Web.config - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - True - True - 49977 - / - http://localhost:9000/ - False - False - - - False - - - - - - - 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 - - - - - \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/CommentParam.cs b/KJDService/KJD_WebService/Model/CommentParam.cs deleted file mode 100644 index 49dfa42..0000000 --- a/KJDService/KJD_WebService/Model/CommentParam.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class CommentParam - { - public int id { get; set; } - public string user_id { get; set; } - public string comment { get; set; } - public DateTime add_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/DBPriceResultParam.cs b/KJDService/KJD_WebService/Model/DBPriceResultParam.cs deleted file mode 100644 index e82969f..0000000 --- a/KJDService/KJD_WebService/Model/DBPriceResultParam.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class DBPriceResultParam - { - public int id { get; set; } - public string ext_code { get; set; } - public int original_price { get; set; } - public int markup_times { get; set; } - public int extra_price { get; set; } - public string notes { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } - - public class DBExtCodePriceResult - { - public int id { get; set; } - public string ext_code { get; set; } - public int ext_code_price { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/DBProdDbIdMapProductIdResultParam.cs b/KJDService/KJD_WebService/Model/DBProdDbIdMapProductIdResultParam.cs deleted file mode 100644 index 7325b43..0000000 --- a/KJDService/KJD_WebService/Model/DBProdDbIdMapProductIdResultParam.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class DBProdDbIdMapProductIdResultParam - { - public long id { get; set; } - public long product_select_db_id { get; set; } - public long product_id { get; set; } - public long shop_id { get; set; } - public DateTime add_time { get; set; } - } - - public class DBProdDraftIdMapUpSpuIdResultParam - { - public long id { get; set; } - public long draft_id { get; set; } - public long from_spu_id { get; set; } - public long shop_id { get; set; } - public DateTime add_time { get; set; } - public decimal? cost_price { get; set; } - public decimal? delivery_fee { get; set; } - public decimal? mark_fee { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/DBProductResultParam.cs b/KJDService/KJD_WebService/Model/DBProductResultParam.cs deleted file mode 100644 index 264167a..0000000 --- a/KJDService/KJD_WebService/Model/DBProductResultParam.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class DBProductResultParamLite - { - public int id { get; set; } - public string spu_id { get; set; } - public string secret_spu_id { get; set; } - } - - /// - /// 选品数据库商品 - /// - public class DBProductResultParam - { - public int id { get; set; } - public string from_shop_id { get; set; } = ""; - public string from_shop_name { get; set; } = ""; - public string offline_supplier_id { get; set; } - public string offline_supplier_name { get; set; } - public string spu_id { get; set; } - public string skc_id { get; set; } - public string main_cat_id { get; set; } - public string cat_id { get; set; } - public string main_cat_name { get; set; } - public string cat_name { get; set; } - public string wx_cat_1 { get; set; } - public string wx_cat_2 { get; set; } - public string wx_cat_3 { get; set; } - public string wx_cat_leaf { get; set; } - /// - /// 母店价格 - /// - public string price_text { get; set; } - /// - /// jit成本价格 - /// - public string cost_price { get; set; } - /// - /// jit快递费 - /// - public string delivery_fee { get; set; } - /// - /// jit贴单费 - /// - public string mark_fee { get; set; } - /// - /// 变更类目ID(针对旧类目可能不可再提交商品) - /// - public string change_cat_id { get; set; } - /// - /// 变更类目名称(针对旧类目可能不可再提交商品) - /// - public string change_cat_name { get; set; } - public string ext_code { get; set; } - public string secret_spu_id { get; set; } - /// - /// 拼多多 设置类目价格 - /// - public int? ext_code_price { get; set; } - public string product_name { get; set; } - public string product_json { get; set; } - public string size_json { get; set; } - public string sku_edit_json { get; set; } - /// - /// 微信推单商品和sku加密code信息 - /// - public string sku_secret_json { get; set; } - public string wx_img_map_json { get; set; } - //public int sku_img_replace_id { get; set; } - //public string sku_img_replace_base64 { get; set; } - //public string sku_img_replace_url { get; set; } - public string main_img { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - public string group { get; set; } - public string notes { get; set; } - /// - /// 店铺选品次数 - /// - public int select_count { get; set; } = 0; - /// - /// 被选中的总次数 - /// - public int select_total_count { get; set; } - public string fission_imgs { get; set; } - public string fission_words { get; set; } - public string head_words { get; set; } - public string end_words { get; set; } - public int product_get_type { get; set; } - public string product_get_type_text { get; set; } - - public int? view_uv { get; set; } - public int sale_count { get; set; } - public string sale_count_text { get; set; } - public string wx_safe_status { get; set; } - public string special_prod_type { get; set; } - public int send_to_out_server { get; set; } - public string real_coid { get; set; } - public string real_spu_id { get; set; } - public string has_wx_format { get; set; } - public string problem_prod_data { get; set; } - public int is_relation { get; set; } - public string add_user_name { get; set; } - } - - public class KJDDBProduct : DBProductResultParam - { - - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/ErpModel/ErpMerchantInfo.cs b/KJDService/KJD_WebService/Model/ErpModel/ErpMerchantInfo.cs deleted file mode 100644 index facfb96..0000000 --- a/KJDService/KJD_WebService/Model/ErpModel/ErpMerchantInfo.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.ErpModel -{ - public class ErpMerchantInfo - { - public long id { get; set; } - /// - /// 唯一用户标识 - /// - public long user_id { get; set; } - /// - /// 账户类型,1:分销商账户,2:供应商账户 - /// - public int? account_type { get; set; } - /// - /// 账户名称 - /// - public string account_name { get; set; } - /// - /// 账户状态(1-正常 2-冻结 3-注销) - /// - public int account_status { get; set; } - /// - /// 账户累计充值金额 - /// - public decimal recharge_amount_total { get; set; } - /// - /// 可用余额 - /// - public decimal balance { get; set; } - /// - /// 冻结金额 - /// - public decimal frozen_amount { get; set; } - /// - /// 提现账户收款图片 - /// - public string withdraw_account_image_url { get; set; } - /// - /// 已提现金额 - /// - public decimal? withdrawn_amount { get; set; } - /// - /// 创建时间 - /// - public DateTime create_time { get; set; } - /// - /// 更新时间 - /// - public DateTime update_time { get; set; } - /// - /// 创建人 - /// - public long? create_by { get; set; } - /// - /// 修改人 - /// - public long? update_by { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/JSTDownProdSkuInfo.cs b/KJDService/KJD_WebService/Model/JSTDownProdSkuInfo.cs deleted file mode 100644 index e961abf..0000000 --- a/KJDService/KJD_WebService/Model/JSTDownProdSkuInfo.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class JSTDownProdSkuInfo - { - public int id { get; set; } - public List itemMainImage { get; set; } // Array[5], - public string itemName { get; set; } // "光流沙咕卡麻将砖块转砖带灯创意礼物男孩女孩网红", - public string styleCode { get; set; } // "725068475481", - public string itemCode { get; set; } // "ysk00407C_3R", - public string colourSpec { get; set; } // "方形带灯翠绿色;无规格", - public decimal? supplyPrice { get; set; } // 2.93, - public object oldSupplyPrice { get; set; } // null, - public object priceDate { get; set; } // null, - public List perfectPlatformList { get; set; } // Array[19], - public string shelvesType { get; set; } // "DISTRIBUTION", - public string supplierName { get; set; } // "努正供应链", - public List itemShelvesInfos { get; set; } // [], - public string shelvesTime { get; set; } // "2026-01-30 18:50:50", - public string itemSource { get; set; } // "GYL", - public string itemSourceText { get; set; } // "供应链", - public string supplierCoId { get; set; } // "14204696", - public string spuId { get; set; } // "BEC902FFA8B542A6A9F16BF5964DEA4F", - public string coId { get; set; } // "14791477", - public string partnerSkuId { get; set; } // "21B50E4CA5264A078933C956F0250FD9", - public string partnerSpuId { get; set; } // "9573273974C1472E9CEC10D227218E89", - public bool? deleted { get; set; } // false, - public bool? isPartner { get; set; } // true, - public bool? partnerCanSee { get; set; } // false, - public bool? haveBaseData { get; set; } // false, - public object baseDataId { get; set; } // null, - public string itemStatus { get; set; } // "distribution", - public bool? privateStatus { get; set; } // false, - public string categoryId { get; set; } // "", - public string categoryName { get; set; } // "", - public object regulatePriceMin { get; set; } // null, - public object regulatePriceMax { get; set; } // null, - public object lastRegulatePriceMin { get; set; } // null, - public object lastRegulatePriceMax { get; set; } // null, - public object regulatePriceChangeTime { get; set; } // null, - public bool? showLastRegulatePrice { get; set; } // false, - public string supplierId { get; set; } // "8323D6C2837B42AF8CB37F2A262DCA98", - /// - /// sku状态 FOR_SHELVED:该商品已被供应商设置成不可分销 - /// - public string drpItemStatus { get; set; } // "FOR_SHELVED", - public string lastOperator { get; set; } // "老马", - public string itemSpuIdMd5 { get; set; } // "BEC902FFA8B542A6A9F16BF5964DEA4F" - public string secret_spu_id { get; set; } - public string secret_sku_id { get; set; } - /// - /// 产品库中是否存在 - /// - public int is_in_product_db { get; set; } - public DateTime? add_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/OrderParam.cs b/KJDService/KJD_WebService/Model/OrderParam.cs deleted file mode 100644 index 9c6954f..0000000 --- a/KJDService/KJD_WebService/Model/OrderParam.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class OrderParam - { - public int id { get; set; } - public string order_id { get; set; } - public string order_info { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/PddModel/BuyerLoginInfo.cs b/KJDService/KJD_WebService/Model/PddModel/BuyerLoginInfo.cs deleted file mode 100644 index 78d951c..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/BuyerLoginInfo.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.PddModel -{ - public class BuyerLoginInfo - { - public int id { get; set; } - public string user_name { get; set; } - public string buyer_id { get; set; } - public string buyer_name { get; set; } - public string buyer_nick { get; set; } - public string cookie { get; set; } - public string status { get; set; } - public string notes { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/PddModel/PDDMaterialInfo.cs b/KJDService/KJD_WebService/Model/PddModel/PDDMaterialInfo.cs deleted file mode 100644 index 1f6cc6e..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/PDDMaterialInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model -{ - public class PDDMaterialInfo - { - public long? latest_material_id { get; set; } - public string latest_material { get; set; } - public int? check_status { get; set; } - public object check_comment { get; set; } - public string online_material { get; set; } - } -} diff --git a/KJDService/KJD_WebService/Model/PddModel/PDDProductDecorationInfo.cs b/KJDService/KJD_WebService/Model/PddModel/PDDProductDecorationInfo.cs deleted file mode 100644 index 79bbe90..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/PDDProductDecorationInfo.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model -{ - public class PDDProductDecorationInfo - { - public long? goods_id { get; set; } - public long? goods_commit_id { get; set; } - public long? mall_id { get; set; } - public List floor_list { get; set; } = new List(); - public long? create_time { get; set; } - public long? update_time { get; set; } - } - - public class PDDProdfloorItem - { - public long? floor_id { get; set; } - public string key { get; set; } - public string type { get; set; } - public int? priority { get; set; } - public List content_list { get; set; } - public object check_status { get; set; } - public object check_id { get; set; } - public object check_name { get; set; } - public object comment { get; set; } - public object if_have_template { get; set; } - public object floor_status { get; set; } - public object template_id { get; set; } - public object template_type { get; set; } - public object template_json { get; set; } - } - - public class PDDProdContentItem - { - public string img_url { get; set; } - public long? file_id { get; set; } - public int? height { get; set; } - public int? width { get; set; } - public int? file_status { get; set; } - public object goods_id { get; set; } - public object goods_name { get; set; } - public object show_price { get; set; } - public object status { get; set; } - public object min_on_sale_group_price { get; set; } - public string text { get; set; } - public object hot_zone_list { get; set; } - public text_module_detail_item text_module_details { get; set; } - public object activity_sn { get; set; } - public object combine_buy_element_dtolist { get; set; } - - } - - public class text_module_detail_item - { - public int? font_size { get; set; } - public string font_color { get; set; } - public int font_family { get; set; } - public string align { get; set; } - public string background_color { get; set; } - } -} diff --git a/KJDService/KJD_WebService/Model/PddModel/PDDProductDetailInfo.cs b/KJDService/KJD_WebService/Model/PddModel/PDDProductDetailInfo.cs deleted file mode 100644 index 8e9d03a..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/PDDProductDetailInfo.cs +++ /dev/null @@ -1,331 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model -{ - public class PDDProductDetailInfo - { - public long? id { get; set; } - public long? goods_id { get; set; } - public int? check_status { get; set; } - public int? commit_deleted { get; set; } - public string owner { get; set; } - public int? is_shop { get; set; } - public string goods_sn { get; set; } - public string out_goods_sn { get; set; } - public int? is_folt { get; set; } - public string warm_tips { get; set; } - public object fabric { get; set; } - - - public object fabric_content { get; set; } - public long? cost_template_id { get; set; } - public int? cat_id { get; set; } - public long? mall_id { get; set; } - public string goods_name { get; set; } - public string tiny_name { get; set; } - public string goods_desc { get; set; } - public string share_desc { get; set; } - public List list_desc { get; set; } - - public int? market_price { get; set; } - public string thumb_url { get; set; } - public string image_url { get; set; } - public string hd_thumb_url { get; set; } - public List allowed_region { get; set; } - - - public int? region_limit { get; set; } - public int? goods_type { get; set; } - public object country { get; set; } - public int? country_id { get; set; } - public string goods_name_prefix { get; set; } - public int? origin_country_id { get; set; } - public string origin_country_name { get; set; } - public object size_spec_id { get; set; } - public object size_parent_spec_id { get; set; } - public string warehouse { get; set; } - public int? event_type { get; set; } - public int? is_app { get; set; } - public int? is_pre_sale { get; set; } - public int? pre_sale_time { get; set; } - public int? is_sku_pre_sale { get; set; } - public int? is_refundable { get; set; } - public int? is_customs { get; set; } - public int? is_wms { get; set; } - public string customs { get; set; } - public int? is_bangdan { get; set; } - public long? shipment_limit_second { get; set; } - public int? quick_refund { get; set; } - public group_item groups { get; set; } - public commit_extension_item commit_extension { get; set; } - public List galleries { get; set; } - public List goods_commit_check { get; set; } - public mall_info_item mall_info { get; set; } - public List sku { get; set; } - - - public object reject_status { get; set; } - public object reject_reason { get; set; } - public object paper_net_weight { get; set; } - public object paper_length { get; set; } - public object paper_width { get; set; } - public object paper_plies_num { get; set; } - public int? second_hand { get; set; } - public int? source { get; set; } - public bool is_card_secret { get; set; } - public bool is_only_for_remote_area { get; set; } - public int? invoice_status { get; set; } - public object invoice_mode { get; set; } - public object client_id { get; set; } - public int? quan_guo_lian_bao { get; set; } - public int? zhi_huan_bu_xiu { get; set; } - public object song_huo_ru_hu { get; set; } - public object shang_men_an_zhuang { get; set; } - public object song_huo_an_zhuang { get; set; } - public object mai_jia_zi_ti { get; set; } - public object sf_markup_template_sn { get; set; } - public long? min_group_price { get; set; } - public long? max_group_price { get; set; } - public int? must_check_type { get; set; } - public object goods_property_list { get; set; } - public object is_small_group { get; set; } - public int? submit_time { get; set; } - public int? oversea_type { get; set; } - public object oversea_goods { get; set; } - public int? is_general_trade { get; set; } - public int? bad_fruit_claim { get; set; } - public string bad_claim_text { get; set; } - public int? allergy_refund { get; set; } - public int? lack_of_weight_claim { get; set; } - public int? delivery_one_day { get; set; } - public object delivery_type { get; set; } - public int? goods_pattern { get; set; } - public int? customizable { get; set; } - public int? is_group_pre_sale { get; set; } - public object elec_goods_attributes { get; set; } - public schedule_sale_item schedule_sale { get; set; } - - public object goods_trade_attr { get; set; } - public object goods_travel_attr { get; set; } - public object sku_type { get; set; } - public int? is_goods_decoration { get; set; } - public List goods_srv_templates { get; set; } - - public object card_verification_list { get; set; } - public object transport_type_list { get; set; } - public object out_source_type { get; set; } - public object out_source_goods_id { get; set; } - public object is_all_weight_same { get; set; } - public bool? is_spring_festival_open_tag { get; set; } - public int? two_pieces_discount { get; set; } - - public instruction_vo_item instruction_vo { get; set; } - public object local_service_id_list { get; set; } - public object shop_group_id { get; set; } - public object shop_group_name { get; set; } - public int? is_refundable_fifteen_day { get; set; } - public int? is_warranty_one_year { get; set; } - public long? created_at { get; set; } - public int? privacy_delivery { get; set; } - public object invoice_mode_sub_type { get; set; } - public bool? is_two_num_group { get; set; } - public extend_warranty_dto_item extend_warranty_dto { get; set; } - public int? is_sku_shipment { get; set; } - public List qualification_id_list { get; set; } - public int? is_certificate_provide { get; set; } - public int? thawed_refund { get; set; } - public int? damage_claim { get; set; } - public int? is_wp_service { get; set; } - public int? is_size_change_casually { get; set; } - public string owner_name { get; set; } - public bool? show_activity_price { get; set; } - public object appeal_status { get; set; } - public object can_appeal { get; set; } - - public List cat_ids { get; set; } - public List cats { get; set; } - - public bool? is_draft { get; set; } - public int? third_type { get; set; } - public int? estimate_quantity { get; set; } - public int? last_commit_check_status { get; set; } - public bool? is_deposit { get; set; } - public object gold_price_template_id { get; set; } - public object gold_price_type { get; set; } - public int? processing_charges { get; set; } - public object processing_charges_type { get; set; } - public object is_gold_price_matched { get; set; } - public object shoes_template_id { get; set; } - public object spu_id { get; set; } - public object spu_version { get; set; } - public object is_goods_copy { get; set; } - public int? promised_delivery_seconds { get; set; } - public int? community_group_buying { get; set; } - public int? purchase_info_supply { get; set; } - public int? same_city_template_id { get; set; } - public object goods_certificate { get; set; } - public int? is_customized { get; set; } - public string name_prefix { get; set; } - public object business_source_type { get; set; } - public object creator_name { get; set; } - public object reason { get; set; } - public object app_id { get; set; } - public object app_name { get; set; } - public int? user_source { get; set; } - public object check_type { get; set; } - } - - public class group_item - { - public int? single_price { get; set; } - public int? group_price { get; set; } - public object carnival_price { get; set; } - public int? customer_num { get; set; } - public int? buy_limit { get; set; } //999999 - public int? order_limit { get; set; } //999999 - public string regular_limit { get; set; } - public object regular_limit_duration { get; set; } - public object min_num_of_order { get; set; } - public int? community_group_buying { get; set; } = 0; - } - - - public class commit_extension_item - { - public int? id { get; set; } - public int? goods_commit_id { get; set; } - public int? start_production_date { get; set; } - public int? end_production_date { get; set; } - public string production_license { get; set; } - public string production_standard_number { get; set; } - public int? shelf_life { get; set; } - public string out_goods_sn { get; set; } - public object created_at { get; set; } - public object updated_at { get; set; } - } - - public class gallery_item - { - public string url { get; set; } - public int? width { get; set; } - public int? height { get; set; } - // 图片类型 1 主图 2 详情图 3视频 - public int? type { get; set; } - public object source { get; set; } - public object status { get; set; } - public object video_url { get; set; } - public object file_id { get; set; } - public object is_deleted { get; set; } - public object check_comment { get; set; } - public object origin_url { get; set; } - } - - public class mall_info_item { - public string mall_name { get; set; } - } - - public class sku_edit_item : sku_item - { - public string thumb_md5 { get; set; } - } - - public class sku_item - { - public long? id { get; set; } - public long? sku_id { get; set; } - public object sku_sn { get; set; } - public int? carnival_price { get; set; } - public int? init_quantity { get; set; } - public int? is_onsale { get; set; } - public int? limit_quantity { get; set; } = 999999; // 999999 max - public int? multi_price { get; set; } - public object multi_price_in_yuan { get; set; } - public int? price { get; set; } - public object price_in_yuan { get; set; } - public int? quantity { get; set; } - public int? reserve_quantity { get; set; } - public int? weight { get; set; } - public string thumb_url { get; set; } - public long? thumb_url_file_id { get; set; } - public object thumb_url_status { get; set; } - public object thumb_url_is_deleted { get; set; } - public int? quantity_delta { get; set; } - public List spec { get; set; } - // 货号 - public string out_sku_sn { get; set; } - public object batch_id { get; set; } - public int? priority { get; set; } - public int? ware_id { get; set; } - public object ware_biz_type { get; set; } // null - public object advice_price { get; set; } - public object length { get; set; } - public oversea_sku_item oversea_sku { get; set; } - public object cspu_id { get; set; } - public object child_skus { get; set; } - public long? ref_sku_commit_id { get; set; } - public object start_time { get; set; } - public object end_time { get; set; } - public object sku_srv_templates { get; set; } - public object calendar_rule_id { get; set; } - public object hot_live_group { get; set; } - public int? pre_sale_time { get; set; } - public object out_source_sku_id { get; set; } - public object dd_grocery_sku_params { get; set; } - public object sku_extended_attribute_dtos { get; set; } - public object sku_basic_property_dtos { get; set; } - public object spec_note_map { get; set; } - public object delivery_schedule_dtos { get; set; } - public List shipment_limit_second_list { get; set; } - public string sku69_code { get; set; } - - } - - public class spec_item - { - public long? parent_id { get; set; } - public string parent_name { get; set; } - public long? spec_id { get; set; } - public string spec_name { get; set; } - public object spec_note { get; set; } - public object bundle_spec_list { get; set; } - public object sku_combination { get; set; } - public object is_custom { get; set; } - } - - public class oversea_sku_item - { - public object specifications { get; set; } - public object measurement_code { get; set; } - public object measurement_unit { get; set; } - public object taxation { get; set; } - public object record_id_list { get; set; } - } - - public class schedule_sale_item - { - public int? sale_type { get; set; } - public object sale_time_fixed { get; set; } - public object sale_time { get; set; } - public object price_show { get; set; } - public object price_desc { get; set; } - } - - public class instruction_vo_item - { - public object template_id { get; set; } - public int? template_status { get; set; } - public object template_name { get; set; } - public object rejected_reason { get; set; } - } - - public class extend_warranty_dto_item - { - public int? extend_warranty { get; set; } - public object extend_warranty_year { get; set; } - public object extend_warranty_range { get; set; } - } -} diff --git a/KJDService/KJD_WebService/Model/PddModel/PDDProductInfo.cs b/KJDService/KJD_WebService/Model/PddModel/PDDProductInfo.cs deleted file mode 100644 index b1b4112..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/PDDProductInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model -{ - public class PDDProductInfo - { - public PDDProductDetailInfo detail { get; set; } - public PDDSizeSpecInfo size { get; set; } - public PDDProductDecorationInfo decoration { get; set; } - public PDDProductPropertyInfo property { get; set; } - /// - /// 白底图 - /// - public PDDMaterialInfo material1 { get; set; } - /// - /// 长图 - /// - public PDDMaterialInfo material3 { get; set; } - public object source_json { get; set; } - public string sale_count { get; set; } - public string sale_count_text { get; set; } - - - - public string chance_id { get; set; } - public string chance_refere { get; set; } // 记录机会商品提交的refere - public string chance_tab { get; set; } // 记录机会商品提交的tab - } -} diff --git a/KJDService/KJD_WebService/Model/PddModel/PDDProductPropertyInfo.cs b/KJDService/KJD_WebService/Model/PddModel/PDDProductPropertyInfo.cs deleted file mode 100644 index 020efdc..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/PDDProductPropertyInfo.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model -{ - public class PDDProductPropertyInfo - { - public List goods_properties { get; set; } - public object sku_properties { get; set; } - } - - public class goods_propertie_item - { - public string name { get; set; } - public int? ref_pid { get; set; } - public List values { get; set; } - /// - /// 对应微信输入类型 - /// - //public int? wx_input_type { get; set; } - } - public class value_item - { - public long? vid { get; set; } - public string value { get; set; } - public string unit { get; set; } - public string raw_value { get; set; } - public table_info_vo_info table_info_vo { get; set; } - } - - public class table_info_vo_info - { - public List table_value_list { get; set; } - } - - public class table_value_info - { - public string value { get; set; } // "100.0", - public string unit { get; set; } // "%", - public int? column_type { get; set; } // 1 - - } -} diff --git a/KJDService/KJD_WebService/Model/PddModel/PDDSizeSpecInfo.cs b/KJDService/KJD_WebService/Model/PddModel/PDDSizeSpecInfo.cs deleted file mode 100644 index 42704d1..0000000 --- a/KJDService/KJD_WebService/Model/PddModel/PDDSizeSpecInfo.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model -{ - //public class PDDSizeSpecInfo - //{ - // public long? id { get; set; } - // public int? extendType { get; set; } - //} - //public class SizeContentItem - //{ - // public string picUrl { get; set; } - //} - - public class GroupsItem - { - /// - /// - /// - public int? id { get; set; } - /// - /// 中国码 - /// - public string name { get; set; } - /// - /// - /// - public bool? required { get; set; } - } - - public class ElementItem - { - /// - /// - /// - public int? id { get; set; } - /// - /// 肩宽(cm) - /// - public string name { get; set; } - /// - /// - /// - public bool? required { get; set; } - } - - public class MetaItem - { - /// - /// - /// - public List groups { get; set; } - /// - /// - /// - public List elements { get; set; } - /// - /// - /// - public List batchableElementIds { get; set; } - } - - - public class RecordItem - { - /// - /// - /// - public Dictionary values { get; set; } - } - - public class ContentItem - { - /// - /// - /// - public MetaItem meta { get; set; } - /// - /// - /// - public List records { get; set; } - /// - /// - /// - public string picUrl { get; set; } - } - - public class PDDSizeSpecInfo - { - /// - /// - /// - public long? id { get; set; } - /// - /// - /// - public int? extendType { get; set; } - /// - /// - /// - public ContentItem content { get; set; } - /// - /// - /// - public int? classId { get; set; } - /// - /// - /// - public bool? reusable { get; set; } - /// - /// - /// - public int? status { get; set; } - } -} diff --git a/KJDService/KJD_WebService/Model/ProductPurchasePriceResultParam.cs b/KJDService/KJD_WebService/Model/ProductPurchasePriceResultParam.cs deleted file mode 100644 index dc49442..0000000 --- a/KJDService/KJD_WebService/Model/ProductPurchasePriceResultParam.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class ProductPurchasePriceResultParam - { - public int id { get; set; } - public string shop_id { get; set; } - public string shop_name { get; set; } - public string spu_id { get; set; } - public string skc_id { get; set; } - public string cat_id { get; set; } - public string cat_name { get; set; } - public string ext_code { get; set; } - public string product_name { get; set; } - public string main_img { get; set; } - public int discount { get; set; } - public string price_text { get; set; } - public string sku_purchase_price_json { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - public string notes { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/ProductSelectResultParam.cs b/KJDService/KJD_WebService/Model/ProductSelectResultParam.cs deleted file mode 100644 index 4dafeb1..0000000 --- a/KJDService/KJD_WebService/Model/ProductSelectResultParam.cs +++ /dev/null @@ -1,47 +0,0 @@ -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - /// - /// 用户选品结果 - /// - public class ProductSelectResultParam - { - public long id { get; set; } - public string out_product_Id { get; set; } - public string shop_id { get; set; } - public string shop_account { get; set; } - public string user_name { get; set; } - public string sub_user_name { get; set; } - public string notes { get; set; } - public string user_notes { get; set; } - public string status { get; set; } - public string draft_id { get; set; } - public int add_times { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - public string operate_sub_sa_name { get; set; } - public string operate_sub_sa_nick { get; set; } - public DateTime? add_sub_sa_time { get; set; } - public string fission_product_name { get; set; } - - #region 外键连接属性 - public string from_shop_id { get; set; } = ""; - public string cat_id { get; set; } - public string cat_name { get; set; } - public string change_cat_id { get; set; } - public string change_cat_name { get; set; } - public string group { get; set; } - public string ext_code { get; set; } - public string product_name { get; set; } - public string main_img { get; set; } - public string spu_id { get; set; } - public string skc_id { get; set; } - public int product_get_type { get; set; } - #endregion - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/Result.cs b/KJDService/KJD_WebService/Model/Result.cs deleted file mode 100644 index 0d25775..0000000 --- a/KJDService/KJD_WebService/Model/Result.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class Result - { - public Result() - { - - } - public Result(int code, string msg) - { - Code = code; - Msg = msg; - } - - public int Code { get; set; } - public string Msg { get; set; } - public object Data { get; set; } - - public static Result Success(string msg) - { - return new Result - { - Code = 200, - Msg = msg - }; - } - public static Result Failure(string msg) - { - return new Result - { - Code = 500, - Msg = msg - }; - } - //参数不合法 - public static Result ArgumentNull() - { - return new Result { Code = 19999, Msg = "输入为空" }; - - } - } -} diff --git a/KJDService/KJD_WebService/Model/ShopModel/JSTListProductSkuInfo.cs b/KJDService/KJD_WebService/Model/ShopModel/JSTListProductSkuInfo.cs deleted file mode 100644 index 2b5366c..0000000 --- a/KJDService/KJD_WebService/Model/ShopModel/JSTListProductSkuInfo.cs +++ /dev/null @@ -1,47 +0,0 @@ -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.ShopModel -{ - public class JSTListProductSkuInfo - { - public long id { get; set; } - - public string skuId { get; set; } // "F51114C9251A4AC1A03D91256FB48EF5", - public string itemSpuId { get; set; } // "16306F9EA78643A6B8389036BFC6131B", - public string pic { get; set; } // "https://images.sursung.com/prod/item/11625838/20260213/7D4666188669485C95B31A53CE621EAB_s392918_h800_w800.jpg", - public string itemName { get; set; } // "汉服发带唐风发饰古风国风头饰女马面裙配饰", - /// - /// spu货号 - /// - public string styleCode { get; set; } // "633881130581", - /// - /// sku货号 - /// - public string itemCode { get; set; } // "sp01351C", - public string color { get; set; } // "葡萄花鸟复原蓝", - public string spec { get; set; } // "无规格", - public decimal? salePrice { get; set; } // 7, - //public object weight { get; set; } // null, - //public object stockLastTime { get; set; } // null, - //public object regulatePriceMin { get; set; } // null, - //public object regulatePriceMax { get; set; } // null - - - public decimal? supplyPrice { get; set; } - public int? stock { get; set; } - public decimal? weight { get; set; } - public DateTime stockTime { get; set; } - - - public string coid { get; set; } - public string supplierId { get; set; } - public string supplierName { get; set; } - public string status { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/ShopModel/JitCardCodeParam.cs b/KJDService/KJD_WebService/Model/ShopModel/JitCardCodeParam.cs deleted file mode 100644 index 3ac743d..0000000 --- a/KJDService/KJD_WebService/Model/ShopModel/JitCardCodeParam.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.ShopModel -{ - public class JitCardCodeParam - { - public int id { get; set; } - public string card_code_id { get; set; } - /// - /// 创建时间 - /// - public DateTime add_time { get; set; } - /// - /// 激活时间 - /// - public DateTime? active_time { get; set; } - /// - /// 过期时间 - /// - public DateTime? expire_time { get; set; } - public string shop_id { get; set; } - public string shop_account { get; set; } - public string notes { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/ShopModel/ShopParam.cs b/KJDService/KJD_WebService/Model/ShopModel/ShopParam.cs deleted file mode 100644 index 12ea3c1..0000000 --- a/KJDService/KJD_WebService/Model/ShopModel/ShopParam.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.ShopModel -{ - public class ShopParam - { - public int id { get; set; } - public string login_name { get; set; } - public string login_pass { get; set; } - public string cookie { get; set; } - public string cookie2 { get; set; } - /// - /// 拼多多AntiContents - /// - public string anti_contents { get; set; } - /// - /// 拼多多Id - /// - public string pddid { get; set; } - /// - /// 拼多多mall_id - /// - public string mall_id { get; set; } - /// - /// 微店网页token - /// - public string wd_token { get; set; } - /// - /// 微信openId - /// - public string openid { get; set; } - public string shop_id { get; set; } - public string shop_account { get; set; } - public string sub_user_name { get; set; } - public string sub_nick_name { get; set; } - public string user_name { get; set; } - public string company_name { get; set; } - /// - /// 备注 - /// - public string notes { get; set; } - public string group_name { get; set; } - public string login_status { get; set; } - public string login_status2 { get; set; } - public int add_product_remaining { get; set; } - public int add_product_month { get; set; } - - public string operate_sub_sa_name { get; set; } - - /// - /// temu推广直通车用户Id - /// - public string ad_seller_unique_id { get; set; } - /// - /// temu推广直通车链接地址(含信息) - /// - public string ad_url { get; set; } - /// - /// temu推广直通车cookie - /// - public string ad_cookie { get; set; } - /// - /// temu推广直通车登录状态 - /// - public string ad_login_status { get; set; } - public DateTime? jit_expire_time { get; set; } - public int? expire_time { get; set; } - public DateTime add_time { get; set; } - //public DateTime mdy_time { get; set; } - public bool? is_point_shop_expire { get; set; } = false; - public long? erp_shop_id { get; internal set; } - public long? erp_corporate_account_user_id { get; internal set; } - public long? erp_manage_user_id { get; internal set; } - } - - public class AuthInfo - { - public int id { get; set; } - public string ShopId { get; set; } = ""; - public string AccessToken { get; set; } = ""; - public string RefreshToken { get; set; } = ""; - public string AppKey { get; set; } = ""; - public string AppSecret { get; set; } = ""; - public DateTime ExpiresTime { get; set; } - public DateTime UpdateTime { get; set; } = DateTime.MinValue; - public string ApiAuthStatus { get; set; } = "未授权"; - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/ShopModel/sku_img_replace.cs b/KJDService/KJD_WebService/Model/ShopModel/sku_img_replace.cs deleted file mode 100644 index 7b7171c..0000000 --- a/KJDService/KJD_WebService/Model/ShopModel/sku_img_replace.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.ShopModel -{ - public class sku_img_replace - { - public int id { get; set; } - public string img_md5 { get; set; } - public string img_base64 { get; set; } - public string img_url { get; set; } - public string img_type { get; set; } - public string img_group { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/SkuImgResult.cs b/KJDService/KJD_WebService/Model/SkuImgResult.cs deleted file mode 100644 index 15a8f82..0000000 --- a/KJDService/KJD_WebService/Model/SkuImgResult.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class SkuImgResult - { - public int id { get; set; } - public int img_base64_db_id { get; set; } - public string img_md5 { get; set; } - public string img_url { get; set; } - public string product_id { get; set; } - public string spec_id { get; set; } - public string spec_name { get; set; } - public string original_img_url { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - public DateTime base64_mdy_time { get; set; } - public string img_base64 { get; set; } - public int use_count { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/TemuDBOrderInfo.cs b/KJDService/KJD_WebService/Model/TemuDBOrderInfo.cs deleted file mode 100644 index 127bf8a..0000000 --- a/KJDService/KJD_WebService/Model/TemuDBOrderInfo.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class TemuDBOrderInfo - { - public int? id { get; set; } - public string supplierId { get; set; } // '店铺Id', - public string supplierName { get; set; } - public string originalPurchaseOrderSn { get; set; } // '备货单号', - public string subPurchaseOrderSn { get; set; } // '备货母单号', - public string productName { get; set; } - public string category { get; set; } - public string productId { get; set; } // '商品编号', - public string upProductId { get; set; } // 上家商品编号 - public string productSkcId { get; set; } // - public string productSkcPicture { get; set; } //'主图', - public string productSn { get; set; } // '货号', - public int status { get; set; } = 1; // '状态 1待发货 2已送货 7已入库 8已作废', - public string productSkuId { get; set; } // CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - /// - /// 订单sku货号 - /// - public string extCode { get; set; } // 'sku货号', - public string className { get; set; } // 'sku规格', - public string currencyType { get; set; } // 价格单位 - public int supplierPrice { get; set; } // '申报价格', - public int? costPrice { get; set; } // '成本价', - public int? deliveryFee { get; set; } // '车队费', - public int? markFee { get; set; } // '贴标费', - public int purchaseQuantity { get; set; } // '备货件数', - public int deliverQuantity { get; set; } // '送货件数', - public int realReceiveAuthenticQuantity { get; set; } // '入库件数', - public decimal? availableSaleDays { get; set; } // '可售天数', - public int? qcResult { get; set; } // '抽检结果 1合格 2不合格', - public string thumbUrlList { get; set; } // 'sku图片', - public long purchaseTime { get; set; } // '备货单创建时间', - public long? deliverTime { get; set; } // '发货时间', - public long? receiveTime { get; set; } // '收货时间', - public long expectLatestDeliverTimeOrDefault { get; set; } // '最迟发货时间', - public long expectLatestArrivalTimeOrDefault { get; set; } // '最迟到货时间', - public string deliveryOrderSn { get; set; } // '发货单号', - public string receiveWarehouseId { get; set; } // '实际收货仓库Id', - public string receiveWarehouseName { get; set; } // '实际收货仓库', - public string warehouseGroupId { get; set; } // '仓组Id', - public string jiaTongCode { get; set; } // '佳同码', - public string barCodeMd5 { get; set; } // '商品条码MD5', - public string shippingMark​Md5 { get; set; } // '箱唛文件MD5', - public string notes { get; set; } // '备注', - public int upLoadStatus { get; set; } = 0; // '是否上传订单(上传后扣除用户授权金额,产生扣费记录)', - public DateTime add_time { get; set; } // - public DateTime mdy_time { get; set; } // - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/UserLoginResultParam.cs b/KJDService/KJD_WebService/Model/UserLoginResultParam.cs deleted file mode 100644 index 8ac1038..0000000 --- a/KJDService/KJD_WebService/Model/UserLoginResultParam.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class UserLoginResultParam - { - public int id { get; set; } - - /// - /// 用户名 - /// - public string user_name { get; set; } - /// - /// 父用户名 - /// - public string parent_user_name { get; set; } - /// - /// 贴牌编号 - /// - public string oem_id { get; set; } - - public string oem_name { get; set; } - public bool is_oem_owner { get; set; } - /// - /// 手机号(真实登录id,与用户名相同) - /// - public string mobile { get; set; } - - public string password { get; set; } - - public string nick_name { get; set; } - - public string group_id { get; set; } - - public bool is_import { get; set; } - - public string company_name { get; set; } - - public string card_id { get; set; } - - private int _is_sa = 0; - public int is_sa - { - get { return Math.Max(_sa_level, _is_sa); } - set { _is_sa = value; } - } - - private int _sa_level = 0; - public int sa_level - { - get { return Math.Max(_sa_level, _is_sa); } - set { _sa_level = value; } - } - - public decimal authorized_amount { get; set; } - - public DateTime add_time { get; set; } - - public DateTime mdy_time { get; set; } - /// - /// 备注 - /// - public string notes { get; set; } - - /// - /// 用户的功能操作权限 - /// - public string authority { get; set; } - /// - /// 父账户的功能操作权限 - /// - public string parent_authority { get; set; } - /// - /// 子账号被禁止展示的功能页面 - /// - public string forbidden_page { get; set; } - /// - /// 用户积分点数 - /// - public int points { get; set; } - /// - /// 单店铺续费1个月消耗的点数 - /// - public int shop_points_per_month { get; set; } - /// - /// 当前余额 - /// - public decimal balance { get; set; } - /// - /// 历史充值总额 - /// - public decimal recharge_amount_total { get; set; } - /// - /// 每单运费金额 - /// - public decimal? postage_per_order { get; set; } - /// - /// 每单退货运费金额 - /// - public decimal? refund_postage_per_order { get; set; } - /// - /// 每一单礼物额外收取费用 - /// - public decimal? gift_oem_amount_per_order { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WXAddressInfo.cs b/KJDService/KJD_WebService/Model/WXAddressInfo.cs deleted file mode 100644 index ecdc51d..0000000 --- a/KJDService/KJD_WebService/Model/WXAddressInfo.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class WXAddressInfo - { - public int id { get; set; } - public string supplier_name { get; set; } - public string coid { get; set; } - public string after_sale_json { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - public string type { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WXShopDefaultAddressInfo.cs b/KJDService/KJD_WebService/Model/WXShopDefaultAddressInfo.cs deleted file mode 100644 index 58e5abc..0000000 --- a/KJDService/KJD_WebService/Model/WXShopDefaultAddressInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class WXShopDefaultAddressInfo - { - public int? id { get; set; } - public string user_id { get; set; } - public string shop_id { get; set; } - public string province_name { get; set; } - public string city_name { get; set; } - public string county_name { get; set; } - public string detail_info { get; set; } - public string tel_number { get; set; } - public string user_name { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/WXBuyUrlNotesInfo.cs b/KJDService/KJD_WebService/Model/WxModel/WXBuyUrlNotesInfo.cs deleted file mode 100644 index b065ca9..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/WXBuyUrlNotesInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class WXBuyUrlNotesInfo - { - public int id { get; set; } - public string spu_code { get; set; } - public string user_name { get; set; } - public string buy_url_notes { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } - - public class WXBuyMapInfo - { - public long id { get; set; } - public string user_name { get; set; } - public string spu_code { get; set; } - public string sku_code { get; set; } - public string map_url { get; set; } - public string map_goods_name { get; set; } - /// - /// sku规格名称 - /// - public string map_spec_name { get; set; } - public string map_goods_id { get; set; } - public string map_sku_id { get; set; } - /// - /// 发货地(省,市) - /// - public string map_send_address { get; set; } - public string transit_warehouse_id { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/WXClientProductInfoLite.cs b/KJDService/KJD_WebService/Model/WxModel/WXClientProductInfoLite.cs deleted file mode 100644 index 0240d00..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/WXClientProductInfoLite.cs +++ /dev/null @@ -1,169 +0,0 @@ -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model.WxModel -{ - public class WXClientProductInfoLite - { - public wx_client_prod_key product_key { get; set; } - - public wx_client_prod_info info { get; set; } - - public List productSkus { get; set; } - } - - public class wx_client_prod_info - { - public string title { get; set; } // "2026新款情侣棒球帽立体C字母刺绣显脸小时尚百搭休闲韩版大头围鸭舌帽", - public string sub_title { get; set; } // "2025新款C字母立体刺绣棒球帽", - /// - /// 主图列表 - /// - public List head_img { get; set; } // ["https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/64f0a5760000484b151963b6bb81bc1e000000a000004f50", ...] - public List category { get; set; } // { "cat_id": "6093" } - /// - /// 商品详情(图) - /// - public wx_client_prod_detail detail { get; set; } - /// - /// 商品属性 - /// - public List param { get; set; } - /// - /// 品牌id - /// - public string brand_id { get; set; } // "10250056" - public wx_client_sku_id_list sku_id_list { get; set; } - public wx_sku sku_list { get; set; } - public List product_sale_attrs { get; set; } - /// - /// 总销量 - /// - public string total_sold_num { get; set; } // "46631" - public wx_client_service_desc service_desc { get; set; } - public wx_client_express_info express_info { get; set; } - public List headVideoInfo { get; set; } - - public object afterSaleInfo { get; set; } - public List deliveryExpressFee { get; set; } - public List templateInfo { get; set; } - public string spuCode { get; set; } - } - - public class wx_client_express_info - { - public string template_id { get; set; } // "243911370004", - public string product_id { get; set; } // "10000066623849", - public int? piece { get; set; } // 1, - public int? weight { get; set; } // 0, - public int? price { get; set; } // 5980 - } - - public class wx_client_service_desc - { - public string desc { get; set; } // "(麻烦阿姐阿哥们,带纸箱邮寄过去的一定记得用纸盒邮寄回,袋子邮寄的,带袋子寄回,拒收到付件,拒收自提件)" - } - - public class wx_client_sku_id_list - { - public List sku_ids { get; set; } //[ "1597139289", "1597121531", "1597127451", "1597113890", "1597119654" ] - } - - public class wx_client_prod_key - { - public string product_id { get; set; } // "10000066623849", - public string appid { get; set; } // "wx62cca7dc2354b687" - } - - public class wx_client_head_video_info - { - public string videoUrl { get; set; } // "https://wst.wxapp.tc.qq.com/162/20302/snssvpdownload/SH/reserved/0bc3yya5qaabfaaeaq6thjt2nrwd3ddadwaa.f100001.mp4?wdis_k=7cdc03c564ae62499c03d8034036e65c4405cd2d&wdis_t=1773699072&appid=none&scene=0&ext=eyJjaSI6MTAwMDY5LCJjczBjIjoxNywiY3MwbyI6NDA1MzAsImNzMWMiOjQsImNzMW8iOjExMDQ0OSwicnMiOiIyNDIwNDozIn0", - public string videoHeadImg { get; set; } // "https://wst.wxapp.tc.qq.com/162/20302/snssvpdownload/SH/reserved/0bc3yya5qaabfaaeaq6thjt2nrwd3ddadwaa.f1400_0.jpeg?wdis_k=7f202df2767ca6d4b8cec6f52d1706ea8e497708&wdis_t=1773699072&appid=none&scene=0&ext=eyJjaSI6MTAwMDY5LCJjczBjIjoxNywiY3MwbyI6NDA1MzAsImNzMWMiOjQsImNzMW8iOjExMDQ0OSwicnMiOiIyNDIwNDozIn0", - public int? videoLen { get; set; } // 24, - public string videoSize { get; set; } // "0", - public int? videoSource { get; set; } // 0, - public int? videoFormat { get; set; } // 0, - public string playableVideoUrl { get; set; } // "https://wst.wxapp.tc.qq.com/162/20302/snssvpdownload/SH/reserved/0bc3yya5qaabfaaeaq6thjt2nrwd3ddadwaa.f100001.mp4?wdis_k=7cdc03c564ae62499c03d8034036e65c4405cd2d&wdis_t=1773699072&appid=none&scene=0&ext=eyJjaSI6MTAwMDY5LCJjczBjIjoxNywiY3MwbyI6NDA1MzAsImNzMWMiOjQsImNzMW8iOjExMDQ0OSwicnMiOiIyNDIwNDozIn0", - public int? videoWidth { get; set; } // 1080, - public int? videoHeight { get; set; } // 1080, - public string videoH265Url { get; set; } // "https://wst.wxapp.tc.qq.com/162/20302/snssvpdownload/SH/reserved/0bc3yya5qaabfaaeaq6thjt2nrwd3ddadwaa.f100003.mp4?wdis_k=057570644d9b72ff0c62e85b1c54cf0f0a8b42f6&wdis_t=1773699072&appid=none&scene=0&ext=eyJjaSI6MTAwMDY5LCJjczBjIjoxNywiY3MwbyI6NDA1MzAsImNzMWMiOjQsImNzMW8iOjExMDQ0OSwicnMiOiIyNDIwNDozIn0", - public int? videoH265Width { get; set; } // 720, - public int? videoH265Height { get; set; } // 720 - } - - public class wx_client_product_sale_attr - { - public string key { get; set; } // "颜色" - public List items { get; set; } - public bool? has_img { get; set; } - } - - public class wx_client_product_sale_attr_item - { - public string value { get; set; } // "卡其色" - public string img_url { get; set; } // "https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/64eb0fd5000f2ca50a23b45f3567b01e000000a100004f50" - public List sku_ids { get; set; } // [ "1597139289" ] - } - - public class wx_sku - { - public List sku_info { get; set; } - public string min_price_sku_id { get; set; } // "1597139289" - public string default_selected_sku_id { get; set; } // "1597139289" - } - - public class wx_client_sku_info - { - public string sku_id { get; set; } // "1597139289", - public int? price { get; set; } // 5980, - public bool? is_discounted { get; set; } // true, - public int? discounted_price { get; set; } // 2990, - public int? origin_price { get; set; } // 5980, - } - - public class wx_client_prod_detail - { - /// - /// 详情图 - /// - public List detail_img { get; set; } // ["https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/64f21d2b00009e7a156bc7cd6d63b01e000000a000004f50", ...] - public List detailImg { get; set; } // ["https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/64f21d2b00009e7a156bc7cd6d63b01e000000a000004f50", ...] - public List detail_img_real { get { return detail_img == null ? detailImg : detail_img; } } - public string desc { get; set; } // "纯萃美2025新款情侣棒球帽立体C字母刺绣显脸小时尚百搭休闲网红款韩版大头围硬顶鸭舌帽男女同款" - ///// - ///// - ///// - //public List detailImg { get; set; } - ///// - ///// 纯萃美2025新款情侣棒球帽立体C字母刺绣显脸小时尚百搭休闲网红款韩版大头围硬顶鸭舌帽男女同款 - ///// - //public string desc { get; set; } - } - - public class wx_client_param - { - public List categorys { get; set; } - } - - public class wx_client_category - { - public string catIdStr { get { return cat_id.IsNullOrEmpty() ? catId : cat_id; } } // "0", - public string cat_id { get; set; } // "0", - public string catId { get; set; } // "0", - public string name { get; set; } // "主要材质", "C字母刺绣" - public string f_cat_id { get; set; } // "0", - public string brand_cat { get; set; } // "0", - public wx_client_cat_info cat_info { get; set; } - } - - public class wx_client_cat_info - { - public int? is_required { get; set; } // 1, - public int? is_customize { get; set; } // 0, - public int? input_type { get; set; } // 1 - } -} diff --git a/KJDService/KJD_WebService/Model/WxModel/WXGetEditProductInfoLite.cs b/KJDService/KJD_WebService/Model/WxModel/WXGetEditProductInfoLite.cs deleted file mode 100644 index dfe8828..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/WXGetEditProductInfoLite.cs +++ /dev/null @@ -1,191 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KJD_WebService.Model.WxModel -{ - public class WXGetEditProductInfoLite - { - public WXProductInfo product { get; set; } - public WXAfterSaleAddressInfo address { get; set; } - } - - public class WXAfterSaleAddressInfo - { - public string addressId { get; set; } // "69496256002", - public string name { get; set; } // "", - public WXAddressInfo addressInfo { get; set; } - } - - public class WXAddressInfo - { - public string userName { get; set; } // "王总", - public string postalCode { get; set; } // "", - public string provinceName { get; set; } // "安徽省", - public string cityName { get; set; } // "合肥市", - public string countyName { get; set; } // "肥西县", - public string detailInfo { get; set; } // "蜀山区长江西路某某号某某单元", - public string telNumber { get; set; } // "18388888888", - public int? lat { get; set; } // 0, - public int? lng { get; set; } // 0 - } - - public class WXProductInfo - { - public List productSkus { get; set; } - public WXProductKeyInfo productKey { get; set; } - public WXProductInfoInfo info { get; set; } - public int? status { get; set; } // 5 - public string createTime { get; set; } // "1772529740", - public string updateTime { get; set; } // "1772533190", - public int? version { get; set; } // 8, - public int? editStatus { get; set; } // 4, - public string editTime { get; set; } // "1772533189", - public int source { get; set; } // 1 - } - - public class WXProductSkuInfoLite - { - public WXSkuKeyInfoLite skuKey { get; set; } - public WXProductSkuInfoInfoLite productSkuInfo { get; set; } - } - - public class WXProductSkuInfoInfoLite - { - public List saleParam { get; set; } - public string thumbImg { get; set; } // "https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/69a6a1ae000e63741a5ddf35d5b71715000000a000004f50" - public string skuCode { get; set; } // "" - public int? salePrice { get; set; } // 5880 - public WXStockInfoLite stockInfo { get; set; } - public WXRealStockInfoLite realStockInfo { get; set; } - } - - public class WXRealStockInfoLite - { - public int? stockNum { get; set; } // 999 - public int? totalNum { get; set; } // 999 - } - - public class WXStockInfoLite - { - public string stockNum { get; set; } // "9999999" - } - - public class WXSaleParamInfoLite - { - public List categorys { get; set; } - } - - public class WXSkuKeyInfoLite - { - public string skuId { get; set; } // "8767785131", - } - - public class WXProductKeyInfo - { - public string productId { get; set; } // "10000538778988" - } - - public class WXProductInfoInfo - { - // 主图 - public List headImg { get; set; } = new List(); - public List category { get; set; } = new List(); - public List param { get; set; } = new List(); - public List qualificationList { get; set; } - public List productHeadimgInfo { get; set; } - public List headImgInfos { get; set; } - public string title { get; set; } // "歪歪马震动棒 成人情趣用品" - public string subTitle { get; set; } // "", - public string brand { get; set; } // "", - public string model { get; set; } // "", - public WXProductDetailInfo detail { get; set; } - public string brandId { get; set; } // "10655917" - public string listingTime { get; set; } // "1772533190" - public string spuCode { get; set; } // "2028756820870602753" - public WXAfterSaleInfo afterSaleInfo { get; set; } - public string lastEditDraftTime { get; set; } // "1772532559" - public string shortTitle { get; set; } // "歪歪马脉冲震动成人情趣棒" - public string aiGenShortTitle { get; set; } // "歪歪马脉冲震动成人情趣棒" - public string uniqueId { get; set; } // "4411405439658180613" - } - - public class WXAfterSaleInfo - { - public string afterSaleAddressId; - } - - public class WXProductDetailInfo - { - public List detailImg { get; set; } = new List(); // [ "https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/69a6a8460000683300254e4c8c4fab15000000a100004f50", ... ], - public List detailVideos { get; set; } = new List(); - public List detailVideoInfo { get; set; } = new List(); - public List carouselImg { get; set; } = new List(); - public string desc { get; set; } = ""; - } - - public class WXHeadImgInfo - { - public string imgUrl { get; set; } // "https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/69a6a8420006d56e0003583092a31715000000a100004f50", - public int? imgWidth { get; set; } // 800, - public int? imgHeight { get; set; } // 800 - } - - public class WXProductHeadimgInfo - { - public List colors { get; set; } = new List(); // [] - public string imgUrl { get; set; } // "https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/69a6a8420006d56e0003583092a31715000000a100004f50" - public WXMainColors mainColors { get; set; } - } - - public class WXMainColors - { - public int? red { get; set; } // 255, - public int? green { get; set; } // 255, - public int? blue { get; set; } // 255 - } - - public class WXQualificationInfo - { - public List qualificationUrl { get; set; } // ["https://wst.wxapp.tc.qq.com/161/20304/snscosdownload/SH/reserved/69a6a84a0008442e2a4a8f7179bc1715000000a000004f50"] - public string qualificationId { get; set; } // "50000115" - public int? showCertType { get; set; } // 0 - } - - public class WXProductParamInfo - { - public List categorys { get; set; } = new List(); - } - - public class WXProductParamCategoryInfo - { - public string name { get; set; } // [0] "name": "长度" [1] "name": "20 cm", - public int? catType { get; set; } = 0; - public WXProductParamCategoryCatInfo catInfo { get; set; } - } - - public class WXProductParamCategoryCatInfo - { - public int? isRequired { get; set; } // 1, - public int? isCustomize { get; set; } // 0, - public int? inputType { get; set; } // 1-单选 2-文本 - public long? catGroup { get; set; } // 4294967295, - } - - public class WXProductCategoryInfoLite - { - public string catId { get; set; } // "10000577" - public string name { get; set; } // "情趣用品" // 可能为空或没有此字段 - public string fCatId { get; set; } // "10000575" - public WXProductCategoryInfoInfoLite catInfo { get; set; } - public bool? leaf { get; set; } // false - } - - public class WXProductCategoryInfoInfoLite - { - public int? catLevel { get; set; } // 2 - public long? catGroup { get; set; } // 4294967295 - } -} diff --git a/KJDService/KJD_WebService/Model/WxModel/WXOrderAmountInfo.cs b/KJDService/KJD_WebService/Model/WxModel/WXOrderAmountInfo.cs deleted file mode 100644 index 79f3bd7..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/WXOrderAmountInfo.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - /// - /// 微信订单金额详情 - /// - public class WXOrderAmountInfo - { - /// - /// 店铺名称 - /// - public string shop_name { get; set; } - /// - /// 下单时间(秒级时间戳) - /// - public int create_time { get; set; } - /// - /// 订单号 - /// - public string order_id { get; set; } - /// - /// 订单状态 - /// - public int status { get; set; } - /// - /// 商品总价(分) - /// - public int product_price { get; set; } - /// - /// 订单金额(分) - /// - public int order_price { get; set; } - /// - /// 采购价(分) - /// - public int purchase_price { get; set; } - /// - /// 运费(分) - /// - public int freight { get; set; } - /// - /// 平台服务费(预计技术服务费,分) - /// - public int predict_commission_fee { get; set; } - /// - /// 达人佣金(分) - /// - public int commission_amount { get; set; } - /// - /// 优惠金额(分) - /// - public int discounted_price { get; set; } - /// - /// 利润 = 订单金额 - 外采金额 - 平台服务费 - 达人佣金(分) - /// - public int profit { get; set; } - /// - /// 采购状态 - /// - public int purchase_status { get; set; } - /// - /// 外采金额(分),out_amount 为空或0时从中转仓订单表补全 - /// - public int out_amount { get; set; } - /// - /// 售后状态(订单明细 refund_status) - /// - public int refund_status { get; set; } - /// - /// 售后状态(退款单 status) - /// - public string refund_status_string { get; set; } - /// - /// 售后退款金额(分),无退款默认0 - /// - public int refund_amount { get; set; } - /// - /// 是否外采:0=未从中转仓订单表查到,1=查到 - /// - public int external_procurement { get; set; } - /// - /// 买手号退款金额(分):退款订单且非外采时,从买手售后表(order_pdd_buyer_after_sale)补全,无退款默认0 - /// - public int buyer_refund_amount { get; set; } - /// - /// 买手号退款状态 - /// - public string buyer_refund_status { get; set; } - } -} diff --git a/KJDService/KJD_WebService/Model/WxModel/WXOrderDecryptAddressInfo.cs b/KJDService/KJD_WebService/Model/WxModel/WXOrderDecryptAddressInfo.cs deleted file mode 100644 index b8ea24a..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/WXOrderDecryptAddressInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class WXOrderDecryptAddressInfo - { - public int id { get; set; } - public string shop_id { get; set; } - public string order_id { get; set; } - public string order_address { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/WxOptimizeExpressInfo.cs b/KJDService/KJD_WebService/Model/WxModel/WxOptimizeExpressInfo.cs deleted file mode 100644 index 689f7e8..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/WxOptimizeExpressInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class WxOptimizeExpressInfo - { - public int id { get; set; } - public string delivery_id { get; set; } - public string delivery_name { get; set; } - public string waybill_id { get; set; } - public int status { get; set; } - public string order_id { get; set; } - public string bind_order_id { get; set; } - public string shop_id { get; set; } - public DateTime add_time { get; set; } - public DateTime? use_time { get; set; } - public DateTime? waybill_pickup_time { get; set; } - } - - public class WxOptimizeRstInfo - { - public int id { get; set; } - public string shop_id { get; set; } - public string order_id { get; set; } - public string optimize_rst { get; set; } - public string waybill_id { get; set; } - public string delivery_name { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } - - public class WxOptimizeRemarkInfo - { - public int id { get; set; } - public string shop_id { get; set; } - public string order_id { get; set; } - public string remark { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/distrib_return_order_info.cs b/KJDService/KJD_WebService/Model/WxModel/distrib_return_order_info.cs deleted file mode 100644 index f540000..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/distrib_return_order_info.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class distrib_return_order_info - { - /// - /// 退货主订单唯一ID - /// - public long id { get; set; } - public string order_code { get; set; } // varchar 255 退货订单编码 - public string order_code_source { get; set; } // varchar 255 原始订单来源编码 - public string logistics_code { get; set; } // varchar 50 物流系统编码(如SF、ZTO) - public string logistics_express_no { get; set; } // varchar 100 物流单号 - public string platform { get; set; } // varchar 50 中转仓平台来源(如OTHER、JD、PDD) - public string shop_name { get; set; } // varchar 255 店铺名称 - public string sender_name { get; set; } // varchar 100 发件人姓名(冗余字段,便于快速查询,不依赖JSON解析) - public string sender_phone { get; set; } // varchar 20 发件人电话(冗余字段,便于快速查询,不依赖JSON解析) - public string sender_info { get; set; } // json 发货人信息(JSON格式:姓名、电话、省市区地址) - public string receiver_name { get; set; } // varchar 100 收货人姓名 - public string receiver_phone { get; set; } // varchar 20 收货人电话 - public string receiver_province { get; set; } // varchar 100 收货省份 - public string receiver_city { get; set; } // varchar 100 收货城市 - public string receiver_area { get; set; } // varchar 100 收货区县 - public string receiver_address { get; set; } // 收货详细地址 - public DateTime created_at { get; set; } // 记录创建时间 - public DateTime updated_at { get; set; } // 记录更新时间 - public DateTime warehouse_in_time { get; set; } // 入库时间(仓库接收退货商品的时间) - public DateTime warehouse_out_time { get; set; } // 出库时间(仓库发出补货或处理后商品的时间) - public int? warehouse_status { get; set; } // 出入库状态:0待处理、1已入库、2创建异常、3处理中 - public int? return_order_status { get; set; } // 退货订单创建与处理状态 - public int? first_weight_fee { get; set; } // 首重费用 - public int? additional_weight_fee { get; set; } // 超重费用 - public int? order_void_status { get; set; } // 订单作废状态:0=正常,1=已作废,2=作废失败 - public string real_logistics_code { get; set; } // 255 下游物流公司 - public string real_logistics_express_code { get; set; } // 255 下游物流单号 - public string response_msg { get; set; } // - public string ext_field1 { get; set; } // 备用扩展字段1 - public string ext_field2 { get; set; } // 备用扩展字段2 - public string platform_code { get; set; } // 退货订单平台来源 - public string platform_order_no { get; set; } // 平台订单号 - public string after_sale_no { get; set; } // 售后单号 - public int? postage { get; set; } // 订单初始费用(分) - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/oem.cs b/KJDService/KJD_WebService/Model/WxModel/oem.cs deleted file mode 100644 index 180cb3d..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/oem.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class oem - { - public int id { get; set; } - public string oem_id { get; set; } - public string oem_name { get; set; } - public string oem_owner { get; set; } - public string oem_icon { get; set; } - public string oem_img { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_after_sale_info.cs b/KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_after_sale_info.cs deleted file mode 100644 index 9ba187d..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_after_sale_info.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class oms_wei_external_procurement_after_sale_info - { - public long id { get; set; } - public string order_no { get; set; } - /// - /// 订单唯一值:OrderCode (外采单号) - /// - public string order_code { get; set; } - /// - /// 中转仓售后订单号 - /// - public string external_order_no { get; set; } - /// - /// 售后订单号 - /// - public string after_sale_no { get; set; } - /// - /// 1=转寄,2=换货, 3=退货 - /// - public int? return_or_exchange { get; set; } - /// - /// 退款地址-省 - /// - public string refund_province { get; set; } - /// - /// 退款地址-市 - /// - public string refund_city { get; set; } - /// - /// 退款地址-县/区 - /// - public string refund_county { get; set; } - public string refund_detail_address { get; set; } - /// - /// 退款的快递单号 - /// - public string refund_waybill { get; set; } - /// - /// 退货的快递公司 - /// - public string return_express_company { get; set; } - /// - /// 收货人姓名 - /// - public string recipient_name { get; set; } - /// - /// 收货人电话 - /// - public string recipient_phone { get; set; } - /// - /// 原始消息/扩展信息(JSON) - /// - public string raw_message { get; set; } - /// - /// 售后处理状态,0未处理,1处理中,2已完成,9异常 - /// - public int? status { get; set; } - public DateTime? created_time { get; set; } - public DateTime? updated_time { get; set; } - /// - /// 创建人 - /// - public string create_user { get; set; } - /// - /// 更新人 - /// - public string update_user { get; set; } - /// - /// 账户名 - /// - public string account_user { get; set; } - /// - /// 1=入库 2=出库 - /// - public int? warehouse_status { get; set; } - /// - /// 入库时间 - /// - public DateTime? inbound_time { get; set; } - /// - /// 出库时间 - /// - public DateTime? outbound_time { get; set; } - /// - /// 下游快递单号 - /// - public string downstream_waybill { get; set; } - /// - /// 下游快递公司编码 - /// - public string downstream_express_code { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_log.cs b/KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_log.cs deleted file mode 100644 index e8cbbd6..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/oms_wei_external_procurement_log.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class oms_wei_external_procurement_log - { - public long id { get; set; } - public string out_order_no { get; set; } - public string order_no { get; set; } - public string order_sku_id { get; set; } - public string buyer_account { get; set; } - public int? out_amount { get; set; } - public string purchaser_note { get; set; } - public string express_1_company { get; set; } - public string express_1_waybill { get; set; } - public string express_2_company { get; set; } - public string express_2_waybill { get; set; } - public string refund_status { get; set; } - public DateTime pickup_time { get; set; } - /// - /// 中转仓状态:0 未使用,1 已创建,2 创建失败 - /// - public int? transfer_warehouse_status { get; set; } - public string raw_message { get; set; } - public DateTime created_time { get; set; } - public DateTime updated_time { get; set; } - public string platform { get; set; } - public string order_platform_code { get; set; } - public string order_code { get; set; } - /// - /// 1正常取号 2提前取号 - /// - public int? pre_allocated_order_no { get; set; } - public int? is_transfer_ship { get; set; } - /// - /// 溯源码 - /// - public string random_code { get; set; } - /// - /// 1, "拒收" 2, "拦截" 3, "取消" 4, "订单作废" - /// - public int? transfer_refund_status { get; set; } - /// - /// 订单作废状态:0=正常,1=已作废,2=作废失败 - /// - public int? order_void_status { get; set; } - /// - /// 0: 未使用, 1: 已入库, 2: 出库 - /// - public int? warehouse_status { get; set; } - /// - /// 中转入库时间 - /// - public DateTime? inbound_time { get; set; } - /// - /// 中转出库时间 - /// - public DateTime? outbound_time { get; set; } - /// - /// 申请拒收状态 0未申请 1申请成功 2申请失败 - /// - public int has_reject { get; set; } - /// - /// 拦截到仓时间 - /// - public DateTime? blocked_arrival_time { get; set; } - /// - /// 拒收时间 - /// - public DateTime? rejected_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/oms_wei_order.cs b/KJDService/KJD_WebService/Model/WxModel/oms_wei_order.cs deleted file mode 100644 index 22afa3c..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/oms_wei_order.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class oms_wei_order - { - public long id { get; set; } - public long shop_id { get; set; } - public string shop_name { get; set; } - /// - /// 商户ID - /// - public long merchant_id { get; set; } - public string order_id { get; set; } - /// - /// 买家身份标识 - /// - public string openid { get; set; } - public int create_time { get; set; } - public int update_time { get; set; } - public string unionid { get; set; } - /// - /// 状态10 待付款;20 待发货;21 部分发货;30 待收货;100 完成;200 全部商品售后之后,订单取消;250 未付款用户主动取消或超时未付款订单自动取消; - /// - public int? status { get; set; } - /// - /// 售后信息json - /// - public string aftersale_detail { get; set; } - /// - /// 支付信息 - /// - public string pay_info { get; set; } - /// - /// 额外信息 - /// - public string ext_info { get; set; } - /// - /// 商品总价 - /// - public int? product_price { get; set; } - /// - /// 订单金额,单位为分,order_price=original_order_price-discounted_price-deduction_price-change_down_price - /// - public int? order_price { get; set; } - /// - /// 采购价,单位为分 - /// - public int? purchase_price { get; set; } - /// - /// 采购时间 - /// - public int? purchase_time { get; set; } - /// - /// 运费,单位为分 - /// - public int? freight { get; set; } - /// - /// 平台服务费(微信小店:预计技术服务费),单位为分 - /// - public int? predict_commission_fee { get; set; } - /// - /// 达人佣金(微信小店:分账金额),单位为分 - /// - public int? commission_amount { get; set; } - /// - /// 优惠券优惠金额,单位为分 - /// - public int? discounted_price { get; set; } - /// - /// 利润(实付金额-采购价-平台服务费-达人佣金,达人佣金、采购价为空值则为0) - /// - public int? profit { get; set; } - /// - /// 采购状态,默认值为:0未采购,推送仓库时修改为1采购 - /// - public int? purchase_status { get; set; } - /// - /// 延迟发货时间(微信小店:商品发货时效,超时此时间未发货即为发货超时) - /// - public int? delivery_deadline { get; set; } - /// - /// 发货时间 - /// - public int? delivery_time { get; set; } - /// - /// 收货人姓名 - /// - public string user_name { get; set; } - /// - /// 邮编 - /// - public string postal_code { get; set; } - public string province_name { get; set; } - public string city_name { get; set; } - /// - /// 区 - /// - public string county_name { get; set; } - /// - /// 详细地址 - /// - public string detail_info { get; set; } - public string tel_number { get; set; } - /// - /// 门牌号码 - /// - public string house_number { get; set; } - /// - /// 虚拟发货订单联系方式(deliver_method=1时返回) - /// - public string virtual_order_tel_number { get; set; } - /// - /// 额外的联系方式信息(虚拟号码相关) - /// - public string tel_number_ext_info { get; set; } - /// - /// 0:不使用虚拟号码,1:使用虚拟号码 - /// - public int? use_tel_number { get; set; } - /// - /// 标识当前店铺下一个唯一的用户收货地址 - /// - public string hash_code { get; set; } - /// - /// 发货物流信息JSON - /// - public string delivery_product_info { get; set; } - /// - /// 发货完成时间,秒级时间戳 - /// - public int? ship_done_time { get; set; } - /// - /// 电子面单代发时的订单密文 - /// - public string ewaybill_order_code { get; set; } - /// - /// 结算信息json - /// - public string settle_info { get; set; } - /// - /// 订单审核状态(0待审核1已审核) - /// - public int? audit_status { get; set; } - /// - /// 订单审核时间 - /// - public DateTime audit_time { get; set; } - /// - /// erp发货快递公司 - /// - public string erp_send_company { get; set; } - /// - /// erp发货快递单号 - /// - public string erp_send_code { get; set; } - /// - /// erp发货状态 - /// - public int? erp_send_status { get; set; } - /// - /// erp发货时间 - /// - public DateTime erp_send_time { get; set; } - /// - /// 旗帜颜色备注,1:灰旗,2:红旗,3:橙旗,4:绿旗,5:天蓝旗,6:紫旗 - /// - public int? colour_flag { get; set; } - /// - /// 旗帜备注时间 - /// - public DateTime colour_flag_update_time { get; set; } - /// - /// 供应商备注异常单 - /// - public string supplier_remark_exception { get; set; } - /// - /// 礼物单状态,默认值0:不存在礼物单,1:礼物单已发货,2:礼物单信息已更正 - /// - public int? gift_order_status { get; set; } - /// - /// 店铺备注:取微信ext_info.merchant_notes - /// - public string shop_remark { get; set; } - /// - /// 软件备注 - /// - public string soft_remark { get; set; } - /// - /// 外采金额(单位:分,整数存储) - /// - public int? out_amount { get; set; } - /// - /// 外采账户 - /// - public string out_account { get; set; } - /// - /// 外采订单号 - /// - public string out_order_no { get; set; } - /// - /// 外采快递公司 - /// - public string out_express_company { get; set; } - /// - /// 外采快递单号 - /// - public string out_express_no { get; set; } - /// - /// 外采是否发货(0 未发货,1 已发货) - /// - public int? out_shipped { get; set; } - /// - /// 判断是否优化过发货0 未优化, 1已优化 - /// - public int? is_shipment_optimized { get; set; } - /// - /// 判断是否优随机使用快递单号0 未使用, 1已使用 - /// - public int? is_express_no_used { get; set; } - /// - /// 外采订单售后状态 - /// - public string out_after_sale_status { get; set; } - /// - /// 是否支持运费险:0-不支持,1-支持 - /// - public int? has_freight_insurance { get; set; } - /// - /// 运费险金额(单位:元) - /// - public decimal? freight_insurance_amount { get; set; } - /// - /// 是否外采礼物单:0-否,1-是(外采订单) - /// - public int? external_gift { get; set; } - /// - /// 中转仓的状态 0未使用,1已创建,2创建失败(购买失败),3已创建未有上游快递单号,4已创建有上游快递单号 - /// - public decimal? transfer_warehouse_status { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/oms_wei_order_item.cs b/KJDService/KJD_WebService/Model/WxModel/oms_wei_order_item.cs deleted file mode 100644 index bd16bd7..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/oms_wei_order_item.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class oms_wei_order_item - { - /// - /// 订单商品表数据库id - /// - public long id { get; set; } - public long shop_id { get; set; } - /// - /// 商户ID - /// - public long merchant_id { get; set; } - /// - /// 订单id(平台订单id) - /// - public string order_id { get; set; } - /// - /// 商品spuid - /// - public string product_id { get; set; } - public string sku_id { get; set; } - /// - /// sku小图 - /// - public string thumb_img { get; set; } - /// - /// sku数量 - /// - public int? sku_cnt { get; set; } - /// - /// 售卖单价(单位:分) - /// - public int? sale_price { get; set; } - /// - /// 商品名称 - /// - public string title { get; set; } - /// - /// 正在售后/退款流程中的 sku 数量 - /// - public int? on_aftersale_sku_cnt { get; set; } - /// - /// 完成售后/退款的 sku 数量 - /// - public int? finish_aftersale_sku_cnt { get; set; } - /// - /// 商品编码 - /// - public string sku_code { get; set; } - /// - /// 市场单价(单位:分) - /// - public int? market_price { get; set; } - /// - /// sku属性JSON - /// - public string sku_attrs { get; set; } - /// - /// sku实付总价,取estimate_price和change_price中较小值 - /// - public int? real_price { get; set; } - /// - /// 商品外部spuid - /// - public string out_product_id { get; set; } - /// - /// 采购价 - /// - public int? purchase_price { get; set; } - /// - /// 运费 - /// - public int? freight { get; set; } - /// - /// 商品外部skuid - /// - public string out_sku_id { get; set; } - /// - /// 是否有优惠金额,非必填,默认为false - /// - public string is_discounted { get; set; } - /// - /// 优惠后sku总价,非必填,is_discounted为true时有值 - /// - public int? estimate_price { get; set; } - /// - /// 是否修改过价格,非必填,默认为false - /// - public string is_change_price { get; set; } - /// - /// 改价后sku总价,非必填,is_change_price为true时有值 - /// - public int? change_price { get; set; } - /// - /// 订单内商品维度平台券优惠金额(利润需要计算这个金额在内) - /// - public int? cash_coupon_discounted_price { get; set; } - /// - /// 区域库存id - /// - public string out_warehouse_id { get; set; } - /// - /// 退货地址 - /// - public string return_address { get; set; } - /// - /// 商品发货信息JSON - /// - public string sku_deliver_info { get; set; } - /// - /// 商品额外服务信息JSON - /// - public string extra_service { get; set; } - /// - /// 是否使用了会员积分抵扣 - /// - public string use_deduction { get; set; } - /// - /// 会员积分抵扣金额,单位为分 - /// - public int? deduction_price { get; set; } - /// - /// 达人佣金(微信小店:分账金额),单位为分 - /// - public int? predict_commission_fee { get; set; } - /// - /// 达人佣金(微信小店:分账金额),单位为分 - /// - public int? commission_amount { get; set; } - /// - /// 商品优惠券信息,逐步替换 order.order_detail.coupon_info - /// - public string order_product_coupon_info_list { get; set; } - /// - /// 商品id(o_goods外键) - /// - public long? erp_goods_id { get; set; } - /// - /// 商品skuid(o_goods_sku外键) - /// - public long? erp_goods_sku_id { get; set; } - /// - /// 售后状态 1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 11 已取消 - /// - public int? refund_status { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/oms_wei_refund.cs b/KJDService/KJD_WebService/Model/WxModel/oms_wei_refund.cs deleted file mode 100644 index e6e7c68..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/oms_wei_refund.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class oms_wei_refund - { - public long id { get; set; } - public long? shop_id { get; set; } - public string after_sale_order_id { get; set; } - /// - /// 售后单当前状态,参考: - /// USER_CANCELD 用户取消申请 - /// MERCHANT_PROCESSING 商家受理中 - /// MERCHANT_REJECT_REFUND 商家拒绝退款 - /// MERCHANT_REJECT_RETURN 商家拒绝退货退款 - /// USER_WAIT_RETURN 待买家退货 - /// RETURN_CLOSED 退货退款关闭 - /// MERCHANT_WAIT_RECEIPT 待商家收货 - /// MERCHANT_OVERDUE_REFUND 商家逾期未退款 - /// MERCHANT_REFUND_SUCCESS 退款完成 - /// MERCHANT_RETURN_SUCCESS 退货退款完成 - /// PLATFORM_REFUNDING 平台退款中 - /// PLATFORM_REFUND_FAIL 平台退款失败 - /// USER_WAIT_CONFIRM 待用户确认 - /// MERCHANT_REFUND_RETRY_FAIL 商家打款失败,客服关闭售后 - /// MERCHANT_FAIL 售后关闭 - /// USER_WAIT_CONFIRM_UPDATE 待用户处理商家协商 - /// USER_WAIT_HANDLE_MERCHANT_AFTER_SALE 待用户处理商家代发起的售后申请 - /// - public string status { get; set; } - /// - /// 买家身份标识 - /// - public string openid { get; set; } - /// - /// 买家在开放平台的唯一标识符,若当前视频号小店已绑定到微信开放平台账号下会返回 - /// - public string unionid { get; set; } - /// - /// 商品spuid - /// - public string product_id { get; set; } - /// - /// 商品skuid - /// - public string sku_id { get; set; } - /// - /// 售后数量 - /// - public int? count { get; set; } - /// - /// 是否极速退款RefundInfo - /// - public string fast_refund { get; set; } - /// - /// 标明售后单退款直接原因, 枚举值参考 RefundReason - /// - public int? refund_reason { get; set; } - /// - /// 退款金额(分) - /// - public int? refund_amount { get; set; } - /// - /// 退款快递单号 - /// - public string return_waybill_id { get; set; } - /// - /// 物流公司id - /// - public string return_delivery_id { get; set; } - /// - /// 物流公司名称 - /// - public string return_delivery_name { get; set; } - /// - /// 售后相关商品信息JSON - /// - public string merchant_upload_info { get; set; } - /// - /// 售后单创建时间戳 - /// - public int? create_time { get; set; } - /// - /// 售后单更新时间戳 - /// - public int? update_time { get; set; } - /// - /// 退款原因 - /// - public string reason { get; set; } - /// - /// 退款原因解释 - /// - public string reason_text { get; set; } - /// - /// 售后类型。REFUND:退款;RETURN:退货退款。 - /// - public string type { get; set; } - /// - /// 订单号,该字段可用于获取订单 - /// - public string order_id { get; set; } - /// - /// detail json - /// - public string details { get; set; } - /// - /// 纠纷id,该字段可用于获取纠纷信息 - /// - public string complaint_id { get; set; } - /// - /// 微信支付退款的响应 - /// - public string refund_resp { get; set; } - /// - /// 推送状态(0未推送;1推送成功;2推送失败) - /// - public int? pull_status { get; set; } - /// - /// 订单审核时间 - /// - public DateTime pull_time { get; set; } - /// - /// 商品id(o_goods外键) - /// - public long? erp_goods_id { get; set; } - /// - /// 商品skuid(o_goods_sku外键) - /// - public long? erp_goods_sku_id { get; set; } - /// - /// 商户id - /// - public long merchant_id { get; set; } - /// - /// 仓库受理状态 - /// - public int? warehouse_status { get; set; } - - - public string return_user_name { get; set; } - public string return_province { get; set; } - public string return_city { get; set; } - public string return_county { get; set; } - public string return_detail { get; set; } - public string return_tel { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/order_item_ext.cs b/KJDService/KJD_WebService/Model/WxModel/order_item_ext.cs deleted file mode 100644 index f00f60d..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/order_item_ext.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class order_item_ext - { - public long? id { get; set; } - public string order_id { get; set; } - public string out_order_id { get; set; } - public string sku_id { get; set; } - public string shop_app_id { get; set; } - public string shop_name { get; set; } - /// - /// 直发/云仓(一般只有直发才会写值,直发会覆盖中转) - /// - public string buy_type { get; set; } - /// - /// 订单异常文本 - /// - public string abnormal_text { get; set; } - public int? flag { get; set; } - public string label { get; set; } - public string remark { get; set; } - public string after_sale_user_delivery_address { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_after_sale.cs b/KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_after_sale.cs deleted file mode 100644 index 0ab65d7..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_after_sale.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class order_pdd_buyer_after_sale - { - public long? id { get; set; } - public string wx_order_id { get; set; } - public string wx_sku_id { get; set; } - /// - /// 买手订单在微信店铺的发货类型 0中转仓发货 1直发 - /// - public int wx_send_type { get; set; } - public DateTime TransitCreateTime { get; set; } - //public DateTime TransitPickupTime { get; set; } - public int? pre_allocated_order_no { get; set; } - public string buyerId { get; set; } - public string buyerName { get; set; } - public string afterSalesId { get; set; } - public string orderSn { get; set; } - public int? orderAmount { get; set; } - public long? refundAmount { get; set; } - public long? orderDate { get; set; } - public string statusText { get; set; } - public string afterSaleAddress { get; set; } - public string order_detail { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_order.cs b/KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_order.cs deleted file mode 100644 index 5633509..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/order_pdd_buyer_order.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class order_pdd_buyer_order - { - public long? id { get; set; } - public string wx_order_id { get; set; } - public string wx_sku_id { get; set; } - /// - /// 买手订单在微信店铺的发货类型 0中转仓发货 1直发 - /// - public int wx_send_type { get; set; } - public DateTime TransitCreateTime { get; set; } - public int? pre_allocated_order_no { get; set; } - public string buyerId { get; set; } - public string buyerName { get; set; } - public string order_sn { get; set; } - public int? order_amount { get; set; } - public long? order_time { get; set; } - public string outExpressCompanyCode { get; set; } - public string tracking_number { get; set; } - /// - /// 订单状态 - /// - public string order_status_prompt { get; set; } - public int? after_sales_status { get; set; } - public string order_detail { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/user_operate_task_status_info.cs b/KJDService/KJD_WebService/Model/WxModel/user_operate_task_status_info.cs deleted file mode 100644 index fe380c9..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/user_operate_task_status_info.cs +++ /dev/null @@ -1,133 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - /// - /// 用户操作任务状态(主任务,对应 o_user_operate_task) - /// - public class user_operate_task_info - { - /// 主键id - [JsonIgnore] public long id; - - /// 任务类型,25:微信订单拉取任务 - public int? task_type; - - /// 任务描述,描述任务设置的相关规则 - [JsonIgnore] public string task_describe; - - /// 平台编码 - public string task_platform_code; - - /// 售价加价比例 - public int? sale_markup_rate; - - /// 售价固定加价金额,单位为(分) - public int? sale_markup_fixed; - - /// 运费加价比例 - public int? freight_markup_rate; - - /// 门店id列表 - public string shop_ids; - public string shop_name; - /// 任务对象id列表,多个,分割 - [JsonIgnore] public string object_ids; - - /// 子任务总数 - public int? sub_task_num; - - /// 成功子任务数 - public int? success_task_num; - - /// 失败子任务数 - public int? fail_task_num; - - /// sku最低价阈值(单位为分) - public int? sku_low_price_threshold; - - /// 任务状态:1:执行中,2:已完成,3:已人为中断 - public int status; - - /// 创建人 - [JsonIgnore] - public string create_by; - - /// 更新人 - [JsonIgnore] - public string update_by; - - /// 备注 - public string remark; - - /// 任务失败原因 - public string task_fail_reason; - - /// 创建时间 - public DateTime? create_time; - - /// 更新时间 - public DateTime? update_time; - public List sub_tasks; - } - - - public class user_operate_sub_task_info - { - /// 子任务主键id - [JsonIgnore] public long id; - - /// 主任务id,对应o_user_operate_task主键id - [JsonIgnore] - public long task_id; - - /// 平台编码。"淘宝天猫:TMALL","京东POP:JD-POP"),"京东自营:JD-VC","拼多多:PDD","抖店:DOUDIAN","微信小店:WEISHOP","其他渠道:OFFLINE - public string platform_code; - - /// 门店id - [JsonIgnore] public long shop_id; - - /// 平台任务对象id,对应平台商品id - public string platform_object_id; - - /// 任务对象id。例如:商品上传中的商品id,同步订单的订单id - public string object_id; - - /// 平台返回状态码 - [JsonIgnore] public string platform_resp_code; - - /// 平台返回信息 - [JsonIgnore] public string platform_resp_msg; - - /// 平台返回数据 - [JsonIgnore] public string platform_resp_data; - - /// 系统异常信息 - public string sys_msg; - - /// 子任务状态:0:待执行,1:成功,2:失败,3:人为终止 - public int status; - - /// 审核结果:2:审核不通过;3:审核通过 - [JsonIgnore] public int? audit_result; - - /// 审核不通过原因 - [JsonIgnore] public string audit_reason; - - /// 创建时间 - [JsonIgnore] public DateTime? create_time; - - /// 创建人 - [JsonIgnore] public string create_by; - - /// 更新时间 - public DateTime? update_time; - - /// 更新人 - [JsonIgnore] public string update_by; - } -} diff --git a/KJDService/KJD_WebService/Model/WxModel/user_payment_record_info.cs b/KJDService/KJD_WebService/Model/WxModel/user_payment_record_info.cs deleted file mode 100644 index e5cb362..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/user_payment_record_info.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class user_payment_record_info - { - public long id { get; set; } - /// - /// 变动类型,1:充值,2:采购花费,3:产品退款到账,4:运费退款到账,5:采购收款,6:产品退款扣除,7:运费退款扣除,16:礼物单话费,20:中转运费,23:作废运费返还 - /// - - public int? type { get; set; } - /// - /// 充值或花费的金额(元) - /// - public decimal amount { get; set; } - /// - /// 充值或花费后的当前账户余额(元) - /// - public decimal balance { get; set; } - /// - /// 账户名 - /// - public string user_name { get; set; } - /// - /// 平台编码 - /// - public string platform_code { get; set; } - /// - /// 订单id - /// - public string order_id { get; set; } - /// - /// 售后单id - /// - public long? after_sale_id { get; set; } - /// - /// 创建人 - /// - public string create_by { get; set; } - /// - /// 创建时间 - /// - public DateTime create_time { get; set; } - /// - /// 修改人 - /// - public string update_by { get; set; } - /// - /// 修改时间 - /// - public DateTime update_time { get; set; } - /// - /// 是否已删除 - /// - public int? is_deleted { get; set; } - /// - /// 备注 - /// - public string remark { get; set; } - /// - /// 扣款的对方账户名称 - /// - public string counterparty_account_name { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/user_points_record_info.cs b/KJDService/KJD_WebService/Model/WxModel/user_points_record_info.cs deleted file mode 100644 index 99393ff..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/user_points_record_info.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class user_points_record_info - { - public int id { get; set; } - public string user_name { get; set; } - public string user_nick { get; set; } - public int delta_points { get; set; } - public int? new_points { get; set; } - public string option_type { get; set; } - public string operator_type { get; set; } - public string operator_name { get; set; } - public string shop_id { get; set; } - public string shop_account { get; set; } - public string remark { get; set; } - public DateTime add_time { get; set; } - /// - /// 对方账户名称 - /// - public string counterparty_account_name { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxModel/wx_qualification_image_info.cs b/KJDService/KJD_WebService/Model/WxModel/wx_qualification_image_info.cs deleted file mode 100644 index 3f36832..0000000 --- a/KJDService/KJD_WebService/Model/WxModel/wx_qualification_image_info.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model.WxModel -{ - public class wx_qualification_image_info - { - public int id { get; set; } - public string cat_name { get; set; } - public string img_md5 { get; set; } - public string img_base64 { get; set; } - public string img_thumb_base64 { get; set; } - public string txt_margin { get; set; } - public DateTime add_time { get; set; } - public DateTime mdy_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Model/WxProdSecretSpuIdShopIdMapParam.cs b/KJDService/KJD_WebService/Model/WxProdSecretSpuIdShopIdMapParam.cs deleted file mode 100644 index 11c22b3..0000000 --- a/KJDService/KJD_WebService/Model/WxProdSecretSpuIdShopIdMapParam.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Model -{ - public class WxProdSecretSpuIdShopIdMapParam - { - public int id { get; set; } - public string up_secret_spu_id { get; set; } - public string up_spu_id { get; set; } - public string shop_id { get; set; } - public DateTime add_time { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/OrderService.asmx b/KJDService/KJD_WebService/OrderService.asmx deleted file mode 100644 index c32a283..0000000 --- a/KJDService/KJD_WebService/OrderService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="OrderService.asmx.cs" Class="KJD_Web.OrderService" %> diff --git a/KJDService/KJD_WebService/OrderService.asmx.cs b/KJDService/KJD_WebService/OrderService.asmx.cs deleted file mode 100644 index 3cc286a..0000000 --- a/KJDService/KJD_WebService/OrderService.asmx.cs +++ /dev/null @@ -1,153 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// OrderService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class OrderService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void add_order() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().AddOrder(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - - [WebMethod] - public void get_order_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().GetOrderList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //UpdateOrderStatus1 - [WebMethod] - public void update_order_status1() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().UpdateOrderStatus1(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - //AddOrderCodeFile - [WebMethod] - public void add_order_code_file() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().AddOrderCodeFile(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //SaveOrderCodeFileLink - [WebMethod] - public void save_order_code_file_link() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().SaveOrderCodeFileLink(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //getOrderCodeFile - [WebMethod] - public void get_order_code_file() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().getOrderCodeFile(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //UploadOrder - [WebMethod] - public void upload_order() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().UploadOrder(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_order_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new OrderManage().UpdateOrderStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/PriceService.asmx b/KJDService/KJD_WebService/PriceService.asmx deleted file mode 100644 index 1b09c54..0000000 --- a/KJDService/KJD_WebService/PriceService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="PriceService.asmx.cs" Class="KJD_Web.PriceService" %> diff --git a/KJDService/KJD_WebService/PriceService.asmx.cs b/KJDService/KJD_WebService/PriceService.asmx.cs deleted file mode 100644 index 9c96ed1..0000000 --- a/KJDService/KJD_WebService/PriceService.asmx.cs +++ /dev/null @@ -1,149 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// PriceService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class PriceService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_price_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().GetPriceList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().AddPrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().DelDbPrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_db_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().MdyDBPrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_purchase_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().MdyPurchasePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_purchase_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().AddPurchasePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_purchase_price() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().DelPurchasePrice(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_purchase_price_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new PriceManage().GetPurchasePriceList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/ProductService.asmx b/KJDService/KJD_WebService/ProductService.asmx deleted file mode 100644 index 4deee24..0000000 --- a/KJDService/KJD_WebService/ProductService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="ProductService.asmx.cs" Class="KJD_Web.ProductService" %> diff --git a/KJDService/KJD_WebService/ProductService.asmx.cs b/KJDService/KJD_WebService/ProductService.asmx.cs deleted file mode 100644 index aa59632..0000000 --- a/KJDService/KJD_WebService/ProductService.asmx.cs +++ /dev/null @@ -1,335 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ProductService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class ProductService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_product_group_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().GetProductGroupList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().GetProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_detail_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().GetProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().AddProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().DelDbProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //[WebMethod] - //public void mdy_product() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // //result = new ProductManage().MdyShop(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - //[WebMethod] - //public void mdy_product_notes() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // result = new ProductManage().MdyProductNotes(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - [WebMethod] - public void mdy_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().MdyDBProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void add_user_select_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().AddUserSelectProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_user_select_product_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().MdyUserSelectProductStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_user_select_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().GetUserSelectProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void admin_get_user_select_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().GetUserSelectProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_select_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().DelSelectProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_select_product_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().SetSelectProductSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_product_select_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductManage().MdyProductSelectNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void get_select_prod_db_id_map_draft_id_list() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().GetSelectProdDbIdMapDraftIdList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_select_prod_map_up_spu_id_list() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().GetSelectProdMapUpSpuIdList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_sku_image() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().AddSkuImg(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_sku_image() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().DelSkuImg(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sku_image_list() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().GetSkuImgList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_base64_img_url() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().MdyBase64ImgUrl(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_base64_img_use_count() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().MdyBase64ImgUseCount(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //AddCateSizeWeightConfig - - [WebMethod] - public void add_cate_size_weight_config_v2() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().AddCateSizeWeightConfig(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_cate_size_weight_config_v2() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductManage().GetCateSizeWeightConfig(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/ProductThirdService.asmx b/KJDService/KJD_WebService/ProductThirdService.asmx deleted file mode 100644 index 01200d9..0000000 --- a/KJDService/KJD_WebService/ProductThirdService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="ProductThirdService.asmx.cs" Class="KJD_Web.ProductThirdService" %> diff --git a/KJDService/KJD_WebService/ProductThirdService.asmx.cs b/KJDService/KJD_WebService/ProductThirdService.asmx.cs deleted file mode 100644 index a3edf5f..0000000 --- a/KJDService/KJD_WebService/ProductThirdService.asmx.cs +++ /dev/null @@ -1,268 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ProductThirdService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class ProductThirdService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().GetProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_detail_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().GetProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_product_empty_product_json_for_bak() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().GetProductListEmptyProductJsonForBak(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_product_detail_list_bak() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().GetProductListBak(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void add_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().AddProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().DelDbProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //[WebMethod] - //public void mdy_product() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // //result = new ProductThridManage().MdyShop(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - //[WebMethod] - //public void mdy_product_notes() - //{ - // string jsontext = GetRequestJsonString(); - - // var result = jsontext; - // result = new ProductThirdManage().MdyProductNotes(jsontext); - - // Context.Response.Write(result); - // Context.Response.End(); - //} - - [WebMethod] - public void mdy_product_category() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().MdyProductCategory(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_db_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().MdyDBProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_user_select_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().AddUserSelectProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_user_select_product_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().MdyUserSelectProductStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_user_select_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().GetUserSelectProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void admin_get_user_select_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().GetUserSelectProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_select_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().DelSelectProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_select_product_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().SetSelectProductSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_product_select_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ProductThirdManage().MdyProductSelectNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_select_prod_db_id_map_draft_id_list() - { - string jsontext = GetRequestJsonString(); - var result = jsontext; - result = new ProductThirdManage().GetSelectProdDbIdMapDraftIdList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/Properties/AssemblyInfo.cs b/KJDService/KJD_WebService/Properties/AssemblyInfo.cs deleted file mode 100644 index 700aa17..0000000 --- a/KJDService/KJD_WebService/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// 有关程序集的常规信息通过下列特性集 -// 控制。更改这些特性值可修改 -// 与程序集关联的信息。 -[assembly: AssemblyTitle("KJD_WebService")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("KJD_WebService")] -[assembly: AssemblyCopyright("Copyright © 2025")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// 将 ComVisible 设置为 false 会使此程序集中的类型 -// 对 COM 组件不可见。如果需要 -// 从 COM 访问此程序集中的某个类型,请针对该类型将 ComVisible 特性设置为 true。 -[assembly: ComVisible(false)] - -// 如果此项目向 COM 公开,则下列 GUID 用于 typelib 的 ID -[assembly: Guid("a6c03fe1-142a-4c97-99a9-67fd915836b6")] - -// 程序集的版本信息由下列四个值组成: -// -// 主版本 -// 次版本 -// 内部版本号 -// 修订版本 -// -// 可以指定所有值,也可以使用“修订号”和“内部版本号”的默认值, -// 方法是按如下所示使用 "*": -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/KJDService/KJD_WebService/ShopService.asmx b/KJDService/KJD_WebService/ShopService.asmx deleted file mode 100644 index 9f19e16..0000000 --- a/KJDService/KJD_WebService/ShopService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="ShopService.asmx.cs" Class="KJD_Web.ShopService" %> diff --git a/KJDService/KJD_WebService/ShopService.asmx.cs b/KJDService/KJD_WebService/ShopService.asmx.cs deleted file mode 100644 index 6aa6321..0000000 --- a/KJDService/KJD_WebService/ShopService.asmx.cs +++ /dev/null @@ -1,271 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ShopService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class ShopService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().GetShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_one_login_name_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().GetOneLoginNameShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().AddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().DelShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().MdyShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop_cookie_and_login_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().MdyCookieAndLoginStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void mdy_shop_ads_cookie_and_login_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().MdyAdsCookieAndLoginStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().GetShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void sub_sa_get_select_prod_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().SubSaGetSelectProdShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_add_prod_remaining() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().UpdateAddProdRemaining(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().MdyShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().AddShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().DelShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_shop_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().SetShopSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - - [WebMethod] - public void get_shop_card_code_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().GetShopCardCodeList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void create_shop_card_code() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().CreateShopCardCode(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_shop_card_code() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().DelShopCardCode(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - ///ActiveJitCardCode - [WebMethod] - public void active_jit_card_code() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new ShopManage().ActiveJitCardCode(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/ToolService.asmx b/KJDService/KJD_WebService/ToolService.asmx deleted file mode 100644 index ff9d844..0000000 --- a/KJDService/KJD_WebService/ToolService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="ToolService.asmx.cs" Class="KJD_Web.ToolService" %> diff --git a/KJDService/KJD_WebService/ToolService.asmx.cs b/KJDService/KJD_WebService/ToolService.asmx.cs deleted file mode 100644 index 6d802df..0000000 --- a/KJDService/KJD_WebService/ToolService.asmx.cs +++ /dev/null @@ -1,64 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UserService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class ToolService : System.Web.Services.WebService - { - [WebMethod] - public string hello_world() - { - return "Hello World"; - } - - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void create_table() - { - //return; - new ToolManage().CreateTable(); - } - } -} diff --git a/KJDService/KJD_WebService/UpdateService.asmx b/KJDService/KJD_WebService/UpdateService.asmx deleted file mode 100644 index dd87d0d..0000000 --- a/KJDService/KJD_WebService/UpdateService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="UpdateService.asmx.cs" Class="KJD_Web.UpdateService" %> diff --git a/KJDService/KJD_WebService/UpdateService.asmx.cs b/KJDService/KJD_WebService/UpdateService.asmx.cs deleted file mode 100644 index 61eb626..0000000 --- a/KJDService/KJD_WebService/UpdateService.asmx.cs +++ /dev/null @@ -1,94 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UpdateService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class UpdateService : System.Web.Services.WebService - { - [WebMethod] - public string hello_world() - { - return "Hello World"; - } - - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - - [WebMethod] - public void get_update() - { - var jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UpdateManage().GetUpdate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_update_new() - { - var jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UpdateManage().GetUpdateNew(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_wx_finder_order_update() - { - var jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UpdateManage().GetWxFindOrderUpdate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/Upload/Prod/BaseClass.cs b/KJDService/KJD_WebService/Upload/Prod/BaseClass.cs deleted file mode 100644 index 3f04d58..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/BaseClass.cs +++ /dev/null @@ -1,54 +0,0 @@ -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Upload.Prod -{ - - public class BaseClass - { - public static string BuildPDDObjString(string file, bool IsLoginDef = false) - { - string LoginApiUrl = "http://1.13.195.131:9001"; - string MainPath = "kuajingda"; - return LoginApiUrl + "/bxx_" + file + "?obj=" + MainPath + "/bxx_" + file; - } - - public static int TimeDifferent = 0; - public static int VersionCount = 99999999; - public static int CompanyId = 1; - public static string CompanyName = "1"; - public static string UserKey = "1"; - public static string Mobile = "18888888888"; - public static string UserName = "18888888888"; - public static string ShopId = "18888888888"; - public static string ShopName = "18888888888"; - } - - public class UserLogin - { - /// - /// 获取签名字符串,新版 - /// - /// - public static string GetSignaturex() - { - return GetSignaturex(BaseClass.ShopId, BaseClass.ShopName); - } - public static string GetSignaturex(string shopId, string shopName) - { - if (string.IsNullOrEmpty(shopId)) - shopId = "11111111"; - if (string.IsNullOrEmpty(shopName)) - shopName = "wx11111111"; - int time = TimeUtils.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; - string time1 = EncrypUtil.Encryption(time); - return "time=" + time + "&code=" + time1 + "&NbCodeVersion=1" + "&version=" + BaseClass.VersionCount + - "&company_id=" + BaseClass.CompanyId + "&company=" + HtmlUtils.UrlEncodeUtf8(BaseClass.CompanyName) + - "&user_name=" + BaseClass.UserName + "&user_key=" + BaseClass.UserKey + "&mobile=" + BaseClass.Mobile + - "&sid=" + shopId + "&shop=" + HtmlUtils.UrlEncodeUtf8(shopName); - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Upload/Prod/BaseWxProd.cs b/KJDService/KJD_WebService/Upload/Prod/BaseWxProd.cs deleted file mode 100644 index c88abf0..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/BaseWxProd.cs +++ /dev/null @@ -1,408 +0,0 @@ -using KJD_Web.Utils; -using KJD_WebService.Model.WxModel; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Web; - -namespace KJD_Web.Upload.Prod -{ - public class BaseWxProd - { - public string getProd(string prodStr, string special_prod_type = null) - { - var reducePer = 0m; - var realPricePer = 1m - reducePer * 0.01m; - if (realPricePer < 0.1m) - realPricePer = 0.1m; - - WXClientProductInfoLite wxClientProd = new WXClientProductInfoLite(); - - var str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "product_key"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.product_key = JsonUtils.DeserializeJsonToObject(regex_str); - if (wxClientProd.product_key == null) - return "解析失败product_key"; - } - catch - { - return "解析失败product_key"; - } - - //商品详情格式 - wxClientProd.info = new wx_client_prod_info(); - - //主标题 - wxClientProd.info.title = RegexUtils.GetStringJson(ref prodStr, "title"); - if (wxClientProd.info.title.IsNullOrEmpty()) - return "解析失败title"; - - //副标题 - wxClientProd.info.sub_title = RegexUtils.GetStringJson(ref prodStr, "sub_title"); - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "head_img"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.head_img = JsonUtils.DeserializeJsonToListNullable(regex_str); - if (wxClientProd.info.head_img == null) - return "解析失败head_img"; - } - catch - { - return "解析失败head_img"; - } - - var nodeCatId = RegexUtils.GetStringJson(ref prodStr, "nodeCatId"); - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "category"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.category = JsonUtils.DeserializeJsonToListNullable(regex_str); - if (wxClientProd.info.category != null && !str_lst.IsNullOrEmpty() && !wxClientProd.info.category.Any(c => c.catIdStr == nodeCatId)) - { - wxClientProd.info.category.Add(new wx_client_category() { catId = nodeCatId, cat_id = nodeCatId }); - } - //if (wxClientProd.info.category == null) - // return "解析失败"; - } - catch - { - return "解析失败category"; - } - - str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "detail"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.detail = JsonUtils.DeserializeJsonToObjectNullable(regex_str); - if (wxClientProd.info.detail == null) - { - wxClientProd.info.detail = new wx_client_prod_detail(); - wxClientProd.info.detail.detail_img.Add(wxClientProd.info.head_img.FirstOrDefault()); - } - - //if (wxClientProd.info.detail == null) - // return "解析失败"; - } - catch - { - return "解析失败detail"; - } - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "param"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.param = JsonUtils.DeserializeJsonToListNullable(regex_str); - if (wxClientProd.info.param == null) - wxClientProd.info.param = new List(); - //if (wxClientProd.info.param == null) - // return "解析失败"; - } - catch - { - return "解析失败param"; - } - - //品牌id - wxClientProd.info.brand_id = RegexUtils.GetStringJson(ref prodStr, "brand_id"); - //if (wxClientProd.info.brand_id.IsNullOrEmpty()) - // return "解析失败"; - - str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "sku_id_list"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.sku_id_list = JsonUtils.DeserializeJsonToObjectNullable(regex_str); - //if (wxClientProd.info.sku_id_list == null) - // return "解析失败"; - } - catch - { - return "解析失败sku_id_list"; - } - - str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "sku_list"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.sku_list = JsonUtils.DeserializeJsonToObjectNullable(regex_str); - //if (wxClientProd.info.sku_list == null) - // return "解析失败"; - } - catch - { - return "解析失败sku_list"; - } - - if (wxClientProd.info.sku_list == null) - { - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "sku_info"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - var sku_infos = JsonUtils.DeserializeJsonToListNullable(regex_str); - if (sku_infos != null) - { - wxClientProd.info.sku_list = new wx_sku(); - wxClientProd.info.sku_list.sku_info = sku_infos; - } - } - catch - { - return "解析失败sku_info"; - } - } - - // 佣金商品 根据折扣价格和佣金比例减去佣金 - if (wxClientProd.info.sku_list != null) - { - foreach (var sku in wxClientProd.info.sku_list.sku_info) - { - sku.price = (sku.price - (sku.price - sku.discounted_price) * (1m - realPricePer)).ParseToInt(); - } - } - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "product_sale_attrs"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.product_sale_attrs = JsonUtils.DeserializeJsonToListNullable(regex_str); - //if (wxClientProd.info.product_sale_attrs == null) - // return "解析失败"; - } - catch - { - return "解析失败product_sale_attrs"; - } - - - //总销量 - wxClientProd.info.total_sold_num = RegexUtils.GetStringJson(ref prodStr, "total_sold_num"); - //if (wxClientProd.info.total_sold_num.IsNullOrEmpty()) - // return "解析失败"; - - str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "service_desc"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.service_desc = JsonUtils.DeserializeJsonToObjectNullable(regex_str); - //if (wxClientProd.info.service_desc == null) - // return "解析失败"; - } - catch - { - return "解析失败service_desc"; - } - - str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "express_info"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.express_info = JsonUtils.DeserializeJsonToObjectNullable(regex_str); - //if (wxClientProd.info.express_info == null) - // return; - } - catch - { - return "解析失败express_info"; - } - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "headVideoInfo"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.headVideoInfo = JsonUtils.DeserializeJsonToListNullable(regex_str); - //if (wxClientProd.info.headVideoInfo == null) - // return "解析失败"; - } - catch - { - return "解析失败headVideoInfo"; - } - - str_lst = RegexUtils.GetJsonObjStrJson(ref prodStr, "afterSaleInfo"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.afterSaleInfo = JsonUtils.DeserializeJsonToObjectNullable(regex_str); - //if (wxClientProd.info.afterSaleInfo == null) - // return "解析失败"; - } - catch - { - return "解析失败afterSaleInfo"; - } - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "deliveryExpressFee"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.deliveryExpressFee = JsonUtils.DeserializeJsonToListNullable(regex_str); - //if (wxClientProd.info.deliveryExpressFee == null) - // return "解析失败"; - } - catch - { - return "解析失败deliveryExpressFee"; - } - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "templateInfo"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.info.templateInfo = JsonUtils.DeserializeJsonToListNullable(regex_str); - //if (wxClientProd.info.templateInfo == null) - // return "解析失败"; - } - catch - { - return "解析失败templateInfo"; - } - - wxClientProd.info.spuCode = RegexUtils.GetStringJson(ref prodStr, "spuCode"); - - str_lst = RegexUtils.GetJsonArrStrJson(ref prodStr, "productSkus"); - try - { - var regex_str = str_lst.OrderByDescending(s => s.Length).FirstOrDefault(); - wxClientProd.productSkus = JsonUtils.DeserializeJsonToList(regex_str); - if (wxClientProd.productSkus == null) - return "解析失败productSkus"; - } - catch - { - return "解析失败productSkus"; - } - - // 佣金商品 根据价格给售卖价格赋值,如果价格丢失,直接在售卖价上计算 - foreach (var sku in wxClientProd.productSkus) - { - var wxDisSku = wxClientProd.info.sku_list?.sku_info?.FirstOrDefault(s => s.sku_id == sku.skuKey.skuId); - if (wxDisSku != null) - sku.productSkuInfo.salePrice = wxDisSku.price; - else - sku.productSkuInfo.salePrice = (sku.productSkuInfo.salePrice - sku.productSkuInfo.salePrice * (1m - realPricePer)).ParseToInt(); - } - - if (wxClientProd.productSkus.Min(s => s.productSkuInfo.salePrice * 0.01m) == 0) - { - return "解析失败Sku价格为0"; - } - - return SaveWxProd(wxClientProd.product_key.product_id, wxClientProd, prodStr, special_prod_type); - } - - public string SaveWxProd(string prodId, WXClientProductInfoLite wxClientProdInfoLite, string baseProdStr, string special_prod_type = null) - { - bool isExist = false; - var existUrl = BaseClass.BuildPDDObjString("product/get_product_spu_id_list"); - string existData = UserLogin.GetSignaturex() + "&search_spu_ids=" + prodId; - //if (!string.IsNullOrEmpty(prod.dbProduct.real_spu_id)) - // existData = UserLogin.GetSignaturex() + "&search_spu_ids=" + prod.spuId + "," + prod.dbProduct.real_spu_id; - string html = HtmlUtils.PostUtf8(existUrl, existData); - if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - html = HtmlUtils.PostUtf8(existUrl, existData); - if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - { - return "采集入库失败,产品数据库连接失败"; - } - else - { - if (html.Contains("\"data\":[") && !html.Contains("\"data\":[]")) - isExist = true; - } - - var url = BaseClass.BuildPDDObjString("product/add_product"); - if (isExist) - url = BaseClass.BuildPDDObjString("product/mdy_product"); - - var skus = wxClientProdInfoLite.productSkus; - - var product_json = "{\"wxxdData\":" + JsonUtils.SerializeObject(wxClientProdInfoLite) + ",\"baseData\":" + JsonUtils.SerializeObject(baseProdStr) + "}"; - var data = UserLogin.GetSignaturex() + - "&from_shop_id=" + wxClientProdInfoLite.product_key.appid + - "&from_shop_name=" + wxClientProdInfoLite.product_key.appid + - "&spu_id=" + prodId + - "&skc_id=" + prodId + - "&price_text=" + skus.Min(s => s.productSkuInfo.salePrice * 0.01m) + " - " + skus.Max(s => s.productSkuInfo.salePrice * 0.01m) + - "&ext_code=" + wxClientProdInfoLite.info.spuCode + - "&product_name=" + HttpUtility.UrlEncode(wxClientProdInfoLite.info.title, Encoding.UTF8) + - "&product_json=" + HttpUtility.UrlEncode(product_json, Encoding.UTF8) + // product_json /*HttpUtility.UrlEncode(JsonUtils.SerializeObject(wxClientProdInfoLite), Encoding.UTF8)*/ - "&sale_count=" + wxClientProdInfoLite.info.total_sold_num + - "&sale_count_text=" + wxClientProdInfoLite.info.total_sold_num + - "&main_img=" + HttpUtility.UrlEncode(wxClientProdInfoLite.info.head_img.FirstOrDefault(), Encoding.UTF8) + - "&wx_safe_status=" + HttpUtility.UrlEncode("安全商品", Encoding.UTF8) + - "&product_get_type=" + HttpUtility.UrlEncode("微信小店", Encoding.UTF8); - - if (wxClientProdInfoLite.info.category.Count > 0) - { - data += "&wx_cat_1=" + wxClientProdInfoLite.info.category[0].catIdStr; - data += "&main_cat_id=" + wxClientProdInfoLite.info.category[0].catIdStr; - data += "&main_cat_name=" + wxClientProdInfoLite.info.category[0].name; - - data += "&wx_cat_leaf=" + wxClientProdInfoLite.info.category.LastOrDefault()?.catIdStr; - data += "&cat_id=" + wxClientProdInfoLite.info.category.LastOrDefault()?.catIdStr; - data += "&cat_name=" + HttpUtility.UrlEncode((wxClientProdInfoLite.info.category.LastOrDefault()?.name).ParseToString(), Encoding.UTF8); - } - if (wxClientProdInfoLite.info.category.Count > 1) - { - data += "&wx_cat_2=" + wxClientProdInfoLite.info.category[1].catIdStr; - } - if (wxClientProdInfoLite.info.category.Count > 2) - { - data += "&wx_cat_3=" + wxClientProdInfoLite.info.category[2].catIdStr; - } - - //if (wxClientProdInfoLite.info.category.FirstOrDefault().name == "图书") - //{ - // data += "&special_prod_type=" + HttpUtility.UrlEncode("书籍", Encoding.UTF8); - //} - if (special_prod_type != null) - { - data += "&special_prod_type=" + special_prod_type; - } - - html = HtmlUtils.PostUtf8(url, data); - if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - html = HtmlUtils.PostUtf8(url, data); - if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - { - string msg = "商品入库失败!请检查网络连接:" + RegexUtils.GetStringJson(ref html, "msg"); - //Invoke(new Action(() => - //{ - // row.Cells["colMsg"].Value = msg; - //})); - return msg; - } - else - { - //prod.getProductMsg = "商品入库成功!"; - //Invoke(new Action(() => - //{ - // row.Cells["colMsg"].Value = prod.getProductMsg; - //})); - if (!isExist) - { - url = BaseClass.BuildPDDObjString("product/mdy_product"); - html = HtmlUtils.PostUtf8(url, data); - if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - html = HtmlUtils.PostUtf8(url, data); - if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200")) - { - string msg = "商品入库失败!请检查网络连接:" + RegexUtils.GetStringJson(ref html, "msg"); - return msg; - } - } - - return "微信商品采集入库成功!"; - } - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx b/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx deleted file mode 100644 index 9071584..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx +++ /dev/null @@ -1,32 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WXProd.aspx.cs" Inherits="KJD_Web.Upload.Prod.WXProd" ValidateRequest="false"%> - - - - - - - - - - - -
-
-
- -
-
- -   -
-
- -
-
- -   -
-
-
- - diff --git a/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.cs b/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.cs deleted file mode 100644 index f56978d..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.cs +++ /dev/null @@ -1,44 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using KJD_WebService.Model; -using KJD_WebService.Model.WxModel; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace KJD_Web.Upload.Prod -{ - public partial class WXProd : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - FileUpload1.Visible = false; - } - - protected void btnSubmit_Click(object sender, EventArgs e) - { - Label1.Text = ""; - Label2.Text = ""; - - string rst = getProd(); - Label1.Text = rst; - Label2.Text = rst; - TextBox2.Text = ""; - FileUpload1.Visible = false; - } - - string getProd() - { - string prodStr = Encoding.UTF8.GetString(this.FileUpload1.FileBytes); - prodStr = TextBox2.Text.Trim(); - return new BaseWxProd().getProd(prodStr); - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.designer.cs b/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.designer.cs deleted file mode 100644 index e4a6c89..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/WXProd.aspx.designer.cs +++ /dev/null @@ -1,80 +0,0 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能导致不正确的行为,如果 -// 重新生成代码,则所做更改将丢失。 -// -//------------------------------------------------------------------------------ - -namespace KJD_Web.Upload.Prod -{ - - - public partial class WXProd - { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// FileUpload1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.FileUpload FileUpload1; - - /// - /// btnSubmit 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button btnSubmit; - - /// - /// Label1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Label Label1; - - /// - /// TextBox2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.TextBox TextBox2; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button Button1; - - /// - /// Label2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Label Label2; - } -} diff --git a/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx b/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx deleted file mode 100644 index eba4dd4..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx +++ /dev/null @@ -1,32 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WXProdHot.aspx.cs" Inherits="KJD_Web.Upload.Prod.WXProdHot" ValidateRequest="false"%> - - - - - - - - - - - -
-
-
- -
-
- -   -
-
- -
-
- -   -
-
-
- - diff --git a/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.cs b/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.cs deleted file mode 100644 index c5a486b..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.cs +++ /dev/null @@ -1,44 +0,0 @@ -using KJD_Web.Model; -using KJD_Web.Utils; -using KJD_WebService.Model; -using KJD_WebService.Model.WxModel; -using NaiBa.Util.Extension; -using NaiBa.Util.Helper; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace KJD_Web.Upload.Prod -{ - public partial class WXProdHot : System.Web.UI.Page - { - protected void Page_Load(object sender, EventArgs e) - { - FileUpload1.Visible = false; - } - - protected void btnSubmit_Click(object sender, EventArgs e) - { - Label1.Text = ""; - Label2.Text = ""; - - string rst = getProd(); - Label1.Text = rst; - Label2.Text = rst; - TextBox2.Text = ""; - FileUpload1.Visible = false; - } - - string getProd() - { - string prodStr = Encoding.UTF8.GetString(this.FileUpload1.FileBytes); - prodStr = TextBox2.Text.Trim(); - return new BaseWxProd().getProd(prodStr, "爆款数据"); - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.designer.cs b/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.designer.cs deleted file mode 100644 index 634c566..0000000 --- a/KJDService/KJD_WebService/Upload/Prod/WXProdHot.aspx.designer.cs +++ /dev/null @@ -1,80 +0,0 @@ -//------------------------------------------------------------------------------ -// <自动生成> -// 此代码由工具生成。 -// -// 对此文件的更改可能导致不正确的行为,如果 -// 重新生成代码,则所做更改将丢失。 -// -//------------------------------------------------------------------------------ - -namespace KJD_Web.Upload.Prod -{ - - - public partial class WXProdHot - { - - /// - /// form1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// FileUpload1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.FileUpload FileUpload1; - - /// - /// btnSubmit 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button btnSubmit; - - /// - /// Label1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Label Label1; - - /// - /// TextBox2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.TextBox TextBox2; - - /// - /// Button1 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Button Button1; - - /// - /// Label2 控件。 - /// - /// - /// 自动生成的字段。 - /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 - /// - protected global::System.Web.UI.WebControls.Label Label2; - } -} diff --git a/KJDService/KJD_WebService/UserService.asmx b/KJDService/KJD_WebService/UserService.asmx deleted file mode 100644 index d109427..0000000 --- a/KJDService/KJD_WebService/UserService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="UserService.asmx.cs" Class="KJD_Web.UserService" %> diff --git a/KJDService/KJD_WebService/UserService.asmx.cs b/KJDService/KJD_WebService/UserService.asmx.cs deleted file mode 100644 index 44a36ac..0000000 --- a/KJDService/KJD_WebService/UserService.asmx.cs +++ /dev/null @@ -1,396 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UserService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class UserService : System.Web.Services.WebService - { - [WebMethod] - public string hello_world() - { - return "Hello World"; - } - - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void user_login() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().CheckUserLogin(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_package_sign() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().GetPackageSign(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void is_get_return_package() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().IsGetReturnPackage(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void change_password() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().ChangePassword(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().GetSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().UpdateSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().AddSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void delete_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().DelUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_all_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().GetAllUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().UpdateUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().AddUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_user_amount() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UserManage().GetUserAmount(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - - #region 暂时作废 - /* - [WebMethod] - public void GetServer() - { - var softName = GetRequestJsonString(); - - var result = ""; - //result = System.Configuration.ConfigurationManager.ConnectionStrings[softName + "ServerUrl"].ConnectionString; - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void GetUpdateInfo() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new UpadteManage().CheckUpdate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - - } - - [WebMethod] - public byte[] DownloadFile() - { - string file = Server.MapPath("").Substring(0, Server.MapPath("").LastIndexOf("\\")) + "\\bin\\test.txt"; - - System.IO.FileStream fs = null; - if (System.IO.File.Exists(file)) - { - try - { - fs = System.IO.File.OpenRead(file); - int b1; - System.IO.MemoryStream tempStream = new System.IO.MemoryStream(); - while ((b1 = fs.ReadByte()) != -1) - { - tempStream.WriteByte(((byte)b1)); - } - return tempStream.ToArray(); - } - catch (Exception ex) - { - return new byte[0]; - } - finally - { - fs.Close(); - } - } - else - { - return new byte[0]; - } - } - - ///客户端: - - /// - /// 从服务器上下载文件,未用 - /// - /// 源文件:如“E:\\city.txt” - /// 目标文件:如@"d:\city.txt" - //public static void DownFile(string str1, string str2) - //{ - // CRMweb.WebService1SoapClient myWeb = new CRMweb.WebService1SoapClient(); - // byte[] bs = myWeb.DownloadFile(str1); - // System.IO.FileStream stream = new System.IO.FileStream(str2, System.IO.FileMode.CreateNew); - // stream.Write(bs, 0, bs.Length); - // stream.Flush(); - // stream.Close(); - //} - - [WebMethod] - public void AddComment() - { - string result=""; - - //// 输入为querystring - //var jsonText = GetRequestJsonString(); - //try - //{ - // var user_id = RegexUtils.GetStringJson(ref jsonText, "user_id"); - // var comment = RegexUtils.GetStringJson(ref jsonText, "comment"); - // if (string.IsNullOrEmpty(user_id)) - // result = "{\"code\":1,\"msg\":\"未指定用户Id\"}"; - // else if (string.IsNullOrEmpty(comment)) - // result = "{\"code\":2,\"msg\":\"未指定留言内容\"}"; - // else - // { - // string sql = "insert into pepdtp.comment "; - // string sql1 = "("; - // string sql2 = "("; - // if (user_id != null) { sql1 += "user_id,"; sql2 += "'" + user_id + "',"; } - // if (comment != null) { sql1 += "comment,"; sql2 += "'" + comment + "',"; } - // var tTime = "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - // sql1 += "add_time,"; - // sql2 += tTime; - // sql1 = sql1.TrimEnd(',') + ")"; - // sql2 = sql2.TrimEnd(',') + ")"; - // sql = sql + sql1 + " values " + sql2; - - // string conn = System.Configuration.ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; - // MysqlUtils mySql = new MysqlUtils(conn); - // bool isSuccess = mySql.ExecuteNonQuery(sql); - // if (!isSuccess) - // { - // result = "{\"code\":10001,\"msg\":\"添加留言入库出错,请稍后重试!\"}"; - // } - // else - // { - // result = "{\"code\":0,\"msg\":\"添加留言成功!\"}"; - // } - // mySql.Close(); - // } - //} - //catch (Exception ex) - //{ - // result = "{\"code\":10001,\"msg\":\"添加留言出错,请稍后重试!\"}"; - //}; - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void EditUser() - { - string result=""; - - // 输入为querystring - //var jsonText = GetRequestJsonString(); - //try - //{ - // //var role = RegexUtils.GetStringJson(ref jsonText, "role"); - // var name = RegexUtils.GetStringJson(ref jsonText, "name"); - // //var school = RegexUtils.GetStringJson(ref jsonText, "school"); - // var rkxd = RegexUtils.GetStringJson(ref jsonText, "rkxd"); - // var zxxkc = RegexUtils.GetStringJson(ref jsonText, "zxxkc"); - // //var is_import = RegexUtils.GetStringJson(ref jsonText, "is_import"); - // //var password = RegexUtils.GetStringJson(ref jsonText, "password"); - // //var order_id = RegexUtils.GetStringJson(ref jsonText, "order_id"); - // var user_id = RegexUtils.GetStringJson(ref jsonText, "user_id"); - // if (string.IsNullOrEmpty(user_id)) - // result = "{\"code\":1,\"msg\":\"未指定用户Id\"}"; - // else - // { - // string sql = "update pepdtp.user set "; - // //if (role != null) sql += "role=" + role + ","; - // if (name != null) sql += "name='" + name + "',"; - // //if (school != null) sql += "school='" + school + "',"; - // if (rkxd != null) sql += "rkxd='" + rkxd + "',"; - // if (zxxkc != null) sql += "zxxkc='" + zxxkc + "',"; - // //if (is_import != null) sql += "is_import='" + is_import + "',"; - // //if (password != null) sql += "password='" + password + "',"; - // //if (order_id != null) sql += "order_id='" + order_id + "',"; - // sql += "mdy_time='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',"; - // sql = sql.TrimEnd(' ').TrimEnd(','); - // if (user_id.Contains(",")) - // sql += " where user_id in ('" + user_id.Replace(",", "','") + "')"; - // else - // sql += " where user_id='" + user_id + "'"; - - // string conn = System.Configuration.ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; - // MysqlUtils mySql = new MysqlUtils(conn); - // bool isSuccess = mySql.ExecuteNonQuery(sql); - // if (!isSuccess) - // { - // result = "{\"code\":10001,\"msg\":\"修改用户入库出错,请稍后重试!\"}"; - // } - // else - // { - // result = "{\"code\":0,\"msg\":\"修改用户成功!\"}"; - // } - // mySql.Close(); - // } - //} - //catch (Exception ex) - //{ - // result = "{\"code\":19999,\"msg\":\"修改用户出错,请稍后重试!\"}"; - //}; - - Context.Response.Write(result); - Context.Response.End(); - } - */ - #endregion - } -} diff --git a/KJDService/KJD_WebService/Utils/ApiRequestLogger.cs b/KJDService/KJD_WebService/Utils/ApiRequestLogger.cs deleted file mode 100644 index 9e00220..0000000 --- a/KJDService/KJD_WebService/Utils/ApiRequestLogger.cs +++ /dev/null @@ -1,431 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Configuration; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Web; -using Newtonsoft.Json; - -namespace KJD_Web.Utils -{ - /// - /// API 请求录制工具:挂接在 Global.asax 的 BeginRequest / EndRequest, - /// 捕获请求链接(action/service)、请求内容(body/query)与响应, - /// 按请求路径生成文件夹,每一条请求落盘为一个 JSON 文件, - /// 用于 .NET Core 迁移后的回放校验。 - /// 配置(Web.config appSettings): - /// ApiRequestLog = 1 开启 / 0 关闭(默认开启) - /// ApiRequestLogDir = 日志目录(默认 ~/App_Data/ApiLogs) - /// 存储上限:达到 MaxStoredRequests(常量)后跳过不再存储。 - /// 写盘为后台异步:请求线程只入队,由后台线程序列化并落盘,不阻塞接口返回。 - /// - public static class ApiRequestLogger - { - private const string ItemKey = "__ApiRequestLog__"; - private const string FilterItemKey = "__ApiResponseCapture__"; - private const int MaxBodyLogLength = 100000; - - /// 最大存储条数(所有请求路径合计)。达到该数量后,跳过不再存储新请求。 - private const int MaxStoredRequests = 10000; - /// 后台队列最大积压条数;队列满时丢弃新日志(不影响接口返回)。 - private const int MaxQueuedEntries = 5000; - - private static readonly object SyncRoot = new object(); - private static readonly Regex SensitiveKeyValueRegex = new Regex( - @"(?i)(\b(?:password|passwd|pwd|token|access_token|secret|app_secret|client_secret|sign|signature|api_key|authorization|key)=)([^&\s""]*)", - RegexOptions.Compiled); - - private static readonly Regex SensitiveRegex = new Regex( - "\"((?i)password|passwd|pwd|token|access_token|secret|app_secret|client_secret|sign|signature|api_key|authorization|key)\"\\s*:\\s*\"([^\"]*)\"", - RegexOptions.Compiled); - - private static readonly string[] FriendlyPrefixes = - { - "/user/", "/shop/", "/update/", "/order/", "/product/", "/product_third/", "/price/", - "/bxx_user/", "/bxx_shop/", "/bxx_product/", "/bxx_product_third/", "/bxx_price/", - "/dyxd_user/", "/dyxd_shop/", "/dyxd_product/", "/dyxd_product_third/", "/dyxd_price/", - "/wxxd_user/", "/wxxd_shop/", "/wxxd_product/", "/wxxd_product_third/", "/wxxd_price/", "/wxxd_order/" - }; - - private static bool _configLoaded; - private static bool _enabled = true; - private static string _logDir; - /// 已存储条数;-1 表示尚未统计(由后台线程统计)。 - private static long _storedCount = -1; - /// 后台写盘队列:请求线程只入队,不落盘。 - private static readonly BlockingCollection _queue = - new BlockingCollection(new ConcurrentQueue(), MaxQueuedEntries); - private static Thread _writerThread; - /// 已创建过的文件夹缓存,避免每次写盘重复 CreateDirectory。 - private static readonly HashSet _createdDirs = new HashSet(StringComparer.OrdinalIgnoreCase); - - private sealed class RequestRecord - { - public string id; - public DateTime time; - public string service; - public string action; - public string url; - public string path; - public string method; - public string query; - public string body; - public string ip; - public string ua; - } - - /// 待后台写盘的一条日志。 - private sealed class LogEntry - { - public RequestRecord Record; - public byte[] ResponseBytes; - public int StatusCode; - } - - /// 请求入口:解析 action/service、读取并缓存请求体、安装响应捕获。 - public static void BeginRequest(HttpContext context) - { - try - { - EnsureConfig(context); - if (!_enabled) return; - if (Interlocked.Read(ref _storedCount) >= MaxStoredRequests) return; // 达到上限,跳过录制 - - string path = context.Request.Path ?? ""; - if (!IsApiPath(path)) return; - - string service, action; - ParsePath(path, out service, out action); - - string body = ReadBody(context); - - var record = new RequestRecord - { - id = Guid.NewGuid().ToString("N"), - time = DateTime.Now, - service = service, - action = action, - path = path, - method = context.Request.HttpMethod, - url = SafeGet(() => context.Request.Url == null ? path : context.Request.Url.ToString(), path), - query = Desensitize(SafeGet(() => context.Request.Url == null ? "" : context.Request.Url.Query, "")), - body = Truncate(Desensitize(body)), - ip = SafeGet(() => context.Request.UserHostAddress, ""), - ua = SafeGet(() => context.Request.UserAgent, "") - }; - - context.Items[ItemKey] = record; - try { context.Response.Headers["X-Request-Id"] = record.id; } catch { } - - try - { - var filter = new ApiResponseCaptureStream(context.Response.Filter); - context.Response.Filter = filter; - context.Items[FilterItemKey] = filter; - } - catch { } - } - catch { } - } - - /// 请求出口:只把日志放入后台队列,由后台线程序列化并写盘,不阻塞请求。 - public static void EndRequest(HttpContext context) - { - try - { - if (!_enabled) return; - var record = context.Items[ItemKey] as RequestRecord; - if (record == null) return; - - byte[] responseBytes = null; - try - { - var filter = context.Items[FilterItemKey] as ApiResponseCaptureStream; - if (filter != null) responseBytes = filter.GetCapturedBytes(); - } - catch { } - - int status = SafeGet(() => context.Response.StatusCode, 0); - _queue.TryAdd(new LogEntry { Record = record, ResponseBytes = responseBytes, StatusCode = status }); - } - catch { } - } - - private static void EnsureConfig(HttpContext context) - { - if (_configLoaded) return; - lock (SyncRoot) - { - if (_configLoaded) return; - try - { - string sw = ConfigurationManager.AppSettings["ApiRequestLog"]; - if (!string.IsNullOrEmpty(sw)) - _enabled = (sw == "1" || sw.Equals("true", StringComparison.OrdinalIgnoreCase) || sw.Equals("on", StringComparison.OrdinalIgnoreCase)); - - string dir = ConfigurationManager.AppSettings["ApiRequestLogDir"]; - if (string.IsNullOrEmpty(dir)) dir = "~/App_Data/ApiLogs"; - _logDir = dir.StartsWith("~/") ? context.Server.MapPath(dir) : dir; - if (!Directory.Exists(_logDir)) Directory.CreateDirectory(_logDir); - } - catch { } - StartWriterThread(); // 后台线程负责统计条数与落盘 - _configLoaded = true; - } - } - - /// 统计日志目录下已存储的 JSON 请求文件数量。 - private static long CountStoredFiles() - { - try - { - if (!Directory.Exists(_logDir)) return 0; - return Directory.GetFiles(_logDir, "*.json", SearchOption.AllDirectories).LongLength; - } - catch { return 0; } - } - - /// 按请求路径生成存储文件夹(每段路径一层子目录,清洗非法字符、防目录穿越)。 - private static string GetRecordDirectory(string path) - { - string p = (path ?? "").Trim().TrimStart('/').TrimStart('\\'); - if (string.IsNullOrEmpty(p)) p = "_root"; - - var sb = new StringBuilder(_logDir); - string[] segs = p.Split(new[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries); - foreach (string seg in segs) - { - if (seg == "." || seg == "..") continue; // 防目录穿越 - string clean = SanitizeSegment(seg); - if (string.IsNullOrEmpty(clean)) continue; - sb.Append(Path.DirectorySeparatorChar).Append(clean); - } - return sb.ToString(); - } - - /// 清洗路径段为合法的文件夹名。 - private static string SanitizeSegment(string segment) - { - if (string.IsNullOrEmpty(segment)) return null; - char[] invalid = Path.GetInvalidFileNameChars(); - var sb = new StringBuilder(segment.Length); - foreach (char c in segment) - { - sb.Append(Array.IndexOf(invalid, c) >= 0 ? '_' : c); - } - string s = sb.ToString().Trim().TrimEnd('.'); - if (s.Length == 0) return "_"; - if (s.Length > 80) s = s.Substring(0, 80); - return s; - } - - /// 启动后台写盘线程(仅一次)。 - private static void StartWriterThread() - { - if (_writerThread != null) return; - lock (SyncRoot) - { - if (_writerThread != null) return; - var thread = new Thread(WriterLoop) { IsBackground = true, Name = "ApiRequestLogWriter" }; - _writerThread = thread; - thread.Start(); - } - } - - /// 后台写盘主循环:先统计已有条数,再持续消费队列。 - private static void WriterLoop() - { - try - { - if (Interlocked.Read(ref _storedCount) < 0) - Interlocked.Exchange(ref _storedCount, CountStoredFiles()); - } - catch { } - - foreach (LogEntry entry in _queue.GetConsumingEnumerable()) - { - try { WriteEntry(entry); } - catch { } - } - } - - /// 在后台线程中把一条日志序列化并写盘。 - private static void WriteEntry(LogEntry entry) - { - if (Interlocked.Read(ref _storedCount) >= MaxStoredRequests) return; // 达到上限,跳过不再存储 - - string responseText = entry.ResponseBytes == null || entry.ResponseBytes.Length == 0 - ? "" - : Truncate(Desensitize(BytesToText(entry.ResponseBytes))); - - var json = JsonConvert.SerializeObject(new - { - id = entry.Record.id, - time = entry.Record.time.ToString("yyyy-MM-dd HH:mm:ss.fff"), - service = entry.Record.service, - action = entry.Record.action, - method = entry.Record.method, - url = entry.Record.url, - path = entry.Record.path, - query = entry.Record.query, - body = entry.Record.body, - response = responseText, - ip = entry.Record.ip, - ua = entry.Record.ua, - status = entry.StatusCode - }); - - lock (SyncRoot) - { - if (Interlocked.Read(ref _storedCount) >= MaxStoredRequests) return; // 双检,防止超限 - - string dir = GetRecordDirectory(entry.Record.path); - if (_createdDirs.Add(dir)) Directory.CreateDirectory(dir); - - string fileName = entry.Record.time.ToString("yyyyMMdd_HHmmss_fff") + "_" + entry.Record.id + ".json"; - File.WriteAllText(Path.Combine(dir, fileName), json, new UTF8Encoding(false)); // 不带 BOM 的 UTF-8 - Interlocked.Increment(ref _storedCount); - } - } - - /// 响应字节转文本;二进制内容只记录长度。 - private static string BytesToText(byte[] bytes) - { - if (bytes == null || bytes.Length == 0) return ""; - bool binary = false; - for (int i = 0; i < bytes.Length; i++) - { - byte b = bytes[i]; - if (b == 0 || b < 8) { binary = true; break; } - } - if (binary) return ""; - return Encoding.UTF8.GetString(bytes); - } - - private static string ReadBody(HttpContext context) - { - try - { - var input = context.Request.InputStream; - if (input == null || !input.CanRead || input.Length <= 0) return ""; - string text; - using (var reader = new StreamReader(input, Encoding.UTF8, true, 1024, true)) - { - text = reader.ReadToEnd(); - } - try { if (input.CanSeek) input.Position = 0; } catch { } - return text; - } - catch { return ""; } - } - - private static bool IsApiPath(string path) - { - if (string.IsNullOrEmpty(path)) return false; - if (path.IndexOf(".asmx", StringComparison.OrdinalIgnoreCase) >= 0) return true; - foreach (string p in FriendlyPrefixes) - { - if (path.StartsWith(p, StringComparison.OrdinalIgnoreCase)) return true; - } - return false; - } - - private static void ParsePath(string path, out string service, out string action) - { - service = ""; - action = ""; - if (string.IsNullOrEmpty(path)) return; - string p = path.TrimStart('/'); - if (p.EndsWith("/")) p = p.TrimEnd('/'); - string[] segs = p.Split('/'); - if (segs.Length == 0) return; - action = segs[segs.Length - 1]; - if (segs.Length >= 2) - { - int asmxIdx = -1; - for (int i = 0; i < segs.Length; i++) - { - if (segs[i].EndsWith(".asmx", StringComparison.OrdinalIgnoreCase)) { asmxIdx = i; break; } - } - if (asmxIdx >= 0) service = segs[asmxIdx].Replace(".asmx", ""); - else service = segs[0]; - } - else if (p.EndsWith(".asmx", StringComparison.OrdinalIgnoreCase)) - { - service = p.Replace(".asmx", ""); - action = service; - } - } - - private static string Desensitize(string text) - { - if (string.IsNullOrEmpty(text)) return text; - string r = SensitiveRegex.Replace(text, "\"$1\":\"***\""); - r = SensitiveKeyValueRegex.Replace(r, "$1***"); - return r; - } - - private static string Truncate(string text) - { - if (string.IsNullOrEmpty(text) || text.Length <= MaxBodyLogLength) return text; - return text.Substring(0, MaxBodyLogLength) + " [truncated...]"; - } - - private static T SafeGet(Func fn, T def) - { - try { return fn(); } - catch { return def; } - } - - /// 响应捕获流:包装 Response.Filter,缓存写出内容。 - private sealed class ApiResponseCaptureStream : Stream - { - private readonly Stream _inner; - private readonly MemoryStream _buffer = new MemoryStream(); - private string _capturedText; - - public ApiResponseCaptureStream(Stream inner) - { - _inner = inner ?? new MemoryStream(); - } - - public byte[] GetCapturedBytes() - { - return _buffer.ToArray(); - } - - public string GetCapturedText() - { - if (_capturedText == null) _capturedText = BytesToText(_buffer.ToArray()); - return _capturedText; - } - - public override bool CanRead { get { return _inner.CanRead; } } - public override bool CanSeek { get { return _inner.CanSeek; } } - public override bool CanWrite { get { return _inner.CanWrite; } } - public override long Length { get { return _inner.Length; } } - public override long Position { get { return _inner.Position; } set { _inner.Position = value; } } - public override void Flush() { _inner.Flush(); } - public override int Read(byte[] buffer, int offset, int count) { return _inner.Read(buffer, offset, count); } - public override long Seek(long offset, SeekOrigin origin) { return _inner.Seek(offset, origin); } - public override void SetLength(long value) { _inner.SetLength(value); } - public override void Write(byte[] buffer, int offset, int count) - { - _buffer.Write(buffer, offset, count); - _inner.Write(buffer, offset, count); - } - protected override void Dispose(bool disposing) - { - if (disposing) - { - try { GetCapturedText(); } catch { } - try { _inner.Dispose(); } catch { } - } - base.Dispose(disposing); - } - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/EncrypUtil.cs b/KJDService/KJD_WebService/Utils/EncrypUtil.cs deleted file mode 100644 index b3a6021..0000000 --- a/KJDService/KJD_WebService/Utils/EncrypUtil.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Text; -using System.Web; - -namespace KJD_Web.Utils -{ - public class EncrypUtil - { - /// - /// 加密算法 - /// - /// 加密字符串 - /// - public static string Encryption(int s) - { - string sign = $"{s}sdhewu*/fhAAue48485ew5+5%@3485esGFFHFD"; - return GetMd5(sign); - } - - /// - /// MD5加密 - /// - /// - /// - public static string GetMd5(string instring) - { - byte[] result = Encoding.Default.GetBytes(instring.Trim()); - MD5 md5 = new MD5CryptoServiceProvider(); - byte[] output = md5.ComputeHash(result); - return BitConverter.ToString(output).Replace("-", ""); - } - - /// - /// 获取文件MD5值 - /// - /// - /// - public static string GetFileMd5(string FilePath) - { - try - { - FileStream get_file = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read); - System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); - byte[] hash_byte = get_md5.ComputeHash(get_file); - string resule = System.BitConverter.ToString(hash_byte); - resule = resule.Replace("-", ""); - get_file.Close(); - return resule; - } - catch (Exception e) - { - return e.ToString(); - } - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/Extension/Extension.Convert.cs b/KJDService/KJD_WebService/Utils/Extension/Extension.Convert.cs deleted file mode 100644 index 84f1f2b..0000000 --- a/KJDService/KJD_WebService/Utils/Extension/Extension.Convert.cs +++ /dev/null @@ -1,728 +0,0 @@ -using NaiBa.Util.Helper; -using Newtonsoft.Json; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Runtime.Serialization.Formatters.Binary; -using System.Text; -using System.Threading.Tasks; - -namespace NaiBa.Util.Extension -{ - public static partial class Extensions - { - #region 转换为long - /// - /// 将object转换为long,若转换失败,则返回0。不抛出异常。 - /// - /// - /// - public static long ParseToLong(this object obj) - { - if (obj == null) - return 0L; - - try - { - string str = obj.ParseToString(); - if (string.IsNullOrEmpty(str)) - { - return 0; - } - return long.Parse(str); - } - catch - { - return 0L; - } - } - - public static long? ParseToNullableLong(this object obj) - { - if (obj == null) - return null; - - try - { - string str = obj.ParseToString(); - if (string.IsNullOrEmpty(str)) - { - return null; - } - return long.Parse(str); - } - catch - { - return null; - } - } - - /// - /// 将object转换为long,若转换失败,则返回指定值。不抛出异常。 - /// - /// - /// - /// - public static long ParseToLong(this string str, long defaultValue) - { - if (str == null) - return defaultValue; - - try - { - return long.Parse(str); - } - catch - { - return defaultValue; - } - } - #endregion - - #region 转换为int - /// - /// 将object转换为int,若转换失败,则返回0。不抛出异常。 - /// - /// - /// - public static int ParseToInt(this object str) - { - if (str == null) - return 0; - - try - { - return Convert.ToInt32(str); - } - catch - { - return 0; - } - } - - public static int? ParseToNullableInt(this object str) - { - // 1. 快速判断:如果为 null 或 DBNull,直接返回 - if (str == null || str == DBNull.Value) - return null; - - // 2. 尝试直接转换类型(处理 int, short, long 等) - if (str is int intVal) - return intVal; - if (str is long longVal && longVal >= int.MinValue && longVal <= int.MaxValue) - return (int)longVal; - - // 3. 针对字符串进行处理(支持空格、空字符串) - if (str is string strVal) - { - // 如果字符串为 null 或空白,视为 null - if (string.IsNullOrWhiteSpace(strVal)) - return null; - - if (int.TryParse(strVal, NumberStyles.Integer, CultureInfo.InvariantCulture, out int result)) - return result; - - return null; - } - - // 4. 其他类型(如 bool, DateTime)统一返回 null,保持严格 - try - { - return Convert.ToInt32(str); - } - catch - { - return null; - } - return null; - } - - public static int DecimalPointParseToInt(this object str) - { - try - { - string temp = str.ParseToString(); - int i = temp.IndexOf('.'); - if (i > 0) - { - temp = temp.Substring(0, i); - } - return Convert.ToInt32(temp); - } - catch - { - return 0; - } - } - - /// - /// 将object转换为int,若转换失败,则返回指定值。不抛出异常。 - /// null返回默认值 - /// - /// - /// - /// - public static int ParseToInt(this object str, int defaultValue) - { - if (str == null) - { - return defaultValue; - } - try - { - return Convert.ToInt32(str); - } - catch - { - return defaultValue; - } - } - #endregion - - #region 转换为short - /// - /// 将object转换为short,若转换失败,则返回0。不抛出异常。 - /// - /// - /// - public static short ParseToShort(this object obj) - { - try - { - return short.Parse(obj.ToString()); - } - catch - { - return 0; - } - } - - /// - /// 将object转换为short,若转换失败,则返回指定值。不抛出异常。 - /// - /// - /// - public static short ParseToShort(this object str, short defaultValue) - { - try - { - return short.Parse(str.ToString()); - } - catch - { - return defaultValue; - } - } - #endregion - - #region 转换为demical - /// - /// 将object转换为demical,若转换失败,则返回指定值。不抛出异常。 - /// - /// - /// - public static decimal ParseToDecimal(this object str, decimal defaultValue) - { - try - { - return decimal.Parse(str.ToString()); - } - catch - { - return defaultValue; - } - } - - /// - /// 将object转换为demical,若转换失败,则返回0。不抛出异常。 - /// - /// - /// - public static decimal ParseToDecimal(this object str) - { - try - { - return decimal.Parse(str.ToString()); - } - catch - { - return 0; - } - } - public static decimal? ParseToNullableDecimal(this object str) - { - try - { - return decimal.Parse(str.ToString()); - } - catch - { - return null; - } - } - #endregion - - #region 转化为bool - /// - /// 将object转换为bool,若转换失败,则返回false。不抛出异常。 - /// - /// - /// - public static bool ParseToBool(this object str) - { - try - { - if (str is null) - return false; - return bool.Parse(str.ToString()); - } - catch - { - return false; - } - } - - /// - /// 将object转换为bool,若转换失败,则返回指定值。不抛出异常。 - /// - /// - /// - public static bool ParseToBool(this object str, bool result) - { - try - { - return bool.Parse(str.ToString()); - } - catch - { - return result; - } - } - #endregion - - #region 转换为float - /// - /// 将object转换为float,若转换失败,则返回0。不抛出异常。 - /// - /// - /// - public static float ParseToFloat(this object str) - { - try - { - return float.Parse(str.ToString()); - } - catch - { - return 0; - } - } - - /// - /// 将object转换为float,若转换失败,则返回指定值。不抛出异常。 - /// - /// - /// - public static float ParseToFloat(this object str, float result) - { - try - { - return float.Parse(str.ToString()); - } - catch - { - return result; - } - } - #endregion - - #region 转换为Guid - /// - /// 将string转换为Guid,若转换失败,则返回Guid.Empty。不抛出异常。 - /// - /// - /// - public static Guid ParseToGuid(this string str) - { - try - { - return new Guid(str); - } - catch - { - return Guid.Empty; - } - } - #endregion - - #region 转换为DateTime - - public static DateTime? ParseToDateTimeNullable(this string str) - { - try - { - if (string.IsNullOrWhiteSpace(str)) - { - return null; - } - - try - { - return DateTime.Parse(str); - } - catch - { - } - - if (str.Contains("年") && str.Contains("月") && str.Contains("日") && !str.Contains("周")) - str = str.Replace("年", "-").Replace("月", "-").Replace("日", "").Replace("时", ":").Replace("分", ":").Replace("秒", "").Trim(' ', ':'); - if (str.Contains("-") || str.Contains("/")) - { - return DateTime.Parse(str); - } - else - { - int length = str.Length; - switch (length) - { - case 4: - return DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture); - case 6: - return DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture); - case 8: - return DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); - case 10: - return DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture); - case 12: - return DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture); - case 14: - return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); - default: - return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); - } - } - } - catch - { - return null; - } - } - - /// - /// 将string转换为DateTime,若转换失败,则返回日期最小值。不抛出异常。 - /// - /// - /// - public static DateTime ParseToDateTime(this string str) - { - try - { - if (string.IsNullOrWhiteSpace(str)) - { - return DateTime.MinValue; - } - if (str.Contains("-") || str.Contains("/")) - { - return DateTime.Parse(str); - } - else - { - int length = str.Length; - switch (length) - { - case 4: - return DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture); - case 6: - return DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture); - case 8: - return DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); - case 10: - return DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture); - case 12: - return DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture); - case 14: - return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); - default: - return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); - } - } - } - catch - { - return DateTime.MinValue; - } - } - - /// - /// 将string转换为DateTime,若转换失败,则返回默认值。 - /// - /// - /// - /// - public static DateTime ParseToDateTime(this string str, DateTime? defaultValue) - { - try - { - if (string.IsNullOrWhiteSpace(str)) - { - return defaultValue.GetValueOrDefault(); - } - if (str.Contains("-") || str.Contains("/")) - { - return DateTime.Parse(str); - } - else - { - int length = str.Length; - switch (length) - { - case 4: - return DateTime.ParseExact(str, "yyyy", System.Globalization.CultureInfo.CurrentCulture); - case 6: - return DateTime.ParseExact(str, "yyyyMM", System.Globalization.CultureInfo.CurrentCulture); - case 8: - return DateTime.ParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); - case 10: - return DateTime.ParseExact(str, "yyyyMMddHH", System.Globalization.CultureInfo.CurrentCulture); - case 12: - return DateTime.ParseExact(str, "yyyyMMddHHmm", System.Globalization.CultureInfo.CurrentCulture); - case 14: - return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); - default: - return DateTime.ParseExact(str, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture); - } - } - } - catch - { - return defaultValue.GetValueOrDefault(); - } - } - #endregion - - #region 转换为string - /// - /// 将object转换为string,若转换失败,则返回""。不抛出异常。 - /// - /// - /// - public static string ParseToString(this object obj) - { - try - { - if (obj == null) - { - return string.Empty; - } - else - { - if (obj is DateTime) - return (obj as DateTime?).Value.ToString("yyyy-MM-dd HH:mm:ss"); - return obj.ToString(); - } - } - catch - { - return string.Empty; - } - } - - public static string ParseToNullableString(this object obj) - { - try - { - if (obj == null) - { - return null; - } - else - { - if (obj is DateTime) - return (obj as DateTime?).Value.ToString("yyyy-MM-dd HH:mm:ss"); - return obj.ToString(); - } - } - catch - { - return null; - } - } - - public static string ParseToStrings(this object obj, string split = ",") - { - try - { - var list = obj as IEnumerable; - if (list != null) - { - return string.Join(split, list); - } - else - { - return obj.ToString(); - } - } - catch - { - return string.Empty; - } - } - #endregion - - #region 转换为double - /// - /// 将object转换为double,若转换失败,则返回0。不抛出异常。 - /// - /// - /// - public static double ParseToDouble(this object obj) - { - try - { - return double.Parse(obj.ToString()); - } - catch - { - return 0; - } - } - - /// - /// 将object转换为double,若转换失败,则返回指定值。不抛出异常。 - /// - /// - /// - /// - public static double ParseToDouble(this object str, double defaultValue) - { - try - { - return double.Parse(str.ToString()); - } - catch - { - return defaultValue; - } - } - #endregion - - #region 字符串转指定类型Array - public static T[] SplitToArray(this string value, string split = ",") - { - if (string.IsNullOrEmpty(value)) - { - return default(T[]); - } - var arr = value.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries).CastSuper().ToArray(); - return arr; - } - - public static T[] SplitToArray(this string value, string[] split) - { - if (string.IsNullOrEmpty(value)) - { - return default(T[]); - } - var arr = value.Split(split, StringSplitOptions.RemoveEmptyEntries).CastSuper().ToArray(); - return arr; - } - #endregion - - #region 字符串转指定类型List - public static List SplitToList(this string value, string split = ",") - { - if (string.IsNullOrEmpty(value)) - { - return new List(); - } - var list = value.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries).CastSuper().ToList(); - return list; - } - - public static List SplitToList(this string value, string[] split) - { - if (string.IsNullOrEmpty(value)) - { - return new List(); - } - var list = value.Split(split, StringSplitOptions.RemoveEmptyEntries).CastSuper().ToList(); - return list; - } - #endregion - - #region 强制转换类型 - /// - /// 强制转换类型 - /// - /// - /// - /// - public static IEnumerable CastSuper(this IEnumerable source) - { - foreach (object item in source) - { - yield return (TResult)Convert.ChangeType(item, typeof(TResult)); - } - } - #endregion - - #region Object转换为Json - public static string ParseToJson(this object obj) - { - return JsonConvert.SerializeObject(obj); - } - #endregion - - #region Json转为Object - public static T ParseToObject(this string json) - { - if (string.IsNullOrEmpty(json)) - { - return Activator.CreateInstance(); - } - return JsonConvert.DeserializeObject(json); - } - #endregion - - #region 深拷贝(克隆出一个新对象,拷贝对象里面的数据和子对象) - public static T DeepClone(this T o) - { - return o.ParseToJson().ParseToObject(); - // 这种方式在用 Obfuscator 的时候有问题 - //using (MemoryStream stream = new MemoryStream()) - //{ - // BinaryFormatter formatter = new BinaryFormatter(); - // formatter.Serialize(stream, o); - // stream.Position = 0; - // return (T)formatter.Deserialize(stream); - //} - } - #endregion - - #region 浅拷贝(拷贝对象里面的数据[property and field],但不拷贝对象里面的子对象) - public static void ShadowClone(this T1 source, ref T2 destination) - { - var sourceMembers = ReflectionHelper.GetMembers(source.GetType()); - var destinationMembers = ReflectionHelper.GetMembers(destination.GetType()); - - // Copy data from source to destination - foreach (var sourceMember in sourceMembers) - { - if (!ReflectionHelper.CanRead(sourceMember)) - { - continue; - } - var destinationMember = destinationMembers.FirstOrDefault(x => x.Name.ToLower() == sourceMember.Name.ToLower()); - if (destinationMember == null || !ReflectionHelper.CanWrite(destinationMember)) - { - continue; - } - ReflectionHelper.SetObjectValue(ref destination, destinationMember, ReflectionHelper.GetMemberValue(source, sourceMember)); - } - } - #endregion - } -} diff --git a/KJDService/KJD_WebService/Utils/Extension/Extension.Enum.cs b/KJDService/KJD_WebService/Utils/Extension/Extension.Enum.cs deleted file mode 100644 index 707f49a..0000000 --- a/KJDService/KJD_WebService/Utils/Extension/Extension.Enum.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace NaiBa.Util.Extension -{ - public static partial class Extensions - { - #region 枚举成员转成dictionary类型 - /// - /// 转成dictionary类型 - /// - /// - /// - public static Dictionary EnumToDictionary(this Type enumType) - { - Dictionary dictionary = new Dictionary(); - Type typeDescription = typeof(DescriptionAttribute); - FieldInfo[] fields = enumType.GetFields(); - int sValue = 0; - string sText = string.Empty; - foreach (FieldInfo field in fields) - { - if (field.FieldType.IsEnum) - { - sValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)); - object[] arr = field.GetCustomAttributes(typeDescription, true); - if (arr.Length > 0) - { - DescriptionAttribute da = (DescriptionAttribute)arr[0]; - sText = da.Description; - } - else - { - sText = field.Name; - } - dictionary.Add(sValue, sText); - } - } - return dictionary.OrderBy(p => p.Key).ToDictionary(p => p.Key, p => p.Value); - } - - /// - /// 枚举成员转成键值对Json字符串 - /// - /// - /// - public static string EnumToDictionaryString(this Type enumType) - { - List> dictionaryList = EnumToDictionary(enumType).ToList(); - var sJson = JsonConvert.SerializeObject(dictionaryList); - return sJson; - } - #endregion - - #region 根据类型获取枚举的描述 - /// - /// 获取枚举值对应的描述 - /// - /// - /// - public static string GetDescription(this System.Enum enumType) - { - FieldInfo EnumInfo = enumType.GetType().GetField(enumType.ToString()); - if (EnumInfo != null) - { - DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[])EnumInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); - if (EnumAttributes.Length > 0) - { - return EnumAttributes[0].Description; - } - } - return enumType.ToString(); - } - #endregion - - #region 根据值获取枚举的描述 - public static string GetDescriptionByEnum(this object obj) - { - var tEnum = System.Enum.Parse(typeof(T), obj.ParseToString()) as System.Enum; - var description = tEnum.GetDescription(); - return description; - } - #endregion - - #region 根据描述获取枚举值 - public static int GetEnumValueByDescription(this string description) - { - Dictionary dict = typeof(T).EnumToDictionary(); - int value = dict.Where(p => p.Value == description).Select(p => p.Key).FirstOrDefault(); - return value; - } - #endregion - - #region 根据枚举名称获取值 - public static int GetEnumValueByName(this string name) - { - return (int)System.Enum.Parse(typeof(T), name); - } - #endregion - - #region 根据枚举值获取名称 - public static object GetEnumNameByValue(this int value) - { - return System.Enum.ToObject(typeof(T), value); - } - #endregion - } -} diff --git a/KJDService/KJD_WebService/Utils/Extension/Extension.Exception.cs b/KJDService/KJD_WebService/Utils/Extension/Extension.Exception.cs deleted file mode 100644 index 11447f3..0000000 --- a/KJDService/KJD_WebService/Utils/Extension/Extension.Exception.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace NaiBa.Util.Extension -{ - public static partial class Extensions - { - public static Exception GetOriginalException(this Exception ex) - { - if (ex.InnerException == null) return ex; - - return ex.InnerException.GetOriginalException(); - } - } -} diff --git a/KJDService/KJD_WebService/Utils/Extension/Extension.Linq.cs b/KJDService/KJD_WebService/Utils/Extension/Extension.Linq.cs deleted file mode 100644 index 4eadb77..0000000 --- a/KJDService/KJD_WebService/Utils/Extension/Extension.Linq.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Text; -using System.Threading.Tasks; - -namespace NaiBa.Util.Extension -{ - public static class LinqExtensions - { - public static Expression Property(this Expression expression, string propertyName) - { - return Expression.Property(expression, propertyName); - } - public static Expression AndAlso(this Expression left, Expression right) - { - return Expression.AndAlso(left, right); - } - public static Expression Call(this Expression instance, string methodName, params Expression[] arguments) - { - return Expression.Call(instance, instance.Type.GetMethod(methodName), arguments); - } - public static Expression GreaterThan(this Expression left, Expression right) - { - return Expression.GreaterThan(left, right); - } - public static Expression ToLambda(this Expression body, params ParameterExpression[] parameters) - { - return Expression.Lambda(body, parameters); - } - - public static Expression> True() { return param => true; } - - public static Expression> False() { return param => false; } - - /// - /// 组合And - /// - /// - public static Expression> And(this Expression> first, Expression> second) - { - return first.Compose(second, Expression.AndAlso); - } - /// - /// 组合Or - /// - /// - public static Expression> Or(this Expression> first, Expression> second) - { - return first.Compose(second, Expression.OrElse); - } - - /// - /// Combines the first expression with the second using the specified merge function. - /// - static Expression Compose(this Expression first, Expression second, Func merge) - { - var map = first.Parameters - .Select((f, i) => new { f, s = second.Parameters[i] }) - .ToDictionary(p => p.s, p => p.f); - var secondBody = ParameterRebinder.ReplaceParameters(map, second.Body); - return Expression.Lambda(merge(first.Body, secondBody), first.Parameters); - } - - /// - /// ParameterRebinder - /// - private class ParameterRebinder : ExpressionVisitor - { - /// - /// The ParameterExpression map - /// - readonly Dictionary map; - /// - /// Initializes a new instance of the class. - /// - /// The map. - ParameterRebinder(Dictionary map) - { - this.map = map ?? new Dictionary(); - } - /// - /// Replaces the parameters. - /// - /// The map. - /// The exp. - /// Expression - public static Expression ReplaceParameters(Dictionary map, Expression exp) - { - return new ParameterRebinder(map).Visit(exp); - } - /// - /// Visits the parameter. - /// - /// The p. - /// Expression - protected override Expression VisitParameter(ParameterExpression p) - { - ParameterExpression replacement; - - if (map.TryGetValue(p, out replacement)) - { - p = replacement; - } - return base.VisitParameter(p); - } - } - } -} diff --git a/KJDService/KJD_WebService/Utils/Extension/Extension.Validate.cs b/KJDService/KJD_WebService/Utils/Extension/Extension.Validate.cs deleted file mode 100644 index 52db466..0000000 --- a/KJDService/KJD_WebService/Utils/Extension/Extension.Validate.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Web; -using NaiBa.Util.Helper; -using Newtonsoft.Json.Linq; - -namespace NaiBa.Util.Extension -{ - public static partial class Extensions - { - public static bool IsNullOrEmpty(this object value) - { - if (value != null && !string.IsNullOrEmpty(value.ParseToString())) - { - return false; - } - else - { - return true; - } - } - - public static bool IsNullOrZero(this object value) - { - if (value == null || string.IsNullOrEmpty(value.ParseToString()) || value.ParseToString().Trim() == "0") - { - return true; - } - else - { - return false; - } - } - - public static bool IsNumericType(this object value) - { - if (value == null) - { - return false; - } - switch (Type.GetTypeCode(value.GetType())) - { - case TypeCode.Byte: - case TypeCode.SByte: - case TypeCode.UInt16: - case TypeCode.UInt32: - case TypeCode.UInt64: - case TypeCode.Int16: - case TypeCode.Int32: - case TypeCode.Int64: - case TypeCode.Decimal: - case TypeCode.Double: - case TypeCode.Single: - return true; - default: - return false; - } - } - - public static bool IsStringType(this object value) - { - if (value == null) - { - return false; - } - switch (Type.GetTypeCode(value.GetType())) - { - case TypeCode.String: - return true; - default: - return false; - } - } - - public static bool IsNumber(this string value) - { - return RegexHelper.IsNumber(value); - } - - public static bool IsAlphabet(this string value) - { - return RegexHelper.IsAlphabet(value); - } - - public static bool IsAlphabetOrNumber(this string value) - { - return RegexHelper.IsAlphabetOrNumber(value); - } - - public static bool IsJson(this string value) - { - return JsonHelper.IsJson(value); - } - - public static bool IsJTokenNullOrEmpty(this JToken token) - { - return (token == null) || - (token.Type == JTokenType.Array && !token.HasValues) || - (token.Type == JTokenType.Object && !token.HasValues) || - (token.Type == JTokenType.String && token.ToString() == string.Empty) || - (token.Type == JTokenType.Null); - } - - public static bool IsAjaxRequest(this HttpRequest request) - { - if (request == null) - throw new ArgumentNullException("request"); - - if (request.Headers != null) - return request.Headers["X-Requested-With"] == "XMLHttpRequest"; - return false; - } - } -} diff --git a/KJDService/KJD_WebService/Utils/Helper/HtmlHelper.cs b/KJDService/KJD_WebService/Utils/Helper/HtmlHelper.cs deleted file mode 100644 index db9f242..0000000 --- a/KJDService/KJD_WebService/Utils/Helper/HtmlHelper.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Web; -using NaiBa.Util.Extension; - -namespace NaiBa.Util.Helper -{ - public class HtmlHelper - { - public static string HtmlEncode(string html) - { - if (string.IsNullOrEmpty(html)) - { - return string.Empty; - } - else - { - return HttpUtility.HtmlEncode(html); - } - } - - public static string HtmlDecode(string url) - { - if (string.IsNullOrEmpty(url)) - { - return string.Empty; - } - else - { - return HttpUtility.HtmlDecode(url); - } - } - - /// - /// Unicode解码 - /// - /// - /// - public static string UnicodeDecode(string html) - { - html = WebUtility.HtmlDecode(html); - - Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled); - return reUnicode.Replace(html, m => - { - short c; - if (short.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) - { - return "" + (char)c; - } - return m.Value; - }); - } - - #region Resove - public static string Resove(string html, string prefix, string subfix = "") - { - int inl = html.IndexOf(prefix); - if (inl == -1) - { - prefix = prefix.Replace("\"", "'"); - subfix = subfix.Replace("\"", "'"); - inl = html.IndexOf(prefix); - } - if (inl == -1) - { - return null; - } - inl += prefix.Length; - if (!string.IsNullOrEmpty(subfix)) - { - int inl2 = html.IndexOf(subfix, inl); - if (inl2 == -1) - { - return null; - } - string result = html.Substring(inl, inl2 - inl); - return result; - } - else - { - string result = html.Substring(inl); - return result; - } - } - #endregion - - #region ResoveReverse - public static string ResoveReverse(string html, string subfix, string prefix) - { - int inl = html.IndexOf(subfix); - if (inl == -1) - { - return null; - } - string subString = html.Substring(0, inl); - int inl2 = subString.LastIndexOf(prefix); - if (inl2 == -1) - { - return null; - } - string s = subString.Substring(inl2 + prefix.Length, subString.Length - inl2 - prefix.Length); - return s; - } - #endregion - - #region ResoveList - public static List ResoveList(string html, string prefix, string subfix) - { - List list = new List(); - int index = 0; - do - { - index = html.IndexOf(prefix, index); - if (index == -1) - { - break; - } - index += prefix.Length; - int indexEnd = html.IndexOf(subfix, index); - if (indexEnd > 0) - { - string content = html.Substring(index, indexEnd - index); - list.Add(content); - } - index = indexEnd; - } - while (index > -1); - return list; - } - #endregion - - #region ResoveListByAT - public static List ResoveListByAT(string html) - { - List list = new List(); - - int index = html.IndexOf('@'); - while (index > 0) - { - int indexx = html.LastIndexOf("'", index); //向前一个单引号 - int indexy = html.IndexOf("'", index + 1); //向后一个单引号 - string s78 = html.Substring(indexx, indexy - indexx); - s78 = s78.Replace("'", ""); - list.Add(s78); - index = html.IndexOf('@', indexy); - } - return list; - } - #endregion - - /// - /// 清除HTML代码 - /// - /// - public static string ClearHtml(string html) - { - html = html.ParseToString(); - html = Regex.Replace(html, @"(|||)", string.Empty); - html = Regex.Replace(html, @"()", string.Empty); - html = Regex.Replace(html, "(<[^>]*?>)", string.Empty); - return html; - } - - public static string GetHtmlText(string html) - { - html = html.ParseToString(); - html = Regex.Replace(html, "<.*?>", string.Empty); - return html; - } - - /// - /// 清除HTML代码A标签 - /// - /// - /// - public static string ClearHtmlA(string html) - { - html = html.ParseToString(); - html = Regex.Replace(html, "(]*>)", "", RegexOptions.IgnoreCase); - return html.Trim(); - } - - public static string AddEscapeCharacter(string html) - { - html = html.ParseToString(); - html = html.Replace("\"", "\\\""); - html = html.Replace("'", "\\'"); - return html; - } - - public static string TrimBOM(string html) - { - html = html.Trim(new char[] { '\uFEFF' }); - return html; - } - - public static string TrimJsonp(string json) - { - int start = json.IndexOf("{"); - int end = json.LastIndexOf("}"); - if (start > 0 && end > 0) - { - return json.Substring(start, end - start + 1); - } - return json; - } - } -} diff --git a/KJDService/KJD_WebService/Utils/Helper/JsonHelper.cs b/KJDService/KJD_WebService/Utils/Helper/JsonHelper.cs deleted file mode 100644 index e064416..0000000 --- a/KJDService/KJD_WebService/Utils/Helper/JsonHelper.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Newtonsoft.Json.Serialization; -using NaiBa.Util.Extension; - -namespace NaiBa.Util.Helper -{ - public class JsonHelper - { - public static bool IsJson(string html) - { - if (string.IsNullOrEmpty(html)) - { - return false; - } - html = html.Trim(); - if ((html.StartsWith("{") && html.EndsWith("}")) || // For object - (html.StartsWith("[") && html.EndsWith("]"))) // For array - { - try - { - var obj = JToken.Parse(html); - return true; - } - catch - { - return false; - } - } - return false; - } - - public static string JsonAlphabeticaly(string json) - { - json = json.ParseToString().Trim(); - if (json.StartsWith("{")) - { - var jObj = JObject.Parse(json); - JObject result = new JObject(); - OrderJson(result, jObj); - return result.ToString(); - } - else - { - var jArr = JArray.Parse(json); - JArray result = new JArray(); - foreach (var arr in jArr) - { - result.Add(new JObject()); - OrderJson((JObject)result[result.Count - 1], (JObject)arr); - } - return result.ToString(); - } - } - - public static string SerializeAlphabeticaly(object obj) - { - return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new OrderedContractResolver() }); - } - - public static string TrimJsonp(string json) - { - return HtmlHelper.TrimJsonp(json); - } - - #region 私有方法 - private static void OrderJson(JObject jObj, JObject item) - { - foreach (var property in item.Children().OrderBy(p => p.Name)) - { - switch (property.Value.Type.ToString()) - { - case "Array": - var jArr = new JArray(); - jObj.Add(property.Name, jArr); - for (int i = 0; i < property.Value.Count(); i++) - { - switch (property.Value[i].Type.ToString()) - { - case "Object": - var obj = new JObject(); - jArr.Add(obj); - OrderJson(obj, (JObject)property.Value[i]); - break; - - default: - jArr.Add(property.Value[i]); - break; - } - } - break; - - case "Object": - jObj.Add(property.Name, new JObject()); - OrderJson((JObject)jObj[property.Name], (JObject)property.Value); - break; - - default: - jObj.Add(property.Name, property.Value); - break; - } - } - } - #endregion - } - - public class OrderedContractResolver : DefaultContractResolver - { - protected override IList CreateProperties(Type type, MemberSerialization memberSerialization) - { - return base.CreateProperties(type, memberSerialization) - .OrderBy(p => p.Order ?? int.MaxValue) // Honour any explit ordering first - .ThenBy(p => p.PropertyName) - .ToList(); - } - } -} diff --git a/KJDService/KJD_WebService/Utils/Helper/ReflectionHelper.cs b/KJDService/KJD_WebService/Utils/Helper/ReflectionHelper.cs deleted file mode 100644 index bf2a601..0000000 --- a/KJDService/KJD_WebService/Utils/Helper/ReflectionHelper.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Collections.Concurrent; -using System.Reflection; -using System.Linq.Expressions; -using NaiBa.Util.Extension; - -namespace NaiBa.Util.Helper -{ - public class ReflectionHelper - { - private static ConcurrentDictionary dictCache = new ConcurrentDictionary(); - - #region 得到类里面的属性集合 - public static PropertyInfo[] GetProperties(Type type, string[] columns = null) - { - PropertyInfo[] properties = null; - if (dictCache.ContainsKey(type.FullName)) - { - properties = dictCache[type.FullName] as PropertyInfo[]; - } - else - { - properties = type.GetProperties(); - dictCache.TryAdd(type.FullName, properties); - } - - if (columns != null && columns.Length > 0) - { - // 按columns顺序返回属性 - var columnPropertyList = new List(); - foreach (var column in columns) - { - var columnProperty = properties.Where(p => p.Name == column).FirstOrDefault(); - if (columnProperty != null) - { - columnPropertyList.Add(columnProperty); - } - } - return columnPropertyList.ToArray(); - } - else - { - return properties; - } - } - #endregion - - public static List GetMembers(Type type) - { - var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; - var members = new List(); - members.AddRange(type.GetProperties(flags)); - members.AddRange(type.GetFields(flags)); - return members; - } - - public static void SetObjectPropertyValue(string propertyName, object value) - { - var type = typeof(T); - var field = type.GetProperty(propertyName); - if (field != null) - { - field.SetValue(null, value); - } - } - - public static void SetObjectPropertyValue(object obj, string propertyName, object value) - { - if (obj != null) - { - PropertyInfo propertyInfo = GetProperties(obj.GetType()).Where(p => p.Name == propertyName).FirstOrDefault(); - // make sure object has the property we are after - if (propertyInfo != null) - { - switch (propertyInfo.PropertyType.FullName) - { - case "System.Int32": propertyInfo.SetValue(obj, value.ParseToInt(), null); break; - case "System.Int64": propertyInfo.SetValue(obj, value.ParseToLong(), null); break; - case "System.Decimal": propertyInfo.SetValue(obj, value.ParseToDecimal(), null); break; - case "System.Double": propertyInfo.SetValue(obj, value.ParseToDouble(), null); break; - default: - if (propertyInfo.PropertyType.GenericTypeArguments.Length > 0) - { - switch (propertyInfo.PropertyType.GenericTypeArguments[0].FullName) - { - case "System.DateTime": - if (!string.IsNullOrEmpty(value.ParseToString())) - { - propertyInfo.SetValue(obj, value.ParseToString().ParseToDateTime(), null); - } - break; - - case "System.Decimal": - propertyInfo.SetValue(obj, value.ParseToDecimal(), null); - break; - } - - } - else - { - propertyInfo.SetValue(obj, value, null); - } - break; - } - } - } - } - - public static object GetObjectPropertyValue(object obj, string propertyName) - { - if (obj != null) - { - PropertyInfo propertyInfo = GetProperties(obj.GetType()).Where(p => p.Name == propertyName).FirstOrDefault(); - // make sure object has the property we are after - if (propertyInfo != null) - { - return propertyInfo.GetValue(obj); - } - } - return null; - } - - public static string GetGenericName(Type type) - { - if (type.GetGenericArguments().Length > 0) - { - return GetGenericName(type.GetGenericArguments().FirstOrDefault()); - } - else - { - if (type.GetGenericArguments().FirstOrDefault() != null) - { - return type.GetGenericArguments().FirstOrDefault().Name; - } - else - { - return type.Name; - } - } - } - - public static string GetMemberName(Expression> memberExpression) - { - MemberExpression expressionBody = (MemberExpression)memberExpression.Body; - return expressionBody.Member.Name; - } - - public static void SetObjectValue(ref T obj, MemberInfo member, object value) - { - // Boxing method used for modifying structures - var boxed = obj.GetType().IsValueType ? (object)obj : obj; - SetMemberValue(ref boxed, member, value); - obj = (T)boxed; - } - - public static void SetMemberValue(ref T obj, MemberInfo member, object value) - { - if (IsProperty(member)) - { - var prop = (PropertyInfo)member; - if (prop.SetMethod != null) - { - prop.SetValue(obj, value); - } - } - else if (IsField(member)) - { - var field = (FieldInfo)member; - field.SetValue(obj, value); - } - } - - public static object GetMemberValue(object obj, MemberInfo member) - { - object result = null; - if (IsProperty(member)) - { - var prop = (PropertyInfo)member; - result = prop.GetValue(obj, prop.GetIndexParameters().Count() == 1 ? new object[] { null } : null); - } - else if (IsField(member)) - { - var field = (FieldInfo)member; - result = field.GetValue(obj); - } - return result; - } - - public static bool CanWrite(MemberInfo member) - { - return IsProperty(member) ? ((PropertyInfo)member).CanWrite : IsField(member); - } - - public static bool CanRead(MemberInfo member) - { - return IsProperty(member) ? ((PropertyInfo)member).CanRead : IsField(member); - } - - #region 私有方法 - private static bool IsProperty(MemberInfo member) - { - return IsType(member.GetType(), typeof(PropertyInfo)); - } - - private static bool IsField(MemberInfo member) - { - return IsType(member.GetType(), typeof(FieldInfo)); - } - - private static bool IsType(System.Type type, System.Type targetType) - { - return type.Equals(targetType) || type.IsSubclassOf(targetType); - } - #endregion - } -} diff --git a/KJDService/KJD_WebService/Utils/Helper/RegexHelper.cs b/KJDService/KJD_WebService/Utils/Helper/RegexHelper.cs deleted file mode 100644 index fc52c49..0000000 --- a/KJDService/KJD_WebService/Utils/Helper/RegexHelper.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace NaiBa.Util.Helper -{ - public class RegexHelper - { - // (.+?) - - /// - /// 返回正则对象所有结果 - /// - /// - /// - /// - public static MatchCollection GetMatchCollection(string html, string regex) - { - if (string.IsNullOrEmpty(html)) - { - return null; - } - return Regex.Matches(html, regex, RegexOptions.IgnoreCase); - } - - /// - /// 返回单个正则分析结果 - /// - /// - /// - /// - public static string GetMatch(string html, string regex, int index = 0) - { - if (string.IsNullOrEmpty(html)) - { - return string.Empty; - } - MatchCollection mc = Regex.Matches(html, regex, RegexOptions.IgnoreCase); - if (mc.Count > 0) - { - return mc[index].Groups[1].Value.ToString(); - } - return string.Empty; - } - - public static string GetMatchWithSingleLine(string html, string regex) - { - if (string.IsNullOrEmpty(html)) - { - return string.Empty; - } - MatchCollection mc = Regex.Matches(html, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline); - if (mc.Count > 0) - { - return mc[0].Groups[1].ToString(); - } - return string.Empty; - } - - public static bool IsNumber(string str) - { - Regex regex = new Regex(@"^[0-9\.]+$"); - return regex.IsMatch(str); - } - - public static bool IsAlphabet(string str) - { - Regex regex = new Regex(@"^[A-Za-z]+$"); - return regex.IsMatch(str); - } - - public static bool IsAlphabetOrNumber(string str) - { - Regex regex = new Regex(@"^[A-Za-z0-9]+$"); - return regex.IsMatch(str); - } - } -} diff --git a/KJDService/KJD_WebService/Utils/HtmlUtils.cs b/KJDService/KJD_WebService/Utils/HtmlUtils.cs deleted file mode 100644 index ccddaea..0000000 --- a/KJDService/KJD_WebService/Utils/HtmlUtils.cs +++ /dev/null @@ -1,416 +0,0 @@ -using KJD_Web.Upload.Prod; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Net; -using System.Net.Cache; -using System.Net.Security; -using System.Runtime.InteropServices; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Web; - -namespace KJD_Web.Utils -{ - public class HtmlUtils - { - static public string UrlDecodeUtf8(string value) - { - if (value == null) - { - return null; - } - Encoding encoding = Encoding.UTF8;//你的编码 也可能是GBK - int length = value.Length; - UrlDecoder decoder = new UrlDecoder(length, encoding); - for (int i = 0; i < length; i++) - { - char ch = value[i]; - if (ch == '+') - { - ch = ' '; - } - else if ((ch == '%') && (i < (length - 2))) - { - if ((value[i + 1] == 'u') && (i < (length - 5))) - { - int num3 = HexToInt(value[i + 2]); - int num4 = HexToInt(value[i + 3]); - int num5 = HexToInt(value[i + 4]); - int num6 = HexToInt(value[i + 5]); - if (((num3 < 0) || (num4 < 0)) || ((num5 < 0) || (num6 < 0))) - { - goto Label_010B; - } - ch = (char)((((num3 << 12) | (num4 << 8)) | (num5 << 4)) | num6); - i += 5; - decoder.AddChar(ch); - continue; - } - int num7 = HexToInt(value[i + 1]); - int num8 = HexToInt(value[i + 2]); - if ((num7 >= 0) && (num8 >= 0)) - { - byte b = (byte)((num7 << 4) | num8); - i += 2; - decoder.AddByte(b); - continue; - } - } - Label_010B: - if ((ch & 0xff80) == 0) - { - decoder.AddByte((byte)ch); - } - else - { - decoder.AddChar(ch); - } - } - return decoder.GetString(); - } - - /// - /// URL UTF-8转码 - /// - /// - /// - public static string UrlEncodeUtf8(string IndexKey) - { - if (String.IsNullOrEmpty(IndexKey)) - return ""; - return HttpUtility.UrlEncode(IndexKey, Encoding.UTF8); - } - - /// - /// post 数据 - /// - /// - /// - /// - public static string PostUtf8(string url, StringBuilder postData) - { - try - { - WebClientx wc = new WebClientx(); - byte[] sendData = Encoding.GetEncoding("utf-8").GetBytes(postData.ToString()); - wc.Headers.Add("ContentLength", sendData.Length.ToString()); - wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); - wc.Proxy = null; - return Encoding.UTF8.GetString(wc.UploadData(url, "POST", sendData)); - } - catch - { - return ""; - } - } - - /// - /// 浏览器标识 - /// - public static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 -Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 -Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 -Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 -Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) -Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 -Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 -Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko -Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 -Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) -Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 -Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 -Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 -Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; - - /// - /// post 数据 - /// - /// - /// - /// - public static string PostUtf8(string url, string postData, string contentType = "") - { - //return PostUtf8(url, Encoding.UTF8.GetBytes(postData)); - - bool isError = false; - string[] l = UserAgent.Split('\n'); - reTry: - try - { - string codeType = "utf-8"; - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); - request.UserAgent = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)].Trim(); - byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(postData); - request.Method = "POST"; - request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; - request.Timeout = 30 * 1000; - request.ReadWriteTimeout = 30 * 1000; - request.Proxy = null; - request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; - //if (BaseClass.SaLevel > 0) - { - //260306 采用GZip/deflate压缩 - //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br, zstd"); - //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); - } - if (url.StartsWith("https://openapi.jinritemai.com/")) - { - request.Headers.Add("X-USE-BOE", "1"); - request.Headers.Add("Origin-From", "djt_prod"); - request.Headers.Add("djt_prod", "boe_time_sku"); - } - if (!string.IsNullOrEmpty(contentType)) - { - request.ContentType = contentType; - } - request.ContentLength = byteData.Length; - request.Referer = url; - request.CookieContainer = new CookieContainer(); - request.AllowAutoRedirect = false; - using (Stream requestStream = request.GetRequestStream()) - { - requestStream.Write(byteData, 0, byteData.Length); - } - HttpWebResponse response = (HttpWebResponse)request.GetResponse(); - - Stream receiveStream = response.GetResponseStream(); - StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); - - return readStream.ReadToEnd().Trim(); - } - catch (Exception e) - { - //{ - // isError = true; - // goto reTry; - //} - Thread.Sleep(50); - return ""; - } - - } - - - public static int HexToInt(char h) - { - if ((h >= '0') && (h <= '9')) - { - return (h - '0'); - } - if ((h >= 'a') && (h <= 'f')) - { - return ((h - 'a') + 10); - } - if ((h >= 'A') && (h <= 'F')) - { - return ((h - 'A') + 10); - } - return -1; - } - } - /// - /// class UrlDecoder - /// - class UrlDecoder - { - // Fields - private int _bufferSize; - private byte[] _byteBuffer; - private char[] _charBuffer; - private Encoding _encoding; - private int _numBytes; - private int _numChars; - - // Methods - internal UrlDecoder(int bufferSize, Encoding encoding) - { - this._bufferSize = bufferSize; - this._encoding = encoding; - this._charBuffer = new char[bufferSize]; - } - - internal void AddByte(byte b) - { - if (this._byteBuffer == null) - { - this._byteBuffer = new byte[this._bufferSize]; - } - this._byteBuffer[this._numBytes++] = b; - } - - internal void AddChar(char ch) - { - if (this._numBytes > 0) - { - this.FlushBytes(); - } - this._charBuffer[this._numChars++] = ch; - } - - private void FlushBytes() - { - if (this._numBytes > 0) - { - this._numChars += this._encoding.GetChars(this._byteBuffer, 0, this._numBytes, this._charBuffer, this._numChars); - this._numBytes = 0; - } - } - - internal string GetString() - { - if (this._numBytes > 0) - { - this.FlushBytes(); - } - if (this._numChars > 0) - { - return new string(this._charBuffer, 0, this._numChars); - } - return string.Empty; - } - } - - - /// - /// 下载器 - /// - public class WebClientx : WebClient - { - /// - /// 默认超时多少秒 - /// - public int Timeout = 100; - /// - /// 允许自动重定向 - /// - public bool AllowAutoRedirect = true; - public bool IsDelete = false; - - private string OutIP = ""; - /// - /// 证书列表 - /// - public static List X509List = new List(); - /// - /// 绑定IP - /// - /// - public WebClientx(string outIp) - { - OutIP = outIp; - CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); - } - - public WebClientx() - { - } - /// - /// 重写 - /// - /// - /// - protected override WebRequest GetWebRequest(Uri address) - { - string s = address.ToString(); - if (string.IsNullOrEmpty(s) || s.Length < 7 || !(s.Substring(0, 7).ToLower() == "http://" || s.Substring(0, 8).ToLower() == "https://")) - return null; - var request = (HttpWebRequest)base.GetWebRequest(address); - request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; - request.Timeout = 1000 * Timeout; - request.ReadWriteTimeout = 500 * Timeout; - request.AllowAutoRedirect = AllowAutoRedirect; - ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); - if (IsDelete) - request.Method = "DELETE"; - if (!string.IsNullOrEmpty(OutIP)) - { - request.ServicePoint.BindIPEndPointDelegate = (servicePoint, remoteEndPoint, retryCount) => - { - servicePoint.MaxIdleTime = 20; - return new IPEndPoint(IPAddress.Parse(OutIP), 0); - }; - } - if (request.RequestUri.Scheme == "https") //挂接验证服务端证书的回调 - { - X509Certificate2 x509c = null; - for (int i = 0; i < X509List.Count; i++) - { - if (X509List[i].Domain.ToLower() == address.Host.ToLower()) - { - x509c = X509List[i].X509; - break; - } - } - if (x509c == null) - { - ServicePointManager.ServerCertificateValidationCallback = - new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback); - try - { - X509Store _store = new X509Store(StoreName.My, StoreLocation.LocalMachine); - _store.Open(OpenFlags.ReadWrite); - string findValue = Dns.GetHostName(); //获取本地主机名称作为证书查找的参数 - X509Certificate2Collection _certsCollection = - _store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false); - if (_certsCollection.Count > 0) - { - x509c = _certsCollection[0]; - request.ClientCertificates.Add(x509c); - } - } - catch { } - - } - } - return request; - } - /// - /// 获取证书 - /// - /// - /// - /// - /// - /// - public bool RemoteCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - return true; - } - public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - //if (sslPolicyErrors == SslPolicyErrors.None) { - // return true; - //} - - //Console.WriteLine("Certificate error: {0}", sslPolicyErrors); - - //// Do not allow this client to communicate with unauthenticated servers. - //return false; - - return true; - } - } - - - /// - /// 网站证书 - /// - public class Certificate - { - /// - /// 域名 - /// - public string Domain { get; set; } - /// - /// 证书 - /// - public X509Certificate2 X509 { get; set; } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/HttpUtils.cs b/KJDService/KJD_WebService/Utils/HttpUtils.cs deleted file mode 100644 index 1a1b678..0000000 --- a/KJDService/KJD_WebService/Utils/HttpUtils.cs +++ /dev/null @@ -1,379 +0,0 @@ -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Security.Cryptography; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Web; - -namespace KJD_Web.Utils -{ - public class HttpUtils - { - public static string WxApiPostResponse(string _url, string _data, string referer) - { - HttpWebResponse response = null; - string result; - try - { - string url = _url; - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); - - request.KeepAlive = true; - request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); - request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; - request.ContentType = "application/json"; - request.Accept = "*/*"; - request.Referer = referer; - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br, zstd"); - request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - - request.Method = "POST"; - request.ServicePoint.Expect100Continue = false; - - string body = _data; - byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); - request.ContentLength = postBytes.Length; - Stream stream = request.GetRequestStream(); - stream.Write(postBytes, 0, postBytes.Length); - stream.Close(); - - response = (HttpWebResponse)request.GetResponse(); - } - catch (WebException ex) - { - if (ex.Status == WebExceptionStatus.ProtocolError) - { - response = (HttpWebResponse)ex.Response; - result = ReadResponse(response); - return result; - } - else return ex.Message; - } - catch (Exception e) - { - if (response != null) response.Close(); - return e.Message; - } - result = ReadResponse(response); - return result; - } - - public static string WxApiGetResponse(string _url, string referer) - { - HttpWebResponse response = null; - string result; - try - { - string url = _url; - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); - - request.KeepAlive = true; - request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); - request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; - request.ContentType = "application/json"; - request.Accept = "*/*"; - request.Referer = referer; - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br, zstd"); - request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - - response = (HttpWebResponse)request.GetResponse(); - } - catch (WebException ex) - { - if (ex.Status == WebExceptionStatus.ProtocolError) - { - response = (HttpWebResponse)ex.Response; - result = ReadResponse(response); - return result; - } - else return ex.Message; - } - catch (Exception e) - { - if (response != null) response.Close(); - return e.Message; - } - result = ReadResponse(response); - return result; - } - - - public static string e57PostResponse(string _url, string _data, string referer) - { - HttpWebResponse response = null; - string result; - try - { - string url = _url; - HttpWebRequest request; - if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) - { - ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; - ServicePointManager.SecurityProtocol = - ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; - request = WebRequest.Create(url) as HttpWebRequest; - request.ProtocolVersion = HttpVersion.Version10; - } - else - request = (HttpWebRequest)WebRequest.Create(url); - - request.KeepAlive = true; - request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); - request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; - request.ContentType = "application/json"; - request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"; //request.Accept = "*/*"; - request.Referer = referer; - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); - request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - - request.Method = "POST"; - request.ServicePoint.Expect100Continue = false; - - string body = _data; - byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); - request.ContentLength = postBytes.Length; - Stream stream = request.GetRequestStream(); - stream.Write(postBytes, 0, postBytes.Length); - stream.Close(); - - response = (HttpWebResponse)request.GetResponse(); - } - catch (WebException ex) - { - if (ex.Status == WebExceptionStatus.ProtocolError) - { - response = (HttpWebResponse)ex.Response; - result = ReadResponse(response); - return result; - } - else return ex.Message; - } - catch (Exception e) - { - if (response != null) response.Close(); - return e.Message; - } - result = ReadResponse(response); - return result; - } - - public static string e57GetResponse(string _url, string referer) - { - HttpWebResponse response = null; - string result; - try - { - string url = _url; - - HttpWebRequest request; - if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) - { - ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; - ServicePointManager.SecurityProtocol = - ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; - request = WebRequest.Create(url) as HttpWebRequest; - request.ProtocolVersion = HttpVersion.Version10; - } - else - request = (HttpWebRequest)WebRequest.Create(url); - - request.KeepAlive = true; - request.Headers.Add("sec-ch-ua", @"""Not(A:Brand"";v=""8"", ""Chromium"";v=""144"", ""Google Chrome"";v=""144"""); - request.Headers.Add("sec-ch-ua-mobile", @"?0"); - request.Headers.Add("sec-ch-ua-platform", @"""Windows"""); - request.Headers.Add("Upgrade-Insecure-Requests", @"1"); - request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36"; - request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"; - request.Headers.Add("Sec-Fetch-Site", @"none"); - request.Headers.Add("Sec-Fetch-Mode", @"navigate"); - request.Headers.Add("Sec-Fetch-User", @"?1"); - request.Headers.Add("Sec-Fetch-Dest", @"document"); - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); - request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - - response = (HttpWebResponse)request.GetResponse(); - } - catch (WebException ex) - { - if (ex.Status == WebExceptionStatus.ProtocolError) - { - response = (HttpWebResponse)ex.Response; - result = ReadResponse(response); - return result; - } - else return ex.Message; - } - catch (Exception e) - { - if (response != null) response.Close(); - return e.Message; - } - result = ReadResponse(response); - return result; - } - - public static string ReadResponse(HttpWebResponse response) - { - using (Stream responseStream = response.GetResponseStream()) - { - Stream streamToRead = responseStream; - if (response.ContentEncoding.ToLower().Contains("gzip")) - { - streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); - } - else if (response.ContentEncoding.ToLower().Contains("deflate")) - { - streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); - } - - using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) - { - return streamReader.ReadToEnd(); - } - } - } - public static void WriteMultipartBodyToRequest(HttpWebRequest request, string body) - { - string[] multiparts = Regex.Split(body, @""); - byte[] bytes; - using (MemoryStream ms = new MemoryStream()) - { - foreach (string part in multiparts) - { - if (File.Exists(part)) - { - bytes = File.ReadAllBytes(part); - } - else - { - bytes = System.Text.Encoding.UTF8.GetBytes(part.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n")); - } - - ms.Write(bytes, 0, bytes.Length); - } - - request.ContentLength = ms.Length; - using (Stream stream = request.GetRequestStream()) - { - ms.WriteTo(stream); - } - } - } - - /// - /// 读取网络图片转为Img以在DataGridView中显示,用于HttpWebRequest直接读取可能403的情况 - /// - /// - /// - /// - public static Image GetUrlImg(string imgUrl, out string rst) - { - rst = ""; - //return LoadImage(imgUrl); - Image image = null; - HttpWebResponse response = null; - try - { - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl); - - request.KeepAlive = true; - request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); - request.Headers.Add("Upgrade-Insecure-Requests", @"1"); - request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; - request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"; - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); - request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - //request.IfModifiedSince = DateTime.Parse("Fri, 18 Jul 2025 06:00:49 GMT"); // 没改动不更新,CS程序无缓存不使用 - - response = (HttpWebResponse)request.GetResponse(); - - using (Stream stream = response.GetResponseStream()) - { - image = Image.FromStream(stream); - } - } - catch (WebException ex) - { - if (ex.Status == WebExceptionStatus.ProtocolError) - { - response = (HttpWebResponse)ex.Response; - rst = ReadResponse(response); - } - if (string.IsNullOrEmpty(rst)) - rst = ex.Message; - } - catch (Exception e) - { - rst = e.Message; - } - if (response != null) - { - response.Close(); - response.Dispose(); - } - return image; - } - - public static string WxApiUploadImgFile(string filePath, int width, int height, string accessToken) - { - string boundary = "----WebKitFormBoundaryeZuqpVO6jYOF5Y6S"; - HttpWebResponse response = null; - string result; - try - { - string url = "https://api.weixin.qq.com/shop/ec/basics/img/upload?access_token=" + accessToken + - "&upload_type=0&resp_type=1&height=" + height + "&width=" + width; - - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); - - request.KeepAlive = true; - request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); - request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; - request.ContentType = "multipart/form-data; boundary=" + boundary; - request.Accept = "*/*"; - request.Referer = ""; - request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); - request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); - - request.Method = "POST"; - request.ServicePoint.Expect100Continue = false; - - string body = @"--" + boundary + @" -Content-Disposition: form-data; name=""media""; filename=""" + Path.GetFileName(filePath) + @""" -Content-Type: image/jpg - -" + filePath + @" ---" + boundary + @"-- -"; - WriteMultipartBodyToRequest(request, body); - - response = (HttpWebResponse)request.GetResponse(); - } - catch (WebException ex) - { - if (ex.Status == WebExceptionStatus.ProtocolError) - { - response = (HttpWebResponse)ex.Response; - result = ReadResponse(response); - return result; - } - else return ex.Message; - } - catch (Exception e) - { - if (response != null) response.Close(); - return e.Message; - } - result = ReadResponse(response); - return result; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/JsonUtils.cs b/KJDService/KJD_WebService/Utils/JsonUtils.cs deleted file mode 100644 index 6907546..0000000 --- a/KJDService/KJD_WebService/Utils/JsonUtils.cs +++ /dev/null @@ -1,138 +0,0 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Web; - -namespace KJD_Web.Utils -{ - public class JsonUtils - { - /// - /// 反序列化Json字符串生成对象实体 - /// - /// 对象类型 - /// json字符串 - /// 对象实体 - public static T DeserializeJsonToObject(string jsonStr) where T : class - { - try - { - JsonSerializer serializer = new JsonSerializer(); - StringReader sr = new StringReader(jsonStr); - object obj = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); - T t = obj as T; - return t; - } - catch - { - return null; - } - } - - public static string SerializeObject(object obj) - { - return SerializeObjectToString(obj); - } - - public static string SerializeObjectToString(object obj, JsonSerializerSettings jsonsetting = null) - { - try - { - string str = ""; - if (jsonsetting != null) - str = JsonConvert.SerializeObject(obj, Formatting.None, jsonsetting); - else - str = JsonConvert.SerializeObject(obj, Formatting.None); - return str; - } - catch - { - return null; - } - } - - public static T DeserializeJsonToObjectNullable(string json) where T : class - { - try - { - JsonSerializer serializer = new JsonSerializer(); - StringReader sr = new StringReader(json); - object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); - T t = o as T; - return t; - } - catch - { - return null; - } - } - - public static JObject JObjectParse(string json, JsonLoadSettings settings = null) - { - try - { - if (settings == null) - { - JObject obj = JObject.Parse(json); - return obj; - } - else - { - JObject obj = JObject.Parse(json, settings); - return obj; - } - } - catch - { - return null; - } - } - - /// - /// 解析JSON数组生成对象实体集合 - /// - /// 对象类型 - /// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}]) - /// 对象实体集合 - public static List DeserializeJsonToList(string json) where T : class - { - JsonSerializer serializer = new JsonSerializer(); - StringReader sr = new StringReader(json); - object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List)); - List list = o as List; - return list; - } - - public static List DeserializeJsonToListNullable(string json) where T : class - { - try - { - JsonSerializer serializer = new JsonSerializer(); - StringReader sr = new StringReader(json); - object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List)); - List list = o as List; - return list; - } - catch - { - return null; - } - } - - /// - /// 反序列化JSON到给定的匿名对象. - /// - /// 匿名对象类型 - /// json字符串 - /// 匿名对象 - /// 匿名对象 - public static T DeserializeAnonymousType(string json, T anonymousTypeObject) - { - T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); - return t; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/MySqlUtils.cs b/KJDService/KJD_WebService/Utils/MySqlUtils.cs deleted file mode 100644 index a21ab1a..0000000 --- a/KJDService/KJD_WebService/Utils/MySqlUtils.cs +++ /dev/null @@ -1,805 +0,0 @@ -using MySql.Data.MySqlClient; -using System; -using System.Collections.Generic; -using System.Data; -using System.Data.SqlTypes; -using System.IO; -using System.Linq; -using System.Threading; -using System.Web; -using System.Web.UI.WebControls.WebParts; - -namespace KJD_Web.Utils -{ - public class MysqlUtils - { - public string Message = ""; - - /// - /// 数据库连接字符串 - /// - private string ConnString = ""; - - /// - /// 数据库连接 - /// - private MySqlConnection Conn; - - /// - /// 数据库读取对象 - /// - private MySqlDataReader reader; - - /// - /// 数据库执行对象 - /// - private MySqlCommand cmd = new MySqlCommand(); - - /// - /// 错误信息 - /// - //public static string ErrorString = ""; - - /// - /// 超时(秒) - /// - public int TimeOut = 120; - - /// - /// 链接状态 - /// - public bool Connected - { - get { return Conn != null && Conn.State == ConnectionState.Open; } - } - - /// - /// 是否正在执行 - /// - public bool IsRunning = false; - - public bool IsUseTrans { get; set; } = false; - public MySqlTransaction Transaction { get; set; } = null; - - /// - /// 初始化数据库链接 - /// - /// 数据库链接 - public MysqlUtils(string connString, bool isUseTrans = false) - { - this.IsUseTrans = isUseTrans; - - ConnString = connString; - ConnTo(); - } - - /// - /// 去掉SQL中的特殊字符 - /// - /// 字符串 - /// - public string ReplaceSql(string value) - { - return ReplaceSqlSpecial(value); - } - - /// - /// 反转字符串,用于mysql反向索引 - /// - /// - /// - public static string ReverseString(string temp) - { - if (string.IsNullOrEmpty(temp)) - return null; - char[] l = temp.ToCharArray(); - Array.Reverse(l); - return new string(l); - } - - /// - /// 去掉SQL中的特殊字符 - /// - /// 字符串 - /// - public static string ReplaceSqlSpecial(string value) - { - if (string.IsNullOrEmpty(value)) - return null; - value = value.Replace("\\", "\\\\"); - value = value.Replace("'", "''"); - //value = value.Replace("\"", "\\\""); - return value; - } - - ///// - ///// 开放一个Conn获取路径,以便外部使用事务提交 - ///// - //public MySqlConnection GetConn() - //{ - // //Transaction = Conn.BeginTransaction(); - // return Conn; - //} - - /// - /// 插入数据 - /// - /// - /// - /// - public int Insert(string table, List keys) - { - string temp = "", tempx = ""; - for (int i = 0; i < keys.Count; i++) - { - temp += ",`" + keys[i].Key + "`"; - tempx += ",'" + keys[i].Value + "'"; - } - temp = temp.Substring(1); - tempx = tempx.Substring(1); - string sql = "insert into " + table + " (" + temp + ") values (" + tempx + ") "; - return (int)ExecuteInsertId(sql); - } - - /// - /// 返回执行表 - /// - /// - /// - public DataTable ExecuteDataTable(string SqlString) - { - return ExecuteDataTable(SqlString, null); - } - - /// - /// 执行sql返回DataTable - /// - /// SQL语句 - /// Sql参数 - /// DataTable - public DataTable ExecuteDataTable(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - DataSet ds = new DataSet(); - MySqlDataAdapter adapter = new MySqlDataAdapter(); - adapter.SelectCommand = cmd; - adapter.Fill(ds); - return ds.Tables[0]; - //DataTable dt = new DataTable(); - //try - //{ - // reader = cmd.ExecuteReader(); - // dt.Load(reader); - //} - //catch - //{ - // reader = cmd.ExecuteReader(); - // dt = Read(ref reader); - //} - //return dt; - } - catch (Exception e) - { - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - return null; - } - finally - { - CloseReader(); - IsRunning = false; - } - } - - /// - /// 针对不同错误,执行不同的修正 - /// - /// - private void ErrorDoing(string message) - { - Message = message; - - if (string.IsNullOrEmpty(message)) - return; - if (message.Contains("Incorrect string value")) - return; - if (message.Contains("Connection must be valid and open")) - ConnTo(); - if (message.Contains("There is already an open DataReader")) - { - Thread.Sleep(500); - ConnTo(); - } - if (message.Contains("Fatal error encountered during command execution.")) - ConnTo(); - if (message.Contains(" StreamWriter ") || message.Contains("未将对象引用设置到对象的实例") || message.Contains("未将对象")) - ConnTo(); - CloseReader(); - Random ra = new Random(Guid.NewGuid().GetHashCode()); - Thread.Sleep(ra.Next(200, 2000)); - } - - /// - /// 关闭读取线程 - /// - private void CloseReader() - { - try - { - if (reader != null && !reader.IsClosed) - reader.Close(); - cmd.Dispose(); - //reader = null; - } - catch - { - } - } - - /// - /// 返回执行行 - /// - /// - /// - public DataRow ExecuteDataTableRow(string SqlString) - { - return ExecuteDataTableRow(SqlString, null); - } - - /// - /// 返回第一行 - /// - /// - /// - public DataRow ExecuteDataTableRow(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - DataSet ds = new DataSet(); - MySqlDataAdapter adapter = new MySqlDataAdapter(); - adapter.SelectCommand = cmd; - adapter.Fill(ds); - DataTable dt = ds.Tables[0]; - if (dt.Rows.Count > 0) - return dt.Rows[0]; - } - catch (Exception e) - { - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - } - finally - { - CloseReader(); - IsRunning = false; - } - return null; - } - - /// - /// 返回第一个执行结果 - /// - /// - /// - public int ExecuteRowCount(string SqlString) - { - string f = ExecuteFirst(SqlString, null); - int c; - int.TryParse(f, out c); - return c; - } - - public int ExecuteRowCount(string SqlString, MySqlParameter[] parms) - { - string f = ExecuteFirst(SqlString, parms); - int c; - int.TryParse(f, out c); - return c; - } - - /// - /// 返回第一个执行结果 - /// - /// - /// - public string ExecuteFirst(string SqlString) - { - return ExecuteFirst(SqlString, null); - } - - /// - /// 返回第一个执行结果 - /// - /// - /// - public int ExecuteFirstInt(string SqlString, MySqlParameter[] parms = null) - { - string id = ExecuteFirst(SqlString, parms); - int i; - int.TryParse(id, out i); - return i; - } - - - /// - /// 返回第一个执行结果 - /// - /// - /// - public decimal ExecuteFirstDecimal(string SqlString, MySqlParameter[] parms = null) - { - string id = ExecuteFirst(SqlString, parms); - decimal i; - decimal.TryParse(id, out i); - return i; - } - - /// - /// 返回第一个值 - /// - /// - /// - public string ExecuteFirst(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - reader = cmd.ExecuteReader(); - if (reader.Read()) - return reader[0].ToString(); - return ""; - } - catch (Exception e) - { - if (e.Message.Contains("Illegal mix of collations")) - return null; - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - } - finally - { - CloseReader(); - IsRunning = false; - } - return null; - } - - /// - /// 返回更改、插入或删除的行数 - /// - /// - /// - /// - public int ExecuteAffectedRows(string SqlString) - { - return ExecuteAffectedRows(SqlString, null); - } - /// - /// 返回更改、插入或删除的行数 - /// - /// - /// - /// - public int ExecuteAffectedRows(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - reader = cmd.ExecuteReader(); - if (reader.Read()) - return reader.RecordsAffected; - return reader.RecordsAffected; - } - catch (Exception e) - { - if (e.Message.Contains("Illegal mix of collations")) - return 0; - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - } - finally - { - CloseReader(); - IsRunning = false; - } - return 0; - } - - /// - /// 返回插入ID - /// - /// - /// - public long ExecuteInsertId(string SqlString) - { - return ExecuteInsertId(SqlString, null); - } - - /// - /// 返回第一个值 - /// - /// - /// - public long ExecuteInsertId(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); - long id = cmd.LastInsertedId; - return id; - } - catch (Exception e) - { - if (e.Message.Contains(" for key 'PRIMARY'") && e.Message.Contains("Duplicate entry")) - return 0; - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - } - finally - { - CloseReader(); - IsRunning = false; - } - return 0; - } - - /// - /// 无返回 - /// - /// - /// - public bool ExecuteNonQuery(string SqlString) - { - return ExecuteNonQuery(SqlString, null); - } - - /// - /// 只保留mysql可识别的字符串 - /// - /// - public string JustUtf8Words(string text) - { - JustUtf8Words(ref text); - return text; - } - - /// - /// 只保留mysql可识别的字符串 - /// - /// - public void JustUtf8Words(ref string text) - { - if (string.IsNullOrEmpty(text)) - return; - var cs = text.ToCharArray(); - List cc = new List(); - foreach (char c in cs) - { - if (c > 7814 && c < 8416 || c > 57096 && c < 59501 || c > 63707 && c < 64309 || c > 65505 || c < 0) - { - if (cc.Contains(c)) - continue; - text = text.Replace(c.ToString(), ""); - cc.Add(c); - } - } - } - - /// - /// 执行无返回SQL语句 - /// - /// SQL语句 - /// Sql参数 - ///是否执行成功 - public bool ExecuteNonQuery(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - cmd.ExecuteNonQuery(); - return true; - } - catch (Exception e) - { - if (e.Message.Contains("Illegal mix of collations") || e.Message.Contains("Incorrect string value") - || e.Message.Contains(" for key 'PRIMARY'") && e.Message.Contains("Duplicate entry")) - return false; - - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - return false; - } - finally - { - CloseReader(); - IsRunning = false; - } - } - - /// - /// 判断是否存在 - /// - /// - /// - public bool ExecuteExists(string SqlString) - { - return ExecuteExists(SqlString, null); - } - - /// - /// 查询是否存在 - /// - /// SQL语句 - /// SQL参数 - /// 是否存在 - public bool ExecuteExists(string SqlString, MySqlParameter[] parms) - { - SleepOrGo(); - bool frist = true; - Retry: - if (Conn == null || Conn.State != ConnectionState.Open) - ConnTo(); - try - { - - CmdIni(); - cmd.CommandText = SqlString; - if (parms != null) - foreach (MySqlParameter pram in parms) - cmd.Parameters.Add(pram); - reader = cmd.ExecuteReader(); - if (reader.Read()) - return true; - return false; - } - catch (Exception e) - { - if (frist) - { - frist = false; - ErrorDoing(e.Message); - goto Retry; - } - AddError(e.Message, SqlString); - return false; - } - finally - { - CloseReader(); - IsRunning = false; - } - } - - /// - /// 停止还是前进 - /// - private void SleepOrGo() - { - int i = 0; - while (IsRunning && i < 300) - { - Thread.Sleep(100); - i++; - } - IsRunning = true; - } - - /// - /// 初始化CMD - /// - private void CmdIni() - { - if (reader != null && !reader.IsClosed) - reader.Close(); - if (cmd != null) - cmd.Dispose(); - cmd = new MySqlCommand(); - cmd.Connection = Conn; - cmd.CommandType = CommandType.Text; - cmd.CommandTimeout = TimeOut; - - if (Transaction != null) - cmd.Transaction = Transaction; - } - - /// - /// 连接数据库 - /// - private void ConnTo() - { - Close(); - try - { - Conn = new MySqlConnection(ConnString); - Conn.Open(); - - if (IsUseTrans) - this.Transaction = Conn.BeginTransaction(); - } - catch (Exception e) - { - AddError(e.Message, ConnString); - } - } - - /// - /// 错误信息 - /// - /// - /// - private void AddError(string message, string sql) - { - if (string.IsNullOrEmpty(message) || message.Contains("Illegal mix of collations")) - return; - ErrorDoing(message); - string errStr = "数据库连接错误:" + message + "\r\nSQL语句:" + sql; - try - { - if (!Directory.Exists("Log")) - { - Directory.CreateDirectory("Log"); - } - File.AppendAllText("Log\\log-" + DateTime.Now.ToString("yyyyMMdd") + ".txt", errStr); - } - catch (Exception ex) - { - } - } - - public void Commit() - { - if (Transaction != null) - Transaction.Commit(); - } - - public void RollBack() - { - if (Transaction != null) - Transaction.Rollback(); - } - - /// - /// 关闭数据库链接 - /// - public void Close() - { - IsRunning = false; - try - { - if (Conn != null && Conn.State == ConnectionState.Open) - { - Conn.Close(); - } - Conn = null; - - try - { - if (reader != null && !reader.IsClosed) - reader.Close(); - } - catch - { - } - reader = null; - - try - { - if (Transaction != null) - Transaction.Dispose(); - } - catch - { - } - Transaction = null; - } - catch - { - } - } - } - - public class MysqlKeyValues - { - public List List = new List(); - } - - public class MysqlKeyValue - { - public MysqlKeyValue(string key, object value) - { - Key = key; - Value = value == null ? "" : MysqlUtils.ReplaceSqlSpecial(value.ToString()); - } - - public string Key = ""; - public string Value; - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/RandomUtils.cs b/KJDService/KJD_WebService/Utils/RandomUtils.cs deleted file mode 100644 index 917509a..0000000 --- a/KJDService/KJD_WebService/Utils/RandomUtils.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Web; - -namespace KJD_Web.Utils -{ - public class RandomUtils - { - public static string WordBase = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; - public static string NumberBase = "0123456789"; - public static string WordNumberBase = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz01234567890123456789"; - public static string SignWordBase = ".`~^*_| -#$%&?+";//".`~^*_| -#$%&?"; - - public static int GetId(int max) - { - return new Random(Guid.NewGuid().GetHashCode()).Next(0, max); - } - - public static int GetId(int min, int max) - { - return new Random(Guid.NewGuid().GetHashCode()).Next(min, max); - } - - public static string GetWord(int len) - { - StringBuilder s = new StringBuilder(); - for (int i = 0; i < len; i++) - { - s.Append(WordBase[new Random(Guid.NewGuid().GetHashCode()).Next(WordBase.Length)]); - } - return s.ToString(); - } - public static string GetNumber(int len) - { - StringBuilder s = new StringBuilder(); - for (int i = 0; i < len; i++) - { - s.Append(NumberBase[new Random(Guid.NewGuid().GetHashCode()).Next(NumberBase.Length)]); - } - return s.ToString(); - } - public static string GetWordNumber(int len) - { - StringBuilder s = new StringBuilder(); - for (int i = 0; i < len; i++) - { - s.Append(WordNumberBase[new Random(Guid.NewGuid().GetHashCode()).Next(WordNumberBase.Length)]); - } - return s.ToString(); - } - /// - /// 获取新的属性名称 - /// - /// - /// - public static string GetNewProp(bool begin, string name) - { - char w = SignWordBase[new Random(Guid.NewGuid().GetHashCode()).Next(SignWordBase.Length)]; - char add = SignWordBase[new Random(Guid.NewGuid().GetHashCode()).Next(SignWordBase.Length)]; - if (begin) - name += "" + w + add; - else - name = "" + add + w + "" + name; - return name; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/RegexUtils.cs b/KJDService/KJD_WebService/Utils/RegexUtils.cs deleted file mode 100644 index 2918e4c..0000000 --- a/KJDService/KJD_WebService/Utils/RegexUtils.cs +++ /dev/null @@ -1,763 +0,0 @@ -using MySqlX.XDevAPI.Common; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Web; - -namespace KJD_Web.Utils -{ - public static class RegexUtils - { - /// - /// 返回正则对象所有结果 - /// - /// - /// - /// - public static MatchCollection GetMatchRegex(string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return null; - } - return Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); - } - /// - /// 返回正则对象所有结果 - /// - /// - /// - /// - public static MatchCollection GetMatchRegex(ref string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return null; - } - return Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); - } - /// - /// 返回单个正则分析结果 - /// - /// - /// - /// - public static string GetMatchRegexString(ref string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return null; - } - MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); - if (mc.Count > 0) - { - return mc[0].Groups[1].Value.ToString(); - } - return null; - } - /// - /// 返回单个正则分析结果 - /// - /// - /// - /// - public static string GetMatchMaxRegexString(ref string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return null; - } - MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); - if (mc.Count > 0) - { - return mc[mc.Count - 1].Groups[1].Value.ToString(); - } - return null; - } - /// - /// 返回匹配的数值 - /// - /// - /// - /// - public static int GetMatchInt(ref string HtmlString, string RegexString) - { - string id = GetMatchRegexString(ref HtmlString, RegexString); - int i; - int.TryParse(id, out i); - return i; - } - - /// - /// 返回单个正则分析结果 - /// - /// - /// - /// - public static string GetMatchRegexString(string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return null; - } - MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); - if (mc.Count > 0) - { - return mc[0].Groups[1].ToString(); - } - return null; - } - /// - /// 是否存在匹配 - /// - /// - /// - /// - public static bool MatchRegex(string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return false; - } - return Regex.IsMatch(HtmlString, RegexString, RegexOptions.IgnoreCase); - } - /// - /// 根据正则删除表达式所匹配的内容 - /// - /// - /// - /// - public static string Clear(string HtmlString, string RegexString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); - return null; - } - return Regex.Replace(HtmlString, RegexString, "", RegexOptions.IgnoreCase); - } - /// - /// 清除HTML代码 - /// - /// - /// 返回文字内容 - public static string ClearHtml(string HtmlString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空"); - return null; - } - return Regex.Replace(Regex.Replace(HtmlString, - @"(|||)", ""), "(<[^>]*?>)", "").Trim(); - } - /// - /// 清除HTML代码 - /// - /// - /// 返回文字内容 - public static string ClearHtml(ref string HtmlString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空"); - return null; - } - return Regex.Replace(Regex.Replace(HtmlString, - @"(|||)", ""), "(<[^>]*?>)", "").Trim(); - } - /// - /// 清除HTML代码 - /// - /// - /// 返回文字内容 - public static void ClearHtmlX(ref string HtmlString) - { - if (string.IsNullOrEmpty(HtmlString)) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空"); - return; - } - HtmlString = Regex.Replace(Regex.Replace(HtmlString, - @"(|||)", ""), "(<[^>]*?>)", ""); - } - - /// - /// 清除HTML代码A标签 - /// - /// - /// 返回文字内容 - public static string ClearA(string HtmlString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空"); - return null; - } - HtmlString = Regex.Replace(HtmlString, "(]*>)", "", RegexOptions.IgnoreCase); - return HtmlString.Trim(); - } - /// - /// 去除空格和特殊空白 - /// - /// - /// - public static string Trim(string text) - { - if (string.IsNullOrEmpty(text)) - return ""; - return text.Replace("\t", " ").Replace("\r\n", " ").Replace("\r", " ").Replace("\n", " ").Trim(); - } - - /// - /// 清除HTML代码A标签 - /// - /// - /// 返回文字内容 - public static string ClearTitle(string HtmlString) - { - if (HtmlString == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空"); - return null; - } - HtmlString = Regex.Replace(HtmlString, "(title=\"[^\"]*\")", ""); - return HtmlString.Trim(); - } - /// - /// 获取值 - /// - /// - /// - /// - public static string GetValue(string html, string reg) - { - return GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - } - /// - /// 清理多余的HTML元素 - /// - /// - /// - public static string ClearNone(string html) - { - if (string.IsNullOrEmpty(html)) - return null; - if (html.Contains("\0") && html.IndexOf("\0") > 0) - html = html.Substring(0, html.IndexOf("\0")); - string h = Clear(html, @"(<\!doctype[^>]*?>)"); - h = Clear(h, @"(]*?>)"); - h = Clear(h, @"()"); - h = Clear(h, @"()"); - h = Clear(h, @"()"); - h = Clear(h, @"(]*?>)"); - h = Clear(h, @"()"); - h = Clear(h, @"(]*?>)"); - h = Clear(h, @"(\s*alt\s*=[""'\s]*[^>]*?['""]+)"); - h = Clear(h, @"(\s*style\s*=[""'\s]*[^>]*?['""]+)"); - h = Clear(h, @"(\s*title\s*=[""'\s]*[^>]*?['""]+)"); - h = Clear(h, @"(\s*id\s*=[""'\s]*[^>]*?['""]+)"); - h = Clear(h, @"(\s*class\s*=[""'\s]*[^>]*?['""]+)"); - h = Clear(h, @"(\s*align\s*=[""'\s]*[^>]*?['""]+)"); - h = h.Replace("\r\n", " "); - h = h.Replace("\n", " ").Replace("\r", " ").Replace("\t", " "); - h = h.Replace(" ", " "); - h = h.Replace(" ", " "); - h = h.Replace(" ", " "); - h = h.Replace(" ", " "); - return h.Replace(" ", " ").Replace(" ", " "); - } - /// - /// 返回执行结果数 - /// - /// - /// - /// - public static int GetRegexCount(string html, string regex) - { - if (html == null) - { - //LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + regex); - return 0; - } - return Regex.Matches(html, regex, RegexOptions.IgnoreCase).Count; - } - - - /// - /// 根据正则删除表达式所匹配的内容 - /// - /// - /// - /// - public static string Relpace(string HtmlString, string RegexString, string NewString) - { - if (HtmlString == null) - return null; - return Regex.Replace(HtmlString, RegexString, NewString, RegexOptions.IgnoreCase); - } - /// - /// 根据正则删除表达式所匹配的内容 - /// - /// - /// - /// - public static void Relpace(ref string HtmlString, string RegexString, string NewString) - { - if (HtmlString == null) - return; - HtmlString = Regex.Replace(HtmlString, RegexString, NewString, RegexOptions.IgnoreCase); - } - /// - /// 关键词在文本中出现的次数 - /// - /// - /// - /// - public static int GetStringCount(ref byte[] b, string keyword) - { - if (string.IsNullOrEmpty(keyword)) - return 0; - int c = 0; - bool had; - byte[] b1 = Encoding.UTF8.GetBytes(keyword); - for (int i = 0; i < b.Length - b1.Length; i++) - { - had = false; - for (int j = 0; j < b1.Length; j++) - { - if (b[i + j] != b1[j]) - { - had = true; - break; - } - } - if (had) - { - c++; - i += b1.Length - 1; - } - } - return c; - } - /// - /// 是否存在 - /// - /// - /// - /// - public static bool Exists(string html, string reg) - { - if (string.IsNullOrEmpty(html) || string.IsNullOrEmpty(reg)) - return false; - return new Regex(reg).IsMatch(html); - } - /// - /// 是否是数字 - /// - /// - /// - public static bool IsNumber(string str) - { - System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[0-9\.]+$"); - return reg1.IsMatch(str); - } - /// - /// 是否是字母 - /// - /// - /// - public static bool IsChar(string str) - { - System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[A-Za-z]+$"); - return reg1.IsMatch(str); - } - /// - /// 是否是字母 - /// - /// - /// - public static bool IsCharOrNumber(string str) - { - System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[A-Za-z0-9]+$"); - return reg1.IsMatch(str); - } - - /// - /// 是否是中文字符串列 - /// - /// - /// - public static bool IsWordList(string word) - { - char[] xj = word.ToCharArray(); - for (int j = 0; j < xj.Length; j++) - if (!IsWord(xj[j])) - return false; - return true; - } - /// - /// 是否是字符 - /// - /// - /// - private static bool IsWord(int ascii) - { - if (ascii == 32 || ascii == 35) //空格 - return true; - if (ascii < 58 && ascii > 47) //数字 - return true; - if (ascii < 48 && ascii > 31) //符号 - return true; - if (ascii < 91 && ascii > 64) //小写字母 - return true; - if (ascii < 123 && ascii > 96) //大写字母 - return true; - if (ascii < 40892 && ascii > 13311) //中文字符串 - return true; - return false; - } - - /// - /// 获取值 - /// - /// - /// - /// - public static bool GetBoolValue(string html, string reg) - { - string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - if (!string.IsNullOrEmpty(temp) && (temp.ToLower() == "true" || temp == "1")) - return true; - return false; - } - /// - /// 获取值 - /// - /// - /// - /// - public static int GetIntValue(string html, string reg) - { - string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - int i; - if (int.TryParse(temp, out i)) - return i; - return 0; - } - /// - /// 获取值 - /// - /// - /// - /// - public static long GetLongValue(string html, string reg) - { - string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - long i; - if (long.TryParse(temp, out i)) - return i; - return 0; - } - /// - /// 获取值 - /// - /// - /// - /// - public static double GetDoubleValue(string html, string reg) - { - string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - double i; - if (double.TryParse(temp, out i)) - return i; - return 0; - } - /// - /// 获取值 - /// - /// - /// - /// - public static DateTime GetDateValue(string html, string reg) - { - string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - DateTime i; - if (DateTime.TryParse(temp, out i)) - return i; - return DateTime.MinValue; - } - /// - /// 获取值 - /// - /// - /// - /// - public static decimal GetDecimalValue(string html, string reg) - { - string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); - decimal i = 0; - if (decimal.TryParse(temp, out i)) - return i; - return 0; - } - /// - /// 获取值 - /// - /// - /// - /// - public static decimal GetDecimalJson(ref string html, string reg) - { - string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); - if (string.IsNullOrEmpty(temp)) - temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d-\.]+)"); - decimal i = 0; - if (decimal.TryParse(temp, out i)) - return i; - return 0; - } - - /// - /// 获取值 - /// - /// - /// - /// - public static int GetIntJson(ref string html, string reg) - { - string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); - if (string.IsNullOrEmpty(temp)) - temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d-]+)"); - int i; - if (int.TryParse(temp, out i)) - return i; - return 0; - } - /// - /// 时间戳转字符串时间 - /// - /// - /// - /// - public static string GetIntTimeToString(ref string html, string reg) - { - return GetIntTimeToString(ref html, reg, 0); - } - /// - /// 时间戳转字符串时间 - /// - /// - /// - /// 添加时间 - /// - public static string GetIntTimeToString(ref string html, string reg, int addTime) - { - int time = GetIntJson(ref html, reg) + addTime; - DateTime dt = TimeUtils.StampToDateTime(time); - return dt.ToString("yyyy-MM-dd HH:mm:ss"); - } - - /// - /// 获取值 - /// - /// - /// - /// - public static long GetLongJson(ref string html, string reg) - { - string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); - if (string.IsNullOrEmpty(temp)) - temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d]+)"); - long i; - if (long.TryParse(temp, out i)) - return i; - return 0; - } - - /// - /// 获取值 - /// - /// - /// - /// - public static string GetStringJson(ref string html, string reg) - { - string temp = GetMatchRegexString(html, @"[""]" + reg + @"[""][\s]*:[\s]*[""]([^""]+?)[""]"); - if (temp == null) - temp = GetMatchRegexString(html, @"[""]" + reg + @"[""][\s]*:[\s]*[""]([^""]*?)[""]"); - if (temp == null) - temp = GetMatchRegexString(html, @"[']" + reg + @"['][\s]*:[\s]*[']([^']*?)[']"); - if (temp == null) - temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d]+)"); - - return temp; - } - - /// - /// 获取值 - /// - /// - /// - /// - public static string GetStringInput(ref string html, string reg) - { - string temp = GetMatchRegexString(html, @"]*?name=['""]" + reg + @"[""'][^>]+?value=[""']([^>]+)[""'][^>]*>"); - if (string.IsNullOrEmpty(temp)) - temp = GetMatchRegexString(html, @"]*?value=[""']([^>]+)[""'][^>]+?name=['""]" + reg + @"[""'][^>]*>"); - return temp; - } - - /// - /// 获取值 - /// - /// - /// - /// - public static string GetStringQuery(ref string queryString, string key, bool isGetJson = false) - { - List strLst = queryString.Split('&').ToList(); - var temp = strLst.FirstOrDefault(s => s.StartsWith(key + "=")); - if (temp != null) - temp = ("&" + temp).Replace("&" + key + "=", ""); - - if (temp == null && isGetJson) - temp = GetStringJson(ref queryString, key); - - //queryString = "&" + queryString; - //int nIndex = queryString.IndexOf("&" + key + "="); - //if (nIndex == -1) - // return null; - - //string temp = queryString.Substring(nIndex).Replace("&" + key + "=", ""); - //nIndex = temp.IndexOf('&'); - //if (nIndex > -1) - // temp = temp.Substring(0, nIndex); - - return temp; - } - - public static string FliterHtmlTag(string htmlStr) - { - if (String.IsNullOrEmpty(htmlStr)) - { - return ""; - } - - string regEx_style = "]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式 - string regEx_script = "]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式 - string regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式 - htmlStr = Regex.Replace(htmlStr, regEx_style, "");//删除css - htmlStr = Regex.Replace(htmlStr, regEx_script, "");//删除js - htmlStr = Regex.Replace(htmlStr, regEx_html, "");//删除html标记 - htmlStr = Regex.Replace(htmlStr, "\\s*|\t|\r|\n", "");//去除tab、空格、空行 - htmlStr = htmlStr.Replace("\"", "");//去除异常的引号 - - return htmlStr.Trim(); - } - - public static string GetOneJsonObjStrJson(ref string html, string reg) - { - return GetJsonObjStrJson(ref html, reg).FirstOrDefault(); - } - - public static List GetJsonObjStrJson(ref string html, string reg, int level = 0) - { - List rstLst = new List(); - if (html == null) - return rstLst; - - string htmlTmp = html.Replace("\\{", "\\这里是正花括号占位符").Replace("\\}", "\\这里是反花括号占位符").Replace("\"" + reg + "\": {", "\"" + reg + "\":{"); - - retry: - string lvStr = ""; - if (level == 1) - { - lvStr += "\""; - } - var index1 = htmlTmp.IndexOf("\"" + reg + "\":" + lvStr + "{"); - if (index1 < 0) - return rstLst; - - htmlTmp = htmlTmp.Substring(index1 + ("\"" + reg + "\":" + lvStr + "{").Length - 1); - // 括号计数 - int braceNum = 0; - //string rst = "{"; - //while (htmlTmp.Length > 0) - for (int i = 0; i < htmlTmp.Length; i++) - { - //rst += htmlTmp.Substring(0, 1); - //if (htmlTmp.StartsWith("{")) - // braceNum++; - //else if (htmlTmp.StartsWith("}")) - // braceNum--; - if (htmlTmp[i] == '{') - braceNum++; - else if (htmlTmp[i] == '}') - braceNum--; - //htmlTmp = htmlTmp.Substring(1); - if (braceNum == 0) - { - rstLst.Add(htmlTmp.Substring(0, i + 1).Replace("\\这里是正花括号占位符", "\\{").Replace("\\这里是反花括号占位符", "\\}")); - htmlTmp = htmlTmp.Substring(i + 1); - //rstLst.Add(rst.Replace("\\这里是正花括号占位符", "\\{").Replace("\\这里是反花括号占位符", "\\}")); - break; - } - - // 循环完了还没结果返回空列表 - if (i == htmlTmp.Length - 1) - return rstLst; - } - if (htmlTmp.Length > 0) - goto retry; - - return rstLst; - } - - public static List GetJsonArrStrJson(ref string html, string reg) - { - List rstLst = new List(); - if (html == null) - return rstLst; - - string htmlTmp = html.Replace("\\[", "\\这里是正方括号占位符").Replace("\\]", "\\这里是反方括号占位符").Replace("\"" + reg + "\": [", "\"" + reg + "\":["); - - retry: - var index1 = htmlTmp.IndexOf("\"" + reg + "\":["); - if (index1 < 0) - return rstLst; - - htmlTmp = htmlTmp.Substring(index1 + ("\"" + reg + "\":[").Length); - // 括号计数 - int braceNum = 1; - string rst = "["; - while (htmlTmp.Length > 0) - { - rst += htmlTmp.Substring(0, 1); - if (htmlTmp.StartsWith("[")) - braceNum++; - else if (htmlTmp.StartsWith("]")) - braceNum--; - htmlTmp = htmlTmp.Substring(1); - if (braceNum == 0) - { - rstLst.Add(rst.Replace("\\这里是正方括号占位符", "\\[").Replace("\\这里是反方括号占位符", "\\]")); - break; - } - } - if (htmlTmp.Length > 0) - goto retry; - - return rstLst; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/Utils/TimeUtils.cs b/KJDService/KJD_WebService/Utils/TimeUtils.cs deleted file mode 100644 index 9ca886c..0000000 --- a/KJDService/KJD_WebService/Utils/TimeUtils.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace KJD_Web.Utils -{ - public class TimeUtils - { - /// - /// 时间戳转为C#格式时间 - /// - /// - /// - public static DateTime StampToDateTime(int timeStamp) - { - DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); - long lTime = long.Parse(timeStamp + "0000000"); - TimeSpan toNow = new TimeSpan(lTime); - return dateTimeStart.Add(toNow); - } - - /// - /// 时间戳转为C#格式时间 - /// - /// - /// - public static DateTime StampMillisecondsToDateTime(long timeStamp) - { - DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); - long lTime = long.Parse(timeStamp + "0000"); - TimeSpan toNow = new TimeSpan(lTime); - return dateTimeStart.Add(toNow); - } - - /// - /// C#格式时间转换为Unix时间戳(秒) - /// - /// - /// - public static int DateTimeToTimestampSeconds(DateTime time) - { - System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); - return (int)(time - startTime).TotalSeconds; - } - - /// - /// C#格式时间转换为Unix时间戳(毫秒) - /// - /// - /// - public static long DateTimeToTimestampMilliseconds(DateTime time) - { - System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); - return (long)(time - startTime).TotalMilliseconds; - } - } -} \ No newline at end of file diff --git a/KJDService/KJD_WebService/WXOrderService.asmx b/KJDService/KJD_WebService/WXOrderService.asmx deleted file mode 100644 index a8cbb72..0000000 --- a/KJDService/KJD_WebService/WXOrderService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="WXOrderService.asmx.cs" Class="KJD_Web.WXOrderService" %> diff --git a/KJDService/KJD_WebService/WXOrderService.asmx.cs b/KJDService/KJD_WebService/WXOrderService.asmx.cs deleted file mode 100644 index e0d495d..0000000 --- a/KJDService/KJD_WebService/WXOrderService.asmx.cs +++ /dev/null @@ -1,593 +0,0 @@ -using KJD_Web.BLL; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using NaiBa.Util.Extension; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// OrderService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class WXOrderService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - //[WebMethod] - public void repair_miss_direct_order() - { - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - //var s = "SELECT order_id,out_order_id FROM `wxxd`.`order_item_ext` WHERE add_time > '2026-08-15 15:30' AND buy_type = '直发'"; - - //var s = "SELECT order_id,out_order_id FROM `wxxd`.`order_item_ext` WHERE add_time > '2026-08-13 15:30' AND add_time < '2026-08-15 15:30' And buy_type = '直发'"; - //var s = "SELECT order_id,out_order_id FROM `wxxd`.`order_item_ext` WHERE add_time > '2026-08-10 15:30' AND add_time < '2026-08-12 15:30' And buy_type = '直发'"; - //var s = "SELECT order_id,out_order_id FROM `wxxd`.`order_item_ext` WHERE add_time > '2026-08-08 15:30' AND add_time < '2026-08-10 15:30' And buy_type = '直发'"; - var s = "SELECT order_id,out_order_id FROM `wxxd`.`order_item_ext` WHERE add_time > '2026-7-15 15:30' AND add_time < '2026-08-15 15:30' And buy_type = '直发'"; - //var s = "SELECT order_id,out_order_id FROM `wxxd`.`order_item_ext` WHERE order_id in ('3738460213351447040') AND buy_type = '直发'"; - var dt1 = mySql.ExecuteDataTable(s); - //out_order_no //out_express_no //out_shipped=0 - //s = " Select order_id FROM erp.oms_wei_order WHERE order_id in ('" + string.Join("','", dt1.Rows.Cast().Select(r => r["order_id"].ParseToLong()))+ "') " + - // " and out_order_no is null"; - //dt1 = mySql.ExecuteDataTable(s); - - mySql.Close(); - - conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - mySql = new MysqlUtils(conn); - string sql = "Select * FROM wxxd.order_pdd_buyer_order WHERE wx_order_id in ('" + string.Join("','", dt1.Rows.Cast().Select(r => r["order_id"].ParseToLong())) + "') And wx_send_type=1"; - var dt = mySql.ExecuteDataTable(sql); - List buyerOrderList = new List(); - mySql.Close(); - if (dt != null) - { - try - { - foreach (System.Data.DataRow row in dt.Rows) - { - Model.WxModel.order_pdd_buyer_order order = new Model.WxModel.order_pdd_buyer_order - { - id = row["id"].ParseToLong(), - add_time = row["add_time"].ParseToString().ParseToDateTime(), - after_sales_status = row["after_sales_status"].ParseToNullableInt(), - buyerId = row["buyerId"].ParseToString(), - buyerName = row["buyerName"].ParseToString(), - mdy_time = row["mdy_time"].ParseToString().ParseToDateTime(), - order_amount = row["order_amount"].ParseToNullableInt(), - order_detail = row["order_detail"].ParseToString(), - order_sn = row["order_sn"].ParseToString(), - order_status_prompt = row["order_status_prompt"].ParseToString(), - order_time = row["order_time"].ParseToNullableLong(), - outExpressCompanyCode = row["outExpressCompanyCode"].ParseToString(), - pre_allocated_order_no = row["pre_allocated_order_no"].ParseToNullableInt(), - tracking_number = row["tracking_number"].ParseToString(), - TransitCreateTime = row["TransitCreateTime"].ParseToString().ParseToDateTime(), - wx_order_id = row["wx_order_id"].ParseToString(), - wx_sku_id = row["wx_sku_id"].ParseToString(), - wx_send_type = row["wx_send_type"].ParseToInt(), - }; - buyerOrderList.Add(order); - } - - foreach (var bo in buyerOrderList.ToList()) - { - var buyerOrders = buyerOrderList.Where(r => r.wx_order_id == bo.wx_order_id).ToList(); - if (buyerOrders.Count > 1) - { - - } - else - { - buyerOrderList.Remove(buyerOrders.FirstOrDefault()); - } - } - } - catch (Exception ex) - { - } - } - string err = ""; - - buyerOrderList = buyerOrderList.OrderByDescending(b => b.add_time).ToList(); - - var buyerOrderListTmp = new List(); - foreach(var od in buyerOrderList) - { - if (buyerOrderListTmp.Any(o => o.wx_order_id == od.wx_order_id)) - continue; - buyerOrderListTmp.Add(od); - } - buyerOrderList = buyerOrderListTmp; - - //46 - foreach (var pddOrder in buyerOrderList) - { - //if (!pddOrder.outExpressCompanyCode.IsNullOrEmpty() && !pddOrder.tracking_number.IsNullOrEmpty()) - // continue; - - bool isSend = false; - var pddOrderSn = ""; - - mySql = new MysqlUtils(conn); - string sqlStr; - sqlStr = " Select out_order_no FROM erp.oms_wei_order WHERE order_id in ('" + pddOrder.wx_order_id + "')"; - pddOrderSn = mySql.ExecuteFirst(sqlStr); - - if (!pddOrder.outExpressCompanyCode.IsNullOrEmpty() && !pddOrder.tracking_number.IsNullOrEmpty()) - { - sqlStr = " Select status FROM erp.oms_wei_order WHERE order_id in ('" + pddOrder.wx_order_id + "')"; - var status = mySql.ExecuteFirstInt(sqlStr); - if (status > 20) - { - isSend = true; - //sqlStr = "update `erp`.`oms_wei_order` set out_express_company='" + pddOrder.outExpressCompanyCode + "',out_express_no='" + pddOrder.tracking_number + - // "' WHERE order_id = '" + pddOrder.wx_order_id + "'"; - } - - sqlStr = "update `erp`.`oms_wei_order` set out_express_company='" + pddOrder.outExpressCompanyCode + "',out_express_no='" + pddOrder.tracking_number + - "' WHERE order_id = '" + pddOrder.wx_order_id + "'"; - var rows = mySql.ExecuteAffectedRows(sqlStr); - } - mySql.Close(); - if (!mySql.Message.IsNullOrEmpty()) - continue; - - if (pddOrderSn == pddOrder.order_sn) - { - continue; - } - - - Newtonsoft.Json.Linq.JObject obj = new Newtonsoft.Json.Linq.JObject(); - obj["platform"] = "WEISHOP"; - obj["outAmount"] = (pddOrder.order_amount.ParseToDecimal()).ParseToInt() + ""; - obj["outAccount"] = pddOrder.buyerName; - obj["orderId"] = pddOrder.wx_order_id; - obj["outOrderNo"] = pddOrder.order_sn; - if (!isSend && !pddOrder.outExpressCompanyCode.IsNullOrEmpty() && !pddOrder.tracking_number.IsNullOrEmpty()) - { - obj["outExpressCompany"] = pddOrder.outExpressCompanyCode; - obj["outExpressNo"] = pddOrder.tracking_number; - } - - - var dataStr = JsonUtils.SerializeObject(obj); - var url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/bind/v2"; - //成功 "0SUCCESS" - //更新微信外采订单状态成功1 - //失败 已存在 1505调用微信接口更新物流信息失败: 非法参数, 同运单号拦截 rid: 69d8ab9c-22baa3b1-67de0d95 - var exportRst = HttpUtils.e57PostResponse(url, dataStr, ""); - if (!exportRst.Contains("1") && !exportRst.Contains("0")) - { - err += "\r\n" + pddOrder.order_sn + " " + exportRst; - } - - - } - } - - - //[WebMethod] - public void repair_miss_order_software_remark() - { - string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString; - MysqlUtils mySql = new MysqlUtils(conn); - - //var s1 = "SELECT order_id,soft_remark FROM `erp`.`oms_wei_order_bak_2608151610` WHERE create_time > '2026-7-15 15:30' AND create_time < '2026-08-15 15:30' and soft_remark is not null"; - var startTime = TimeUtils.DateTimeToTimestampSeconds("2026-6-25 16:10".ParseToDateTime()).ToString(); - var EndTime = TimeUtils.DateTimeToTimestampSeconds("2026-7-1 16:10".ParseToDateTime()).ToString(); - var s1 = "SELECT order_id,soft_remark FROM `erp`.`oms_wei_order_bak_2608151612` WHERE create_time > " + startTime + " AND create_time < " + EndTime + " and soft_remark is not null"; - var dt = mySql.ExecuteDataTable(s1); - - mySql.Close(); - - string err = ""; - if (dt != null) - { - int id = 0; - int cnt = 0; - - var orderStr = "'" + string.Join("','", dt.Rows.Cast().Select(rw => rw["order_id"].ParseToString())) + "'"; - var orderStr2 = "'" + string.Join("','", dt.Rows.Cast().Select(rw => rw["order_id"].ParseToString() + "|" + rw["soft_remark"].ParseToString())) + "'"; - - foreach (System.Data.DataRow row in dt.Rows) - { - id++; - var orderId = row["order_id"].ParseToString(); - var softwareRemark = row["soft_remark"].ParseToString(); - try - { - - mySql = new MysqlUtils(conn); - string sqlStr; - sqlStr = "SELECT soft_remark FROM `erp`.`oms_wei_order` WHERE order_id='" + orderId + "'"; - var remark = mySql.ExecuteFirst(sqlStr); - if (remark.IsNullOrEmpty() && !string.IsNullOrEmpty(softwareRemark)) - { - - } - else - { - mySql.Close(); - continue; - } - - sqlStr = " UPDATE erp.oms_wei_order set soft_remark='" + softwareRemark + "' WHERE order_id='" + orderId + "' AND (soft_remark IS NULL or soft_remark='')"; - var rows = mySql.ExecuteAffectedRows(sqlStr); - cnt += rows; - if (!mySql.Message.IsNullOrEmpty()) - { - err += "\r\n" + orderId + " " + softwareRemark + " " + mySql.Message; - } - mySql.Close(); - } - catch (Exception ex) - { - err += "\r\n" + orderId + " " + softwareRemark + " " + mySql.Message; - } - } - } //30 //59 //6 //5 //1 //1 //1 - } - - [WebMethod] - public void get_erp_order_list() - { - get_order_list(); - } - [WebMethod] - public void get_order_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetErpOrderList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_erp_order_item_list() - { - get_order_item_list(); - } - [WebMethod] - public void get_order_item_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetErpOrderItemList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_erp_refund_list() - { - get_refund_list(); - } - [WebMethod] - public void get_refund_list() - { - - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetErpRefundList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void wx_add_mdy_buy_prod_map() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXAddMdyBuyProdMap(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_buy_prod_map() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetBuyPordMap(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 获取中转仓订单信息 - /// - [WebMethod] - public void wx_get_transit_order() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetTransitOrder(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 修改中转仓物流信息 - /// - [WebMethod] - public void wx_update_erp_order_express() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateErpOrderExpress(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - /// - /// 修改中转仓取号状态 临时补救 - /// - [WebMethod] - public void wx_update_erp_allocated_order_no() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateErpAllocatedOrderNo(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 删除中转仓指定订单 临时补救,慎用 - /// - [WebMethod] - public void wx_del_erp_transit_warehouse_order() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXDelErpTransitWarehouseOrder(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void wx_update_erp_soft_remark() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateErpSoftRemark(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_update_erp_color_flag() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateErpColorFlag(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void wx_update_erp_out_after_sale_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateErpOutAfterSaleStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void wx_add_mdy_buyer_order() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXAddMdyBuyerOrder(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_get_buyer_order_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetBuyerOrderList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_mdy_buyer_after_sale() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXAddMdyBuyerAfterSale(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_get_buyer_after_sale_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetBuyerAfterSaleList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - - [WebMethod] - public void wx_get_transit_warehouse_aftersale_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetTransitWarehouseAfterSaleList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void wx_update_abnormal_transit_order() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateAbnormalTransitOrder(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_update_transit_order_reject_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXUpdateTransitOrderRejectStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_order_item_ext_info() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXAddOrderItemExtInfo(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_mdy_order_item_ext_info() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXMdyOrderItemExtInfo(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_get_order_item_ext_info() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetOrderItemExtInfoList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //WXGetErpReturnOrderList - [WebMethod] - public void wx_get_erp_return_order_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().WXGetErpReturnOrderList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void wx_get_task_status_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOrderManage().GetWxTaskStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/WXProductService.asmx b/KJDService/KJD_WebService/WXProductService.asmx deleted file mode 100644 index a618afb..0000000 --- a/KJDService/KJD_WebService/WXProductService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="WXProductService.asmx.cs" Class="KJD_Web.WXProductService" %> diff --git a/KJDService/KJD_WebService/WXProductService.asmx.cs b/KJDService/KJD_WebService/WXProductService.asmx.cs deleted file mode 100644 index b554a04..0000000 --- a/KJDService/KJD_WebService/WXProductService.asmx.cs +++ /dev/null @@ -1,461 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ProductService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class WXProductService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_pdd_product_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetPDDProductList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_pdd_product_detail_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetPDDProductList(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_pdd_product_list_random() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetPDDProductListRandom(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_pdd_prod_wx_complate_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().GetProdWXComplateList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void get_pdd_product_groups() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetPDDProductGroups(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_pdd_product_cates() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetPDDProductCates(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_pdd_product() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXMdyPDDProduct(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_best_sale_prod() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().MdyBestSaleProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_random_company_product_config() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().SetRandomCompanyProductConfig(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_random_company_product_config() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().GetRandomCompanyProductConfig(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_secret_spu_id_shop_id_map() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXAddSecretSpuIdShopIdMap(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //WXAddSecretIdUpMap - [WebMethod] - public void wx_add_secret_id_up_map() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXAddSecretIdUpMap(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 根据聚水潭加密商品编号(货号)查询所有上传过的店铺id 260224 未测试 - /// - [WebMethod] - public void get_secret_spu_id_shop_id_map_List() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetSecretSpuIdShopIdMapList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_mdy_after_sale() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXAddMdyAfterSale(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_after_sale() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetAfterSale(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_random_after_sale_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetRandomAfterSaleList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_after_sale_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetAfterSaleList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_del_address() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXDelAddress(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - //WXAddMdyAfterSale - [WebMethod] - public void wx_add_mdy_shipping_template() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXAddMdyShippingTemplate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_shipping_template() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetShippingTemplate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_add_mdy_commission_rate() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXAddMdyCommissionRate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_commission_rate() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetCommissionRate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_mdy_qualification_image() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXAddMdyQualificationImage(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_get_qualification_image() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXGetQualificationImage(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_del_qualification_image() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().WXDelQualificationImage(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void e57_get_freight_template() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().E57GetFreightTemplate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void e57_after_sale() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXProductManage().E57AfterSale(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_api_get_all_cate() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().WxApiGetWxAllCate(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 搜索代发 - /// - [WebMethod] - public void wx_api_dropship_search() - { - string jsontext = GetRequestJsonString(); - var result = new BXXProductManage().WxApiDropshipSearch(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 添加代发 - /// - [WebMethod] - public void wx_api_dropship_assign() - { - string jsontext = GetRequestJsonString(); - var result = new BXXProductManage().WxApiDropshipAssign(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 添加代发 - /// - [WebMethod] - public void wx_api_dropship_cancel() - { - string jsontext = GetRequestJsonString(); - var result = new BXXProductManage().WxApiDropshipCancel(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_api_category_classify() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().WxApiCategoryClassify(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_api_upload_image() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().WxApiUploadImage(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void is_get_wx_recommend_hot_prod() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new BXXProductManage().IsGetWXRecommendHotProd(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/WXShopRevenueStatistics.asmx b/KJDService/KJD_WebService/WXShopRevenueStatistics.asmx deleted file mode 100644 index 5343caa..0000000 --- a/KJDService/KJD_WebService/WXShopRevenueStatistics.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="WXShopRevenueStatistics.asmx.cs" Class="KJD_Web.WXShopRevenueStatistics" %> diff --git a/KJDService/KJD_WebService/WXShopRevenueStatistics.asmx.cs b/KJDService/KJD_WebService/WXShopRevenueStatistics.asmx.cs deleted file mode 100644 index e760f85..0000000 --- a/KJDService/KJD_WebService/WXShopRevenueStatistics.asmx.cs +++ /dev/null @@ -1,68 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UserService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class WXShopRevenueStatistics : System.Web.Services.WebService - { - public WXShopRevenueStatistics() - { - - } - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_shop_order_amount() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopRevenueStatisticsManage().GetShopOrderAmountRange(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/WXShopService.asmx b/KJDService/KJD_WebService/WXShopService.asmx deleted file mode 100644 index d1e86e4..0000000 --- a/KJDService/KJD_WebService/WXShopService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="WXShopService.asmx.cs" Class="KJD_Web.WXShopService" %> diff --git a/KJDService/KJD_WebService/WXShopService.asmx.cs b/KJDService/KJD_WebService/WXShopService.asmx.cs deleted file mode 100644 index 8d707d7..0000000 --- a/KJDService/KJD_WebService/WXShopService.asmx.cs +++ /dev/null @@ -1,510 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// ShopService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class WXShopService : System.Web.Services.WebService - { - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - - [WebMethod] - public void get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().GetShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 获取店铺erp端账户 - /// - [WebMethod] - public void get_shop_erp_merchant() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().GetShopErpMerchant(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_one_login_name_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().GetOneLoginNameShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().AddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().DelShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().MdyShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void mdy_shop_cookie_and_login_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().MdyCookieAndLoginStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_get_shop_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().GetShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void sub_sa_get_select_prod_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().SubSaGetSelectProdShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_add_prod_remaining() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().UpdateAddProdRemaining(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_mdy_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().MdyShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_add_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().AddShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void admin_del_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().DelShop(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void set_shop_sub_sa() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().SetShopSubSa(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_waybill() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().AddWaybill(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void del_waybill() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().DelWaybill(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_waybill() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().GetWayBill(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_waybill_no_user_name() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().GetWayBill(jsontext, true); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void select_and_set_waybill() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().SelectAndSetWaybill(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void select_waybill() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().SelectWaybill(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 标记已正式使用的运单号 - /// - [WebMethod] - public void update_used_waybill() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().UpdateUsedWaybill(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_mdy_express_optimize_rst() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().AddMdyExpressOptimizeRst(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_express_optimize_rst() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().GetExpressOptimizeRst(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_mdy_express_optimize_remark() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().AddMdyExpressOptimizeRemark(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_express_optimize_remark() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXExpressOptimizeManage().GetExpressOptimizeRemark(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 修改店铺默认(售后)地址 - /// - [WebMethod] - public void wx_add_mdy_shop_default_address() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXAddMdyShopDefaultAddress(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - /// - /// 查询店铺默认(售后)地址 - /// - [WebMethod] - public void wx_get_shop_default_address_list() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXGetShopDefaultAddressList(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_del_shop_default_address() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXDelShopDefaultAddress(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_mdy_order_address() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXAddMdyOrderDecryptAddress(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_order_address() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXGetOrderDecryptAddress(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_mdy_buy_url_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXAddMdyBuyUrlNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_buy_url_notes() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXGetBuyUrlNotes(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void wx_add_mdy_29wx_pdd_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXAddMdy29WxPddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_mdy_29wx_pdd_cookie_and_login_status() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXMdy29WxPddCookieAndLoginStatus(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_del_29wx_pdd_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXDel29WxPddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void wx_get_29wx_pdd_shop() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().WXGet29WxPddShop(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void e57_get_wx_tokens() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().E57GetWxTokens(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void e57_get_wx_shop_token() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXShopManage().E57GetWxShopToken(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/WXUserService.asmx b/KJDService/KJD_WebService/WXUserService.asmx deleted file mode 100644 index 6c1ab59..0000000 --- a/KJDService/KJD_WebService/WXUserService.asmx +++ /dev/null @@ -1 +0,0 @@ -<%@ WebService Language="C#" CodeBehind="WXUserService.asmx.cs" Class="KJD_Web.WXUserService" %> diff --git a/KJDService/KJD_WebService/WXUserService.asmx.cs b/KJDService/KJD_WebService/WXUserService.asmx.cs deleted file mode 100644 index 57fb4b4..0000000 --- a/KJDService/KJD_WebService/WXUserService.asmx.cs +++ /dev/null @@ -1,306 +0,0 @@ -using KJD_Web.BLL.BXX; -using KJD_Web.BLL.WXXD; -using KJD_Web.Utils; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Web; -using System.Web.Services; - -namespace KJD_Web -{ - /// - /// UserService 的摘要说明 - /// - [WebService(Namespace = "http://tempuri.org/")] - [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] - [System.ComponentModel.ToolboxItem(false)] - // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 - // [System.Web.Script.Services.ScriptService] - public class WXUserService : System.Web.Services.WebService - { - [WebMethod] - public string hello_world() - { - return "Hello World"; - } - - private string GetRequestJsonString() - { - Context.Response.ContentType = "text/html;charset=utf-8"; - Context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); - - using (Stream s = HttpContext.Current.Request.InputStream) // 获得json 字符流 - { - // 还原数据流 - byte[] b = new byte[s.Length]; - s.Read(b, 0, (int)s.Length); - string jsonText = Encoding.UTF8.GetString(b); // JSON字符串 - if (string.IsNullOrEmpty(jsonText)) - { - var qs = HttpContext.Current.Request.QueryString; - if (qs != null && qs.Keys.Count > 0) - { - jsonText = "{"; - foreach (var key in qs.Keys) - { - jsonText += "\"" + key + "\":" + "\"" + qs[key.ToString()] + "\";"; - } - jsonText = jsonText.TrimEnd(';') + "}"; - } - } - return jsonText; - } - } - //GetE57Authorization - [WebMethod] - public void get_e57_authorization() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetE57Authorization(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void user_login() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().CheckUserLogin(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void change_password() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().ChangePassword(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().UpdateSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_sub_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().AddSubUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void delete_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().DelUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_all_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetAllUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().UpdateUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void add_user() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().AddUser(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_user_points() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().UpdateUserPoints(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_user_points() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetUserPoints(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_user_balance() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().UpdateUserBalance(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_user_balance() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetUserBalance(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void get_wx_sale_assistant_cookie() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetWxSaleAssistantCookie(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void update_wx_sale_assistant_cookie() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().UpdateWxSaleAssistantCookie(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - [WebMethod] - public void update_top_up_qrcode() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().UpdateTopUpQrcode(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_top_up_qrcode() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXUserManage().GetTopUpQrcode(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - - - [WebMethod] - public void add_mdy_oem() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOemManage().AddMdyOem(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void del_oem() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOemManage().DelOem(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - [WebMethod] - public void get_oem() - { - string jsontext = GetRequestJsonString(); - - var result = jsontext; - result = new WXOemManage().GetOem(jsontext); - - Context.Response.Write(result); - Context.Response.End(); - } - } -} diff --git a/KJDService/KJD_WebService/Web.Debug.config b/KJDService/KJD_WebService/Web.Debug.config deleted file mode 100644 index b9a9fde..0000000 --- a/KJDService/KJD_WebService/Web.Debug.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/KJDService/KJD_WebService/Web.Release.config b/KJDService/KJD_WebService/Web.Release.config deleted file mode 100644 index 755e745..0000000 --- a/KJDService/KJD_WebService/Web.Release.config +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/KJDService/KJD_WebService/Web.config b/KJDService/KJD_WebService/Web.config deleted file mode 100644 index 6046221..0000000 --- a/KJDService/KJD_WebService/Web.config +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/KJDService/KJD_WebService/packages.config b/KJDService/KJD_WebService/packages.config deleted file mode 100644 index e1b1f6d..0000000 --- a/KJDService/KJD_WebService/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file

Y+D7N$wjm_ZJo}KV5+PdjHU%i ziqKOmU9mA0CFmwc7x^v8=uScbT)d!r-A-rlF|2Q$Up`Et=Z5m1{lB8peZ`u{TscFaov zTpT}{zrEA9mE%)z^yzZksW^P%=Tk2Ro7%XtE+oxqq)EA_B!|(1W8j|LpJXu<+OT{U z@JywOOqAnCQR3E{4IyNiXCG5KnKt5erMG*P@Z$iW(cyJ(KvoHjOL*O~y^@5c_5Xi7 zuWECi_j&o~2O%B~7ooLtuK~Z|a);zA70?VHz`Pxax9lPU4ZD=Z#q}JZ1RH)G)3ZEO zs|aug+s%deXXI#*d7A4Ra>IS15WvZT6nvb;)dQ++VDH|@Swo)70_p5c)a_tMvkZHp z!L{`gXKS%4Lr6k?4{V4ah4dqL3L+fmYo+;c$&o8II{kfj?k!iRJZ_jfQAzoipr}L~ zBeRKgBMJMy!d#v)icL4{Mc8&%MoyCpdBb`g!(}I0FVWx8U53uJc;(iyT6Z$(0C1_d4^DT z27}_5xwpK6rWWdBt~cmRx{EXIhWfK$IP>*G;SQxzUQcXnCEiRr?TY6m1Wt?}aT}^F z3l8Qb3Z7;AYFc38`#r5IEO8*L?JFy;U0SwkX`tCd(wg*1VE80pm~Y=pGM+;wRrbqs zI0aJE7t={yX4xB^^m{yubI1(xaydRixX)`&VHtRq!~210#Z{6JprfoVl_W0}lLfXP z1PNrzn<>LfVD1L9ZORnMAmt@yV}=hZ`8-7DwKP<-y|1yJtHtUR%pfeYvg905UCtzx zCaAW~-RYRWDcNHtn(}>n>s)CwM&-^TN`H(Y+Ng;*P+6izwclN4DHU}1KJ&-9n=Vf0 z;C;F8-odSCn=`IQ@MO&ymjiBlyAX8ybC{GoUnYV2#Mn$VagEQOkiT~m3w0P@1Hq2o z3Q{0_9X>C569duWvP*R%GJ_`(hgm-R8!H_eT5g1JDk*4fyU2C3n->+3zZb5Q8kUrT za$r(Qf1Zn-R%f(1NabRuzwWN*g2_O2Y5~@fnl?;GvWUa_?$Fb@1AzOay^`SU-NM4 z#m>qg#3GDKG#TU1iLWdlGEK$BD3xWRs@W*nDedIy&qiV5C=<0R8zmusyL7IEWzwzB zMoo4_VWOjx3o~AsTw~d&@vf+~*{F%GsDrXmBVAFW*{IcBQN!7&T36ISHcHmkI-of; z8#UM!HI$9o&=qxXHmav93Z1qNG-ThjQx_Dy6E)QpHJy#BcSSX_Q7DXO3Pe@BQy{1L znJ6w}bfS*xih4vgYI9fAY&Htry-b0}WTWP~qPAqCwsu8v&#=>sTybi73ioB zvJs4#sbXwN>y1!*BQVGzLeE_z{<%6mXb**Qs!|V1yybTjy{snI#2eqkN(l0%Aa_0K zkvH;w@Y9GNn=J*=nJO&U9z&+FTq7S3r=O0|1QOIwEXE%~W3P9b$Bm=&39)p2m7!=e zi)?+RsldQkRyIK(Q@UrOQKDnz?<)zzbiIf#h_}fvA>TxIc%>bk3M%* zdKp#!dT4ubK~oq&o1u$u`M2(95*Yki3Ydo7eP&N;bw7X7~&S6^Z2vA;~Z-N2M-km={&I&dv^47P4D8)AFP1F zM!c|AoO&0pPW~IAttXJNbs>LtX-*URWrbd(PmP zW)$CxtpFN)OJbiWms`0qy>smE8hsMJGAT1c0K!RY)YII0%0A01d6`B#((~4|+|5Dj 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